本文主要是介绍“百度杯”CTF比赛 九月场 SQL,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
先放下参考链接:大方子的WP
还有自己以前写的mysql注入 —— union
平台那边的题目是这样的
很明确说是SQL注入,然后打开容器
很明显是要对id
进行注入, 先不着急注入, 把id值变换看看
表面看上去只有两条数据的样子
那就先试下常用操作, 在1
后面加个'
没有反应, 应该是出错或者屏蔽报错,
再加个#
看看
依旧没反应,
再去掉'
从而可以推测出查询语句应该是select xxx from xxx where xx = $id
把id
改为'1'
,
正常输出, 说明是这样
接着, 测试下关键词是否被屏蔽
从而得知or
和and
是被屏蔽的
使用/**/绕过无效
可以使用<>
绕过
改为||
和&&
正常, 并且使用||
爆出了两条记录, 说明没有截取数据输出
接下来使用order by
摸下数据长度, 因为or
被屏蔽了, 所以要改用o<>rder
发现只有3个字段
然后使用union
联合查询, 确认可注入点
另外,select也被屏蔽了:1 union se<>lect 1, 2, 3
然后就可以发现2
是注入点 ( 这里其实不怎么明白为什么, 有机会再研究下原理 )
把2
改为datebase()
, 得到数据库名为sqli
再通过information_schema
数据库中的tables
表获得表列表(这里的or又不会被屏蔽, 很迷):
1 union se<>lect 1, table_name, 3 from information_schema.tables where table_schema = 'sqli'
发现有两张表, 不知道怎么确定实际的表, 只好都确认一下了.
再通过information_schema
数据库的columns
表获得字段列表
1 union se<>lect 1, column_name, 3 from information_schema.columns where table_name = 'info'
- 其实最好再跟上
&& table_schema = database()
特殊字段名:flAg_T5ZNdrm
特殊字段名:flag_9c861b688330
先试试读取info
表的flAg_T5ZNdrm
1 union se<>lect 1, flAg_T5ZNdrm, 3 from info
得到疑似答案的记录:flag{1deda6b3-433e-425c-9251-4257d9c75da2}
再试试users
的flag_9c861b688330
看上去是空记录, 再试试读取记录数
不知道为什么就是读不出来, 不知道有没有大佬知道为什么.
我试了下info表是没问题的
有点怀疑是不是我没指定实际的库, 但也不应该才对, 有机会再研究下吧=-=
最后, 拿着前面的flag就可以交了.
这篇关于“百度杯”CTF比赛 九月场 SQL的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!