如何通过PCRE正则表达式实现回溯次数绕过安全限制的解析?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1557个文字,预计阅读时间需要7分钟。
目录+ 正则表达式是什么?+ 回溯的过称是怎样的?+ PCRE另一种错误的用法+ 修正方法+ 本次Code-Breaking Puzzles中我遇到了一道看似非常简单的题目,将其代码简化如下:
phpfunction is_php($data) { return preg_match('/^php/', $data);}
目录
- 正则表达式是什么
- 回溯的过程是怎样的
- PCRE另一种错误的用法
- 修复方法
这次Code-Breaking Puzzles中我出了一道看似很简单的题目,将其代码简化如下:
<?php function is_php($data){ return preg_match('/<\?.*[(`;?>].*/is', $data); } if(!is_php($input)) { // fwrite($f, $input); ... }
大意是判断一下用户输入的内容有没有PHP代码,如果没有,则写入文件。这种时候,如何绕过is_php()函数来写入webshell呢?
这道题看似简单,深究其原理,还是值得写一篇文章的。
正则表达式是什么
正则表达式是一个可以被“有限状态自动机”接受的语言类。
“有限状态自动机”,其拥有有限数量的状态,每个状态可以迁移到零个或多个状态,输入字串决定执行哪个状态的迁移。
本文共计1557个文字,预计阅读时间需要7分钟。
目录+ 正则表达式是什么?+ 回溯的过称是怎样的?+ PCRE另一种错误的用法+ 修正方法+ 本次Code-Breaking Puzzles中我遇到了一道看似非常简单的题目,将其代码简化如下:
phpfunction is_php($data) { return preg_match('/^php/', $data);}
目录
- 正则表达式是什么
- 回溯的过程是怎样的
- PCRE另一种错误的用法
- 修复方法
这次Code-Breaking Puzzles中我出了一道看似很简单的题目,将其代码简化如下:
<?php function is_php($data){ return preg_match('/<\?.*[(`;?>].*/is', $data); } if(!is_php($input)) { // fwrite($f, $input); ... }
大意是判断一下用户输入的内容有没有PHP代码,如果没有,则写入文件。这种时候,如何绕过is_php()函数来写入webshell呢?
这道题看似简单,深究其原理,还是值得写一篇文章的。
正则表达式是什么
正则表达式是一个可以被“有限状态自动机”接受的语言类。
“有限状态自动机”,其拥有有限数量的状态,每个状态可以迁移到零个或多个状态,输入字串决定执行哪个状态的迁移。

