DVWA(Damn Vulnerable Web Application) 是一个用来进行安全脆弱性鉴定的PHP/MYSQL Web应用。旨在为安全专业人员测试自己的专业技能和工具提供合法的环境,帮助web 开发者更好的理解web应用安全防范。
源码地址
共有十个模块:
- Brute Force (暴力破解)
- Command Injection (命令行注入)
- CSRF(跨站请求伪造)
- File Inclusion (文件包含)
- File Upload (文件上传)
- Insecure CAPTCHA (不安全的验证码)
- SQL Injection (SQL注入)
- SQL Injection (Blind) (SQL盲注)
- XSS (Reflected) (反射型跨站脚本)
- XSS (Stored) (存储型跨站脚本)
Brute Force (暴力破解)
穷举法
Burp Suite 抓包工具
根据返回字节长度去区别是否成功
预防方法: 参数验证、token 、错误次数
SQL Injection (SQL注入)
SQL 注入是攻击者通过注入恶意SQL命令,破坏SQL查询语句的结构,从而达到执行恶意SQL语句的目的。SQL注入漏洞常常会导致整个数据库被‘脱裤’。SQL注入是现在最常见的web漏洞之一。
手工注入过程
1.判断是否存在注入,注入是字符型还是数字型
2.猜解SQL查询语句中的字段数 (一般用order by处理)
3.确定显示的字段顺序
4.获取当前数据库
5.获取数据库中的表
6.获取表中的字段名
7.下载数据
漏洞利用:
1.判断是否存在注入,注入是字符型还是数字型
字符型:输入 x' and 1=1 逻辑正确,返回结果。 x' and 1=2 逻辑错误,返回空。
数字型:输入 x and 1=1 逻辑正确,返回结果。 x and 1=2 逻辑错误,返回空。
2.猜解SQL查询语句中的字段数
使用order by +数字,来判断查询出的字段数(这里也可以通过输入union select 1,2,3...来猜解字段数)
3.确定显示的字段顺序
输入1' union select 1,2 #, 确定前端显示字段位置
4.获取当前数据库
输入1' union select 1,database() #
5.获取数据库中的表
输入1' union select 1,group_concat(table_name) from information_schema.tables where table_schema=database() #
6.获取表中的字段名
输入1' union select 1,group_concat(column_name) from information_schema.columns where table_name='users' #
7.下载数据
输入1' union select group_concat(user_id,first_name,last_name),group_concat(password) from users #
预防方法: 参数验证/过滤、PDO技术(划清代码与数据界限)
SQL Injection (Blind) (SQL盲注)
SQL盲注,与一般注入的区别在于,一般的注入攻击者可以直接从页面上看到注入语句的执行结果,而盲注时攻击者通常是无法从显示页面上获取执行结果,甚至连注入语句是否执行都无从得知,因此盲注的难度要比一般注入高。
手工盲注的过程,就像和机器人聊天,这个机器人知道的很多,但只会回答“是” 或“不是”,因此需要询问它这样的问题,例如“数据库名字的第一个字母是不是a啊?”,通过这种机械询问,最终获得想要的数据。
盲注分为基于布尔的盲注、基于时间的盲注、以及基于报错的盲注。
步骤和一般注入相似:
1.判断是否存在注入,注入是字符型还是数字型
2.猜解当前数据库
3.猜解数据库中的表
4.猜解表中的字段名
5.猜解数据
核心解法:
首先判断要猜解对象长度,然后根据ascii对照表,进行判断查找
例如:猜解数据库名,输入1' and length(database())=4 #, 显示存在与否,判断数据库长度。 输入1' and ascii(substr(database(),1,1))>97 #,显示存在于否,判断出第一个字母(二分法查找)
sqlmap 工具
文档地址
关键参数
--batch 不需要询问用户,自动选择默认选项
-u URL[要攻击的地址]
--cookie 攻击需要登录后的地址,写到cookie
--dbs 列出所有数据库
--tables 某数据库所有表
--columns 某表所有列
-D 选择数据库
-T 选择数据表
-C 选择数据列
网友评论