sql注入(low),dvwa环境
本文章是我自己学习时的一点笔记(刚学一个月),如果解释有错误请指出。
1.我们先选择级别为low,点击Submit
然后点击SQL Injection 开始我们的实验
2.在文本框当中输入1,我们可以看到在url当中出现id=1的字样。
sql注入有数字型,字符型,搜索型,布尔型(后两种完全不懂)
因为url中是id所以我们暂时当作是数字型
接下来我们在url和文本框中修改都是可以的。(只是在url要转换编码,我不熟暂时不讲,容易丢人)
2.然后我们试一下and or 大法,因为1=1必为真,结果我们发现没有任何变化,而且显示ID:1 and 1=1/1 or 1=1,这说明我们的猜想可能出错了
3.我们输入1’尝试一下
发现报错了,那么我们肯定是这个引号让这个网页出了问题,所以这里应该是字符型(我们去看下源码)
点击View Source
这里我们可以看到网页请求了id并且直接与前面的字符串连接了,没做任何的处理
$query = "SELECT first_name, last_name FROM users WHERE user_id = ‘1’ ';
运行的代码就会变成这样,后面的单引号没有闭合,所以报错了。(所以猜的没问题)
4.所以我们尝试下字符型的注入(肯定可以的),1’ and ‘1’=‘1/1’ or ‘1’='1
这里不是没成功,是因为and 需要两个条件同时成立才能回显
而这里是or 1=1 必为真,所以前面id=?都不要紧
5.接下来我们可以看一下字段数可以使用order by或者union select 查询
(1)我们先尝试下order by
我们可以看出2回显正常,3就出错了,所以我们可以判断字段是为2
(2)我们尝试下union select
uninon select null,null…… 或者union select 1,2,3……
因为union需要字段类型也一样,所以建议从null开始。(我要偷懒,所以直接1,2,3)
我们可以看到1’ union select 1,2#有回显,所以字段是为2。大家可以尝试下1或者3会发现报错了。
6.我们使用uninon 查看下user(),database(),version(),得到用户,数据库名,数据库版本
可以看到用户是root,库名是dvwa,数据库版本是5.7.26
7.
我们使用sql语句查询出数据库存在的库(数据库版本要大于5,才会有information_schema库)
1' union select 1,schema_name from information_schema.schemata#
解释下这句话。union select联表查询 schema_name(字段) 来自iformation_schema中的schemata表
8.查询dvwa数据库中users的字段(数据库不熟就不过多阐述了)
这里获得了很多字段有一个字段是password,一看就挺敏感的,我们去看一下。
看到了用户名和使用md5加密的密码,知道的太多了。我们再去看一下没加密的密码是什么。
以5f4dcc3b5aa765d61d8327deb882cf99为例
去xmd5在线解密一下,到https://www.35rx.com/.中去解密
解密后发现明文的密码是password.
这篇文章到这里就结束了,下面是我做实验的时候发现的一点错误,给出了解决方法。sql注入漏洞的修补方法就不在这说了,以后会讲。
使用union查询数据库名存在哪些数据库的时候报错了,错误提示->(Illegal mix of collations for operation UNION),后来查了下别人的文章看到了
其实这是一个排序规则的问题,就是规则不一样出错了,因为使用的是union。
解决方法:
第一步点击dvwa中guestbaook和users,是他们的排序规则一致,我这里使用的规则是utf8_general_ci。
第二步点击information_schema中的schemata,里面的排序规则也要一样
不出意外,问题是解决了(我的是可以的,你们要是不行别问我,我数据库也不熟)