DVWA-Command Injection

news2025/2/13 12:47:00

大约

命令注入攻击的目的是在易受攻击的应用程序中注入和执行攻击者指定的命令。 在这种情况下,执行不需要的系统命令的应用程序就像一个伪系统外壳,攻击者可能会使用它 作为任何授权的系统用户。但是,命令的执行权限和环境与 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地址。 

 

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

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

相关文章

【MySQL】创建和管理表

创建和管理表 标识符命名规则MySQL中的数据类型创建和管理数据库使用数据库修改数据库 创建表语法方式一方式二 修改表向表中追加一个列修改一个列重命名一个列删除一个列 重命名表方式一方式2; 删除表清空表 存储数据是处理数据的第一步 。只有正确地把数据存储起来&#xff0…

基于卫星星历计算卫星在CGCS2000大地坐标系中的坐标

目录 一、北斗系统概述 1.空间星座 2.坐标系统 3.时间系统 二、实验目的 三、实验内容 四、实验过程 五、实验结果 一、北斗系统概述 1.空间星座 北斗卫星导航系统简称北斗系统&#xff0c;英文缩写为 BDS&#xff0c;其空间星座由 5 颗地球静止轨道&#xff08;GEO&…

​“前端已死”甚嚣尘上,全栈工程师卷到起飞

海量应届生入场&#xff0c;坑位却还是那多。具备前后端开发能力的全栈工程师兴起&#xff0c;不仅能够开发前端&#xff0c;还能够处理后端业务逻辑和数据库等技术&#xff0c;还能掌握整个软件开发的细节。企业自然会更愿意招聘全栈工程师&#xff0c;说白了&#xff0c;卷啊…

springboot整合quartz实现定时任务动态增删改查

springboot整合quartz quartz介绍Quartz 核心概念 使用依赖配置文件启动类quartz工具类job业务用到的对象类接口service实现类测试 quartz介绍 Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目&#xff0c;它可以与J2EE与J2SE应用程序相结合也可以单独使用。…

【CMake 入门与进阶(6)】 CMakeLists.txt 部分常用变量(附使用代码)

变量也是 cmake 中的一个重头戏&#xff0c;cmake 提供了很多内置变量&#xff0c;每一个变量都有它自己的含义&#xff0c;通过这个链接地址cmake-variables(7) — CMake 3.5.2 Documentation可以查询到所有的内置变量及其相应的介绍&#xff0c;如下所示&#xff1a; 在这一份…

App移动端测试 —— Monkey的日志

Monkey的日志对于分析脚本的执行情况十分必要。 Monkey 日志由以下几部分组成&#xff1a; 测试命令信息&#xff1a;随机种子 seed、运行次数、可运行应用列表、各事件百分比。” 正文内容从这里开始&#xff08;可直接省略&#xff0c;亦可配图说明&#xff09;。 01—Mon…

使用python批量处理工作簿和工作表

案例01 批量新建并保存工作簿 将for语句与xlwings模块相结合&#xff0c;就可以轻松实现批量创建工作簿 import xlwings as xw # 导入xlwings模块 app xw.App(visibleTrue,add_bookFalse) # 启动Excel程序&#xff0c;但不新建工作簿 for i in range(6):workbook app.books…

Pyinstaller 快速找出所需库的方法

目录 【auto-py-to-exe】第三方库 使用【auto-py-to-exe】逐步尝试 1.什么文件都不添加&#xff0c;选择项目与单目录后直接打包 2.直接运行生成的exe文件 3.定位所需的包 4.--add-data 和 --hidden-import 打包为一个exe文件 【auto-py-to-exe】第三方库 其是pyinstaller操…

【头歌-Python】9.1 X射线衍射曲线绘制(project)第3~4关

第3关&#xff1a;X 射线衍射曲线峰值 任务描述 本关任务&#xff1a;读文件中的数据绘制线图形并加绘制峰值。 相关知识 为了完成本关任务&#xff0c;你需要掌握&#xff1a; python 读取文件中的数据使用 matplotlib 绘制图形 python 读取文件 python读取文件可以用以…

6.volatile与JMM

volatile与JMM 6.1 被volatile修饰的变量有两大特点 特点&#xff1a; 可见性 有序性&#xff1a;有排序要求&#xff0c;有时需要禁重排 内存语义&#xff1a; 当写一个volatile变量时&#xff0c;JMM会把该线程对应的本地内存中的共享变量值立即刷新回主内存中 当读一个vol…

Linux:ftp服务 (vsftpd)

我的ftp服务器为centos7 使用yum安装的vsftpd软件 &#xff08;如果你需要离线yum库&#xff0c;而不会搭建可以查看&#xff09; Linux&#xff1a;rpm查询安装 && yum安装_鲍海超-GNUBHCkalitarro的博客-CSDN博客 安装软件 配置环境 其次是Linux的防火墙和selinu…

写一个Orillusion编辑器(伪)

界面效果 思路 bootstrap控制界面效果jquery动态修改界面内容[Add]增加一个box[Play]导出play.html,打开play.html就可以看到程序运行效果 编辑器代码 <!DOCTYPE html> <html> <!-- TODO 1. 序列化数据,保存工程 2. 反序列化数据,打开工程 --><head>…

Python实现ACO蚁群优化算法优化随机森林回归模型(RandomForestRegressor算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 蚁群优化算法(Ant Colony Optimization, ACO)是一种源于大自然生物世界的新的仿生进化算法&#xff0c…

腾讯安全SOC+荣获“鑫智奖”,助力金融业数智化转型

近日&#xff0c;由金科创新社主办&#xff0c;全球金融专业人士协会支持的“2023鑫智奖第五届金融数据智能优秀解决方案评选”榜单正式发布。腾讯安全申报的“SOC基于新一代安全日志大数据平台架构的高级威胁安全治理解决方案”获评“鑫智奖网络信息安全创新优秀解决方案”。 …

大数据分析平台释疑专用帖

大数据分析平台是大数据时代&#xff0c;企业数字化运营决策的一大关键平台&#xff0c;但初次接触大数据分析平台时&#xff0c;大家必然是问题多多的&#xff0c;本文将就几个比较常见的问题进行总结回答&#xff0c;希望对正在了解、选型大数据分析平台的大家有所帮助。 首…

Qt学习08:文本输入类与快捷键

文章首发于我的个人博客&#xff1a;欢迎大佬们来逛逛 文章目录 QLineEditQTextEditQTextCursor QPlainTextQKeySequenceEdit QLineEdit QLineEdit是最基本的输入控件&#xff0c;常用于短行的文本输入。 构造函数 QLineEdit(const QString &contents, QWidget *parent …

07_scrapy的应用——获取电影数据(通过excel保存静态页面scrapy爬虫数据的模板/通过数据库保存)

0、前言: 一般我们自己创建的一些python项目,我们都需要创建虚拟环境,其中会下载很多包,也叫做依赖。但是我们在给他人分享我们的项目时,不能把虚拟环境打包发送给别人,因为每个人电脑系统不同,我们可以把依赖导出为依赖清单,然后别人有了我们的依赖清单,就可以用一条…

[网络工程师]-网络规划与设计-网络测试运行和维护(二)

4、局域网测试 局域网测试主要是检验网络是否为应用系统提供了稳定、高效的网络平台,如果网络系统不够稳定,网络应用就不可能快速稳定。对于常规的以太网进行系统测试,主要包括系统连通性、链路传输速率、吞吐率、传输时延、丢包率及链路层健康状况测试等基本功能测试。 4.…

用那种方式安装 ThinkPHP 5.0?

简单介绍 ThinkPHP是一个免费开源的&#xff0c;快速、简单的面向对象的轻量级PHP开发框架&#xff0c;是为了敏捷WEB应用开发和简化企业应用开发而诞生的。 ThinkPHP5.0版本是一个颠覆和重构版本&#xff0c;采用全新的架构思想&#xff0c;引入了更多的PHP新特性&#xff0c…

分享几个免费 AI 生成工具 (第一期)

今天来给大家分享几个国外免费的AI视频生成工具 Artflow ai https://app.artflow.ai Artflow.ai 是一款人工智能工具&#xff0c;旨在帮助用户创建自定义头像并让他们的故事栩栩如生。主要特点和优势包括&#xff1a; 自定义创作&#xff1a;从文本中生成角色、场景和声音&…