0


命令执行漏洞

命令执行漏洞

1. 漏洞原理

用户输入的数据未被过滤,被拼接到原本要执行的系统命令中执行并返回结果

2. 利用条件

1.用户输入的数据未被过滤或净化

过滤:输入的数据存在某些敏感关键字时不执行该条命令
净化:输入的数据存在某些敏感关键字时消除该敏感内容再继续执行命令

2.Web应用程序调用了能执行系统命令的函数

PHP命令执行函数
system()
passthru()
exec()
shell_exec()
popen()
proc_popen()

3. 漏洞复现-直接复现

利用system()命令执行函数执行ipconfig系统命令

3.1 简单漏洞代码

<?php
    // 在浏览器页面 以原有格式输出 在目标机的终端中执行的结果
    echo"<pre>";
    // 是否设置了以GET方式提交的cmd参数值
    if(isset($_GET["cmd"])){
        // 将提交的cmd参数值拼接到system()函数中执行
        system($_GET["cmd"]);}echo"</pre>";
?>

3.2 GET复现

在这里插入图片描述

3.3 POST复现

在漏洞代码中修改方法为POST后进行复现
在这里插入图片描述

4. 漏洞复现-利用拼接符复现

无法直接执行输入的命令时可以在传参位置利用拼接符执行

&:前句为假执行后句。            前句为真则两句都执行。
&&:前句为假直接出错,不执行后句。 前句为真则两句都执行。
|:直接执行后句。
||:前句为假执行后句。           前句为真只执行前句。
Linux比Windows多一个;表示执行完前句后执行后句

4.1 简单漏洞代码

# 该代码用于对指定目标执行ping命令,但未严格过滤用户的输入# ping -n 3 --> Windows执行3次ping命令,Windows默认执行4次# ping -c 3 --> Linux执行3次ping命令,Linux默认执行无限次<?php
    echo"<pre>";
    // 使用变量arg保存以GET方式提交的cmd参数值
    $arg=$_GET['cmd'];
    // 变量arg是否为空即是否以GET方式向其提交了cmd参数值
    if($arg){
        system("ping $arg");}echo"</pre>";
?>

4.2 Windows

在这里插入图片描述

4.3 Kali Linux

简单环境搭建

service apache2 start
vim /var/www/html/mlzx.php

<?php
    echo"<pre>";
    // 使用变量arg保存以GET方式提交的cmd参数值
    $arg=$_GET['cmd'];
    // 变量arg是否为空即是否以GET方式向其提交了cmd参数值
    if($arg){
        system("ping -c 3 $arg");}echo"</pre>";
?>

复现
在这里插入图片描述

5. 漏洞危害

1.继承Web服务器程序的权限去执行操作系统的命令
2.任意文件读取,导致敏感信息泄露 --> cat /etc/passwd
3.任意文件写入,写入一句话木马连接蚁剑 --> echo “文件内容” > “写入路径”

6. 漏洞修复

1.尽量不要使用命令执行函数 --> 在php.ini的disable_functions中添加要禁用的函数
2.在进入命令执行函数前严格过滤用户输入的数据,如&、&&、|、||、;等符号与cat、echo等关键字

7. commix工具

commix是使用Python开发的漏洞测试工具,用于检测一个请求是否存在命令执行漏洞,能建立shell连接。
commix的shell是通过页面(Web应用程序)传递参数(命令)执行的,其执行结果会返回到commix终端。

commix -h --> 帮助信息
工具地址:https://github.com/stasinopoulos/commix

commix -u “有传参的URL”
在这里插入图片描述

标签: 安全 系统安全

本文转载自: https://blog.csdn.net/m0_71665129/article/details/126963357
版权归原作者 Zamasu777 所有, 如有侵权,请联系我们删除。

“命令执行漏洞”的评论:

还没有评论