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有效,这样超出的长度就会拼接到下一次请求,从而导致漏洞。
这就是把上面的作为下一次请求


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

被折叠的 条评论
为什么被折叠?



