前言
DVWA代表Damn Vulnerable Web Application,是一个用于学习和练习Web应用程序漏洞的开源漏洞应用程序。它被设计成一个易于安装和配置的漏洞应用程序,旨在帮助安全专业人员和爱好者了解和熟悉不同类型的Web应用程序漏洞。
DVWA提供了一系列的漏洞场景和练习环境,用户可以通过攻击这些漏洞场景来学习和实践漏洞利用技术。这些漏洞包括常见的安全问题,如SQL注入、跨站脚本攻击(XSS)、文件包含漏洞等。通过攻击这些漏洞,用户可以了解漏洞的原理、影响和防御方法。
DVWA提供了不同的安全级别,从低到高,以满足不同技能水平的用户需求。用户可以根据自己的能力选择适当的安全级别,并进行相应的练习和挑战。
DVWA还提供了一些额外的功能和工具,如Web代理、密码破解、弱密码检测等,以帮助用户更好地理解和处理漏洞问题。
总之,DVWA是一个用于学习和练习Web应用程序漏洞的开源应用程序。它提供了一系列的漏洞场景和练习环境,帮助安全专业人员和爱好者提高对Web应用程序安全的理解和实践能力。通过使用DVWA,用户可以加深对Web应用程序漏洞的认识,并学习如何有效地保护Web应用程序免受攻击
介绍
SQL 注入(SQL Injection)是一种通过将恶意 SQL 代码注入到应用程序的输入中,以操纵数据库执行攻击者指定的操作的攻击方式。盲注(Blind SQL Injection)是 SQL 注入的一种特殊形式,攻击者无法直接获取数据库的错误消息或查询结果,只能通过观察应用程序的行为变化来推断数据库的响应。以下是对盲注的详细介绍,包括其原理、常见技术、攻击手法、防御措施以及实例分析。
一、盲注的原理
在盲注攻击中,攻击者无法直接看到数据库的查询结果,而是通过间接方法推断数据库的响应。通常有两种盲注方式:
-
基于布尔的盲注(Boolean-based Blind SQL Injection):
- 通过发送不同的 SQL 查询,观察应用程序的响应是否变化,推断查询的布尔值。
- 例如,通过发送
AND 1=1
和AND 1=2
查询,如果页面响应不同,可以判断应用程序是否易受攻击。
-
基于时间的盲注(Time-based Blind SQL Injection):
- 通过发送包含延迟函数的 SQL 查询,观察响应时间的变化,推断查询结果。
- 例如,通过发送
IF(condition, SLEEP(5), 0)
查询,如果响应时间增加,可以判断条件是否为真。
二、防御措施
-
使用预编译语句(Prepared Statements):
- 预编译语句使用参数化查询,可以有效防止 SQL 注入。
-
输入验证和输出编码:
- 对用户输入进行严格验证和清理,防止恶意输入。
- 在输出到 HTML、JavaScript 等环境时,进行正确的编码。
-
最小特权原则:
- 数据库用户权限设置为最低,防止通过 SQL 注入获得更高权限。
-
数据库防护机制:
- 使用 Web 应用防火墙(WAF)和数据库防火墙,检测和阻止恶意请求。
-
定期安全审计和测试:
- 定期进行代码审计和渗透测试,发现和修复潜在的 SQL 注入漏洞。
一、Low
打开靶场,先输入正常数据
得到回显
接下来输入 6,显示不存在
由此得到两种回显,接下来就是加引号判断,先输入 1'
再换双引号正常,说明闭合是单引号
上工具爆破数据库
sqlmap -u "http://192.168.134.148:8081/vulnerabilities/sqli_blind/?id=1&Submit=Submit" --cookie "security=low; PHPSESSID=bl6rh2nnmkkk753hs7vd87gjam" --technique B --dbs
二、Medium
这一关做了限制
抓包可以看到是 POST 提交
右键发送到重放器
在重放器中更改参数为 6 显示不存在
接下来测试单引号和双引号
结果都是报错,索性不加引号直接跟上 and 1=1 判断
回显正常,说明咱找到了注入点
三、High
点击链接弹出程序
输入 1 后,两个都有正常回显
输入 6 则报错
开启拦截然后发送到重放模块
发生是框框里面的,因为它没有回显所以对咱来说没用
又有一个 GET 请求
再重放模块中测试得出 GET 请求是网页的,所以咱拿它测试是一样的
加单引号报错
双引号则没报错,所以应该是单引号闭合
这关使用sqlmap主要注意要比low关增加一个参数--level 2,这样才会检测cookie中是否包含注入点(默认--level 1,不检测cookie)
四、结论
盲注是 SQL 注入的一种复杂形式,攻击者无法直接获取查询结果,而是通过观察应用程序的行为变化推断数据库的响应。为了防御盲注攻击,开发者应采取一系列安全措施,包括使用预编译语句、输入验证和输出编码、最小特权原则、数据库防护机制以及定期安全审计和测试。通过这些措施,可以有效防止 SQL 注入攻击,保护应用程序和用户数据的安全。