命令注入

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

常见管道符:

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

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

如下替换编码方式即可

low

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

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

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

// 检查是否通过 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

// 检查是否通过 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

// 检查是否通过 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

// 检查表单是否提交
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(); ?>

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

  1. DVWA之Command injection(命令执行漏洞)

    目录 Low Medium Middle Impossible 命令执行漏洞的原理:在操作系统中, &  .&& .|  . ||   都可以作为命令连接符使用,用户通过浏览器 ...

  2. Fortify Audit Workbench 笔记 Command Injection(命令注入)

    Command Injection(命令注入) Abstract 执行不可信赖资源中的命令,或在不可信赖的环境中执行命令,都会导致程序以攻击者的名义执行恶意命令. Explanation Comman ...

  3. DVWA靶场练习-Command Injection命令注入

    Command Injection 原理 攻击者通过构造恶意参数,破坏命令的语句结构,从而达到执行恶意命令的目的.

  4. command injection命令注入

    命令注入 是指程序中有调用系统命令的部分,例如输入ip,程序调用系统命令ping这个ip.如果在ip后面加一个&&.&.|.||命令拼接符号再跟上自己需要执行的系统命令 在pi ...

  5. DVWA-对Command Injection(命令注入)的简单演示与分析

    前言 上一篇文章中,对命令注入进行了简单的分析,有兴趣的可以去看一看,文章地址 https://www.cnblogs.com/lxfweb/p/12828754.html,今天这篇文章以DVWA的C ...

  6. 安全性测试入门:DVWA系列研究(二):Command Injection命令行注入攻击和防御

    本篇继续对于安全性测试话题,结合DVWA进行研习. Command Injection:命令注入攻击. 1. Command Injection命令注入 命令注入是通过在应用中执行宿主操作系统的命令, ...

  7. DVWA各等级命令注入漏洞

    漏洞描述 在web程序中,因为业务功能需求要通过web前端传递参数到后台服务器上执行,由于开发人员没有对输入进行严格过滤,导致攻击者可以构造一些额外的"带有非法目的的"命令,欺骗后 ...

  8. DVWA之Command Injection

    Command Injection Command Injection,即命令注入,是指通过提交恶意构造的参数破坏命令语句结构,从而达到执行恶意命令的目的.PHP命令注入攻击漏洞是PHP应用程序中常见 ...

  9. Commix命令注入漏洞利用

    介绍 项目地址:https://github.com/stasinopoulos/commix Commix是一个使用Python开发的漏洞测试工具,这个工具是为了方便的检测一个请求是否存在命令注入漏 ...

  10. 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(32)-swfupload多文件上传[附源码]

    原文:构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(32)-swfupload多文件上传[附源码] 文件上传这东西说到底有时候很痛,原来的asp.net服务器 ...

随机推荐

  1. KubeSphere 3.3.0 离线安装教程

    作者:老Z,中电信数智科技有限公司山东分公司运维架构师,云原生爱好者,目前专注于云原生运维,云原生领域技术栈涉及Kubernetes.KubeSphere.DevOps.OpenStack.Ansib ...

  2. 买游戏本玩战锤40K ?ToDesk云电脑教你2元升级旧电脑,省钱!

    <战锤40K:星际战士>终于出续作了!不得不说这款多人射击游戏的热度实在太高啦,刚发布两天就登顶Steam销量第一名. <战锤40K:星际战士2>不仅继承了前作的精髓,更在画面 ...

  3. 如何正确的使用CMDB?

    为什么说CMDB在企业中很难被使用起来?第一,CMDB的数据集成与准确性维护是一大挑战,因为需要确保来自多个异构IT系统的配置信息能够实时.准确地同步与更新.第二,复杂的IT环境和快速变化的业务需求使 ...

  4. 通义灵码:体验AI编程新技能-@workspace 和 @terminal为你的编程插上一双翅膀

    1.前言 我是一位运维工程师,用通义灵码个人版的@workspace 和 @terminal 的能力做快速了解一个工程.查找工程内的实现逻辑,以及执行指令不知道如何写,或者不清楚某个指令的意思,对比之 ...

  5. 使用wxpython开发跨平台桌面应用,基类对话框窗体的封装处理

    在开发桌面界面的时候,往往都需要对一些通用的窗体进行一些抽象封装处理,以便统一界面效果,以及继承一些通用的处理过程,减少重复编码.本篇随笔介绍使用wxpython开发跨平台桌面应用,基类对话框窗体的封 ...

  6. 4.4 Linux解压.zip格式的文件(unzip命令)

    unzip 命令可以查看和解压缩 zip 文件.该命令的基本格式如下: [root@localhost ~]# unzip [选项] 压缩包名 此命令常用的选项以及各自的含义如表 1 所示. 选项 含 ...

  7. .NET Core 委托底层原理浅谈

    简介 .NET通过委托来提供回调函数机制,与C/C++不同的是,委托确保回调是类型安全,且允许多播委托.并支持调用静态/实例方法. 简单来说,C++的函数指针有如下功能限制,委托作为C#中的上位替代, ...

  8. QOJ 5020. 举办乘凉州喵,举办乘凉州谢谢喵

    QOJ 5020. 举办乘凉州喵,举办乘凉州谢谢喵 飞天数据结构. 思路 设 \(f[u][k]\) 为 \(u\) 子树内距离 \(u\) 小于等于 \(k\) 的点的个数,\(g[u][k]\) ...

  9. Navicat Premium 16下载与安装

    1.可以通过以下两种方式下载 a.官网下载地址 https://www.navicat.com.cn/download/navicat-premium b.百度网盘下载地址 链接:https://pa ...

  10. Five minute introduction to ANTLR 3

    What is ANTLR 3? ANTLR - ANother Tool for Language Recognition - is a tool that is used in the const ...