1.sqli-labs第一关
1.1判断是否存在sql注入
提示我们输入数字值的ID作为参数,我们输入?id=1
此时页面返回出id=1时的数据,接下来我们判断sql语句是否是拼接,且是字符型还是数字型。
根据我们测试后,根据图片结果可知是字符型且存在sql注入漏洞。
1.2 联合注入
首先我们要知道表格有几列,根据order by函数来测试
如果报错未找到就是超过列数,如下图
如果显示正常就是没有超出列数。如下图
然后我们要确定回显点在哪(?id=-1'union select 1,2,3--+)
由图可知,回显点只有2和3,1是不回显的
再确定回显点后,我们就可以获取当前数据库的一些信息了
比如库名和版本号?id=-1'union select 1,database(),version()--+
2.sqli-labs第二关
和第一关是一样,提示我们输入数字值的ID作为参数,我们输入?id=1
现在开始进行判断
显示报错语法错误,证明不是字符型,接下来我们尝试数字型
根据尝试我们发现sql语句是数字型注入,那接下来的步骤和我们第一关是一样的
3.sqli-labs第三关
首先我们按照第一关第二关的方法判断它是什么注入类型的
根据尝试我们发现他既不是数字型也不是我们常用的 ' 和 " 的字符型
接了下来我们再尝试一些用的比较少的带% )等字符型注入
经过尝试我们发现他是 ') 的字符型注入,接下来的步骤和我们上面两关是一样的
**************************************************************************************************************
补充:
1.查出网站的数据库里面的所有表名: http://127.0.0.1/Less-1/?id=-1'union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='security' --+
2.查出users表里面的所有列: http://127.0.0.1/Less-1/?id=-1' union select 1,group_concat(column_name),3 from information_schema.columns where table_schema='security' and table_name='users' --+
3.查询表中所有的数据: http://127.0.0.1/Less-1/?id=-1' union select 1,2,group_concat(id,username,password) from users --+
**************************************************************************************************************
4.sqli-labs第四关
首先我们按照前面的方法判断它是什么注入类型的
根据尝试我们发现他是 ")字符类型注入,接下来的步骤和我们上面两关是一样的
5.sqli-labs第五关
首先我们还是按照前面的方法判断它是什么注入类型的
此时我们发现不管我们怎么尝试不是语句报错就是只只显示You are in......
既然有报错那我们就使用报错注入,下面以 ' 为例
单引号引起报错 说明页面有报错语句的位置
尝试闭合 闭合成功
http://127.0.0.1/Less-5/?id=1%27and%20updatexml(1,1,1)--+使用报错函数,报错函数里面三个参数,写三个1占位置,这里我们可以操控的是第二个参数的位置
所以第二个参数的位置换成concat()函数,这个函数也有两个参数,写两个1占位置,如下
这里,我们可以操控的地方也是第二个参数的位置,把第二个参数的位置换成(),里面写我们的子查询语句,成功查出数据库名,后面查什么在子查询括号里面查就可以了
例如查该数据库中的表名
显示超过一行报错,我们给table_name 加上group_concat成一个集合
如图所示我们就注入成功啦!
6.sqli-labs第六关
首先我们还是老样子,按照前面的方法判断它是什么注入类型的,以及闭合方式
因为页面只有ture和flase两种情况,所以接下来我们使用布尔盲注来获取信息
首先使用length()函数判断数据库长度
如上图利用函数结合 < > = 号来进行判断数据库长度,最终可以确定数据库名长度为8
然后使用ASCII码来确定数据库字符:用ascii码截取数据库的第一位字符 判断第一位字符的ascii码是否大于某个数值,如果页面显示正常,说明数据库第一位字符ascii码大于这个数值
例如115
得到ascii码后我们找一个ascii码十进制在线转译网站来进行转译得到115对应的字母是S
以此类推,最终可确定数据库名为 security
利用此方法我们还可以进行进行表名的查询等等。
7.sqli-labs第七关
第七关我们也采用布尔盲注的方式,步骤和第六关相同如下(笔者认为可以还可以使用报错注入)
8.sqli-labs第八关
这里第八关我同样使用的布尔盲注
9.sqli-labs第九关
这一关我们使用DNSlog外带注⼊
首先我们打开网址dnslog.cn,随机获取一个三级域名
进入第九关和之前的步骤一样,但是此时我们要利用dnslog.cn记录下我们的DNS请求
参考:深度剖析DNSLog注入原理&本地实例测试_dnslog.cn-CSDN博客
同时利用联合查询在第九关带上我们索要查询的信息来访问zjl2mo.dnslog.cn这个子域名
这里我们点击就可以可以看到我们所查询的信息啦
**************************************************************************************************************
注意:我们需要先在phpstudy_pro\Extensions\MySQL5.7.26\my.ini 文件中如下图位置添加语句
secure_file_priv = ''
否则dnslog.cn无法正常显示记录
**************************************************************************************************************
10.sqli-labs第十关
这一关我们使用时间盲注
使用条件:1.页面没有回显位置 2.页面不显示数据库的报错信息 3.页面只响应一种结果
我们利用if判断语句来判断闭合方式
如图页面有5秒的响应时长证明闭合成功,反之则闭合失败
接下来使用length()函数确定数据库长度
利用我们设置的响应时长来判断语句是否正确进而判断数据库长度
同理按照此法便可以得到我们所需要的数据啦!
11.sqli-labs第十一关
进入第11关我们发现这一关与前面十关不一样,多了两个输入框
这一关我们在输入框内进行注入类型的判断
如图可得知该关卡为字符型注入,下面我们进行数据库信息的获取
首先输入数据库内没有的用户名和密码,使其报错,然后使用联合查询把数据库名接到网页回显的地方
查得数据库名为security,接下来查询表
然后产看表内具体内容
这样就完成啦!
12.sqli-labs第十二关
进入第十二关后我们发现和第十一关一样
同理开始判断它的闭合方式 ")
接下来进行数据库信息的获取,步骤和第十一关完全相同啦!
13.sqli-labs第十三关
还是一样先判断闭合方式,这关的闭合方式为 ')
但是此时网页并没有返回任何信息,所以这关我们使用布尔盲注
步骤以及代码同第六关相同
14.sqli-labs第十四关
经过尝试第十四关可以报错,这里我们可以使用报错注入
闭合方式为 “
接下来和十一关和第十二关的步骤一模一样
15.sqli-labs第十五关
判断注入类型,发现网页没有回显,所以这关使用布尔盲注,接下来和第十三关步骤想通啦!