vlambda博客
学习文章列表

记一次简单绕过waf设备的sql注入经历(适合新手)

我国正在大力开展教育信息化建设,近年来“互联网+教育”发展迅猛,目前我国高校信息化工程取得良好成效。信息化建设不断成熟的同时,也面临着巨大的安全威胁,高校正成为网络安全问题的重灾区。

今天小编将带领大家实战一次高校类型官网简单的绕过waf防护设备的sql注入实例(本次测试环境为自己内部搭建的模拟环境,下载安装的是网上通用的高校模板类型网站,并在网站系统安装了软件版waf)。

以下是一次sql注入漏洞的挖掘过程:

1. SQL注入原理:

SQL注入,一般指web应用程序对用户输入数据的合法性没有校验或过滤不严谨,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询的目的,从而进一步得到想要的数据信息。总的来说就是,攻击者通过系统正常的输入数据的功能,构造恶意数据,而系统又未作任何的校验,直接信任了用户输入的数据,使得恶意数据改变原本的SQL逻辑或者执行了额外的SQL脚本,从而造成了SQL注入攻击。

2. 危害:

    1、使得系统业务功能异常或者失效

    2、恶意的破坏,比如修改数据删数据删表等恶意破坏;

    3、探查数据库类型结构,获取数据库敏感数据,造成数据泄露;

4、修改数据库配置,控制服务器,进行恶意活动等

3. 防护:

1、使用PreparedStatement,sql语句中的参数使用“?”占位符替换;

2、白名单验证参数是否符合所期望的类型、长度、大小、格式。名单查找是否存在已知的不良字符,字符串或模式;

3、将特殊字符进行转码,转码后拼接sql语句;

4. 漏洞复现过程:

第一步,也是最重要的一步---访问首页:

 


在页面上随意点击,得到如下页面,观察url发现极有可能存在sql注入,并且注入点可能为参数‘caa_id’;

 

记一次简单绕过waf设备的sql注入经历(适合新手)


尝试使用单引号进行测试,输入一个单引号后,返回页面报500,如下图:

 

记一次简单绕过waf设备的sql注入经历(适合新手)



输入两个单引号后,返回页面报200,虽然还是回显出现错误,但是不影响!

 

记一次简单绕过waf设备的sql注入经历(适合新手)


确定是SQL注入,接下来进入我们的payload构造环节,

首先尝试我们最基础的构造参数:poc :’and ‘1’=’1

 

记一次简单绕过waf设备的sql注入经历(适合新手)


哦豁!果然没这么简单,网站居然安装了云waf。

不出我所料,门户网站怎么可能这么容易搞定?

既然and被拦截了,可以尝试使用or  xor,如下:

or:-19’ or ‘1’=’1--+

 

记一次简单绕过waf设备的sql注入经历(适合新手)


or也被过滤了,最后还有xor可以尝试一下,如下:

xor: -19’xor ‘1’=’2--+

xor是异或,若两边的值相同(都为真或都为假)时,结果为真;反之,结果为假。

 

记一次简单绕过waf设备的sql注入经历(适合新手)


 

xor并没有被拦截,但是当把‘1=1’改成‘1=2’时,再次访问页面并没有变化;将前面的-19改成19,再将‘1=1’改成‘1=2,页面也未发生变化。 这个方向,我暂时是没有办法了。(希望有大佬可以指点)

接下来,掏出我的秘密武器,构造如下:

-exp(709)- ‘-exp(710)-’

exp()是一个报错函数,exp(709)是一个分界点;当传递一个大于709的值时,函数exp()就会引起一个溢出错误,所以在这我们可以利用页面报错和不报错这两个差异化来盲注。

 

记一次简单绕过waf设备的sql注入经历(适合新手)

记一次简单绕过waf设备的sql注入经历(适合新手)

 

果然 ,exp()是可行的!

接下来就是轮子构造环节,尝试:

 %27-if(mid(user(),1,1)='a',exp(709),exp(710))-%27

 

记一次简单绕过waf设备的sql注入经历(适合新手)


再次访问页面,被拦截了。

尝试 %27-if(1=1,exp(709),exp(710))-%27

 

记一次简单绕过waf设备的sql注入经历(适合新手)


if’没有被拦截,可能是mid()或者user()被拦截了。

Mid(s,n,len)返回从n位置开始查找的,长度为len的子串。

 

记一次简单绕过waf设备的sql注入经历(适合新手)


mid也没有被拦截,那么就是user()被拦截了,可以尝试使用current_user来替换user()

记一次简单绕过waf设备的sql注入经历(适合新手)

记一次简单绕过waf设备的sql注入经历(适合新手)

 

 

 

 

页面出现明显变化,

轮子已经构造完成,

%27-if(mid(current_user,1,1)=%27a%27,exp(709),exp(710))-%27

当前payload的含义就是:若当前用户名从左数的第一个字符为‘a’,则输出exp(709);反之,输出exp(710)。

打开渗透神器-burpsuite,开始爆破当前数据库用户名。

选中第一个‘1’和‘a’使用集束炸弹爆破。

集束炸弹:为如下图的攻击模式。

 

记一次简单绕过waf设备的sql注入经历(适合新手)


 

 

 

得到当前数据库用户名为‘root@127.0.0.1

点到为止!


这次教育src挖掘经历虽然简单,但是这也是一次绕过waf的经历;总的来说,绕waf就是不断地尝试使用不同的函数、方式去替换已经被过滤的规则;世界之大,无奇不有,各式各样的waf也在等着我们去绕过,一起加油!

 

                                                 作者  gnoy

(该文章仅为一次经历分享,适合渗透入门阅读)