buuctf-[RoarCTF 2019]Easy Calc

知识点

利用php的字符串解析特性,绕过waf

‌PHP的字符串解析特性‌:PHP在处理URL查询字符串时,会将某些字符删除或用下划线代替。例如,/? foo=bar 会变成 Array([foo] => “bar”)。如果参数值包含非法字符,可以通过在参数名前加空格或其他特殊字符来绕过检测‌

‌scandir()函数‌:scandir() 函数用于列出指定目录中的文件和目录。通过构造特定的payload,可以绕过WAF检测,列出服务器上的文件和目录‌

‌file_get_contents()函数‌:file_get_contents() 函数用于读取文件内容。通过构造特定的payload,可以绕过WAF检测,读取特定文件的内容‌

var_dump() — 打印数组的相关信息

‌WAF绕过技巧‌:题目中涉及到WAF(Web Application Firewall)的检测,通过在参数名前加空格或其他特殊字符,可以绕过WAF的检测,执行未授权的代码‌

绕过引号过滤

可以使用chr()函数,传入指定字符的askill码值,就可以得到对应的字符。而且得到的不仅是单个符号,还是有引号的。比如/的askill值是47,但是我们直接使用scandir(/)是会报错的,因为字符要用引号包裹,但是我们通过chr函数,通过它的askill码值得到对应的字符,和‘/’是等价的。

思考:

此题需要通过php特殊字符绕过waf检测,比如scandir(),file_get_contents(),var_dump()

chr()绕过引号,输入特定的askill的值,先用var_dump(scandir(chr(47)))查根目录的文件和目录,var_dump(file_get_contents(chr(47).f1agg))查文件内容

1.打开环境,看到源码js有相关内容,存在waf并给出calc.php

2.访问calc.php,得到源码,开始代码审计

3.题目中过滤了空格、tab、回车等字符,接下来传入num参数测试

4.发现传入字符数据时,系统会拦截返回403。而在php中传参时,PHP需要将所有参数转换为有效的变量名,因此在解析查询字符串时,它会做两件事:删除空白符和将某些字符转换为下划线(包括空格),那么我们传入%20num测试,从而绕过此处

此时回显正常,查看/calc.php

可以看到禁用的php函数,那么利用scandir进行目录的读取,需要注意的是/是已经被代码过滤了,需要使用chr(47)来代替,那么构造payload:var_dump(scandir(chr(47)));

得到flagg文件的文件名,接下来进行文件内容的读取,构造payload:var_dump(file_get_contents(chr(47).f1agg))

flag{e273c5ca-6d74-4091-87dd-ca358f173684}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值