命令执行漏洞原理及在windows和linux中的利用方法还有自动化漏洞工具的简单了解

前言:此次学习命令执行漏洞,记录一下。
命令执行漏洞原理
定义:Web应用程序接收用户输入,拼接到要执行的系统命令中执行
产生原因:
1.用户输入未过滤或净化
过滤:用户输入某个关键字时,命令不能执行,则是被过滤掉了。
净化:用户输入一些敏感内容时,这些内容会被消除掉,但是命令会继续执行。
2.拼接到系统命令中执行。
和SQL注入漏洞原理类似(差别还是挺大的,只是这一点比较相似)。
PHP下命令执行函数
在PHP中具有执行系统命令功能的函数如下(部分):
1.system

2.exec

3.shell_exec

4.passthru

5.popen

6.proc_popen

某些情况下,要注意存在以上函数的php文件,有可能是webshell
漏洞演示:
栗子:

<?php
        echo "please input get args cmd!";
        echo "<pre>";   //格式化页面
        if(isset($_GET["cmd"])){
                system($_GET["cmd"]);
        }
        echo "</pre>";  //是页面更加直观,起换行作用。去掉的话,显示信息不会换行。下面做对比。
?>

windows使用phpstudy集成环境,在网站根目录下建立一个cmd1.php(自定义)。复制上面的代码,保存。访问cmd1.php,可以看到下面的页面。
j4y
输入命令:?cmd=ipconfig
j4y
可以执行。
现在修改一下代码,看看<pre>的作用是什么
j4y
刷新查看。
j4y
可以看到比较乱。
查看源码:
j4y
所以可以看出来<pre>的作用了。
在URL前面加个view-source:也可以的。
windows系统命令执行漏洞
命令执行示例代码分析
使用以下PHP代码,对指定目标执行ping命令

<?php
        echo "<pre>";   //格式化输出
        $arg = $_GET['cmd'];    //GET方式执行命令
        if($arg){
            system("ping $arg");
        }
        echo "</pre>";
?>

命令执行漏洞利用思路
代码中拼接用户的输入并代码system函数执行,但是无法直接执行用户的自定义命令。
思路:截断输入,重新拼接。两条命令都输入并执行。

windows系统下命令执行漏洞拼接符介绍
在windows系统下的cmd命令中,有以下一些截断拼接符。

&             前面的语句为假则直接执行后面的
&&            前面的语句为假则直接出错,后面的也不执行
|             直接执行后面的语句
||            前面执行出错执行后面的语句

栗子:
打开cmd

ping www.baidu.com
ping 111 & ipconfig
ping 127.0.0.1 && ipconfig
ping 127.0.0.1 | ipconfig
ping 111 || ipconfig

j4y
还有几个命令就不放图了,可以尝试一下。
Linux系统命令执行漏洞

<?php
        echo "<pre>";
        $arg = $_GET['cmd'];
        if($arg){
                system("ping -c 4 $arg");   //ping 4次
        }
        echo "</pre>";
?>

-c 4 就是ping4次,windows默认执行4次,而linux默认执行无数次。

kali linux
测试环境搭建
1.启动apache服务,service apache2 start
j4y
2.拷贝代码到 /var/www/html/目录下的一个文件中。
j4y
使用vim命令进行编辑。
j4y
编辑完成输入:wq!保存并退出。
输入ifconfig查看IP地址。
linux系统命令执行漏洞拼接符介绍
在linux系统下的shell命令下,有以下一些截断拼接符

;      (英文输入)前面的执行完,执行后面的。
|                      是管道符,显示后面的执行结果。
||                     当前面的执行出错时执行后面的。 
&                    无论前面语句真假都会执行。
&&                 只有前面的语句为真,才会执行后边的语句。

在kali中实验,与windows系统中步骤无太大差别。
j4y
仍然可以。
自动化工具介绍
commix
Commix是一个使用python开发的漏洞测试工具,这个工具是为了方便的检测一个请求是否存在命令注入漏洞,并对其进行测试,在其作者发布的最新版本中支持直接导入burp的历史记录进行检测,大大提高了易用性。
项目地址: github项目传送门
安装不介绍。kali自带有。也可以使用git命令克隆到windows系统,需要python环境。
j4y
中途出了点毛病,kali里的好久没更新了,回头更新一下再用。windows系统上的commix使用方法与linux系统有点不同,可网上找博客进行学习。

posted @ 2020-05-19 22:28  m0re  阅读(149)  评论(0编辑  收藏  举报