CTF从入门到放弃...

近俩年来经常被推去参加各种比赛,其中最频繁的一项就是CTF夺旗赛,作为一名万金油选手基本只能在理论题上得得分,一到实操部分都是鸭蛋一颗。虽说自己不是这个专业赛道的,但还是心有不甘,因此在网上找了套教程进行学习,边学习边整理学习笔记,希望有机会能够多拿下几个flag吧……

CTF


什么是CTF

CTF的全称Capture The Flag,直译为“夺旗赛”,起源于1996年举办的DEF CON全球黑客大会,最早是交流安全技术的重要途径。随着时间的推移,CTF竞赛逐渐演变成为信息安全技术竞赛的一种形式,发展成为全球范围网络安全圈的流行比赛,但其比赛形式与内容依然拥有浓厚的黑客精神和黑客文化。近年来,CTF竞赛活动蓬勃发展,国内外各类高质量的CTF竞赛层出不穷,CTF已经成为了学习锻炼信息安全技术,展现安全能力和水平的绝佳平台。

CTF的目标是什么?

CTF参赛队伍的目标是获取尽可能多的flag(旗帜)。参赛队伍需要通过解决信息安全的技术问题来获取flag。

flag可能来自于一台远端的服务器,一个复杂的软件,也可能隐藏在一段通过密码算法或协议加密的数据,或是一组网络流量及音频视频文件中。选手需要综合利用自己掌握的安全技术,并辅以快速学习新知识,通过获取服务器权限,分析并破解软件或是设计解密算法等不限定途径来获取flag。

CTF的比赛形式

解题模式

通常为在线比赛,目前大多数国内外CTF比赛的主流形式,选手自由组队参赛(在线比赛人数一般不做限制)。题目通常在比赛过程中陆续放出。解出一道题目后,提交题目对应的fag即可得分,比赛结束时分高者胜。

攻防模式

通常为现场比赛,多数CTF决赛的比赛形式,选手自由组队参赛,但通常队伍人数会受到限制(3~8人不等)。相比于解题模式,时间更短,比赛中更注重临场反应和解题速度,需要能够快速攻击目标主机并获取主机的权限,考察团队多方面的综合安全能力。

CTF解题模式的题目类型

web安全

通过浏览器访问题目服务器上的网站,寻找网站漏洞(SQL注入,XSS,文件上传,包含漏洞,XXE,SSRF,命令执行,代码审计等),利用网站漏洞获得服务器的部分或全部权限,拿到flag

逆向工程(Reverse)

题目就是一个软件,但通常没有软件的源代码;需要利用工具对软件进行反编译甚至反汇编,从而理解软件内部逻辑和原理,找出与flag计算相关的算法并破解这个算法,获取flag

漏洞挖掘与漏洞利用(PWN,EXPLOIT)

访问一个本地或远程的二进制服务程序,通过逆向工程找出程序中存在的漏洞,并利用程序中的漏洞获取远程服务器的部分或全部权限,拿到flag

密码学(Crypto)

分析题目中的密码算法与协议,利用算法或协议的弱点来计算密钥或对密文进行解密,从而获取flag

调査取证(Misc)

利用隐写术等保护技术将信息隐藏在图像、音频、视频、压缩包中,或者信息就在一段内存镜像或网络流量中,尝试将隐藏的信息恢复出来即可获得flag

移动安全(Mobile)

对安卓和IOS系统的理解,逆向工程等知识。

CTF竞赛工具准备


  1. 虚拟化软件(VMware Workstation、VirtualBox、Parallers Desktop)
  2. 环境的安装
    a. Python环境的安装(Python2.7或Python3.5二选一)
    b. Java环境安装
    c. PHP环境安装(PhpStudy
  3. 浏览器及插件
    a. Firefox/Chrome
    b. hackbar插件
  4. 编辑器
    a. Nodepad++(https://notepad-plus-plus.org/downloads/
    b. Sublime
    c. 010Editor(https://www.sweetscape.com/010editor/
  5. 虚拟机
    a. Kali Linux
    b. Windows(Windows7 SP1)
  6. CTF工具包
  7. Brupsuite

杂项的基本解题思路


文件操作与隐写

文件类型识别

file命令

  • 当文件没有后缀名或者有后缀名而无法正常打开时,根据识别出的文件类型来修改后缀名即可正常打开文件。
  • 使用场景:不知道后缀名,无法打开文件
  • 命令格式:file <filename>

winhex程序

  • 通过winhex程序可以查看文件头类型,根据文件头类型判断出文件类型
  • 使用场景:Windows下通过文件头信息判断文件类型。常见的文件头类型如下表所示
文件类型 文件头
JPEG(jpg) FFD8FFE1
PNG(png) 89504E47
GIF(gif) 47494638
TIFF(tif) 49492A00
Windows Bitmap(bmp) 424DC001
ZIP Archive(zip) 504B0304
RAR Archive(rar) 52617221
Adobe Photoshop(psd) 38425053
Rich Text Format(rtf) 7B5C727466
XML(xml) 3C3F786D6C
HTML(html) 68746D6C3E
Adobe Acrobat(pdf) 255044462D312E
Wave(wav) 57415645
pcap(pcap) 4D3C2B1A

文件头残缺/错误

  • 通常文件无法正常打开有两种情况,一种是文件头部残缺,另一种是文件头部字段错误。针对文件头部残缺的情况,使用winhex程序添加相应的文件头,针对头部字段错误,可以找一个相同类型的文件进行替换。
  • 使用场景:文件头部残缺或文件头部字段错误无法打开正常文件。

文件分离操作

Binwalk工具

  • Binwalk是Linux下用来分析和分离文件的工具,可以快速分辨文件是否由多个文件合并而成,并将文件进行分离。如果分离成功会在目标文件同目录下生成一个形如_文件名.extracted的文件目录,目录中有分离后的文件。
  • Binwalk用法如下:
1
2
3
4
# 分析文件
binwalk <filename>
# 分离文件
binwalk -e <filename>

说明
Binwalk在分离文件的时候,如果分离出的文件带有压缩包,Binwalk会自动帮忙解压

foremost

  • 如果Binwalk无法正确分离出文件,可以使用foremost,将目标文件复制到kali中,成功执行后,会在目标文件的文件目录下生成我们设置的目录,目录中会按文件类型分离出文件。
  • foremost用法如下:
1
foremost <filename> -o <输出目录名>

dd

  • 当文件自动分离出错或者因为其他原因无法自动分离时,可以使用dd实现文件手动分离
  • dd用法如下:
1
2
3
4
5
6
dd if=源文件 of=目标文件 bs=1 count=1 skip=1
# if=file 输入文件名,缺省为标准输入
# of=file 输出文件名,缺省为标准输出
# bs=1 设置每次读写块的大小,单位默认为byte
# count=1 设置读取的块的数量
# skip=1 设置从输入文件开头跳过多少个块后再开始复制
  • 使用举例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 假设有一个文件1.txt,文件内容为1234567890abcdefghij
cat > 1.txt << EOF
1234567890abcdefghij
EOF

# 只取前面12345的部分,以下两种方式都可以
dd if=1.txt of=2.txt bs=5 count=1
dd if=1.txt of=2.txt bs=1 count=5

# 跳过12345,取后面的部分
dd if=1.txt of=3.txt bs=5 count=4 skip=1

# 只取abcde的部分
dd if=1.txt of=4.txt bs=1 count=5 skip=10

winhex程序

说明
除了使用dd外,还可以使用winhex程序实现文件手动分离,将目标文件拖入winhex中,找到要分离的部分,点击复制即可;使用010Editor也可以实现。

  • 使用场景:Windows下利用winhex程序对文件进行手动分离

010Editor

  • 使用010Editor将16进制字符文件导入保存在一个文件

文件合并操作

cat和md5sum

  • 使用场景:Linux下将多个文件批量合并成一个文件并进行完整性校验
  • cat命令格式:cat 要合并的文件(用空格隔开) > 合并后的文件
  • md5sum命令格式:md5sum 文件名
  • 用法如下:
1
2
3
4
# 将file01~file03合并成file
cat file01 file02 file03 > file
# 计算file的MD5值
md5sum file

copy和certutil

  • 使用场景:Windows下将多个文件批量合并成一个文件并进行完整性校验
  • copy命令格式:copy /B 要合并的文件(用+连接) > 合并后的文件
  • certutil命令格式:certutil -hashfile 文件名 md5
  • 用法如下:
1
2
3
4
# 将file01~file03合并成file
copy /B file01+file02+file03 file
# 计算file的MD5值
certutil -hashfile file md5

图片隐写术

待更新……

压缩文件处理

待更新……

流量取证技术

待更新……

安全导航


推荐书籍


  • 《白帽子讲Web安全》
  • 《web前端黑客技术揭秘》
  • 《web安全深度剖析》
  • 《Metaspolit渗透测试魔鬼训练营》
  • 《黑客攻防技术宝典Web实战篇》
  • 《SOL注入攻击与防御》
  • 《XSS跨站脚本攻击剖析与防御》
  • 《互联网企业安全高级指南》

培训视频