PHP代码审计 02 命令注入

本文记录PHP代码审计的学习过程,教程为暗月2015年版的PHP代码审计课程>> [PHP代码审计博客目录(https://mp.csdn.net/mdeditor/81107149)#1,#1简介.PHP执行系统命令可以使用以下几个函数系统,exec,passthru,反引号,shell _ exec,popen,proc _ open,pcntl_exec字符串系统(string c o m m a n d [ i n t return_var])string exec( string c o m m a n d [ a r r a y output [,int& r e t u r n v a r ] ] v o i d p a s s t h r u s t r i n g c o m m a n d i n t r e t u r n v a r s t r i n g s h e l l e x e c s t r i n g c o m m a n d p o p e n s t r i n g command,string m o d e r e s o u r c e p r o c o p e n s t r i n g cmd,array d e s c r i p t o r s p e c a r r a y pipes [,string c w d [ a r r a y env [,array o t h e r o p t i o n s ] ] ] v o i d p c n t l e x e c s t r i n g path [,array a r g s [ a r r a y envs]])2。防御函数当用户提供的数据传入此函数,使用escapeshellarg()或escapeshellcmd()来确保用户欺骗系统从而执行任意命令。#2。系统命令执行函数示例#1.system()函数系统函数可以用来执行一个外部的应用程序并将相应的执行结果输出,函数原型如下:string system(string command,int&return_var)<?php a c t i o n = _GET [‘cmd’]; echo“ < pre > ”; 系统($行动); echo“

”; ?!>

[ ](https://i.imgur.com/bJQMibZ.png)2。EXEC()函数执行的:EXEC函数可以用来执行一个外部的应用程序,函数原型如下:字符串EXEC(字符串命令,数组&输出,int&return_var)<?php a c t i o n = _GET [ ‘cmd’ ] ; 回声“<”回声EXEC( ; < / > ; > [ ] h t t p s : / / i . i m g u r . c o m / b J Q M i b Z . p n g 3 U N I X U N I X 使 e x e c . P a s s t h r u v o i d p a s s t h r u s t r i n g c o m m a n d i n t r e t u r n v a r c o m m a n d v a r < p h p action = G E T [ ] ; e c h o < p r e > ; p a s s t h r u action); echo“

”; ?>![ ]

https://i.imgur.com/bJQMibZ.png)4。了壳_ EXEC()函数执行外壳命令并返回输出的字符串,函数原型如下:字符串了壳EXEC(字符串命令)< ?PHP $动作= $ GET [ ‘加利福尼亚’ ] ; echo“

”; 回音壳_ exec($ action); echo“ < pre  /> ”; ?>![] (https://i.imgur.com/bJQMibZ.png)5。反引号与shell_exec功能相同,执行shell命令并返回输出的字符串。<?php $ action = $ _GET ['cmd “]; echo“<pre>”; 回声` $行动` ; echo“<pre />”; ?> [](https://i.imgur.com/bJQMibZ.png)!6.POPEN()函数<PHP?$动作= $ _GET [‘加利福尼亚’]; echo“
”;

$ action,'r'); echo“ < pre /> ”; ?>![](https://i.imgur.com/iLnixui .PROC _POPEN()函数用于执行一个命令,并且打开用来输入/输出的文件指针。与POPEN()函数类似,但是PROC _ open()提供了更加强大的控制程序执行的能力.CMD,阵列$

descriptorspec,array列&$管[,字符串$ CWD [,数组$ ENV])8。PCNTL _ EXEC()函数PCNTL _ EXEC函数在当前进程空间执行指定程序。当发生错误时返回FALSE,没有错误时没有返回。空隙pcntl_exec(string $ path [,array $ args [,array $ envs]])其中,路径必须是可执行二进制文件路径或一个在文件第一行指定了一个可执行文件路径标头的脚本; ARGS是一个要传递给程序的参数的字符串数组; envs是一个要传递给程序作为环境变量的字符串数组。这个数组是key => value格式的,key代表要传递的环境变量的名称,value代表该环境变量值。#3。防御函数示例#当用户提供的数据传入此函数,使用escapeshellarg()或escapeshellcmd()将将将来确保用户欺骗系统从而执行任意命令0.1。< BR > < BR > < BR > < BR > < BR > < BR

 > <br> <br> <br> <br> <br> <br>将一个字符串传入外壳函数,并且还是确保安全的。对于用户输入的部分参数就应该使用这个函数。可以用到PHP的安全中,会过滤掉ARG中存在的一些特殊字符。在输入的参数中如果包含中文传递给escapeshellarg,会被过滤掉。<?php $ action = $  _ GET ['加利福尼亚']; echo“<pre>”; echo shell _ exec($ action); echo“<pre />”; ?>执行http://127.0.0.1/test.php?cmd=echo “123”>> 123.txt有生成文件123.txt![](	https://i.imgur.com/I3mlxbf.png) <?PHP $动作= $ _GET ['加利福尼亚' ] ; 回声“<PRE>”; echo shell_exec(escapeshellarg($ action)); echo“<pre />”; ?>执行http://127.0.0.1/test.php?cmd=echo “123”>> 123. 2.escapeshellcmd()将函数除去字符串中的特殊符号,会转义命令中的所有壳字符元型态来完成工作这些元型态字符包括:#&;``,| *?〜<> ^()[] {} $  \\  		<?php $ action = $ _GET [ 'cmd' ] ; echo“<pre> echo shell_exec(escapeshellcmd($ action)); echo“ < pre  /> ”; ?>![](https://i.imgur.com/z9tMN2F.png)3。DVWA中使用的是stripslashes()函数函数函数函数stripslashes()函数函数函数函数删除由和和和addslashes()函数添加的反斜杠提示:该函数可用于清理从数据库中或者从HTML表单中取回的数据实例:<

猜你喜欢

转载自blog.csdn.net/kevinhanser/article/details/81134216