sql-labs靶场第23-53新手通关学习详解

很早之前的文章忘记发了!!!

有错误的地方欢迎指正!

菜鸟选手

目录

less-23

less-24

less-25

sql注入WAF绕过

less-25a

less-26

less-26a

less-27

less-27a

less-28

less-28a

less-29

less-32

less-33

less-34

less-35

less-36

less-37

less-38

less-39

less-40

less-41

less-42

 less-43-45

less-46

less-47-49

less-50-53


less-23

1.输入id=1(正常)​

2.使用'尝试(显示报错)可能存在注入信息​

 3.使用注释符注释(发现注释符无法注释)​

 4.查看源代码(对于输入的注释符进行了替换所以注释符在这里无效)​

 5.第一种方法使用特殊注释符;%00(正常)​

 6.后面操作就和以前一样​

 

 

 

 

 

6.报错注入(闭合)​ 

 后面查询同以前​

less-24

二次注入​

 先用admin admin 登录​

 登录成功 可以重置密码

​登录界面 ​

 

 这个函数转义了字符​

 创建新用户界面也有这个函数​

 

可以看出修改密码的地方没有过滤,因此可以进行二次注入​

注册admin'#账户 密码123456 (虽然进行了转义,但是仍然在数据库中存好了)​

 注册成功

 这里查询了username=admin同时注释了后面的语句,我们直接修改密码即可,也就相当于修改了admin的密码​

 将admin密码由123456改为211108​

 修改成功​

admin 211108 可以登录​

less-25

输入id=1(正常)​

尝试单引号闭合报错​ 

 加注释符正常 ​

 按照原来方法order by 查询​

报错然后发现or没有了只有der by 3​

 查看源码​

发现不区分大小写将or and 替换为空​

我们可以尝试用双写的方法进行绕过 可以执行​

 后面的就和以前的一样了​

 但是查询过程中字符串中的or和and也会过滤也得改为双写

​or替换为||也可以 and 替换为&&也可以

sql注入WAF绕过

1.白盒绕过
通过源代码分析来进行绕过
2.黑盒绕过
(1) 架构层面绕过waf
a.寻找源网站绕过waf检测
主要针对的是云waf,找到源网站的真实信息,进行绕过(云waf),类似CDN
b.通过同网段绕过waf防护
在一个网段中,可能经过的数据不会经过云waf,从而实现绕过
(2)资源限制角度绕过waf
一般的waf执行需要优先考虑业务优先的原则,所以对于构造较大、超大数据包可能不会进行检测,从而实现绕过waf。
(3)协议层面绕过waf

a.协议未覆盖绕过waf
比如由于业务需要,只对get型进行检测,post型选择忽略
b.参数污染
index?id=1&id=2 waf 可能只对id=1进行检测
(4)规则层面绕过waf
a.sql注释符绕过
union/**/select 我们将union select之间的空格使用注释符进行替换(适用于对union select 之间的空格进行检测的情况)
union/ * dyh%0%32# * /select 我们在注释符中间填充内容

union/ * aaaaaaaabbbbbbbbbbcccccccdddddddddddddd%%%%%#  *  /select 构造较大数据
/*!union select */内联注释   我们使用内联注释 mysql特有
b.空白符绕过
mysql空白符:%09,%0A,%0B,%0D,%20,%0C,%A0,/ * XXX * /
正则空白符:%09,%0A,%0B,%0D,%20
%25其实就是百分号 %25A0就是空白符

c.函数分割符号
将一个函数进行分割concat()
concat%2520(
concat/**/(
concat%250c(
concat%25a0(
d.浮点数词法解释
waf对于id=1可以进行检测,但是对于id=1E0、id=1.0、id=\N可能就无法检测
e.利用error-based进行sql注入
f.mysql特殊语法
g.大小写绕过
如果对关键字 and or union 等进行了过滤,可以考虑大小写混合的方法

Or aNd UniOn
但是很多时候有函数会部分大小写进行过滤,这个时候可以考虑使用双写
h.关键字重复
OORr
i.关键字替换
如果还是无法绕过,可以考虑替换的方法
and-&&       or-||       like可以替换=     <>等价于!=

3.fuzz测试​

less-25a

输入id=1正常​

 查看源码 id没有用'包裹 ​

 

 后面和以前一样
这里同样过滤了or and
也可以用布尔盲注

less-26

输入id=1 正常​

 用单引号闭合报错
用双引号闭合没有报错
说明应该使用单引号闭合  
​  ​

 

 查看源码我们发现 and or 和空格都被过滤掉了​

 我们可以使用url编码绕过​

%09 Tab键(水平)
%0a 新建一行
%0c 新的一页
%0d return 键
%0b Tab键(垂直)
%a0 空格
() 绕过
然后使用报错注入

 

单引号闭合亦可以
后面就一样了 

less-26a

用')闭合​

 这关与26的区别在于,sql语句添加了一个括号,同时在sql语句执行抛出错误后并不在前台页面输出。所有我们排除报错注入。
可以使用时间盲注

less-27

查看源码(这关过滤了注释符 空格 union select)​

 select union 可以用大小写混写来代替 空格可以用%0a代替
注释符绕不过可用 or '1'='1来代替
可以使用union联系查询语句也可以使用报错注入​

 其他查询同以前

less-27a

改为了双引号闭合
没有错误回显不能进行报错注入可以使用时间盲注或者union联合查询
后面同

less-28

闭合为')​

没有错误提示不能使用报错注入可以盲注或者union联合查询
查看源码过滤了select union select+union 空格注释符

 双写绕过 其他同前面​

less-28a

闭合方式变了'')

其他同

less-29

HTTP参数污染(HTTP Parameter Pollution) 攻击者通过在HTTP请求中插入特定的参数来发起攻击,如果Web应用中存在这样的漏洞,可以被攻击者利用来进行客户端或者服务器端的攻击​

 上面已经说过,waf服务器(tomcat)只解析重复参数里面的前者,而真正的web服务器(Apache)只解析重复参数里面的后者,我们可以传入两个id参数,前者合法而后者为我们想注入的内容​

less-32

宽字节注入​

 id=1' 处理1\' 进行编码1%5c%27  带入sql后 id=1' andxxxx 此时无法完成注入
id=1%df'  处理1%df\ ' 进行编码 1%df%5c%27   带入sql后id=1(变为一个不认识的汉字)'+xxxx 此时存在宽字节注入
尝试'   ''闭合发现都被转义  ​

 查看源码​

preg_quote()函数​

 将单引号,双引号转换为了\,\i表示不区分大小写
将字符集设置成了gbk

 数据库是gbk编码所以可以进行宽字节注入
1.尝试%df' 可以看到他变为了汉字

 

 

 

 %aa%5c也可以形成汉字​

less-33

查看源码​

 和上一关一致换了一个函数​

less-34

这一关使用post进行传参登录成功​

 查看源码与上关函数相同​

 尝试直接输%df'登录失败​

抓包看
我们本来传入的数据a%df'
抓包后变为下面那样
可以发现%经过url转化之后为%25
所以我们需要在拦截数据包后将数据进行修改
直接在burpsuite里操作​

后面同less-32​

 

 

 在post中传入的数据:�\ 'union select 1,2#(这里不推荐使用--+ --空格等)​

less-35

查看源码​

 

 因为语句为数字型所以转义符过滤没有用直接进行数字型注入即可
操作同上

less-36

查看源码换了一个函数​

 同时它还设置了gbk编码会存在宽字节注入​

 

 后面的同less-32​

less-37

post进行传参函数与上一关相同​

 和less-34一样​

法1:​

 法2:用burpsuite抓包然后正常注入​

less-38

stacked injections:堆叠注入
从名词含义看就是一堆sql语句(多条)一起执行。而在真实的运用中也是这样的,我们知道在mysql中,主要是命令行中,每一条语句结尾都要加;表示语句结束。这样我们就想到了是不是可以多句一起使用。
单引号闭合

创建一个表(堆叠注入)​

 

 创建成功​

删除表

 

删除成功​

less-39

与38不同的是这关是数字型​

 后面进行与38同样的操作​

 

 

 

less-40

')闭合​

 关闭了报错,但是可以根据页面是否有内容来判断语句是否正确
还是同上关一样
创建表删除表  

 

 

 

less-41

本关是数字型没有报错​

 

 其余的同less-39相同​

less-42

password可注入 username被函数过滤了一些字符​

利用注入创造一个user一样的数据库
可以直接在password框内注入
查看数据库表创建成功注入成功

 也可以利用post修改密码等​

 less-43-45

less-43

闭合方式')

密码处没有过滤在密码处进行堆叠注入​

 后面同上面操作
也可用burpsuite抓包修改
less-44
同42关只是关闭了报错
less-45
同43关只是关闭了报错

less-46

asc是指定列按升序排列,desc是指定列按降序排列。
selcet * from users order by 1 desc;
select * from users order by 1 asc;
Right()     select right(database(),1);
Left()       select left(database(),1);
lines terminated by xxx 以xxx结尾:

按照他的规则输入试一下然后发现是一个排序的表格​

 

 

 排序的表格 order by 后面不能进行奇怪的union注入 但是可以进行desc/asc进行排序​

 这个意思是相当于把第3列降序排列​

我们可以用报错注入​

基于时间的注入​

 有很明显的延时,可以使用时间注入
也可以直接写入文件

less-47-49

less-47
id增添了单引号
闭合方式变为'
其他同46一样
less-48
同46关闭了报错无法使用报错注入
less-49
同47关闭了报错无法使用报错注入

less-50-53

less50

​在本关使用了mysqli_multi_query()函数

 

 在46-49关使用的是mysql_fetch_assoc()函数
对比46这关说明我们可以进行堆叠注入
less-51
和47相比多了可以使用堆叠注入
less-52
同50 关闭了报错
less-53
同51关闭了报错

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值