CTF [RoarCTF 2019]Easy Calc writeup PHP字符串解析特性Bypass http请求走私(HTTP Request Smuggling)

0x00 开干

一看这种easy的,就慌,每次被ctf打,哪是打ctf。。。
CTF [RoarCTF 2019]Easy Calc writeup PHP字符串解析特性Bypass http请求走私(HTTP Request Smuggling)_第1张图片
试了下,还真可以算。但是看网页没有动,是静态。
CTF [RoarCTF 2019]Easy Calc writeup PHP字符串解析特性Bypass http请求走私(HTTP Request Smuggling)_第2张图片
那这个结果肯定是前端的JS了。
CTF [RoarCTF 2019]Easy Calc writeup PHP字符串解析特性Bypass http请求走私(HTTP Request Smuggling)_第3张图片
JS使用ajax发送数据到calc.php,然后根据返回结果来显示。比如下面这样就是计算失败的。
CTF [RoarCTF 2019]Easy Calc writeup PHP字符串解析特性Bypass http请求走私(HTTP Request Smuggling)_第4张图片
而且上面提示,已经设置好了waf肯定也不是那么容易的,查看了头部和其它元素后,发现没有什么可以利用的,就去看了下calc.php


error_reporting(0);
if(!isset($_GET['num'])){
    show_source(__FILE__);
}else{
        $str = $_GET['num'];
        $blacklist = [' ', '\t', '\r', '\n','\'', '"', '`', '\[', '\]','\$','\\','\^'];
        foreach ($blacklist as $blackitem) {
                if (preg_match('/' . $blackitem . '/m', $str)) {
                        die("what are you want to do?");
                }
        }
        eval('echo '.$str.';');
}
?> 

num参数中的特殊字符都检测了,不过还好,没有用闭合。

CTF [RoarCTF 2019]Easy Calc writeup PHP字符串解析特性Bypass http请求走私(HTTP Request Smuggling)_第5张图片
估计是禁止界面,估计这里就是所谓的waf了,
CTF [RoarCTF 2019]Easy Calc writeup PHP字符串解析特性Bypass http请求走私(HTTP Request Smuggling)_第6张图片
a都不行,估计只能传数字了。

估计这里应该是又有骚操作,知识盲区。

去查的writeup,有两个方法,这些人是真的牛批,每次都有新花样。


0x01 Writeup1

利用PHP的字符串解析特性Bypass
PHP需要将所有参数转换为有效的变量名,因此在解析查询字符串时,它会做两件事:

  1. 删除空白符
  2. 将某些字符转换为下划线(包括空格)

在这里插入图片描述
知道这个特性后,就可以尝试过掉wafwaf应该是用的中间件的检测来书写的规则 ,所以直接在变量前面加个空格即可。
CTF [RoarCTF 2019]Easy Calc writeup PHP字符串解析特性Bypass http请求走私(HTTP Request Smuggling)_第7张图片
这里就成功绕过了waf,接着第二点,再来突破php当中的正则

不知道到flag在哪,于是想用scandir()来查找,但是引号都被检测了,这里可以把字符串用chr()函数通过acsii进行传递,只有这个才不需要引号,常见的base64()bin2hex()都需要引号才可以转换。

先看本目录下的内容,.ascii46
CTF [RoarCTF 2019]Easy Calc writeup PHP字符串解析特性Bypass http请求走私(HTTP Request Smuggling)_第8张图片
还有一个libs。。不知道啥玩意,看一下。
CTF [RoarCTF 2019]Easy Calc writeup PHP字符串解析特性Bypass http请求走私(HTTP Request Smuggling)_第9张图片
啥都没,看来不在这了,这就只能顺着找了,从/开始吧,先转成ascii47
CTF [RoarCTF 2019]Easy Calc writeup PHP字符串解析特性Bypass http请求走私(HTTP Request Smuggling)_第10张图片
找到个f1agg,再读一次,MD,这么小,还先以为是flagg,有考IE内味了,读了半天没读出来。
CTF [RoarCTF 2019]Easy Calc writeup PHP字符串解析特性Bypass http请求走私(HTTP Request Smuggling)_第11张图片
参考文章:利用PHP的字符串解析特性Bypass


0x02 Writeup2

http请求走私(HTTP Request Smuggling)
HTTP请求走私是一种干扰网站处理HTTP请求序列方式的技术,使攻击者可以绕过安全控制,未经授权访问敏感数据并直接危害其他应用程序用户。

请求走私大多发生于前端服务器和后端服务器对客户端传入的数据理解不一致的情况。这是因为HTTP规范提供了两种不同的方法来指定请求的结束位置,即 Content-LengthTransfer-Encoding标头。

大佬们真是太强了。。。

参考文章:

http请求走私(HTTP Request Smuggling)

Easy Calc(http走私 && 利用PHP的字符串解析特性Bypass)

因为主要是内容太多了,就不自己测试了,看完了就来实操一把,加深印象。
CTF [RoarCTF 2019]Easy Calc writeup PHP字符串解析特性Bypass http请求走私(HTTP Request Smuggling)_第12张图片
只需要改变这几个参数就成功绕过,使用的是属于CL-CL类型的

通过使用之前payload?num=file_get_contents(chr(47).chr(102).chr(49).chr(97).chr(103).chr(103))
CTF [RoarCTF 2019]Easy Calc writeup PHP字符串解析特性Bypass http请求走私(HTTP Request Smuggling)_第13张图片

你可能感兴趣的:(#,HustWhCTF,Writeup)