正则表达式
-
定义:
正则表达式是使用单个字符串来描述、匹配一系列符合某个句法规则的字符串,简单来说, 是一种匹配字符串的方法,通过一些特殊符号,实现快速查找、删除、替换某个特定字符串。
正则表达式一般用于脚本编程与文本编辑器中。如Perl、Linux 系统中常见的文本处理器(grep、egrep、sed、awk)。正则表达式具备很强大的文本匹配功能,能够在文本海洋中快速高效地处理文本。
常用正则
1,整数或者小数 ^[0-9]+\.{0,1}[0-9]{0,2}$ 2, 查询A-Za-z ^[A-Za-z]+$ 3,test命令判断 [[expression]] if [[ -e /var/html/demo.index]];then echo " find demo.index"; fi 4,转义的特殊字符$ * ? ^ \$ \* \? \^ 5,千分位 12345678 --> 12,345,678 '12345678'.replace(/\B(?=(\d{3})+)/g,function(){console.log(arguments);return '|'}) 1. 匹配`\B`第1个非单词边界 `1`的右边位置,则后面(\d{3})+的结果为:234、567,后面跟着8,不匹 2. 匹配`\B`第2个非单词边界 `2`的右边位置,则后面(\d{3})+的结果为:345、678,后面跟着非数字,位置匹配成功 3. 匹配`\B`第3个非单词边界 `3`的右边位置,则后面(\d{3})+的结果为:456,后面跟着7、8不匹配 4. 匹配`\B`第4个非单词边界 `4`的右边位置,则后面(\d{3})+的结果为:567,后面跟着8,不匹配 5. 匹配`\B`第5个非单词边界 `5`的右边位置,则后面(\d{3})+的结果为:678,后面跟着非数字,位置匹配成功 6. 最终得到得到可插入逗号的位置为2,5 6,贪婪和非贪婪匹配 贪婪匹配:正则表达式中包含重复的限定符时,通常的行为是匹配尽可能多的字符。 非贪婪匹配:有时候需要匹配尽可能少的字符. 7,回溯当前前面分支/重复匹配成功后,没有多余的文本可被正则后半部分匹配时,会产生回溯
绕过案例
- 案例一
如上图,确实可以绕过,但语法不对,会报错。
因为 mysql 支持科学计数法,就可以
select username,1e1from users;
1e1是科学计数法可以绕过 \b
由于1e1 查询的是两列,所以还是回报错.
mysql还有一种写法:group_concat(username,0x3a,password),1e1from user
password为10,因为1e1 为10
- 案例二
上述案例由于回溯限制 为100万次,然后就可以用PCRE回溯次数限制进行绕过
用python写一个脚本进行绕过,执行后会生成一个test.php的文件
然后用postman测试一下,看是否绕过成功