BUUCTF学习笔记-Easy_Clac

BUUCTF学习笔记-Easy_Clac

时间:2020/03/22
考点:WAF绕过、文件读取

在这里插入图片描述

在这里插入图片描述

        打开是一个计算器,只要输入表达式就可以返回对应的结果。右键查看源代码,可以看到提示<!--I've set up WAF to ensure security.-->,提示我们这个网站是有WAF的。并且通过ajax的请求地址能看到应该还是存在一个calc.php的页面的,访问一下。

在这里插入图片描述

        解读一下大概的内容。搜先需要我们输入一个参数名为num的GET变量。如果没有的话就直接显示calc.php的内容。也就是我们现在的状态。如果有输入参数num的话,就会拿输入的内容和设定的黑名单比较,当通过黑名单后直接就拿输入的内容执行。拿很明显这道题就算要绕过WAF已经黑名单去执行命令。

0x01

参考一下网上的做法: 利用PHP的字符串解析特性Bypass

PHP需要将所有URL、请求体参数转换为有效的变量名,因此在解析查询字符串时,它会做两件事:
1.删除空白符
2.将某些字符转换为下划线(包括空格)

在这里插入图片描述
在这里插入图片描述

        可以看到上面两次尝试,一次被WAF拦截了,另外一次则成功了。两次输入的内容如下:
第一次:?num=phpinfo()
第二次:?%20num=phpinfo()
区别在与第二次在参数名前面加了空字符。参考上面说的PHP字符串解析特性说的第一点,PHP在解析时会删除空字符。
WAF接受到的是? num=phpinfo(),解析出来参数名为 num,没有把空格删除,没有触发的WAF的规则。
PHP接受到的同样? num=phpinfo(),但解析出来的参数名是num,把空格删除了所以可以在后台顺利拿到参数,执行成功。

        成功绕过WAF后接下来就是构造命令绕过黑名单并顺利读取到flag。可能要到的几个函数:
打印函数
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)和后端服务器接收数据不同步,引起对客户端传入的数据理解不一致,从而导致漏洞的产生。

1、CL-CL
两个CL直接导致前端转发的服务器400,而且完整转发了post包给后端。
在这里插入图片描述
2、CL-TE
CL和TE直接导致前端转发的服务器400,而且完整转发了post包给后端。
在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值