RoarCTF 2019-Easy calc

该博客讨论了RoarCTF2019-Easycalc挑战中涉及的PHP代码注入漏洞。通过利用WAF的限制,可以使用空格绕过过滤,执行非法字符。此外,还提到了HTTP走私攻击的概念,这种攻击利用前后端服务器对Content-Length和Transfer-Encoding处理不一致来创建漏洞。博客还探讨了如何构造请求来触发这种攻击。

RoarCTF 2019-Easy calc

在这里插入图片描述
查看源码有新的页面,然后访问 calc.php,然后还有WAF
在这里插入图片描述

<?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.';');
}
?>

利用PHP的字符串解析特性

假如waf不允许num变量传递字母:
http://www.xxx.com/index.php?num = aaaa   //显示非法输入的话
那么我们可以在num前加个空格:
http://www.xxx.com/index.php? num = aaaa
这样waf就找不到num这个变量了,因为现在的变量叫“ num”,而不是“num”。
但php在解析的时候,会先把空格给去掉,这样我们的代码还能正常运行,还上传了非法字符。

但题目的WAF 不止这些,很多函数也被禁用了
直接扫描一下目录
在这里插入图片描述
在这里插入图片描述
读取flag
在这里插入图片描述
在这里插入图片描述

还有一种方法(Http走私攻击)

参考链接

漏洞形成的原因:
前端服务器(cdn)和后端服务器接收数据不同步,引起对客户端传入的数据理解不一致,从而导致漏洞;
为什么会不一致呢?

主要是处理Content-Length和Transfer-Encoding不一致,原则上同时使用两者时,Content-Length是无效的,当单个服务器时,没有任何问题,但当多个服务器时,理解的数据不一致时,就会出现有些服务器认为Content-Length的长度有效,有些以Transfer-Encoding有效,这样超出的长度就会拼接到下一次请求,从而导致漏洞。

这就是把上面的作为下一次请求
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

paidx0

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值