0 我与ctf
初次听说ctf是在大二转专业之后,社团宣传,包括acm社团,机器人之类的,当时没兴趣。
大二下学期,网络安全课,考试分为实验+理论,实验就是ctf题目,大佬们出题,像是一种强制的感觉,逼着做。后来发现,有一些简单题目可以做出来,自己提交flag的感觉很爽(flag大部分都是py交易得到的,刚开始啥也不会)。除此之外再没有接触。
大三上学期,密码学课,考试分为实验+理论,实验是ctf的crypto项目,密码学实验课,编程实现了单表多表代换,aes,des,rsa,rc4,md5等经典密码算法。这个时候其实已经感觉蛮有意思的,于是找了两个朋友,参加了校赛预选赛。除此之外再没有接触。
大三下学期,安全程序设计课程,选题二选一(web,二进制),web题目大概是带漏洞的博客系统及漏洞修补,二进制题目是Linux (x86) Exploit 开发系列教程(SploitFun)1~12 合集。我选择了二进制。通过问大佬,菜鸡之间互相分享调试过程,发帖求助,百度,谷歌等各种各样的方式,完成了大部分的内容,这个大概用了不到一个月。同时参加了校赛决赛,拿了二等奖,当时啥也做,web,crypto,reverse,misc,pwn很乱,会啥做啥。除此之外再没有接触。
考研结束后,感觉很空虚,就决定打ctf消磨时光,有一整段的时间,大概1个月都在研究,选择了方向是reverse,略难,断断续续的一直在研究,直到现在,没事了就玩一会,调试会程序,有事了先紧着要紧的。
1 reverse学习
1.1 初学
刚开始学习,视频+实践+自己总结
考研结束看的ctf视频是这个:看雪 2016 CTF题解视频
实践:根据视频步骤一步一步调试。
总结:三天时间做了一个个人博客,方法就是不断的百度,就做出来了,然后在博客上写总结文章。
个人感觉题目难度相当大,大概两天看一道题,实在不会就算了,换下一题。总的来说,有效果,工具会用了,理清了一些思路,常用的方法都记下来了,题目有的还是不太会做。
看书,《加密与解密》,《汇编语言》王爽,学习理论。
1.2 深入
有一定基础之后,考研完寒假回去,参加了吾爱破解的小比赛,第一次自己做出了reverse的入门题目。然后就就去疯狂参加比赛。
大四下学期复试结束后,毕设难度一般,闲暇时间都在参加比赛或者刷题。
刷题网站:
https://adworld.xctf.org.cn/task,攻防世界
http://reversing.kr/challenge.php
找比赛网站
https://ctftime.org/,ctftime
然后5月24日的时候,自己一个人组队参加“强网杯”,排名300整(5000多支队伍,前200名有证书,差一道题,快哭了-_-,哈哈哈)
2 crypto学习
2.1 初学
理论+实践(5,5开)
理论很重要,相当重要,理论主要包括上课学习的一些知识,例如《信息安全数学基础》,《密码学》。论文的阅读,有一些题目的解法,需要去查阅学术论文,然后实现加密或者解密。
实践更重要,python编程,c,c++,solidty(智能合约),go。还有比赛经验积累下的常用的密码学库。
我常用的python密码学库主要有
crypto
gmpy2
binascii
libnum
c++库主要有
crypto++
openssl
区块链技术兴起之后出现了一种新的题型,智能合约,通过对合约的分析,调用合约中的一些函数,达到目的。整个过程类似于对智能合约的攻击。
2.2 刷题
边刷题,边总结,总结思路,提高编程能力,
https://adworld.xctf.org.cn/task,攻防世界
3. pwn学习
3.1 初学
pwn的学习主要通过,Linux (x86) Exploit 开发系列教程(SploitFun)1~12 合集
大部分题型给出了一个Linux下的可执行文件,然后通过分析程序的执行流程,函数功能,找到漏洞点,然后劫持程序流,最终拿到机器的权限。
方法主要是动态调试,可以使用IDA远程调试,也可以使用gdb调试,一些gdb插件很有用,比如
peda
pwndbg
gef
pwn主要使用的python模块是pwntools和zio,用于创建远程连接,并发送消息。
3.2 刷题
推荐平台
https://pwnable.tw/
https://adworld.xctf.org.cn/task,攻防世界
4 其他推荐
-
bilibili的一个up主:白帽子-枯灯boy
有很多的关于视频,关于安全的啥方面的都有,宝藏up主
-
谷歌,百度等各大搜索引擎
有问题,先百度
-
github,gitlab,开源中国等代码仓库
(end)