代码审计-9 代码审计之正则表达式

反斜杠绕过正则进行命令执行

当我们输入两个反斜杠的时候第二个反斜杠会被转义,会输出一个反斜杠代码审计-9 代码审计之正则表达式_第1张图片

php中正则表达式,要对反斜杠过滤时需要添加四个反斜杠

下面的代码中,有两个反斜杠,第一个反斜杠第二个反斜杠进行转义后
留下一个反斜杠,这个反斜杠接着对 |进行转义,也就是说后面的|无效了
也就不会对\n进行过滤

也就是说下面的正则代码并不会对我们输入的\\n进行匹配过滤

代码审计-9 代码审计之正则表达式_第2张图片

结合linux环境特性,我们可通过命令中间添加\来绕过这个正则,从而执行系统命令

l's' -la
l$1s -la
l\s -\la

在这里插入图片描述

无字母数字WebShell

此处代码只接收除了字母,数字以外的其他字符
也就是说只能输入特殊字符,此时怎么进行绕过并获取shell

代码审计-9 代码审计之正则表达式_第3张图片
1.通过异或运算生成指定字符

代码审计-9 代码审计之正则表达式_第4张图片
代码审计-9 代码审计之正则表达式_第5张图片
php脚本
代码审计-9 代码审计之正则表达式_第6张图片

<?php
$arr =
    array('!','~','`','@','#','$','%','^','&','*','(',')','-','=','+','一','\'','"');
foreach ($arr as $a){
    foreach ($arr as $b){
        $answer = $a ^ $b;
        echo $answer.'='.$a.'^'.$b;
        echo PHP_EOL;
    }
}

2.取反运算

UTF8 编码的某个汉字,将其中的字符提取出来,进行取反得到对应的字符

代码审计-9 代码审计之正则表达式_第7张图片
代码审计-9 代码审计之正则表达式_第8张图片
3.自增运算

代码审计-9 代码审计之正则表达式_第9张图片

PHP7+新思路

PHP7之前是不允许使用($a)()这样的方法去执行动态函数,但是PHP7增加了对此的支持
在PHP7+的版本,我们可以通过('phpinfo')()执行phpinfo

此时将异或运算和PHP7+的新思路结合起来
可通过 ("\(\@@&/" ^ ",@,).@@")(); 来执行phpinfo
\(\@@&/,@,).@@进行异或运算得到phpinfo

代码审计-9 代码审计之正则表达式_第10张图片

你可能感兴趣的:(代码审计,正则表达式,php,开发语言)