sql注入绕过正则表达式匹配和回溯机制

正则表达式

(一)正则表达式是一个可以被“有限状态自动机”接受的语言类。

“有限状态自动机”,其拥有有限数量的状态,每个状态可以迁移到零个或多个状态,输入字串决定执行
哪个状态的迁移。
而常见的正则引擎,又被细分为DFA(确定性有限状态自动机)与NFA(非确定性有限状态自动机)。
他们匹配输入的过程分别是:
DFA: 从起始状态开始,一个字符一个字符地读取输入串,并根据正则来一步步确定至下一个转移
状态,直到匹配不上或走完整个输入
NFA:从起始状态开始,一个字符一个字符地读取输入串,并与正则表达式进行匹配,如果匹配不
上,则进行回溯,尝试其他状态
由于NFA的执行过程存在回溯,所以其性能会劣于DFA,但它支持更多功能。大多数程序语言都使用了
NFA作为正则引擎,其中也包括PHP使用的PCRE库。

(二) 匹配机制

\d就是数字概括字符集 \d
\D非数字 \D
\d也可以用字符集表示[0-9]
\D也可以用字符集表示[^0-9]
\w表示字母数字,也就是单词字符
\w字符集表示[A-Za-z0-9_]
\W匹配非单词字符\n\t\r#$%^空格

\s匹配\n\t\r空格 匹配空白字符 不包括%$#特殊字符
\S匹配非空白字符
. 表示匹配除换行符\n以外的所有字符
{m} :匹配m次 次
{m,n} :至少m ,至多n次

在这里插入图片描述

(三)组:() 将一个或多个字符捆绑在一起,当作一个整体进行处理

分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命名方式为: \1, \2, \3, ..	

引用前面的分组括号中的模式所匹配字符,而非模式本身

\1 表示从左侧起第一个左括号以及与之匹配右括号之间的模式所匹配到的字符

\2 表示从左侧起第2个左括号以及与之匹配右括号之间的模式所匹配到的字符,以此类推

& 表示前面的分组中所有字符**

(四)断言

sql注入绕过正则表达式匹配和回溯机制_第1张图片

sql注入绕过正则表达式匹配和回溯机制_第2张图片
sql注入绕过正则表达式匹配和回溯机制_第3张图片
sql注入绕过正则表达式匹配和回溯机制_第4张图片
sql注入绕过正则表达式匹配和回溯机制_第5张图片
sql注入绕过正则表达式匹配和回溯机制_第6张图片

(五)位置:

^ : 行首
• $ : 行尾
• <, \b : 语首
• >, \b : 语尾
• 分组:()
• 后向引用:\1, \2, …

二.sql-bals靶机

首先查看user表数据内容
sql注入绕过正则表达式匹配和回溯机制_第7张图片
登录靶机

sql注入绕过正则表达式匹配和回溯机制_第8张图片
直接注入语句
?id=-1’ union select 1,(select user()),3–+

sql注入绕过正则表达式匹配和回溯机制_第9张图片
但是如果继续注入是不可以的,因为我们对于传来的语句进行了正则过滤
sql注入绕过正则表达式匹配和回溯机制_第10张图片
当我们继续注入
sql注入绕过正则表达式匹配和回溯机制_第11张图片
为此我们找到了一个方法,利用科学计数法进行绕过
?id=-1’ union select 1,group_concat(username,0x3a,password),1e1from users–+

sql注入绕过正则表达式匹配和回溯机制_第12张图片

三.正则表达式举例

目标实现输入匹配字符
符合内容有数字,字母大小写与特殊字符,并且所有字符总数控制在8-16
正则测试网站:https://regex101.com/

首先匹配数字,字母大小写,特殊符号
^ $
开头 结尾

sql注入绕过正则表达式匹配和回溯机制_第13张图片
然后做长度限制
sql注入绕过正则表达式匹配和回溯机制_第14张图片

五.PHP的PCRE回溯上限绕过

PHP为了防止正则表达式的拒绝服务攻击(reDOS),给pcre设定了一个回溯次数上限

pcre.backtrack_limit

sql注入绕过正则表达式匹配和回溯机制_第15张图片

首先!is_array判断是否为数组,不是则判断能不能经过正则匹配,如果不能满足这个函数则去进行strpos()判断,成功则获得flag
定义和用法
strpos() 函数查找字符串在另一字符串中第一次出现的位置。

注释:strpos() 函数对大小写敏感。

注释:该函数是二进制安全的。
sql注入绕过正则表达式匹配和回溯机制_第16张图片
如果满足第一个判断就不能满足第二个,所以我们通过php的正则回溯上限绕过,在PHP中有1000000次的回溯次数限制。在PHP中利用的正则表达式的.*是匹配任意字符任意次数
贪婪模式:贪婪模式下会直接匹配所有字符,然后从最后一个字符向前回溯,直到匹配成功
sql注入绕过正则表达式匹配和回溯机制_第17张图片

你可能感兴趣的:(网络安全,正则表达式,sql,php)