0x01 越来越难
sql注入-》ssrf
栈利用-》堆利用
古典密码 -》 区块链
容易入门,难以精通
ctf-wiki:社区,新手友好
大量WP,大量OJ
难以提升,需要大量的精力
今年:硬核
内核提权,虚拟机逃逸,浏览器漏洞,1day-oday。。。。。
oxo2 学习方法
学好自己确定方向的基础知识:
web: w3cshool,各类脚本语言
二进制:汇编语言,计组,操作系统,c/c++
密码学:高数,近代,数论,信息安全数学基础
跟进每一周的竞赛:以赛代练
不会做的题目看wp很重要:这是精进的最好方法
当能够做一定的赛题,并且能够做所有的简单题目的时候,考虑进阶
阅读论文,跟进最新的git项目,了解各类开源技术,去进行一定的创新型的思考尝试
去尝试去进行真实的软件的漏洞挖掘工作
oxo3 方法和套路
所有的竞赛模式都有一定的规则
合理利用规则,最大化的获取得分技巧metagame
- 解题模式
- 战争和分享机制
- 攻防模式
要有一定的队员进度分享机制:
- 共享文档
- CTFPAD 共享
AD模式:
赛前准备:提交flag的接口
提交fllag的接口:
赛前准备:流量分析
赛前准备:快速利用框架
从简单题开始,不能死钻一个题目
队伍的水平差距会很大,patch或者exp的对应策略
NPC的妙用,往死里打拿分数,拿到提示流量
使用共享文档、ctfpad
oxo4 web题目初级
四个基本方向: web服务器,web语言以及数据库,操作系统
两种获取flag的方式,信息获取和权限获取
1.web解题的大概框架以及分析思路
LAMP系统:
web系统到底哪一块出了问题:
- 探明web系统的语言、框架,首先满足能访问其正常的功能
- 查看有没用数据库功能,存在数据库一般会有数据库的考点,登陆注册
- 扫描目录,查看有没有源码或者其他提示性文件
- 寻找输入点(包括输入框,文件上传点,xss点等),根据语言特性,进行payload测试,挖掘语言上的漏洞
- 最后在考虑是否是操作系统或者web服务器的漏洞,这块基本都会涉及到webpwn方面的知识
语言
前端语言:
html和css一般不会单独作为考点,但是依然要掌握快速读懂他们的技巧
js考点:
信息获取:js加解密,xss攻击,csp防御机制绕过,csrf等
权限获取:nodejs代码审计,前端vue,跨域
关于每个方向的主要解题方法:
js加解密主要靠积累,对于JJENCODE,AAECODE等方法至少要了解
xss攻击主要思路为寻找题目中BOT访问外界的点,查看有无CSP防御,并且根据题意构造payload。(例子:请输入一个url管理员会进行访问,这种一般flag在管理员的cookie中)
NodeJS审计需要一定的代码审计功底,题目纷繁复杂出题点各异,但是目前的主要形式都是做成游戏的形式然后给出源码对其进行审计
解题思路: 源码审计
找到可以利用的eval函数,构造语句使得eval函数可控;
- 远程安装npm包实现命令执行
后端语言(主要作用就是和服务端进行交互的语言)
- php、python两种语言。
- python同样也可以搭建web服务,但是本身作为一门纯粹的编程语言,是可以独立于apache和nginx等服务器软件存在的,使用自身搭建简易服务器。
- java在实际生活中的使用要比php更加广泛的,但是在ctf-web题目并不常见,直到2019年,各大ctf赛事主攻java框架,目前已经逐渐开始取代php的霸主地位。
php的主要考点:
- Bypass:最常用的考点,主要源于php语言本身书写时的一个漏洞,大家可以搜索php黑魔法,有很多人总结的技巧,这块内容主要依靠同学们自己去积累。
- 竞争条件:多个客户端同时访问一个服务器的功能所带来的非预期结果。
- 反序列化:只要题目给了源码大概是反序列化漏洞,解题思路为寻找起点和终点。
- 文件包含:大部分考点在于LFI,本地文件包含,在实战中,这个也是可以直接getshell的利用点
- SSRF:服务端请求伪造,可以结合其他协议进行利用,达到攻击内网的目的。
- phar利用:经常和LFI结合,同时也经常结合反序列化等考点 ,文件包含 太多协议泛解析
- 文件上传绕过
- 框架考点:著名的框架一定要了解,例如:thinkphp等框架
python的主要考点如下:
- ssti服务端模板注入,这是python在CTF中最重要的考点之一,flask,jianja2模板,可以达到代码执行的
- yml反序列化,pyYAML在解析数据的时候遇到特定格式的时间数据会将其自动转化为python时间对象,类似于反序列化漏洞
- JWT认证绕过,伪造token
- secret key泄露导致命令执行 django框架,一般secret key在源码中
- django,flask,tornado等框架的漏洞
java 的主要考点如下:
- spring框架漏洞,这个是今年比较火的考点,未来只要涉及java就逃不开这个考点
- java反序列化漏洞
- 代码审计
数据库
当前CTF-web题目的另一个考点,数据库软件比较多,有很多包括mysql,sql server,redis,oracle等在内的软件,
这个很多题目都将其作为第一关的考点,flag就在数据库中很常见,注入的方法有以下方式:
- union select正常注入:这种方法可以直接带着数据库查询语句
- bool型盲注:这个注入方式主要在于输入的语句可以从页面中看出结果为True还是False,因此可以使用substr(),length(),ascii(),extractvalue(),updatexml()等函数进行暴力猜接
- 时间盲注:这个方式是针对当页面没有回显的时候,可以使用sql语句中的延迟函数和条件判断来制造页面的延迟响应,来判断sql语句执行的结果,进行暴力猜解
特殊的sql注入:
web服务器
- linux服务器:apache,nginx服务器,具有完整的web服务能力,同时支持多种语言
考点:服务器解析漏洞(文件上传),LD_PRELOAD(禁很多敏感函数,使用自己编译的文件),nginx漏洞(目录泄露) apache栈溢出漏洞
- windows上服务器:IIS
考点为:put发包上传漏洞,IIS远程溢出漏洞等
- 服务器组件漏洞
考点:apache组件提权漏洞,CGI漏洞(公共的网关接口,配合nginx解析漏洞)
- 操作系统的目录遍历
- .so文件逆向分析
- 结合tensorflow进行机器学习考
- 区块链考点
- 结合密码学:CBC翻转攻击,哈希扩展攻击,padding oracle填充攻击
未来的ctf-web展望:
ctf重点还是在PHP,sql注入,前端xss三大项
语言主要是php和python,西南地区的省赛可能多为JS方向
数据库主要为Mysql,重点多盲注,以及延迟注入
国赛多元化,结合密码学以及pwn知识甚至机器学习,语言多为java,go,ruby,python前端考点为nodejs
数据库多为Redis
框架多为spring