移动安全 安全管理 应用案例 网络威胁系统安全 应用安全 数据安全 云安全
当前位置: 主页 > 信息安全 > 系统安全 >

Web利用手工渗入测试—用SQLMap进行SQL盲注测试

时间:2014-04-14 11:04来源:TuZhiJiaMi企业信息安全专家 点击:
简介 本文首要存眷SQL注进,假定读者已体味一般的SQL注进手艺,在我之前的文章中有过介绍,即经由过程输进不合的参数,等候办事器的反应,以后经由过程不合的前缀和后缀(suffix and prefix
Tags系统安全(735)Web应用(13)SQL(22)SQLMap(1)  

  简介

  本文首要存眷SQL注进,假定读者已体味一般的SQL注进手艺,在我之前的文章中有过介绍,即经由过程输进不合的参数,等候办事器的反应,以后经由过程不合的前缀和后缀(suffix and prefix )注进到数据库。本文将更进一步,会商SQL盲注,假定读者没有任何相干常识储蓄,建议先往wikipedia进修一下。在继续之前需要提示一下,假定读者也想要按本文的步调进行,需要在NOWASP Mutillidae环境搭建好以后先注册一个NOWASP Mutillidae帐号。

Web利用手工渗入测试——用SQLMap进行SQL盲注测试

  SQL注进媒介

  本文演示从web界面注进SQL号令的编制,但不会直接连接到数据库,而是想编制使后端数据库措置法度将我们的查询语句当作SQL号令往履行。本文先描述一些注进根本常识,以后讲授盲注的相干内容。

  Show Time

  这里我以用户名“jonnybravo”和暗码“momma”登录,之掉队进用户查看页面,位于OWASP 2013 >A1 SQL Injection >Extract data >User Info。要查看用户信息,需要输进用户ID与暗码登录,以后便可以看到当前用户的信息了。

  如我之前的文章所提到的那样,这个页面包含SQL注进缝隙,所以我会测验测验各类注进编制来把持数据库,需要利用我之前文章提到的后缀(suffix)与前缀(prefix)的同化。这里我利用的注进语句以下:

  Username: jonnybravo’ or 1=1; –

  该注进语句要做的就是从数据库查询用户jonnybravo,获得数据后当即终止查询(操纵单引号),以后紧接着一条OR语句,因为这是一条“if状况”查询语句,并且这里给出 “or 1=1”,暗示该查询永久为真。1=1暗示获得数据库中的所有记实,以后的;–暗示结束查询,奉告数据库当前语句后面没有其它查询语句了。

Web利用手工渗入测试——用SQLMap进行SQL盲注测试

  图1 正常编制查看用户信息

  将payload注进后,办事器泄漏了数据库中的所有效户信息。如图2所示:

Web利用手工渗入测试——用SQLMap进行SQL盲注测试

  图2 注进payload导致数据库中所稀有据泄漏

  至此,本文向读者演示了一种根基SQL注进,下面笔者用BackTrack和Samurai 等渗入测试发行版中自带的SQLmap东西向读者演示。要利用SQLmap,只需要打开终端,输进SQLmap并回车,以下图所示:

Web利用手工渗入测试——用SQLMap进行SQL盲注测试

  假定读者初次利用SQLmap,不需要甚么预先把持。假定已利用过该东西,需要利用—purge-output选项将之前的输出文件删除,以下图所示:

  本文会演示一些比较奇特的把持。凡是人们利用SQLmap时会直接指定URL,笔者也是用该东西阐发要求,但会先用Burp查看要求并将其保留到一个文本文件中,以后再用SQLmap东西调用该文本文件进行扫描。以上就是一些预备工作,下面起首就是先获得一个要求,以下所示:

  GET /chintan/index.php?page=user-info.php&username=jonnybravo&password=momma&user-info-php-submit-button=View+Account+Details HTTP/1.1

  Host: localhost

  User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:27.0) Gecko/20100101 Firefox/27.0

  Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

  Accept-Language: en-US,en;q=0.5

  Accept-Encoding: gzip, deflate

  Referer: http://localhost/chintan/index.php?page=user-info.php

  Cookie: showhints=0; username=jonnybravo; uid=19; PHPSESSID=f01sonmub2j9aushull1bvh8b5

  Connection: keep-alive

  将该要求保留到一个文本文件中,以后发送到KALI linux中,用以下号令将该要求头部传给SQLmap:

  SQLmap –r ~/root/Desktop/header.txt

  Self-Critical Evaluation

  号令中-r选项暗示要读取一个包含要求的文件,~/root/Desktop/header.txt暗示文件的位置。假定读者用VMware,例如在Windows上用虚拟机跑KALI,履行号令时可能产生以下图所示的弊端提示:

  这里必需在要求头中指定一个IP地址,使KALI linux能与XP正常通信,点窜以下图所示:

  以后号令就可以正常履行了,显示成果以下图所示:

Web利用手工渗入测试——用SQLMap进行SQL盲注测试

  根基上该东西做的就是阐发要求并肯定要求中的第一个参数,以后对该参数进行各类测试,以肯定办事器上运行的数据库类型。对每个要求,SQLmap城市对要求中的第一个参数进行各类测试。

  GET /chintan/index.php?page=user-info.php&username=jonnybravo&password=momma&user-info-php-submit-button=View+Account+Details HTTP/1.1

  SQLmap可以检测多种数据库,如MySQL、Oracle SQL、PostgreSQL、Microsoft SQL Server等。

  下图是笔者系统中SQLmap正在对指定的要求进行检测时显示的数据库列表:

  起首它会肯定给定的参数是不是可注进。按照本文演示的环境,我们已设置OWASP mutillidae的安然性为0,是以这里是可注进的,同时SQLmap也检测到后台数据库DBMS可能为MYSQL。

  如上图所示,东西辨认后台数据库可能为MYSQL,是以提示用户是不是跳过其它类型数据库的检测。

  “因为本文在演示之前已知道被检测数据库是MYSQL,是以这里选择跳过对其它类型数据库的检测。”

  以后扣问用户是不是引进(include)测试MYSQL相干的所有payload,这里选择“yes”选项:

  测试过一些payloads以后,东西已辨认出GET参数上一个由弊端引发的注进标题问题和一个Boolean类型引发的盲注标题问题。

  以后显示该GET参数username是一个基于MYSQL union(union-based)类型的查询注进点,是以这里跳过其它测试,深进发掘已找出的缝隙。

  至此,东西已辨认出应当深进发掘的可能的注进点:

  接下来,我把参数username传递给SQLmap东西,以对其进行深进发掘。经由过程上文描述的所有注进点和payloads,我们将对username参数利用基于Boolean的SQL盲注手艺,经由过程SQLmap中的–technique选项实现。此当选择以以下表中不合的选项暗示选用不合的手艺:

  B : 基于Boolean的盲注(Boolean based blind)

  Q : 内联查询(Inline queries)

  T : 基于时候的盲注(time based blind)

  U : 基于结合查询(Union query based)

  E : 基于弊端(error based)

  S : 栈查询(stack queries)

  本例中也给出了参数名“username”,是以最后机关的号令以下:

  SQLmap –r ~root/Desktop/header.txt – -technique B – -p username – -current-user

  这里-p选项暗示要注进的参数,“–current-user“选项暗示强迫SQLmap查询并显示登录MYSQL数据库系统的当前用户。号令获得输出以下图所示:

Web利用手工渗入测试——用SQLMap进行SQL盲注测试

  同时也能够看到东西也辨认出了把持系统名,DBMS办事器和法度利用的编程说话。

  “”当前我们所做的就是向办事器发送要求并领受来自办事器的响应,近似客户端-办事器端模式的交互。我们没有直接与数据库治理系统DBMS交互,但SQLmap可以仍辨认这些后台信息。

  同时本次与之前演示的SQL注进是不合的。在前一次演示SQL注进中,我们利用的是前缀与后缀,本文不再利用这类编制。之前我们往输进框中输进内容并等候返回到客户端的响应,如许便可以按照这些信息获得切进点。本文我们往输进框输进永久为真的内容,经由过程它鉴定利用法度的响应,当作法度返回给我们的信息。“

  成果阐发

  我们已给出当前的用户名,位于本机,下面看看它在后台做了甚么。前文已说过,后台是一个if鉴定语句,它会阐发该if查询,查抄username为jonnybravo且7333=7333,以后SQLmap用不合的字符串代替7333,新的要求以下:

  page=user-info.php?username=’jonnybravo’ AND ‘a’='a’ etc..FALSE

  page=user-info.php?username=’jonnybravo’ AND ‘l’='l’ etc..TRUE

  page=user-info.php?username=’jonnybravo’ AND ‘s’='s’ etc..TRUE

  page=user-info.php?username=’jonnybravo’ AND ‘b’='b’ etc..FALSE

  如上所示,第一个和最后一个查询要求成果为假,另两个查询要求成果为真,因为当前的username是root@localhost,包含字母l和s,是以这两次查询在查询字母表时会给出包含这两个字母的用户名。

  “这就是用来与web办事器验证的SQL server用户名,这类环境在任何针对客户端的报复打击中都不该该呈现,但我们让它产生了。”

  往掉落了–current-user选项,利用别的两个选项-U和–password代替。-U用来指定要查询的用户名,–password暗示让SQLmap往获得指定用户名对应的暗码,获得最后的号令以下:

  SQLmap -r ~root/Desktop/header.txt --technique B -p username -U root@localhost --passwords

  号令输出以下图所示:

Web利用手工渗入测试——用SQLMap进行SQL盲注测试

  Self-Critical Evaluation

  有时可能没有成功获得到暗码,只获得一个NULL输出,那是因为系统治理员可能没有为指定的用户设定认证信息。假定用户是在本机测试,默许环境下用户root@localhost是没有暗码的,需要利用者本身为该用户设置暗码,可以在MySQL的user数据表中看到用户的列表,经由过程双击password区域来为其添加暗码。或可以直接用下图所示的号令直接更新指定用户的暗码:

  这里将暗码设置为“sysadmin“,如许SQLmap便可以获得到该暗码了,假定不设置的话,获得的就是NULL。

  经由过程以上编制,我们不直接与数据库办事器通信,经由过程SQL注朝长进步得了治理员的登录认证信息。

  总结

  本文描述的注进编制就是所谓的SQL盲注,这类编制更繁琐,良多环境下比较难以检测和操纵。相信读者已体味传统SQL注进与SQL盲注的不合。在本文所处的布景下,我们只是输进参数,看其是不是以传统编制响应,以后凭命运测验测验注进,与之前演示的注进美满是不合的编制。

------分隔线----------------------------

推荐内容