视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
CTF大赛相关知识点
2025-10-03 15:21:15 责编:小OO
文档
网络攻防大赛相关知识点

1 背景

2014年全国电子设计大赛——信息安全技术专题邀请赛第一次设立“信息安全动态演练类”题目,按照官方网站的介绍,“信息安全动态演练类题目主要是信息系统的脆弱性分析,参赛形式是在封闭网络环境(含虚拟机)中的现场比赛,参赛内容涉及网络安全,统一命题。”作为信息安全技术竞赛中最高级别的比赛,信息安全技术专题邀请赛第一次设立了攻防类的题目,网络攻防实战竞赛终于丢掉了“禁区”的帽子,获得官方的支持。

在国际下,相关的网络攻防实现比赛已经举办了很多年,最著名的就是DefCon的CTF大赛,国内在这一方面较为落后,也是在最近的几年开始重视并持续追赶,目前国内比较有名的战队有清华大学的蓝莲花战队,的HitCon战队,以及上海交通大学的0ops战队等。

除了信息安全技术专题邀请赛,全国各大安全公司及其他高校也举办了类似的比赛,今年比较著名的比赛有百度的BCTF比赛,以及第二届360杯全国大学生网络攻防大赛。

2 网络攻防大赛的特点

与其他的信息安全技术比赛相比,网络攻防大赛的最大特点是技术的实战性,参赛选手会在相对封闭的环境中攻击并渗透进入对方的主机系统,同时也要对自己的主机系统不断地进行安全防护。

就目前的比赛形式来看,题型设置基本上分为两种。

(1)相同计算环境下的夺旗赛。参赛选手在相同并隔离的计算环境下,分析目标系统中的各种安全漏洞,利用漏洞或渗透主机等获取主机内隐藏的Flag。

(2)对攻实战。同夺旗赛类似,参赛选手的计算环境相同,但是并不隔离,其攻击目标变为对方选手的系统。因此,除了获取对方系统的隐藏Flag之外,还需要不断给自己的系统打补丁以增强安全防护,防止被对手渗透等。

3 网络攻防大赛的考察知识点

就以往的比赛来看,比赛题目大致分为以下5类:密码分析类、Web安全类、二进制程序的逆向破解类、数字取证类、漏洞挖掘及漏洞利用类。

(1)Web安全

Web安全涉及的内容非常丰富,就典型的Web服务来说,其安全问题可能来自于Web服务器、数据库服务器、以及Web程序本身等。所以,学习和了解Web安全的内容也需要循序渐进。

1)首先学习Web服务器的配置。了解典型的Web服务器如何构建的,典型的Web服务器包括微软的IIS、Apache、Tomcat等。

2)Web程序的开发离不开脚本语言。如何构建一个静态的Web网站?HTML的开发规则是什么?如何利用HTML设计简单网页?

在建设完成静态Web网站之后,感兴趣的同学可以重点学习动态Web程序的开发,典型的开发语言包括ASP、ASP.NET、JSP,PHP等。

3)典型的Web服务离不开数据库的支持,那么典型的数据库有哪些?如何应用?Access、MySql、MS SqlServer、Oracle等典型数据库的安装与配置等是怎么样的?什么是SQL,典型的新闻发布网站是如何设计的?

4)在了解了上述Web知识之后,我们就可以进入Web安全的世界,比如,什么是SQL注入,什么是XSS注入,什么是CSRF,这些攻击能够发生的原因是什么?如何防范?网络上的那么多Web网站,能否自己发现一个上述漏洞?(注意,我们要遵循黑客原则,以发现漏洞并增强安全防护为目的,坚决遏制非法的网络攻击。)

5)此外,Web安全还有Web服务器、数据库服务器等本身的漏洞,比如,什么是弱口令,服务器为了方便管理会经常开启33端口,这个端口有什么用?如何能够猜解出管理员的弱口令,同时服务器又开放了33端口,会产生什么用的后果?

6)典型的数据库,如MS SqlServer有哪些经常被利用的漏洞?其默认登陆账户是什么?MySql的默认开放端口是什么?HTTP协议的默认开放端口是什么?

(2)扫描器及协议分析

1)怎么样获取服务器的开放端口?怎么样扫描目标主机中存在的漏洞?Nmap有哪些功能?如何使用?

2)在协议分析方面,WireShark有什么用?能够用来发起什么攻击?举例而言,常规的Web程序中,用户名和密码等这些敏感信息一般会通过POST数据包发送给Web服务器,在这样的过程中,能否用WireShark进行拦截并窃取敏感信息?

3)在协议分析这一块,如果不了解协议格式,也是很难进行的。这个时候需要去了解常用的协议格式,比如HTTP协议,TCP协议,UDP协议等。HTTP协议中的POST方式和GET方式有什么区别?TCP和UDP有什么区别?大家常用的腾讯QQ通信是使用的哪种协议?

(3)二进制程序的逆向分析

1)二进制程序的逆向分析,一个重要的应用方向是软件破解,在这个方向上,一个重要的网站是看雪:http://www.pediy.com,这是一个大批破解高手和爱好者云集的地方。

2)在逆向分析方面,典型的工具有IDA Pro和OllyDbg。OllyDbg一款使用起来比较简单的调试工具。当然还有很多其他优秀的调试工具,可见http://www.pediy.com/tools.htm。

3)看雪上面有很多CrackMe,如果掌握了OllyDbg的使用,可以尝试去看雪找一些简单的CrackMe来实际破解。试试看吧。

(4)漏洞挖掘

漏洞挖掘和利用一直以来都是信息安全的焦点和热点。想要入门,首先要了解缓冲区溢出漏洞的发生原理。在学习并掌握了C语言之后,了解缓冲区溢出的发生原理并不困难,什么是整形溢出、堆溢出、栈溢出?什么是格式化字符串溢出?C语言中的哪些函数或者操作容易导致缓冲区溢出?

在了解了缓冲区溢出原理之后,需要再进一步了解缓冲区溢出的防护方法,比如,如何在使用高级语言的时候进行边界检查?

在漏洞挖掘方面,给定一段源代码,能够通过审计该段高级语言,检查出是否有安全漏洞?

如果没有源代码,只有二进制程序,如何发现其中的安全漏洞?这个时候IDA Pro和OllyDbg又一次登场了。使用IDA Pro的hex-ray插件,可以把二进制程序反汇编成类C语言,在反汇编得到的类C语言上,可以看到那些容易导致缓冲区溢出的脆弱性函数,随后可通过设置断点等方式,通过动态调试的方法来检查程序是否含有漏洞,更详细的内容请见我的代码分析文档。

(5)漏洞利用

在已获得漏洞之后,使用该漏洞能够发起哪些攻击?这时候需要了解的内容有Stack Smashing,shellcode等,这方面的内容,我推荐大家看王清编写的0day安全这本书,讲解的很详细。

通过0day这本书了解清楚基本概念之后,大家会发现0day的内容稍微有点陈旧,很多内容已经没有及时更新了。这个时候,我推荐大家去David Brumley的主页上去找他面向研究生的Software Security课程PPT,这是我目前见到的关于软件安全领域的最好的一套PPT,没有之一。

顺便介绍一下David Brumley,著名女黑Dawn Song的弟子,博士毕业后直接CMU留校工作,目前在软件漏洞的静态分析、动态分析及逆向方面处于世界领先。

另外,David Brumley还是PPP战队的领队和指导老师,PPP战队是CTF大赛的传奇战队,多次蝉联Defcon CTF的冠军。

附个人主页http://www.ece.cmu.edu/~dbrumley/index.html

另外,既然软件漏洞一直以来都是安全焦点,那么操作系统和编译器等也不是吃干饭的,它们已经设计了哪些用于防范软件漏洞的措施?什么是编译器的gs选项?什么是“栈不可执行”保护(也成为DEP),什么是地址空间随机化ASLR,有什么用。

当然,所谓道高一尺魔高一丈,攻击者也设计出了新的漏洞利用攻击方法以绕过操作系统或编译器的保护。高级漏洞利用技巧都有哪些?SEH劫持的原理是什么?Windows最新版的操作系统中又采用了哪些措施来防止SHE劫持?什么是面向返回的编程攻击(Return oriented programming),也称之为ROP。相似的攻击还有Ret2libc, JOP, COP等?

在漏洞利用的防护方面,防火墙和IDS等也是隔离并检查shellcode的关键利器,其作用是通过过滤网络报文,分析shellcode的哈希值或者其它关键字等,判断网络报文中是否疑似含有shellcode,并把疑似报文丢弃等。在这种情况下,攻击需要解决的问题就是shellcode的免杀,如何对shellcode进行变形,如何给shellcode加壳?

【强调】漏洞利用绕过技巧

DEP、ASLR、ROP、SEH劫持、SEHOP、safeSEH、HeapSpray、cookie/GS选择项。

0day书上基本都有,去http://www.exploit-db.com/搜索一下,可以下载到一些小的程序来调一调

DEP:

即DataExecutionPrevention,不允许执行“数据”。在ARM上,数据和代码分开存放,不存在此问题。X AMD或者

i系列Intel处理器上,微软使用NX技术,记录内存页的属性,即是否是代码。如果一个页是数据,EIP指向了它,

系统会自动报错,从而阻止的非法数据被执行。

SEH:

当函数发生异常的时候,系统会首先尝试使用离异常最近的SEH结构体来处理异常。异常处理程序可以选择返回继续执行刚才出错的指令、处理异常或者不处理异常。如果不处理,则系统继续沿着调用轨迹向上寻找其他SEH结构,直到异常被处理(处理程序不是选择"不处理异常")。如果所有的用户定义的异常都不选择处理,则最终会达到进程异常处理的SEH,被称为UEF,即Unhandle Exception Filter。该SEH指向的处理程序会弹出错误提示框,然后结束程序。当然,最终的异常处理程序UEF也可以通过编程来修改。

在异常处理程序开始前,系统还会进行一次unwind操作,遍历从异常点开始的所有__finally代码块,并依次执行,执行完毕后才开始异常处理程序的执行。如果__finally块出现了异常,则上一个异常被丢弃,系统开始处理当前异常。

因为SEH结构放在栈中,因此可以通过栈溢出修改SEH中的异常处理程序指针指向shellcode,再人为引发异常,从而系统开始调用shellcode来处理异常。

VEH:

即Vectored Exception Handler。VEH是进程级的用户异常处理程序,可以由用户注册多个函数,这些函数将被连接成双向链表存入堆中。异常发生时,系统首先通知调试器,如果调试器不处理,则进入VEH的处理,然后才是SEH的处理。

HeapSpray:

首先构造1M的基本块,其中包含首部信息和数据,数据部分是nop和shellcode。这样的一个基本块中大部分都是nop指令。再将这样的基本块组成的数组存入堆中,只要能够从nop处开始执行,就一定会执行到shellcode部分。

ASLR:

Address Space Layout Randomization,通过将堆、栈等其实地址进行一定范围内的随机化,加大缓冲区溢出攻击的难度。

SEHOP/SafeSEH

SEH Overwrite Protection SEH覆盖保护。该防护措施是指系统在使用栈上的SEH时首先验证其完整性。SEHOP是系统自带功能,不需要应用程序配置,只需要用户将其开启即可。

判断准则是:

1、SEH结构都必须在栈上;

2、最后一个SEH结构也必须在栈上;

3、所有的SEH结构都必须是4字节对齐的;

4、SEH结构中的handle(处理函数地址)必须不在栈上;

5、最后一个SEH结构的handle必须是ntdll!FinalExceptionHandler函数;

6、最后一个SEH结构的next seh指针必须为特定值0xFFFFFFFF;

可以看到,第四点要求使通过SEH跳转到栈上的shellcode不再可能。而且上述准则保证了SEH链的完整性,因而如果要通过覆盖修改单个SEH,几乎不可能。可行的想法是伪造整个SEH链,当然,这十分困难。

cookie/GS:

修改原来的栈结构:

Stack: bottom ... parameter-1 parameter-2 ... parameter-n 返回地址 EBP  cookie 局部变量 ... top构建函数栈帧的时候会在压入参数、返回地址、EBP后压入一个随机数cookie,同时在.data段中保存他的一个副本。函数返回时系统自动检测栈中的cookie和.data段中的cookie副本是否相同,如果不同则进入溢出处理程序,不会执行ret返回语句,从而避免了转到shellcode执行

(6)密码分析

在密码分析这一方面,大家需要了解主流的密码算法,如对称密码、公钥密码、流密码、哈希密码算法等。

在攻击方面,什么是弱口令攻击?密码字典有什么用?典型的密码破解工具有哪些?

当前的Web应用主要采取了哪些加密和编码算法?下载本文

显示全文
专题