DVWA靶场Command Injection(命令注入) 漏洞low(低),medium(中等),high(高)所有级别通关教程及源码审计

命令注入

命令注入漏洞是一种安全漏洞,攻击者可以通过向应用程序输入恶意命令,诱使系统执行这些命令,从而达到未授权访问、数据篡改、系统控制等目的。该漏洞通常出现在应用程序未对用户输入进行充分验证和清理时

常见管道符:

php 复制代码
;     前面的执行完执行后面的
|     上一条命令的输出,作为下一条命令的参数(显示后面的执行结果)         
||    当前面的执行出错时(为假)执行后面的
&     将任务置于后台执行(不管前面是否为真都执行后面)
&&    前面的语句为假则直接出错,后面的也不执行,前面只能为真
%0a  (换行)
%0d  (回车)

如果出现乱码现象,可以如下更改

如下替换编码方式即可

low

ping 127.0.0.1试试,可以看到正常回显

执行 下面语句都可以,没有任何过滤

php 复制代码
127.0.0.1 ; date
127.0.0.1 || date
127.0.0.1 | date
127.0.0.1 & date
127.0.0.1 && date

源码审计

没有做任何过滤,很容易被攻击

php 复制代码
<?php

// 检查是否通过 POST 方法提交了表单
if( isset( $_POST[ 'Submit' ]  ) ) {
	// 获取用户输入的 IP 地址
	$target = $_REQUEST[ 'ip' ];

	// 判断操作系统并执行 ping 命令
	if( stristr( php_uname( 's' ), 'Windows NT' ) ) {
		// 如果是 Windows 系统
		$cmd = shell_exec( 'ping  ' . $target );
	}
	else {
		// 如果是类 Unix 系统
		$cmd = shell_exec( 'ping  -c 4 ' . $target );
	}

	// 将命令执行的结果反馈给用户
	$html .= "<pre>{$cmd}</pre>";
}
?>

medium

经过测试,发现 **";" "&&"**被过滤了,其他的可以正常利用

源码审计

只过滤了**""&&" ";" **字符,不严格

php 复制代码
<?php

// 检查是否通过 POST 方法提交了表单
if( isset( $_POST[ 'Submit' ]  ) ) {
	// 获取用户输入的 IP 地址
	$target = $_REQUEST[ 'ip' ];

	// 设置黑名单,列出需要过滤的字符
	$substitutions = array(
		'&&' => '',  // 去掉 &&
		';'  => '',  // 去掉 ;
	);

	// 将黑名单中的字符从输入中去除
	$target = str_replace( array_keys( $substitutions ), $substitutions, $target );

	// 判断操作系统并执行 ping 命令
	if( stristr( php_uname( 's' ), 'Windows NT' ) ) {
		// 如果是 Windows 系统
		$cmd = shell_exec( 'ping  ' . $target );
	}
	else {
		// 如果是类 Unix 系统
		$cmd = shell_exec( 'ping  -c 4 ' . $target );
	}

	// 将命令执行的结果反馈给用户
	$html .= "<pre>{$cmd}</pre>";
}
?>

high

通过测试以及对源码的审核,发现一处过滤不严格的地方,这个只是过滤了 '| ' 这样的模式,如果**|** 后面不加空格则无法过滤

可以正常回显

源码审计

php 复制代码
<?php

// 检查是否通过 POST 方法提交了表单
if( isset( $_POST[ 'Submit' ]  ) ) {
	// 获取用户输入,去除多余空格
	$target = trim($_REQUEST[ 'ip' ]);

	// 设置黑名单,列出需要剔除的字符
	$substitutions = array(
		'&'  => '',  // 去掉 &
		';'  => '',  // 去掉 ;
		'| ' => '',  // 去掉 |      //此处过滤不严格,用户可以通过 |date 来绕过
		'-'  => '',  // 去掉 -
		'$'  => '',  // 去掉 $
		'('  => '',  // 去掉 (
		')'  => '',  // 去掉 )
		'`'  => '',  // 去掉 `
		'||' => '',  // 去掉 ||
	);

	// 将黑名单中的字符替换为空
	$target = str_replace( array_keys( $substitutions ), $substitutions, $target );

	// 判断操作系统并执行 ping 命令
	if( stristr( php_uname( 's' ), 'Windows NT' ) ) {
		// 如果是 Windows 系统
		$cmd = shell_exec( 'ping  ' . $target );
	}
	else {
		// 如果是类 Unix 系统
		$cmd = shell_exec( 'ping  -c 4 ' . $target );
	}

	// 将命令执行的结果反馈给用户
	$html .= "<pre>{$cmd}</pre>";
}
?>

impossible

源码审计

采用了白名单过滤,总体来说更加安全

php 复制代码
<?php

// 检查表单是否提交
if( isset( $_POST[ 'Submit' ]  ) ) {
	// 检查反跨站请求伪造(Anti-CSRF)令牌
	checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' );

	// 获取输入
	$target = $_REQUEST[ 'ip' ];
	$target = stripslashes( $target ); // 去除输入字符串中的反斜杠

	// 将IP地址分割成4个八位字节
	$octet = explode( ".", $target );

	// 检查每个八位字节是否为整数
	if( ( is_numeric( $octet[0] ) ) && ( is_numeric( $octet[1] ) ) && ( is_numeric( $octet[2] ) ) && ( is_numeric( $octet[3] ) ) && ( sizeof( $octet ) == 4 ) ) {
		// 如果四个八位字节都是整数,则重新组合IP地址
		$target = $octet[0] . '.' . $octet[1] . '.' . $octet[2] . '.' . $octet[3];

		// 确定操作系统并执行ping命令
		if( stristr( php_uname( 's' ), 'Windows NT' ) ) {
			// Windows系统
			$cmd = shell_exec( 'ping  ' . $target );
		}
		else {
			// Unix/Linux系统
			$cmd = shell_exec( 'ping  -c 4 ' . $target );
		}

		// 向用户提供反馈
		$html .= "<pre>{$cmd}</pre>";
	}
	else {
		// 出现错误,告知用户输入的IP无效
		$html .= '<pre>ERROR: You have entered an invalid IP.</pre>';
	}
}

// 生成反跨站请求伪造令牌
generateSessionToken();

?>
相关推荐
看着博客敲代码6 小时前
nikto 扫描报 0 host(s) tested 与 Web 服务器漏洞扫描用法
安全·web安全·网络安全
看着博客敲代码8 小时前
gobuster 报 the server returns a status code that matches 与 目录爆破用法
安全·网络安全·系统安全
小枣信安8 小时前
MCP安全系列之缺乏日志审计
安全·网络安全·ai安全·大模型安全·智能体安全·mcp安全
学逆向的9 小时前
C 数据溢出与精度丢失
c语言·开发语言·网络安全
是真的小外套9 小时前
第14章:恶意代码防范技术原理与应用
网络·网络安全
听说66610 小时前
信息安全工程师 - 第二十三章 云计算安全需求分析与安全保护工程
网络·安全·web安全·网络安全·云计算·系统安全
罗斯83911 小时前
Datalog与安全分析
算法·安全·网络安全
菩提小狗11 小时前
每日安全情报报告 · 2026-10-14
网络安全·漏洞·cve·安全情报·每日安全
墨云安全11 小时前
自动化安全测试工具的技术架构、集成方式与任务编排(2026 年实践)
人工智能·网络安全·渗透测试
FungLeo12 小时前
成为全栈·Flutter App 篇·内置 WebView:网页历史、App 返回与外链安全
flutter·网络安全·移动开发·webview·路由管理·成为全栈