【DVWA】RCE远程命令执行实战

遇到挑战跟挫折的时侯,我有一个坚定的信念,我可以断气,但绝不能放弃

0.Command Injection(介绍)

命令注入(Command Injection) 是一种安全漏洞,攻击者通过将恶意的命令插入到应用程序或系统的输入中,从而执行未经授权的操作。它通常发生在应用程序允许用户输入某些参数,然后将这些参数直接传递给操作系统命令执行时。由于输入没有经过适当的验证或过滤,攻击者可以通过精心构造的输入,在系统中执行任意的命令,达到控制目标系统的目的。

常见的命令注入攻击方式:

  1. 系统命令注入 :例如,通过 Web 表单或 URL 中传递参数,攻击者可能让程序在服务器上执行特定的操作系统命令。
    • 例如:如果应用程序允许用户输入文件名,并将该文件名传递给操作系统进行处理,如果没有对输入进行充分的验证,攻击者可以注入如 ; rm -rf / 的恶意命令。
  2. SQL 注入与命令注入的结合:有时候,命令注入与 SQL 注入配合,攻击者不仅能修改数据库内容,还能通过操作系统命令进一步控制系统。
  3. Web应用中的命令注入:很多 Web 应用会调用操作系统的命令或脚本,如图像处理、日志清理等,如果输入不受限制,攻击者可以插入命令。

常见的攻击方式:

  • 注入恶意命令 :通过在输入字段中添加操作系统命令的分隔符(如 ;, &&, ||, |)来组合并执行恶意命令。
  • 文件操作:注入命令来修改或删除系统文件,或者执行远程命令。
  • 创建反向 Shell:攻击者利用命令注入漏洞,启动一个反向 Shell,通过目标机器与攻击者的机器建立通信。

防止命令注入的方法:

  1. 输入验证和过滤:对用户输入进行严格的校验,特别是过滤掉特殊字符(如分号、管道符号等),限制用户输入范围。
  2. 使用参数化命令 :避免直接将用户输入拼接到命令中,使用安全的 API 和函数(如 execsystem 等)时,传递参数而不是构造命令字符串。
  3. 最小化权限:限制应用程序和用户的权限,避免使用高权限账户执行命令。
  4. 环境隔离:使用沙箱(sandbox)或容器化技术来限制命令执行的环境,减少潜在危害。

命令注入是一种非常危险的攻击方式,因为它能让攻击者执行几乎任何操作,包括系统命令、文件操作和网络命令等,具有极高的破坏性。

1.Command Injection(Low)

相关代码分析

复制代码
<?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
	$html .= "<pre>{$cmd}</pre>";
}
 
?>

stristr() 函数

搜索字符串在另一字符串中的第一次出现。该函数是二进制安全的, 且是不区分大小写的。如需进行区分大小写的搜索,要使用 strstr() 函数。

php_uname()函数

返回运行 PHP 的系统的有关信息。

'a':此为默认。包含序列 "s n r v m" 里的所有模式。

's':操作系统名称。例如: FreeBSD。

'n':主机名。例如: localhost.example.com

'r':版本名称,例如: 5.1.2-RELEASE。

'v':版本信息。操作系统之间有很大的不同。

'm':机器类型。例如:i386

可以看到, 服务端代码仅仅根据操作系统的不同, 执行相应的命令, 没有进行任何过滤, 导致了严重的命令执行漏洞。

命令是用分号;分隔的, 所以尝试注入:

;ls /

还可以用&&来执行, &&当第一个命令执行成功时(返回0), 才执行&&后面的命令

command1 && command2

如果command1执行成功,则执行command2

baidu.com && pwd

baidu.com & pwd

baidu.com || pwd

结果相同

baidu.com | pwd

2.Command Injection(Medium)

相关代码分析

服务器端对ip参数做了一定过滤,即把"&&" 、";"删除,本质上采用的是黑名单机制,因此依旧存在安全问题。

采用黑名单过滤, 可以理解为一种枚举过滤, 列举出可能出现的漏洞, 然后过滤; 但是很多情况下是枚举不完的, 依旧存在漏洞

只有"&&"与" ;"被过滤了,所以"&"不会受影响。

输入baidu.com & pwd

方式:command1 | command2

command1的输出作为command2的输入

baidu.com | pwd

方式:command1 || command2

如果command1执行失败,则执行command2

baidu.com || pwd

3.Command Injection(High)

相关代码分析

在High级别中, 将一些主要的命令执行关键字( & ; | ...) 给替换为空了, 但是由于黑名单过滤的局限性, 还是存在漏洞的。

仔细观察发现, 仅仅是把 | (带一个空格) 给替换为空了, 实际上并没有把 | (管道符)给过滤

127.0.0.1|ls

4.Command Injection(Impossible)

相关代码分析

相关函数介绍

stripslashes(string)

stripslashes函数会删除字符串string中的反斜杠,返回已剥离反斜杠的字符串。

explode(separator,string,limit)

把字符串打散为数组,返回字符串的数组。参数separator规定在哪里分割字符串,参数string是要分割的字符串,可选参数limit规定所返回的数组元素的数目。

is_numeric(string)

检测string是否为数字或数字字符串,如果是返回TRUE,否则返回FALSE。

可以看到,Impossible级别的代码加入了Anti-CSRF token,同时对参数ip进行了严格的限制,只有诸如"数字.数字.数字.数字"的输入才会被接收执行,因此不存在命令注入漏洞。

文笔生疏,措辞浅薄,望各位大佬不吝赐教,万分感谢。

免责声明:由于传播或利用此文所提供的信息、技术或方法而造成的任何直接或间接的后果及损失,均由使用者本人负责, 文章作者不为此承担任何责任。

转载声明:儒道易行 拥有对此文章的修改和解释权,如欲转载或传播此文章,必须保证此文章的完整性,包括版权声明等全部内容。未经作者允许,不得任意修改或者增减此文章的内容,不得以任何方式将其用于商业目的。

复制代码
CSDN: 
https://rdyx0.blog.csdn.net/

公众号:儒道易行
https://mp.weixin.qq.com/mp/appmsgalbum?__biz=Mzg5NTU2NjA1Mw==&action=getalbum&album_id=1696286248027357190&scene=173&from_msgid=2247485408&from_itemidx=1&count=3&nolastread=1#wechat_redirect

博客:
https://rdyx0.github.io/

先知社区:
https://xz.aliyun.com/u/37846

SecIN:
https://www.sec-in.com/author/3097

FreeBuf:
https://www.freebuf.com/author/%E5%9B%BD%E6%9C%8D%E6%9C%80%E5%BC%BA%E6%B8%97%E9%80%8F%E6%8E%8C%E6%8E%A7%E8%80%85
相关推荐
用户962377954483 天前
VulnHub DC-3 靶机渗透测试笔记
安全
叶落阁主4 天前
Tailscale 完全指南:从入门到私有 DERP 部署
运维·安全·远程工作
用户962377954486 天前
DVWA 靶场实验报告 (High Level)
安全
数据智能老司机6 天前
用于进攻性网络安全的智能体 AI——在 n8n 中构建你的第一个 AI 工作流
人工智能·安全·agent
数据智能老司机6 天前
用于进攻性网络安全的智能体 AI——智能体 AI 入门
人工智能·安全·agent
用户962377954486 天前
DVWA 靶场实验报告 (Medium Level)
安全
red1giant_star6 天前
S2-067 漏洞复现:Struts2 S2-067 文件上传路径穿越漏洞
安全
用户962377954486 天前
DVWA Weak Session IDs High 的 Cookie dvwaSession 为什么刷新不出来?
安全
cipher8 天前
ERC-4626 通胀攻击:DeFi 金库的"捐款陷阱"
前端·后端·安全
一次旅行11 天前
网络安全总结
安全·web安全