DVWA-Command Injection

大约

命令注入攻击的目的是在易受攻击的应用程序中注入和执行攻击者指定的命令。 在这种情况下,执行不需要的系统命令的应用程序就像一个伪系统外壳,攻击者可能会使用它 作为任何授权的系统用户。但是,命令的执行权限和环境与 Web 服务具有的权限和环境相同。

在大多数情况下,命令注入攻击是可能的,因为缺乏正确的输入数据验证,攻击者可以操纵 (表单、cookie、HTTP 标头等)。

操作系统 (OS) (如 Linux 和 Windows)之间的语法和命令可能有所不同,具体取决于它们所需的操作。

这种攻击也可以称为“远程命令执行(RCE)”。


目的

远程查找操作系统上 Web 服务的用户,以及通过 RCE 的计算机主机名。


低水平

这允许直接输入到将在操作系统上执行命令的许多PHP函数之一。可以逃出设计的命令,并且 执行了无意的操作。

这可以通过在请求中添加“命令成功执行后,运行此命令”来完成。

Spoiler: To add a command "&&". Example: 127.0.0.1 && dir.

<?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>";
}

?>

用户提供的IP地址执行ping命令,然后将结果输出到Web页面上以便用户查看。

同样地,该代码存在安全风险,因为它没有经过输入验证和过滤,可能会导致命令注入攻击。同时,它也没有任何限制来确保只对ping命令进行操作,并且没有限制ping命令执行的路径和参数。

为了增强代码的安全性,我们需要做以下一些事情:

1.输入过滤和验证。我们应该验证输入值的格式和范围,并确保它是一个有效的IP地址,以减少输入注入的机会。

2.限制执行命令的特权。我们应该最小化Web服务器的特权,使用非特权用户来运行Web服务器,并且最好通过使用suEXEC或sudo来限制shell的特权。

3.限制执行命令的范围。同样,我们应该限制所执行命令的路径和参数,以确保它仅执行ping命令,而不是其他命令。

应用这些最佳实践可以大大减少Web应用程序所受到的风险,并帮助保护您的Web应用程序免受安全漏洞和攻击的影响。

 

发现命令不仅执行了ping,而且显示了目录下的文件。 

 

中级

开发人员已经阅读了命令注入的一些问题,并放置了各种模式修补来过滤输入。然而,这还不够。

可以使用各种其他系统语法来中断所需的命令。

Spoiler: e.g. background the ping command.
<?php

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

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

    // Remove any of the characters 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>";
}

?>

在这个更新后的代码中,我们添加了一些新的安全措施,以使ping命令更加安全。

首先,我们使用一个黑名单数组来过滤不安全的输入,例如"&&"和";"等字符,这些字符可能会导致命令注入攻击。我们使用 str_replace() 函数来替换任何黑名单中的字符。

然后,我们再次执行ping命令,但这次我们只对经过过滤的输入执行操作,这样就可以确保不会执行恶意或不必要的命令。

这些改进可以大大提高代码的安全性,使其更加安全可靠。但是,仍然有些潜在的安全风险没有解决,例如我们仍然没有对输入进行足够的验证和过滤。因此,我们应该始终使用最佳安全实践来保护我们的Web应用程序免受攻击的影响。

 

 这次未显示目录下文件,而是输出了ip错误

高水平

在高级别中,开发人员回到绘图板并输入更多模式来匹配。但即使这样也不够。

开发人员要么对过滤器做了一个小的拼写错误,并相信某个PHP命令将使他们免于这个错误。

Spoiler: trim()			removes all leading & trailing spaces, right?.

<?php

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

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

    // Remove any of the characters 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>";
}

?>

在这里,我们又一次对代码进行了改进,进一步强化了安全性。我们添加了更多的字符到黑名单集合中,如"|"、"-"、"$" 等,以避免由于输入注入攻击而导致问题。我们还使用了 trim() 函数来删除用户输入中可能存在的空格和换行符,以避免意外输出。

虽然这些改进可以极大地提高代码的安全性,但是仍然需要更多的工作来确保代码在使用上是安全的。建议你继续遵循最佳实践,如使用过滤和验证来限制输入,限制代码所执行命令的范围,以及最小化Web服务器的特权等。

 

不可能的水平

在不可能的关卡中,挑战被重写,只允许非常严格的输入。如果这不匹配并且不产生特定结果, 将不允许执行。这不是“黑名单”过滤(允许任何输入并删除不需要的),而是使用“白名单”(仅允许某些值)。

<?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();

?>

在这个更新后的代码中,我们进一步增强了安全性,并增加了反跨站点请求伪造(CSRF)保护措施。具体而言,该代码中增加了以下改进:

1. 添加了一个名为 "checkToken()" 的函数,用于检查反CSRF令牌以确保请求是由该网站上某个页面的正常表单提交而不是篡改请求信息的攻击者发出的。这个函数需要在每个需要进行保护的表单处理程序中调用,例如这里的 ping 命令处理程序。

2. 添加了一个会话令牌,可以避免CSRF攻击。每次在页面上加载时都会生成一个会话令牌,并将其存储在会话变量中。在处理提交的表单时,该会话令牌将与表单提交的CSRF令牌进行比较,以验证请求的合法性。

3. 添加了对用户输入的IP地址的验证和过滤,以确保只有有效的IP地址才能被用于执行ping命令。

这些改进可以极大地提高代码的安全性,使其更加可靠。但是,请注意,这只是最佳实践之一,您还应该根据特定的使用情况来评估可能存在的风险,并采取适当的安全措施来保护您的Web应用程序。

在这种模式下,只能识别ip地址。 

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

JVM 调优分析 如何进行JVM调优

文章目录 1.为什么需要进行JVM调优&#xff1f;2.什么情况下可能需要JVM调优3.JVM调优参数4.JVM调优参数设置参考5.JVM内部结构1. 类加载器&#xff08;Class Loader&#xff09;2. 运行时数据区&#xff08;Runtime Data Area&#xff09;3. 垃圾收集器&#xff08;Garbage Co…

jmeter如何将上一个请求的结果作为下一个请求的参数

目录 1、简介 2、用途 3、下载、简单应用 4、如何将上一个请求的结果作为下一个请求的参数 1、简介 在JMeter中&#xff0c;可以通过使用变量来将上一个请求的结果作为下一个请求的参数传递。 ApacheJMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测…

adb shell 调试 Android 串口 百度AI也很

在 Android 平台上进行串口调试需要使用 Android Debug Bridge (ADB) 工具。ADB 是一个命令行工具&#xff0c;可以通过 USB 连接 Android 设备&#xff0c;并执行各种命令来调试应用程序。 以下是使用 ADB shell 进行 Android 串口调试的步骤&#xff1a; 连接 Android 设备…

低代码开发平台介绍

低代码开发平台近两年发展迅猛&#xff0c;并迅速渗透到各个细分领域。本文简要介绍低代码开发的概念以及特性&#xff0c;并结合低代码开发的应用场景介绍两个低代码开发平台。 1、低代码开发概念 1.1 低代码开发介绍 低代码开发&#xff08;Low-code Development&#xff0…

3D格式转换工具HOOPS Exchange​助力Zuken打造电子设计自动化产品

行业&#xff1a;电子制造 挑战&#xff1a;对制造商来说&#xff0c;电子设计变得越来越复杂 - 电气和机械设计的融合需要将二维和三维数据结合起来 - 需要提供对多种不同CAD格式的支持 解决方案&#xff1a;HOOPS Exchange是用于快速、准确的CAD数据转换的领先SDK&#xff…

vue Electron ArcGis 桌面应用 Sqllite3 node-grp:老旧项目的起死回生

最近接收了一个三四年前做的项目。主要技术栈就是vue2electronsqllite3node-gyp。看到这个技术栈&#xff0c;基本可以知道感知这个项目的关键词&#xff1a;vue、Gis地图、本地数据库、桌面客户端。顿时深感亚历山大。 不多说&#xff0c;开干。 第一步&#xff0c;查看项目…

商家必备!餐饮外卖回评话术

我认识过很多做餐饮外卖的商家&#xff0c;他们总是有相同苦恼的问题&#xff0c;尤其是回复食客们的评价&#xff0c;尤其是差评。小编在这里就为各位商家提供了一些餐饮外卖回评的话术&#xff0c;希望能给有需要的小伙伴们提供帮助哦~ 一、好评回复模板 1.叮~您的好评我们已…

什么是大数据,常见的大数据应用领域?

现在大数据发展的如火如荼&#xff0c;也有不少小伙伴对于什么是大数据比较感兴趣&#xff0c;那么大数据在比较官方的定义是指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合&#xff0c;是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力…

Linux -- 用户和组

目录 一、root用户&#xff08;超级管理员&#xff09; 1.1 切换用户命令&#xff1a;su 和 exit 命令 1.2 sudo命令 二、用户、用户组 2.1 用户组管理 2.1.1 创建用户组 2.1.2 删除用户组 2.2 用户管理 2.2.1 创建用户 2.2.2 删除用户 2.2.3 查看用户所属组 2.2.…

ReentrantLock实现原理-条件锁

在前两篇文章中&#xff0c;我们了解了ReentrantLock内部公平锁和非公平锁的实现原理&#xff0c;可以知道其底层基于AQS&#xff0c;使用双向链表实现&#xff0c;同时在线程间通信方式(2)中我们了解到ReentrantLock也是支持条件锁的&#xff0c;接下来我们来看下&#xff0c;…

安卓期末考试知识总结(2)

文章目录 第四章&#xff1a;程序活动单元Activity四大组件Activity生命周期Activity的启动模式standardsingleTopsingleInstancesingleTask IntentIntentFilterActivity之间的数据传递putExtra()方法传递数据Bundle类传递数据Activity之间的数据回传 练习总结 第四章&#xff…

如何管理与改进低质供应商?帮助供应商提升自身质量能力?

管理和改进低质量的供应商可能是一项具有挑战性的任务&#xff0c;但与他们合作以提高他们的能力是可能的。可以采取一些步骤来管理和帮助提高供应商的质量&#xff1a; 确定根本原因&#xff1a;了解供应商产品或服务质量低下的原因。对他们的流程、资源和能力进行全面评估&am…

EFDC建模方法及在地表水环境评价、水源地划分、排污口论证应用

目录 专题一、软件安装 专题二、EFDC模型讲解 专题三、一维河流模拟实操 专题四、建模前处理 专题五、EFDC网格剖分介绍 专题六、EFDC二维湖库水动力模拟/非保守染色剂模拟 专题七、EFDC水质模型参数及原理介绍 专题八、EFDC一、二、三维湖库水质模拟 专题九、基于EFD…

window下安装docker并运行angular项目

window下安装docker并运行angular项目 1、使用场景 本地有一个node项目&#xff0c;node 版本是 v16.13.2&#xff0c;在本地安装的angular 是 15.2.4 但是测试服上面的node 版本是 14.19.3&#xff0c;angular 是1.0.0-beta.28.3 &#xff0c;会导致angular项目的 ng build …

Submit的使用,程序中调用其他报表

Submit的使用 项目需求&#xff1a;编写一个程序能够将实时的物料库存数据通过发送邮件的形式发送到对应的邮件。现有标准的事务码MB5B来查看对应的库存数据。可以在程序中使用submit将参数传递到MB5B中&#xff0c;然后将获取的数据返回到程序中&#xff0c;然后在执行发送邮件…

线程的生命周期

我是一个线程 第一回 初生牛犊 我是一个线程&#xff0c;我一出生就被编了个号: 0x3704&#xff0c;然后被领到一个昏暗的屋子里&#xff0c;在这里我发现了很多和我一模一样的同伴。 我身边…

计算机视觉 | 语义分割与Segmentation

前 言 「MMSegmentation」 是一个基于 PyTorch 的语义分割开源工具箱。它是 OpenMMLab 项目的一部分。 MMSegmentation v1.x 在 0.x 版本的基础上有了显著的提升&#xff0c;提供了更加灵活和功能丰富的体验。 主要特性 统一的基准平台 我们将各种各样的语义分割算法集成到了…

文件系统原理

文件及硬盘管理是计算机操作系统的重要组成部分&#xff0c;让微软走上成功之路的正是微软最早推出的个人电脑PC操作系统&#xff0c;这个操作系统就叫DOS&#xff0c;即Disk Operating System&#xff0c;硬盘操作系统。我们每天使用电脑都离不开硬盘&#xff0c;硬盘既有大小…

谷歌的passkey是什么?

谷歌的passkey是什么&#xff1f; 谷歌正在研发一种名为“Passkey”的新技术&#xff0c;它将用于用户身份验证。Passkey不同于传统的密码&#xff0c;它采用了硬件加密密钥&#xff08;如安全密钥或生物识别方式&#xff09;以及双因素身份验证等技术&#xff0c;可以更好地保…

OpenCV项目开发实战--对图像种的对象进行无缝克隆-附Python、C++的代码实现

文末附基于Python和C++两种方式实现的测试代码下载链接 图 1:无缝克隆示例:一架飞机被克隆到傍晚天空的图片中。 OpenCV 3 中引入的令人兴奋的新功能之一称为无缝克隆。有了这个新功能,您可以从一个图像中复制一个对象,然后将其粘贴到另一个图像中,从而使构图看起来无缝…