从零开始学习CTF——CTF是什么
引言:
从2019年10月开始接触CTF,学习了sql注入、文件包含等web知识点,但都是只知道知识点却实用不上,后来在刷CTF题才发现知识点的使用方法,知道在哪里使用,哪里容易出漏洞,可是在挖src漏洞中还是很迷漫,学了快一年还是没挖过一条src漏洞。这一系列是把自己学习的CTF的过程详细写出来,方便大家学习时可以参考。
一、CTF简介
简介
中文一般译作夺旗赛(对大部分新手也可以叫签到赛),在网络安全领域中指的是网络安全技术人员之间进行技术竞技的一种比赛形式
CTF起源于1996年DEFCON全球黑客大会,以代替之前黑客们通过互相发起真实攻击进行技术比拼的方式
竞赛模式
- 解题模式:
在解题模式CTF赛制中,参赛队伍可以通过互联网或者现场网络参与,这种模式的CTF竞赛与ACM编程竞赛、信息学奥赛比较类似,以解决网络安全技术挑战题目的分值和时间来排名,通常用于在线选拔赛。题目主要包含逆向、漏洞挖掘与利用、Web渗透、密码、取证、隐写、安全编程等类别。 - 攻防模式:
在攻防模式CTF赛制中,参赛队伍在网络空间互相进行攻击和防守,挖掘网络服务漏洞并攻击对手服务来得分,修补自身服务漏洞进行防御来避免丢分。攻防模式CTF赛制可以实时通过得分反映出比赛情况,最终也以得分直接分出胜负,是一种竞争激烈,具有很强观赏性和高度透明性的网络安全赛制。在这种赛制中,不仅仅是比参赛队员的智力和技术,也比体力(因为比赛一般都会持续48小时及以上),同时也比团队之间的分工配合与合作。 - 混合模式:
结合了解题模式与攻防模式的CTF赛制,比如参赛队伍通过解题可以获取一些初始分数,然后通过攻防对抗进行得分增减的零和游戏,最终以得分高低分出胜负。采用混合模式CTF赛制的典型代表如iCTF国际CTF竞赛。
总结
一般大型比赛大都是i春秋承办的,以小组的形式比赛,分预选赛和总决赛。
- 预选赛
都是线上比赛,比赛形式几乎都是解题模式。进入官方提供的网站,登录账号密码后会到一个页面,题目按类别分类(后续会讲有什么类别),点击后提供题目链接、题目信息、题目提示和flag(答案)提交,提交后会得到分数。其中,一血、二血、三血拿的分数比较高,后面答该题的队伍拿的分数就一样了,答题的队伍越少,分数就越多,然后按分数排名,确定进入决赛的队伍。
如:一道签到题,开始定的分为500,当有队伍提交正确的flag,那么分数就会下降,下降到470/450这样的,人数越多,分数下降幅度越大。而一血二血三血获得分数会高于后续答题正确的
- 总决赛
几乎都是线下赛,进行混合模式,因为攻防模式的题目容易出现易守难攻、比速度节题这种学习不到知识的问题,也因为这样,大部分的总决赛都是以逆向为主,很容易变成逆行大赛。那么像web选手去干吗呢?喝茶打杂去吧!刚学没多久,又比较懒,关于总决赛的都是在网上获取信息的,想了解详细的参考
第五届XCTF总决赛的赛制以及新型攻防赛题之探索
二、题目分类
题目一般为6大类:
1.Web(网络安全)
- Web是CTF竞赛中主要的题型之一,题目涉及到许多常见的WEB漏洞,诸如XSS、文件包含、代码执行、上传漏洞、SQL注入。也有一些简单的关于网络基础知识的考察,例如返回包、TCP-IP、数据包内容和构造。可以说题目环境比较接近真实环境。
- 所需知识点:PHP、Python、SQL(以mysql为主)、TCP-IP、linux命令、html、javascript等。
2.MISC(安全杂项)
- MISC是大型CTF竞赛的题目难度很大,是一个可以拉开分数的类型,而在小型竞赛和题库中却难度不大。题目涉及隐写术、流量分析、电子取证、人肉搜索、数据分析、大数据统计等等,覆盖面比较广,主要考查参赛选手的各种基础综合知识。
- 所需知识点:熟悉使用众多隐写工具、流量审查工具、了解编码等。
3.Crypto(密码学)
- 主要包括古典密码学和现代密码学两部分内容,古典密码学趣味性强,种类繁多,现代密码学安全性高,对算法理解的要求较高。
- 所需知识点:矩阵、数论、古典密码学、算法等。
4.Reverse(逆向)
- 题目涉及到软件逆向、破解技术等,要求有较强的反汇编、反编译扎实功底。主要考查参赛选手的逆向分析能力。
- 所需知识点:汇编语言、加密与解密、常见反编译工具。
5.PWN(二进制安全)
- PWN在黑客俚语中代表着攻破,取得权限,在CTF比赛中它代表着溢出类的题目,其中常见类型溢出漏洞有栈溢出、堆溢出。主要考察参数选手对漏洞的利用能力。
- 所需知识点:C,OD+IDA,数据结构,操作系统。
6.Mobile(移动安全)
- 主要介绍了安卓逆向中的常用工具和主要题型,安卓逆向常常需要一定的安卓开发知识,iOS 逆向题目在 CTF 竞赛中较少出现,因此不作过多介绍。
7.(区块链)
-近来多个CTF比赛均出现区块链题目,区块链应用越来越成为热门应用,在未来区块链会成为一个重点。因为没有接触过,这里不详细讲。
三、怎么入门
入门这一块是我们这些新手的一道大大的门槛,很多人都是不知道怎么入门。
个人入门步骤
1.确定方向
一般分为两个方向
A 方向:PWN+Reverse+Crypto 随机搭配
B 方向:Web+Misc 组合
Misc 所有人都可以做
入门知识:
都要学的内容:Windows 基础、Linux 基础、计算机组成原理、操作系统原理、网络协议分析
A 方向:IDA 工具使用(fs 插件)、逆向工程、密码学、缓冲区溢出等
B 方向:Web 安全、网络安全、内网渗透、数据库安全等前10的安全漏洞
2.怎么刷题
刷题非常重要,很多人在其他ctf入门教程中都可以看到刷题是第一步,也是进阶的重要一步,所以刷题非常重要,可是刷题也是需要有技巧的。
例题1:bugku中的web2
打开题目发现一堆笑脸疯狂向你怼来,而且速度越来越快,那么这一题怎么做呢?
这一题考察的是信息收集。在Chrome(谷歌浏览器)点击f12,就可以打开控制台,可以看见其中有一条
<!--flag KEY{Web-2-bugKssNNikls9100}-->
这一句是什么意思,就是把答案告诉你了,你可以把KEY{Web-2-bugKssNNikls9100}
提交到输入框就可以获得分数了。
总结
提交完flag后要做什么呢?这时你就要看这一题考察的是什么?控制台,那么控制台又是什么呢?要是知道就做下一题,如果不知道那么我就谷歌(什么是网页控制台),也可以百度,然后找到一篇知乎的回答Chrome 按下F12之后出现的功能是做什么用的?
在记住后看这一知识点难不难,自己能不能掌握,如果怕忘记,那你就记笔记,可以用印象笔记、有道云笔记,推荐使用印象笔记,因为它有多级分层,也没必要买会员,它送的那点容量只要不放视频或则图片不要放太多,一个月是用不到30m的。
再来一题了解一下
例题2:bugku中的计算机
打开题目可以看见是个加法,18+91=109,可是我却只能输入一个1,这是为什么呢?
打开控制台看了一下,发现一个很特殊属性maxlength,那么我就谷歌一下maxlength是什么东西。
查询结果发现,maxlength是一个input元素中的用来限制字符数的,那我们就尅改一下,把他改成3、4之类的数值,只要能容纳我的答案就行了。输入后就可以获得flag了。
总结
这一题考察的是HTML中input元素的maxlength属性,这时你就可以去把HTML学习一下了,可以试着怎么写网站,哪怕是最普通的也可以,学完以后做到关于HTML相关知识点的时候你就会很快找到哪里有问题。
3.以练促赛,以赛养练
选择一场已经存在Writeup的比赛或者参加一场最新的CTF比赛。
总结解题过程,最好能写一写博客之类的。
4.推荐平台
极力推荐bugku,其他的后面慢慢来,先把bugku做好,然后在做攻防世界,你就会跨入进阶的门槛了。
5.工具收集
不要先去下载别人推荐的工具,反正你是不会去学的,一定要在解题的过程中寻找,那样你回加深印象,也能直接总结一套经验出来。
四、编程
很多人会纠结到底要不要深入编程。不要太深入,差不多就可以了,对照文档就可以写出程序就差不多了且能看得懂就好了,因为每个语言都是学不完的,一直在更新,如果过分专注于一个语言,安全知识就挺容易漏下的。或则是针对一些热门的编程进行深入,比如PHP、python、java之类的,其中PHP可以说是必学项目,如果可以的话,把这门语言学透,那么代码审计一点压力都没有。
上面都是个人想法,怎么选都要靠自己决定,要不要深入、深入哪一门都是问题,一定要考虑清楚再下手,别等下学了一半就改变方向,这是学习的大忌,因为你学其它的也会这样,除非是你发现这个不是很适合你的发展。
五、一些不错的资源
整理了一下题型,因为篇幅有限,有需要的可以评论区评论1,或者关注后自取哦~
总结
刷题刷题刷题最重要的是刷题,,不会就看别人的Writeup,不要怕做不出,刷题一开始是很无聊的,但这是学习的过程,如果不做就永远不会。
相关文章:

从零开始学习CTF——CTF是什么
引言: 从2019年10月开始接触CTF,学习了sql注入、文件包含等web知识点,但都是只知道知识点却实用不上,后来在刷CTF题才发现知识点的使用方法,知道在哪里使用,哪里容易出漏洞,可是在挖src漏洞中还…...

为Android构建现代应用——主体结构
创建Screents和ViewModels 在前面的章节中,我们已经分析了OrderNow项目的理论概念和我们将赋予的组织。 在本章中,我们将开始实现初始结构和模板,这将联接每一个应用程序的部分。 首先将添加以下带有各自视图模型的主屏幕: •…...

【shell脚本】shell脚本之日志切割(进阶实战三)
恭喜你,找到宝藏博主了,这里会分享shell的学习整过程。 shell 对于运维来说是必备技能之一,它可以提高很多运维重复工作,提高效率。 shell的专栏,我会详细地讲解shell的基础和使用,以及一些比较常用的she…...

VMLogin和虚拟机里的浏览器有什么区别?
虚拟机(Virtual Machine)指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。 指纹浏览器,也称防关联浏览器。 简单来说,就是允许在同一台电设备上操作和管理多个平台、多个账号,账…...

unimrcp server的session资源分配与回收
unimrcp使用APR的内存池管理内存,因此,处理函数中一般都会传递一个pool指针,需要内存时,就从pool里分配一块,一般也不需要关心内存的释放。因为,一路呼叫关联一个session,一个session对应一个po…...
【图论】三种中心性 —— 特征向量、katz 和 PageRank
维基百科:在图论和网络分析中,中心性指标为图中相应网络位置的节点分配排名或数值。中心性这一概念最初起源于社交网络分析,因此很多衡量中心性的术语也反映了其社会学背景。 不同中心性指标对 “重要” 的衡量方式不同,因此适用于…...

[sqoop]将hive查询后的数据导入到MySQL
一、知识点 export:将Hive的表导入到mysql叫导出 搜了很多,发现sqoop在hive导出到mysql时 1)不支持where参数对数据进行过滤。 2)不支持指定hive表的方式导出,只能指定Hive目录进行导出。 二、操作 1、在MySQL中建表 creat…...

Linux df、du命令
df:查看文件系统硬盘使用情况 df 命令,用于显示 Linux 系统中各文件系统的硬盘使用情况,包括文件系统所在硬盘分区的总容量、已使用的容量、剩余容量等。 df 命令的基本格式为: [rootlocalhost ~]# df [选项] [目录或文件名] df…...

java版+免费商城搭建+小程序商城免费搭建+Spring Cloud + Spring Boot + MybatisPlus + 前后端分离 + 二次开发
J2EE企业分布式微服务云快速开发架构 Spring CloudSpring Boot2MybatisOauth2ElementUI 前后端分离 1. 鸿鹄Cloud架构清单 2. Commonservice(通用服务) 通用服务:对spring Cloud组件的使用&封装,是一套完整的针对于分布式微…...

软件设计师学习第一章
计算机组成与体系结构(6分) 内容概述 数据的表示 进制转换 R 进制转十进制使用按权展开法,其具体操作方式为:将 R 进制数的每一位数值用 Rk 形示,即幂的底数是 R ,指数为 k , k 与该位和小数点…...

蓝桥杯单片机第十一届国赛 真题+代码
iic.c /* # I2C代码片段说明1. 本文件夹中提供的驱动代码供参赛选手完成程序设计参考。2. 参赛选手可以自行编写相关代码或以该代码为基础,根据所选单片机类型、运行速度和试题中对单片机时钟频率的要求,进行代码调试和修改。 */ #include <STC1…...

IDC报告背后:大模型时代,重新理解AI公有云
大模型之于AI公有云的意义,在于大模型可以改变过去“手工作坊定制算法”的高成本模式,转向“工厂模式”,只需要微调和精调,就可以形成针对性的场景算法。 作者|葛覃 出品|产业家 一年前,依然有不少云计算从业者思…...

UNH-IOL Reservation 一致性测试用例【7】- 清除Reservation
Reservation 系列导航 UNH-IOL Reservation 一致性测试用例【1】- Reservation Report 命令验证 UNH-IOL Reservation 一致性测试用例【2】- Reservation注册 UNH-IOL Reservation 一致性测试用例【3】- 取消注册 UNH-IOL Reservation 一致性测试用例【4】- Reservation Acqui…...

Python 生成随机图片验证码
使用Python生成图片验证码 Python 生成随机图片验证码安装pillow包pillow包生成图片基本用法生成图片验证码 Python 生成随机图片验证码 在写一个Web项目的时候一般要写登录操作,而为了安全起见,现在的登录功能都会加上输入图片验证码这一功能ÿ…...

一些有趣的 js 功能函数
一些有趣的 js 功能函数 数组生成数组打乱数组数组简单数据去重数组唯一值数据去重多数组取交集查找最大值索引查找最小值索引找到最接近的数值压缩多个数组(拉链函数)矩阵交换行和列 数字转换进制转换 正则手机号格式化去除多余空格 web重新加载当前页面…...

摄像头m2dock(MAIX-II DOCK)
官方文档地址 https://wiki.sipeed.com/soft/maixpy3/zh/index.html 一、软件准备 1 烧录镜像软件 2 镜像 当前最近版本镜像文件 3 SDFormatter 4 Maixpy IDE 二、SD卡准备 1 格式化SD卡(用SDFormatter) 2 烧录 3 弹出,插入开发板中 出现…...

SpringBoot 如何优雅的进行全局异常处理
在SpringBoot的开发中,为了提高程序运行的鲁棒性,我们经常需要对各种程序异常进行处理,但是如果在每个出异常的地方进行单独处理的话,这会引入大量业务不相关的异常处理代码,增加了程序的耦合,同时未来想改…...

OSPF路由协议(红茶三杯CCNA)
链路状态路由协议 OSPF(开放式最短路径优先)Open Shortest Path First 是一种链路状态路由协议,无路由循环(全局拓扑),RFC2328 “开放”意味着非私有的 管理型距离:110 OSPF采用SPF算法计算到达…...

redis中使用bloomfilter判断元素是否存在
一 bloomfiler的作用 1.1 bloomfilter的作用 由一个初始值为0的bit数组组成,和多个hash函数构成,用来判断集合中是否存在某个元素。 一个很长的二进制数组(00000000)一系列随机hash算法映射函数。主要用于判断一个元素是否存在…...

互联网医院系统源码实现:打造现代化医疗服务平台
摘要 本文将介绍一个基于Python的简化版互联网医院系统的源码实现,主要包含用户注册与登录、医生信息管理、在线预约挂号、在线问诊与咨询、电子病历管理、在线支付与结算等功能。该源码实现仅为示例,实际开发中需要考虑更多的业务逻辑和安全性。 1. …...

每天100w次登陆请求, 8G 内存该如何设置JVM参数?
一、新系统上线如何规划容量? 1.套路总结 任何新的业务系统在上线以前都需要去估算服务器配置和JVM的内存参数,这个容量与资源规划并不仅仅是系统架构师的随意估算的,需要根据系统所在业务场景去估算,推断出来一个系统运行模型&…...

Fiddler Everywhere(TTP调试抓包工具) for Mac苹果电脑版
Fiddler Everywhere for Mac版是Mac电脑上的一款跨平台的HTTP调试抓包工具,Fiddler Everywhere for Mac能够记录客户端与服务器之间的所有HTTP(S)通信,支持对包进行监视、分析、设置断点、甚至修改请求/响应数据等操作。 适用于任…...

Paragon NTFS2023最新版Mac读写NTFS磁盘工具
Paragon NTFS for Mac是Mac平台上一款非常优秀的读写工具,可以在Mac OS X中完全读写、修改、访问NTFS硬盘、U盘等外接设备的文件。这款软件最大的亮点简书可以让我们读写 NTFS 分区,因为在Mac OS X 系统上,默认状态下我们只能读取NTFS 分区&a…...

vs2013 32位 编译的 dll,重新用vs2022 64位编译,所遇问题记录
目录 一、vs2013 32 DLL 转 VS2022 64 DLL 所遇问题 1、 LNK2038: 检测到“_MSC_VER”的不匹配项: 值“1800”不匹配值“1900” 2、原先VS2013 现在 VS2022 导致的vsnprintf 重定义问题 3、 无法解析的外部符号 __vsnwprintf_s 4、无法解析的外部符号__imp__CertFreeC…...

Linux_CentOS_7.9部署Docker以及镜像加速配置等实操验证全过程手册
前言:实操之前大家应该熟悉一个新的名词DevOps 俗称开发即运维、新一代开发工程师(Development和Operations的组合词)是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保障&…...

强引用和弱引用
什么是弱引用和强引用 强引用: JavaScript 中强引用:对象的引用在 JavaScript 中是强引用,也就是将一个引用对象通过变量或常量保存时,那么这个变量或常量就是强引用,这个对象就不会被回收。 弱引用: JavaS…...

tp6 实现excel 导入功能
在项目根目录安装 composer require phpoffice/phpspreadsheet 我们看一下郊果图,如下 点击导入excel表格数据 出现弹窗选择文件,控制台打开输出文档内容 前端layui代码 <form id"uploadForm" class"form-horizontal" encty…...

【C++】类和对象(中篇)
类和对象 类的六大默认成员函数一、构造函数1. 构造函数的概念2. 构造函数的特性 二、析构函数1. 析构函数的概念2. 析构函数的特性 三、拷贝构造函数1. 拷贝构造函数的概念2. 拷贝构造函数的特征 四、赋值运算符重载1. 运算符重载2. 赋值运算符重载 五、取地址及 const 取地址…...

大数据处理架构详解:Lambda架构、Kappa架构、流批一体、Dataflow模型、实时数仓
前言 本文隶属于专栏《大数据理论体系》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢! 本专栏目录结构和参考文献请见大数据理论体系 姊妹篇 《分布式数据模型详解:OldSQL &…...

双指针解决n数之和问题
1. 两数之和 1. 两数之和 将时间复杂度降到O(n); class Solution {// 双指针public int[] twoSum(int[] nums, int target) {int nnums.length;int l0;while(l<n){int rn-1;// 找到第一个可能nums[l]nums[r]target的位置while(r>l){if(nums[l]nums[r]targe…...