在学校中,大凡大考小考,教授们都会来个期末复习,圈圈重点,给点提示,这样在考场上先生和学生才能互相给足面子,相安无事的顺利进入寒假暑假。
在这大半个月中,很多朋友跟随着我进入了exploit这项很有魅力的技术殿堂。在跟贴中看到看雪不乏强人,很多朋友举一反三,见招拆招,已经有了一定的修为了。
明晚7点钟,“辞旧迎新exploit me挑战赛”就要拉开战幕了,大赛之前,我把这个系列的教学做一点总结,顺便指出一些比赛中可能出现的非技术性问题,算是“期中复习+考前指导”
以看雪的调试,逆向功底,学习exploit并不是什么难事,只要认真学完这个系列的教程,在原理上和技术上对付这次挑战应该没什么问题。
然而练习和战场还是有点差别的,比赛中肯定会遇到很多细小的问题跳出来挡住你清晰的思路。这些问题也可能与溢出无关,是些编程方面的问题,这时候要冷静,不要气馁,无数次亲身体会的经验告诉我,希望就在前方。
赛题是我和几个朋友商量许久后定下的,太简单没有意思,太难会吓退刚找到一点兴趣的初学者。所以这两道题目都是用传统方法就可以完成exploit的,需要用到的知识在教学中已经全部提到,如果想复习的话,就复习下前面那些帖子吧。
当然,也有可以发挥的地方,一些新方法我在入门教学中并没有提到,也可以用于这次的赛题,希望这些方面能够给有实力的选手一定发挥空间,因为使用新技术是可以获得加分的。
比赛基本分为100分,A题30,B题70.
在提交答案前请一定仔细阅读赛事细则,评分标准,赛题说明这些相关文档。
评分主要是靠最终的分析报告来的,要注意分析报告中那些得分点,否则技术很新颖,很有实力,分析报告写的很差没表现出来这些亮点的化,会直接影响成绩,太可惜了。
这点我要多说几句,在学校时我参加过许多比赛,什么数学建模,机器人大赛之类,身边无数惨痛的教训告诉我,踏踏实实的做题和认认真真的包装都很重要,这在工作生活中也是适用的。
没有踏实的炒作和包装是轻浮的表现,但是没有包装的踏实往往得不到期望中的认可,心态要是稍微不好点就会变成愤青,开始怨天骂地。
所以请大家务必注意把自己辛苦分析出来的结果用“包装精美”的文字,图表等表达方式表现出来,取得应得的分数。
虽然对shellcode原创给予了一定加分,但是加分比例偏小。因为这次比赛并不是一个shellcode开发比赛。
您大可以选用已有的shellcode直接使用,教程中那些稍微简陋了点,用起来可能比较寒蝉。第7讲那个比较通用,一般可以用作POC(proof of concept)
exploit只要做到POC我们就认为成功了。所谓POC(proof of concept)就是在技术上证明这个漏洞是可以被利用来执行任意代码的。
所以POC中的shellcode可以像我这样弹出个消息框。当然,运行一个程序(如记事本,计算器等),执行一条命令(添加用户之类),拿到一个远程shell这些都是常用的POC。
虽然从技术角度讲,这些功能开发起来难度有所不同,但从POC角度讲,他们的效果是一样的——安全专家和攻击者关注的东西是不同的。
好,我们回忆下这个系列教学获得的主要知识:
函数调用与栈之间的配合
函数栈帧中的分配
用溢出数据淹没返回地址,可以让程序在子函数返回时获得一次有我们控制的跳转机会
在缓冲区内布置shellcode,跳过来,大功告成
在此之后,介绍了一些稳定性,通用性方面的问题
利用“跳板”技术比较准确的确定shellcode位置,但是跳板地址的选取又很有讲究
碍于《0day安全》即将出版,我没有把shellcode定位API的方式全数贴出来,但是在第七讲中我给出了这个shellcode,而且已经有朋友帮我给大家分析过这段代码了
比赛中如果用到shellcode,您可以直接使用我给出的这段,也可以搜索一些来用。shellcode的调试方法我在第7讲中也给出了。
这样说来,好像事情并不是非常复杂。也就是“摸”清楚缓冲区有多大,把shellcode,跳板地址之类的关键数据在参数里摆放妥当,构造个evil string往程序里塞罢了,你们说是不?
好,我们明晚7点见,等着大家精彩的exploit。
希望大家能在获得exploit中乐趣的同时,过一个充实而有意义的新年。
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)