2、DVWA——命令注入

news2025/1/20 16:20:35

文章目录

  • 一、命令注入
    • 1.1 概述
    • 1.2 判断命令注入流程
  • 二、low
    • 2.1 通关思路
    • 2.2.源码分析
  • 三、Medium
    • 3.1 通关思路
    • 3.2 源码分析
  • 四、high
    • 4.1 通关思路
    • 4.2 源码分析
  • 五、impossible
  • 六、总结

一、命令注入

1.1 概述

  命令注入的目标是通过易受攻击的应用程序在主机操作系统上执行任意命令。当应用程序将不安全的用户提供的数据(表单、cookie、HTTP 标头等)传递到系统 shell 时,可能会发生命令注入攻击。在这种攻击中,攻击者提供的操作系统命令通常以易受攻击的应用程序的权限执行。命令注入攻击的可能性很大程度上是由于输入验证不足。

  此攻击与代码注入不同,代码注入允许攻击者添加自己的代码,然后由应用程序执行。

1.2 判断命令注入流程

  • 是否调用系统命令
  • 函数或函数的参数是否可控
  • 是否拼接注入命令

二、low

2.1 通关思路

(1)输入127.0.0.1,看看是否有回显。

在这里插入图片描述
(2)尝试用命令连接符拼接命令,payloa:127.0.0.1 && whoami
在这里插入图片描述

  原理:由于在操作系统中,“&”、“&&”、“|”、“||”都可以作为命令连接符使用,由于网页没有对参数进行任何过滤,因此可以用连接符后面接上其他指令来执行。

常见的命令连接符:

  • a && b :代表首先执行前者命令a再执行后命令b,但是前提条件是命令a执行正确才会执行命令b,在a执行失败的情况下不会执行b命令。所以又被称为短路运算符。
    前面的命令执行成功后,它后面的命令才被执行

  • a & b:代表首先执行命令a再执行命令b,如果a执行失败,还是会继续执行命令b。也就是说命令b的执行不会受到命令a的干扰。
    表示简单的拼接,A命令语句和B命令语句没有制约关系

  • a || b:代表首先执行a命令再执行b命令,如果a命令执行成功,就不会执行b命令,相反,如果a命令执行不成功,就会执行b命令。
    前面的命令执行失败,它后面的命令才被执行

  • a | b:代表首先执行a命令,再执行b命令,不管a命令成功与否,都会去执行b命令。
    当第一条命令失败时,它仍然会执行第二条命令,表示A命令语句的输出,作为B命令语句的输入执行。

2.2.源码分析

  通过数据包,可以看到客户端以POST方式进行请求。

在这里插入图片描述

<?php

if( isset( $_POST[ 'Submit' ]  ) ) {
    // Get input
    $target = $_REQUEST[ 'ip' ];

    // Determine OS and execute the ping command.
    if( stristr( php_uname( 's' ), 'Windows NT' ) ) {
        // Windows
        $cmd = shell_exec( 'ping  ' . $target );
    }
    else {
        // *nix
        $cmd = shell_exec( 'ping  -c 4 ' . $target );
    }

    // Feedback for the end user
    echo "<pre>{$cmd}</pre>";
}
?> 

几个函数:

  • stristr():搜索字符串在另一字符串中的第一次出现。
  • php_uname():返回运行 PHP 的系统的有关信息。

  分析:php_uname(mode) 函数会返回运行php的操作系统的相关描述,当参数是 “s” 时,返回操作系统名称。stristr() 函数搜索字符串在另一字符串中的第一次出现,返回字符串的剩余部分(从匹配点),未找到所搜索的字符串返回 FALSE。使用该函数的目的是为了区分 DVWA 搭建在什么系统上。不过,对于最重要的传入的 ping 命令的参数 target,并没有进行任何过滤。

三、Medium

3.1 通关思路

  直接输入127.0.0.1 & whoami,发现仍然可以执行命令。

在这里插入图片描述

3.2 源码分析

<?php

if( isset( $_POST[ 'Submit' ]  ) ) {
    // Get input
    $target = $_REQUEST[ 'ip' ];

    // Set blacklist
    $substitutions = array(
        '&&' => '',
        ';'  => '',
    );

    // Remove any of the charactars in the array (blacklist).
    $target = str_replace( array_keys( $substitutions ), $substitutions, $target );

    // Determine OS and execute the ping command.
    if( stristr( php_uname( 's' ), 'Windows NT' ) ) {
        // Windows
        $cmd = shell_exec( 'ping  ' . $target );
    }
    else {
        // *nix
        $cmd = shell_exec( 'ping  -c 4 ' . $target );
    }

    // Feedback for the end user
    echo "<pre>{$cmd}</pre>";
}
?> 

  几个函数

  • array_keys():返回包含数组中所有键名的一个新数组。
  • str_replace():替换字符串中的一些字符(区分大小写)。语法:str_replace(find,replace,string,count)

  分析:medium 级别的代码加入了对“&&”和“;”的过滤。

四、high

4.1 通关思路

payload:127.0.0.1|ifconfig

在这里插入图片描述

4.2 源码分析

<?php

if( isset( $_POST[ 'Submit' ]  ) ) {
    // Get input
    $target = trim($_REQUEST[ 'ip' ]);

    // Set blacklist
    $substitutions = array(
        '&'  => '',
        ';'  => '',
        '| ' => '',
        '-'  => '',
        '$'  => '',
        '('  => '',
        ')'  => '',
        '`'  => '',
        '||' => '',
    );

    // Remove any of the charactars in the array (blacklist).
    $target = str_replace( array_keys( $substitutions ), $substitutions, $target );

    // Determine OS and execute the ping command.
    if( stristr( php_uname( 's' ), 'Windows NT' ) ) {
        // Windows
        $cmd = shell_exec( 'ping  ' . $target );
    }
    else {
        // *nix
        $cmd = shell_exec( 'ping  -c 4 ' . $target );
    }

    // Feedback for the end user
    echo "<pre>{$cmd}</pre>";
} 

  分析:虽然是把所有的连接符都过滤了,但是开发者在| 后面加了个空格,因此我们还是能够用 | 连接符进行绕过。

五、impossible

<?php

if( isset( $_POST[ 'Submit' ]  ) ) {
    // Check Anti-CSRF token
    checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' );

    // Get input
    $target = $_REQUEST[ 'ip' ];
    $target = stripslashes( $target );  //去除反斜杠

    // Split the IP into 4 octects
    $octet = explode( ".", $target );  //以‘.’进行切分,得到数组

    // Check IF each octet is an integer
    if( ( is_numeric( $octet[0] ) ) && ( is_numeric( $octet[1] ) ) && ( is_numeric( $octet[2] ) ) && ( is_numeric( $octet[3] ) ) && ( sizeof( $octet ) == 4 ) ) {
        // If all 4 octets are int's put the IP back together.
        $target = $octet[0] . '.' . $octet[1] . '.' . $octet[2] . '.' . $octet[3];

        // Determine OS and execute the ping command.
        if( stristr( php_uname( 's' ), 'Windows NT' ) ) {
            // Windows
            $cmd = shell_exec( 'ping  ' . $target );
        }
        else {
            // *nix
            $cmd = shell_exec( 'ping  -c 4 ' . $target );
        }

        // Feedback for the end user
        echo "<pre>{$cmd}</pre>";
    }
    else {
        // Ops. Let the user name theres a mistake
        echo '<pre>ERROR: You have entered an invalid IP.</pre>';
    }
}

// Generate Anti-CSRF token
generateSessionToken();
?> 

  分析:

  • 使用token防止CSRF攻击;
  • 对参数 ip 进行了严格的限制,只有“数字.数字.数字.数字”的输入才会被接收执行;

六、总结

  一些 Web 程序中需要调用一些执行系统命令的函数,例如 PHP 的systemexecshell_exec函数等。当攻击者能够直接操作命令执行的参数,并且没有代码对传入的参数进行过滤时,攻击者就能将用于搞破坏的系统命令夹带进来让系统执行。
在 Windows 系统和 Linux 系统中都有一些管道符,这些管道符可以被用来拼接攻击指令:

  • &&:前面的语句正确执行时,才执行后面的语句;
  • &:前面的语句执行出错时,执行后面的语句;
  • |:将前面的语句运行的结果,当做后面语句的输入,显示后面语句的执行结果;
  • ||:前面的语句出错时,执行后面的语句。

  对于指令注入漏洞,比较好的防御方式是尽可能别用命令执行函数,对于输入的参数要做好黑名单过滤或者白名单验证。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/943393.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

『赠书活动 | 第十八期』《深入浅出SSD:固态存储核心技术、原理与实战》

&#x1f497;wei_shuo的个人主页 &#x1f4ab;wei_shuo的学习社区 &#x1f310;Hello World &#xff01; 『赠书活动 &#xff5c; 第十八期』 本期书籍&#xff1a;《深入浅出SSD&#xff1a;固态存储核心技术、原理与实战》 赠书规则&#xff1a;评论区&#xff1a;点赞&…

【力扣每日一题】2023.8.29 带因子的二叉树

目录 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 代码&#xff1a; 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 题目给我们一些元素&#xff0c;让我们用这些元素连接形成特定的二叉树&#xff0c;每种元素可以使用任意次数&#xff0c;形成的二叉树要…

【深度解析】朗逸与宝来汽车:哪款更适合你?

在汽车市场中&#xff0c;朗逸和宝来都是非常受欢迎的车型。它们各自都有独特的优点和缺点&#xff0c;那么&#xff0c;究竟哪款车更适合你呢&#xff1f;让我们一起来深度解析一下。 朗逸&#xff0c;作为大众的入门级车型&#xff0c;以其稳定的性能和较高的性价比赢得了消费…

深入详解ThreadLocal

本文已收录至GitHub&#xff0c;推荐阅读 &#x1f449; Java随想录 微信公众号&#xff1a;Java随想录 原创不易&#xff0c;注重版权。转载请注明原作者和原文链接 文章目录 什么是ThreadLocalThreadLocal 原理set方法get方法remove方法 ThreadLocal 的Hash算法ThreadLocal …

海川润泽气泡水位计 重磅上线

一、概述 以市场为导向&#xff0c;海川润泽推出新款气泡水位计&#xff08;型号&#xff1a;HC-QPSW10-S&#xff09;。气泡水位计具有测量精度高&#xff0c;免气瓶&#xff0c;免测井&#xff0c;免维护&#xff0c;抗振动&#xff0c;寿命长等特点&#xff0c;特别适用于流…

印刷行业MES系统解决方案

印刷行业存在许多问题&#xff0c;这些问题可能因地区、技术和市场变化而有所不同。以下是一些可能的印刷行业现存问题&#xff1a; 1.环保问题&#xff1a;印刷过程中使用的化学品和材料可能对环境造成污染。废墨、废纸、有毒化学品等的处理和处理成为一个重要的问题。 2.…

优思学院|六西格玛推行为什么会失败?应如何避免?

六西格玛项目可以为企业带来丰厚的经验和巨大的利益&#xff1b;然而&#xff0c;并非所有的项目都能达到预期的效果。根据一项在国外的调查发现&#xff0c;在184家受访公司中&#xff0c;80.6%的公司声称六西格玛工作未能成功实现他们的预期的价值&#xff0c;74.1%的公司说他…

UG\NX二次开发 代工分享的“单个体XY排料工具”源码

文章作者:代宇(Q:873058673) 简介: 单个体XY排料,昨天代工在开发群里分享了一个排料的视频,我觉得挺有意思,就私聊要来了源码,经过作者同意可以分享给大家。请欣赏: 效果: 代码: //单个体XY排料 代工QQ:873058673 //-------------------------------…

亥姆霍兹线圈的几个特点

亥姆霍兹线圈可以用于磁学、电子学和核物理学等领域的实验研究中&#xff0c;是一种常见的基础实验仪器。亥姆霍兹线圈有以下几个特点&#xff1a; 1、磁场均匀性好&#xff1a;由于该线圈的结构和定位方式&#xff0c;使得两个线圈的磁场强度和方向都非常均匀&#xff0c;可以…

R语言和Python用泊松过程扩展:霍克斯过程Hawkes Processes分析比特币交易数据订单到达自激过程时间序列...

全文下载链接&#xff1a;http://tecdat.cn/?p25880 本文描述了一个模型&#xff0c;该模型解释了交易的聚集到达&#xff0c;并展示了如何将其应用于比特币交易数据。这是很有趣的&#xff0c;原因很多。例如&#xff0c;对于交易来说&#xff0c;能够预测在短期内是否有更多…

IDA Python 使用总结

环境配置 切换 python 版本 运行 IDA 安装目录下的 idapyswitch.exe &#xff0c;选择使用的 python 解释器。 在 PyCharm 中写 IDAPython 脚本 在 PyCharm 的设置→项目→Python解释器点击设置选择全部显示… 点击如下位置添加自定义路径 路径选择 IDA Pro 7.6\python\3…

国标GB28181视频平台EasyGBS国标平台激活码授权提示“授权失败”的问题解决方案

EasyGBS平台是基于国标GB28181协议的视频云服务平台&#xff0c;支持多路设备接入&#xff0c;并对多平台、多终端分发出RTSP、RTMP、FLV、HLS、WebRTC等多种格式的视频流。平台可为大数据等综合性监管平台提供极强的视频能力&#xff0c;既能作为能力平台为业务层提供接口调用…

Boost开发指南-4.12utility

utility utility库不是一个有统一主题的Boost库&#xff0c;而是包含了若干个很小但有用的工具。 本章开头介绍的noncopyable.swap都曾经被归类在utility库里(现在则属于core库),此外utility还包括其他很多个实用类&#xff0c;如 base_from_member、compressed_pair、checke…

操作系统复习总结5

操作系统复习总结&#xff0c;仅供笔者复习使用&#xff0c;参考教材&#xff1a; 《操作系统原理》 - 何静媛编著. 西安电子科技大学出版社《操作系统考研复习指导》2024年 - 王道论坛组编. 电子工业出版社 本文主要内容为&#xff1a;输入输出管理&#xff1b; 计算机系统…

经典卷积网络

目录 一、经典神经网络出现的时间线​编辑 二、LeNet 三、AlexNet 四、VGGNet 五、InceptionNet 六、ResNet 总结&#xff1a; 一、经典神经网络出现的时间线 二、LeNet 背景&#xff1a;LeNet由Yann LeCun于1998年提出&#xff0c;卷积网络开篇之作。 解释&#xff1…

Error: PostCSS plugin autoprefixer requires PostCSS 8 问题解决办法

报错&#xff1a;Error: PostCSS plugin autoprefixer requires PostCSS 8 原因&#xff1a;autoprefixer版本过高 解决方案&#xff1a; 降低autoprefixer版本 执行&#xff1a;npm i postcss-loader autoprefixer8.0.0

拓世AI | 智能家居比朋友还贴心,开启人类生活全面智能的一天

每个时代都有它的标志性技术&#xff0c;在21世纪&#xff0c;无疑是人工智能。当日光悄悄溜进窗台&#xff0c;一切都在静默中苏醒&#xff0c;你的家已经开始了新的一天。不再是单纯的墙壁、屋顶和家具&#xff0c;它现在是一个“生命体”&#xff0c;倾听你的需求&#xff0…

ssm会议管理系统源码和论文

ssm会议管理系统源码和论文087 开发工具&#xff1a;idea 数据库mysql5.7 数据库链接工具&#xff1a;navcat,小海豚等 技术&#xff1a;ssm 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&…

android Double.valueOf 报java.lang.NumberFormatException

执行到 Double.valueOf 时&#xff0c;报NumberFormatException&#xff0c;在中文&#xff0c;英文时没问题&#xff0c;切换例如 法语 才会出现。是因为执行&#xff1a; df.format((double) fileS / 1024)时&#xff0c;中文、因为都正常返回值是22.75 但法语时会返回22,…

【附安装包】Vm虚拟机安装Linux系统教程

软件下载 软件&#xff1a;Linux版本&#xff1a;18.0.4语言&#xff1a;简体中文大小&#xff1a;1.82G安装环境&#xff1a;VMware硬件要求&#xff1a;CPU2.0GHz 内存4G(或更高&#xff09;下载通道①丨百度网盘&#xff1a;1.Vm虚拟机15.5下载链接&#xff1a;https://pan…