DVWA-Command Injection

admin 2023年3月12日14:31:33DVWA-Command Injection已关闭评论31 views字数 2277阅读7分35秒阅读模式

作者:儒道易行

2.Command Injection

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 .= "

{$cmd}

";
}

?>
```

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 /

DVWA-Command Injection

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

command1 && command2

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

baidu.com && pwd

DVWA-Command Injection

baidu.com & pwd

baidu.com || pwd

结果相同

DVWA-Command Injection

baidu.com | pwd

DVWA-Command Injection

2.Command Injection(Medium)

相关代码分析

DVWA-Command Injection

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

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

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

输入baidu.com & pwd

DVWA-Command Injection

方式:command1 | command2

command1的输出作为command2的输入

baidu.com | pwd

DVWA-Command Injection

方式:command1 || command2

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

baidu.com || pwd

DVWA-Command Injection

3.Command Injection(High)

相关代码分析

DVWA-Command Injection

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

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

127.0.0.1|ls

DVWA-Command Injection

4.Command Injection(Impossible)

相关代码分析

DVWA-Command Injection

相关函数介绍

stripslashes(string)

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

explode(separator,string,limit)

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

is_numeric(string)

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

DVWA-Command Injection

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

DVWA-Command Injection

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

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

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

博客:

https://rdyx0.github.io/

先知社区:

https://xz.aliyun.com/u/37846

SecIN:

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

CSDN:

https://blog.csdn.net/weixin_48899364?type=blog

公众号:

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

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

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年3月12日14:31:33
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   DVWA-Command Injectionhttps://cn-sec.com/archives/1599574.html