1、CTF基础知识,by Expl0it 2017-04,内容提要,第一块内容:CTF简介第二块内容:MISC第三块内容:WEB第四块内容:Reverse第五块内容:PWN,CTF(Capture The flag),题目内容种类繁杂,覆盖面广难度高,考察全面。主要包括MISC,WEB,RE, PWN 四个大类常规内容包含: 程序逆向,漏洞挖掘,Web渗透,加密解密,数据隐藏,远程利用,各类编程 等等比赛中出现核心题目,分数的风水岭:程序逆向,漏洞挖掘(包括web漏洞),远程利用MISC的考核内容,由于覆盖面大,谁都可以做,坑点较多,第一部分:MISC,首先了解一下CTF中会用哪些加密方式,Bas
2、e64 最常见,也是最容易解开的。可以使用火狐的hackbar插件解密,由于base64加密算法的特殊,一般加密后的字符串会已=或者=结尾。栅栏密码把要加密的明文按几个分成一组,然后每一组的第一个字连起来,形成一段无规律的话。如有个ctf中出现的一道题目:一只小羊跳过了栅栏,两只小样跳过了栅栏,一坨小羊跳过了栅栏.tn c0afsiwal kes,hwit1r g,npt ttessfuua u hmqik e m, n huiouosarwCniibecesnren,首先了解一下CTF中会用哪些加密方式,Unicode u670bu53cbuff0cu4f60u542cu8bf4u8fc7u
3、5b89u5229u5417uff1fu000du000a在线解密:http:/ Brainfuck+.+.+.+.+.+.-.-.+.https:/www.splitbrain.org/services/ook 需要翻墙,首先了解一下CTF中会用哪些加密方式,摩尔斯电码由点和杠构成密文样例:- - .-. . .在线解密地址:http:/ jsfuck orjother这种编码也可能在web题中出现。主要把javascript代码转化成()【】!+ 字符在线编码地址:http:/ XX DD AG FF XG FD XG DD DG GA XF FA,提示:密文解密的话先要知道加密的方法。,
4、解开:flagxidianctf,ASCII编码、Base64编码、Shellcode编码(hex编码)、MorseCode摩尔斯电码、Url编码。换位加密:ROT-5,ROT-13,给出的字符串相对真实的字符串的偏移。在线工具:http:/ 普通难度:binwalk大法好深渊难度:就是脑洞题了。一题简单的图片题,常见题目,数据包分析也是MISC中常见的题目。一般是会给出一个黑客攻击的中捕获的数据包,进行分析。考察wireshare和网络分析的能力。出了数据包分析,日志分析也是MISC里面喜欢出的题目,第二块:web,工具准备,Firefox (hackbar,firebug,tamper d
5、ata , User Agent Switcher )Burpsuite & fiddlePython.,常见套路,花式玩弄php(各种php黑魔法,主要坑点)花式注入(注入反而是常规题)花式伪造(注意302跳转,修改请求头相应头X-Forwarded-For/X-Client-IP/X-Real-IP/CDN-Src-IP、花式改UA,花式藏FLAG ),PHP黑魔法1,if(isset($_GETname)andisset($_GETpassword)if($_GETname=$_GETpassword)printYour password can not be your name.;el
6、seif(Null=NULL)die(Flag: .$flag);elseprintInvalid password;,PHP黑魔法2,if(isset($_GETpassword)if(strcmp($_GETpassword,$flag)=0)die(Flag: .$flag);elseprintInvalid password;,PHP黑魔法3,PHP黑魔法4,240610708QNKCDZO,PHP黑魔法5,function noother_says_correct($number)$one = ord(1);$nine = ord(9);/ Check all the input c
7、haracters!for ($i = 0; $i = $one) ,0xDEADC0DE,第三部分:逆向,逆向工程(RE),汇编语言调试工具反汇编工具Windows API编程,汇编语言是基于PC的cpu的,推荐书籍:RE4B (逆向工程入门指南),MSDN,推荐调试器Ollydbg,OD指令restartCtrl+F2step IntoF7step overF8Execute till Re F9Goto Ctrl + GComment;BreakPointF2RunF9,虽然OD很久之前就停止了更新。但它仍然是最容易上手的windows调试器,推荐反汇编IDA,推荐理由:友好的界面和F5
8、伪代码功能。,IA-32寄存器,寄存器是CPU内部用来存放数据的小型存储区域。,上图是通用寄存器结构图,还有一个最重要的EIP寄存器没画出来,写在开始逆向前,1)CTF逆向题的种类Keyfile型:程序读取一个key文件,通过文件内容进行算法分析得到验证码Serial或Name/Serial型:类似注册破解一样,一般是对输入做一系列的运算,然后和正确的Seral比较。追码的话定位到最后比较处就ok,但是如果算法比较。那就要完整的逆向。体力活2)窗口类断点技巧CreateWindow创建的窗口,向上找RegisterClass注册窗口类,这个API中有窗口的回调函数。DialogBoxParam
9、函数创建的窗口,参数中寻找窗口回调函数。 WN DPROC堆栈跟踪,逆向分析1,通过正确的输入来获取key.Key不一定需要保存在内存中,但很多出题人为了降低难度一般会让key出现在内存中。但有时候为了挖坑,key是不会出现在内存中的。,逆向分析2,逆向分析,关键点在于静态的分析,拿到程序前,不是立刻加载到OD中。应该先运行一遍,看运行效果,PEID分析程序的编译语言和有无壳。前期的分析有时候会事半功倍,逆向分析3、4,会在程序中出现的key如何断在关键位置?,逆向分析5,修复程序进行逆向分析然后找到key这个就是考察逆向的基本功了。Tip: 逆向工程的逆是对正向算法的逆。不是对程序执行流程的
10、逆向。对程序执行流程一定要正向的搞清楚。,第4部分:PWN,PWN漏洞利用,漏洞利用的内容很多:栈溢出(常见)堆溢出格式化字符串漏洞 %p %x %n释放重利用 UFA。,讲讲堆栈溢出,确认溢出输入确认保护措施Shellcode生成 www.exploit-输入shellcode 测试。over,常见的windows保护机制绕过,GS(stack cookie)一种针对堆栈溢出的攻击缓解技术 dword 开启/GS选项的编译器通过在函数头部与尾部增加代码块的方式来检测堆栈溢出。当函数执行时,这段代码会在堆栈本地变量与函数返回地址之间保存一个随机值(即stack cookies)。函数返回时会检
11、查堆栈中存放的随机值是否被修改,如果被修改则意味着发生了堆栈溢出,从而终止程序运行,阻止恶意代码执行。绕过方法:覆盖SEH链表,GS没有对堆栈上的链表进行保护。可以在函数返回前,覆盖SEH链表来获取进程的执行权限。,常见的windows保护机制绕过,SafeSEHSafeSEH是针对SHE异常处理的攻击缓解技术,使用(/SAFESEH)链接选项生成的可执行文件,会在头部包含一个记录所有有效异常处理函数的SafeSEH table,当异常发生时ntdll.dll中的异常分发处理函数会验证堆栈上的Exception Handler Record指向SafeSEH table中一个有效的异常处理函数
12、。如果异常分发处理函数检测出Exception Handler Record被攻击者改写并指向了其它地方,则会终止程序的运行。绕过方法:把SHE指向堆,常见的windows保护机制绕过,DEP&ASLR DEP绕过方法是通过构造ROP构造出可以执行的内存块。ASLR的绕过:找到没有开启ASLR的模块,使用其中的指令作为ROP。这两个相辅相成,导致windows7以后的漏洞利用变得门槛较高。结合起来的绕过方法:堆喷到固定地址,并且该地址ROP后可以执行。难度不低。,PWN习题,有代表性又没有坑点的一道题:Tip:溢出漏洞Shellcode坏字符处理。如何输入shellcode.比较好。,第5部分:最后,总结,附属配备时刻清醒的头脑和谐安静的团队作战策略+规划若干干粮+水果+零食,CTF比的不是智力,是脑力CTF比的不是新奇,是经验CTF比的不是猥琐,是思维CTF比的不是奇葩,是全局,谢谢!,