Sebug 大牛支招之我是如何在Sebug中杀入前10的?

大家好我是koshell,ID:k0sh1,

在之前的文章中我分享了在web漏洞挖掘中的一些小技巧,这里要补充一下。

注入其实只是众多web入侵手段中的一种,脱裤也并非只有--dump可以完成,在诸多的敏感信息泄露(例如svn,源码)通过获取数据库或后台的敏感信息也能达到脱裤,甚至内网漫游的效果,所以web是一门大学问,也是多种手段融合才有可能达到危害最大化的过程.下面我给大家带来的是我在二进制漏洞分析中的一点点经验,结合我在sebug上冲榜的过程做分享,以下内容不涉及到exploit以及各种bypass,因此低危,请小伙伴们放心观看。

0x1

首先我想说的是,二进制不仅仅是windows,在linux中,甚至android,ios中它依然存在,最近发现php,mysql中也会存在(后来觉悟了,其实这些也属于架设在操作系统上的应用,怎么可能不存在,自己2了),(原本有一段和linso(相信很多小伙伴都知道这个逗比)的交流过程,他觉得自己太逗比就删除了,此条5毛)因此它是一个重头,然而二进制漏洞分析中涉及到大量的重复调试,汇编代码阅读,甚至插件辅助工具的编写,整个过程很枯燥却很有意思,最后能够劫持程序流程的时候,也会很爽,那么下面我将分享一些漏洞分析过程的一些小技巧和经验(因为是打字,无法图文并茂,大家将就着看,以后有机会,可以再多作一些图来让小伙伴们更直观的了解这一过程)

0x2

Sebug是知道创宇的一个项目,通过提交漏洞分析和poc来获得积分,我在sebug中目前排名11(之前一直在前10,去海南玩了两个多星期掉下来了),这里几乎所有的大牛所做的工作都是web代码审计和编写web漏洞的poc,据我目前了解,在sebug上提交二进制漏洞分析和poc的,只有我一个(求小伙伴!!),也感谢sebug,给了我很多练手的机会,经过一段时间的提交报告,结合我以前写exploit时调试经验,可以将二进制漏洞分析分为以下三个阶段 第一个阶段:最初级,能够分析大多数栈溢出漏洞,其中不仅包括返回地址覆盖,还有seh指针覆盖等等,这类漏洞分析较为容易,典型的例子就是sebug上各种各样的ftp漏洞,我曾经一周刷了13个ftp漏洞,是的,并不是我是大牛,而是ftp漏洞大多数都很容易,因为ftp操作过程中经常会有一些strcpy之类的函数,稍微粗心点就会造成超常异常串覆盖buffer时超出了buffer长度,造成溢出,这类漏洞可别看简单,都是分分钟远程溢出的那种,只要用nmap扫到你开了某端口,在此端口运行了某个ftp,那么就可能被远程执行代码,弹个shell啊,开个端口阿,添加个用户阿,无所不能。 第二个阶段:最中级,牵扯到指针,能够分析各种double free,use after free,堆溢出等各种各样的漏洞,这类漏洞就比较难了,典型的例子就是sebug上各种各样microsoft的漏洞(也就是多数ms漏洞),最最典型的就是将死的ie,我相信ie这部分内容在仙果的讲课中会有所体现,大家到时候等着啃干货吧!当涉及到指针等操作的时候就较为困难了,因为十分容易乱,这里要借助windbg中的dc,dd,甚至!heap -p -a来不断确定内存中指针的值,它的变化以及变化的原因,这里涉及到的攻击也不仅仅是简单的栈溢出,还会涉及到堆喷,控制虚函数等等一系列复杂的操作,因为毕竟微软的东西作的越来越成熟,再加上一些安全函数,比如strcpy_s的加入,类似于栈溢出这种低级的错误就越来越少,越来越难以发现,那么目光就要转向一些类似于无符号数有符号数的传递检查啊,指针或函数释放再调用时对内存状态的检查阿,之类的上来,漏洞总会存在,只是位置越来越隐蔽,对漏洞分析的难度就越来越大。 第三阶段:最高级,这里本来想用终极,后来想想,谁知道会不会有更难得存在呢?所以用了最高级,这里就要来到ring0态,也就是系统级,这类是我目前接触中调试难度最大,最容易绕晕人的漏洞了,这类漏洞在sebug中很少,几乎没有,然而它却是存在,比如CVE-2014-4113和CVE-2014-4114,以及前段时间hacking team中曝光的两个font字体中的内核漏洞,其效果都是本地提权,这几个漏洞我都调试了一下,相信以后i春秋也会放出类似的讲解课程,这类漏洞调试复杂,比如,这种漏洞最好不要本地调试(用最好的原因是我也没有试过,不知道能不能本地调试),因为根本不知道应该attach哪个进程,所以一般我都用windbg和虚拟机建立一个pipe通道,再将虚拟机中的windows进入调试态,然后远程调试,这种方式方便精准,就算如此,你也许要收集符号表,不然windows下的dll符号集何其之大,光看sub_xxxxx如何能够满足,而且也不好定位系统函数,其次对于频繁的内存操作稍不注意就会绕晕在里面,一个系统级的dll空间非常大,用ida静态看一下流程图就知道有多恐怖,如此涉及到定位漏洞触发位置再回溯的过程就显得非常麻烦了,因此我个人觉得把它设为最高级不为过。

0x3

分享完了这三级之后,我来讲讲我在二进制漏洞分析中的一些经验 首先定位,漏洞分析和所谓的逆向工程有所不同,但也有所相同,之所以不同,是因为逆向工程需要对程序整个执行流程有了解,其中还涉及到分析算法(这里主要针对的是逆向工程zhogn的破解注册码等过程),而漏洞分析主要只需要知道漏洞触发的原因,只需要定位到漏洞触发的前后即可;之所以相同,主要是漏洞分析和逆向工程都是回溯的过程,接下来会讲解。(后面对逆向工程的过程不会再进行比较,感兴趣的小伙伴可以去吾爱破解,那里牛人特别多) 所以漏洞分析最关键的就是定位,我们需要快速到达漏洞触发现场,而不是加载程序再一步步分析,这里我们要借助od或者windbg(windbg是我的最爱,好使!),通过附加进程或者加载并运行漏洞应用,然后执行poc来快速定位到现场,再通过kb命令回溯堆栈调用,这样就能看到漏洞触发时的执行位置以及漏洞触发前都执行了哪些函数。 其次是回溯,简单的说我们定位 到了案发地点(我喜欢把漏洞触发的位置叫案发地点),那么我们要通过回溯的方法,来看看案发之前发生了什么,这就好像小区发生了盗窃,调用监控摄像头来看被盗之前的情况,就是这么个过程,这就需要我们通过静态汇编代码的审计,和之前kb命令查看堆栈情况中,找到一些关键点,比如一些关键的call指令,rep mov指令,或者一些函数的入口,记录下这些位置,重新附加程序,再这些位置下断点,运行poc,再单步跟踪调试,这个过程就是回溯的过程,可能需要不断反复的重启程序,甚至可能这个函数本次调用并不涉及到漏洞触发,需要连续执行好几次才能到达我们想要调试的步骤位置,所以这个过程是关键,也是繁琐的。 第三是我们跟踪什么,一个漏洞的触发往往伴随着异常,有时候跟着跟着eip就变成了一个异常地址,程序跑不动了,那么在单步调试中我们要观察什么,这也是静态汇编代码审计的时候我们要关注的,因为一个漏洞的触发,往往伴随着某个寄存器的值被修改成了一个无效的地址,或者说一个寄存器中的地址存放的值变成了一个无效的地址,比如eax或者esi,那么这时候我们就要关注这个寄存器,但不是仅仅关注这个寄存器,因为汇编操作中会有各种各样的mov指令,当前被修改的寄存器很有可能是另一个寄存器传值过来的,介绍了这些,总结来说,就是关注漏洞触发时,寄存器的值为何被修改,我们要跟踪的就是这个。 第四是我们跟踪到了又能怎么样呢?其实刚开始我也会陷入这个误区,有时候从发生异常到寄存器改变,到最后触发漏洞整个过程,我都能用汇编根下来并且知道发生了什么,那和漏洞分析有什么关联呢?其实这就好比一句英文,每个单词拆开了我都明白是怎么翻译,连起来我就不知道了,其实整个汇编代码是个整体,我写一个c程序,printf(" "),其实就是一个push 和call printf的过程,了解了漏洞触发的关键位置之后我们就需要把这个位置的汇编代码还原成c语言就行了,功力深厚的小伙伴,可以直接通过阅读汇编代码知道这一段汇编代码代表的是什么意思,而功力尚浅的小伙伴,可以通过ida的f5插件来将这段代码还原成类似于c的伪代码,而最牛逼得是,这段代码放到编译器里面还能编译,总之到这步,你的漏洞分析就基本完成了,直到哪行代码出的问题,也能协助程序员来修补这段漏洞了。 那些年,漏洞分析中我遇到的麻烦, 在sebug中调试漏洞时,我也碰见过麻烦,比如一些seh指针覆盖的漏洞,经常因为大量字符串冲毁了栈空间,而导致我使用kb命令的时候没法正确回溯之前的堆栈调用,我找到一种笨方法,可以冲头加载程序,在一些关键位置下端点之后执行,到达后再一步一步跟踪,事实上这个位置就有可能是漏洞触发前的某个位置,这么说可能不明白,我举例说明:有一个ftp漏洞,当我发送了超长串后会触发ftp服务端进入seh异常处理,这时超长串会覆盖seh指针,导致seh无法正常处理而被我劫持,在调试这个漏洞时,我碰到了上述的问题,我的解决方法是如果我这边发送了,那么那边一定会调用recv函数来接收,那么我就在recv函数上下端点,定位就是我接收到异常数据的那一刹那,接下来再跟踪调试,就会很快到达出现问题函数的位置,这就是一种方法。 换句话来说,我们可以通过审计poc代码,来了解到一些更多的信息,比如poc的执行流程,从而辅助我们更快的进行漏洞分析。还有就是没有poc怎么办,有一种东西叫做补丁,当厂商打上补丁的时候往往是修补了某些漏洞,那么我们通过漏洞介绍,比如是某个dll,那么我们就备份一份打补丁前的dll,再打补丁,将两个dll在ida中作对比,很快就能定位补丁位置,这对漏洞分析来说是一个很迅速的一块,再通过漏洞位置想办法构造poc就能还原了。 我的分享就是这些,也比较粗浅,大家可以将就着看,在i春秋的课程中会讲解到,比如姜晔老师的课,仙果的课应该也会涉及,到时应该会有一个对应,最近在做一个自定义指令集的虚拟机,灵感来源于drops中的一篇《逆向被虚拟机所保护的二进制文件》,我在修改这个虚拟机的源码,使其具有缓冲区溢出漏洞,从而争取来做一个类似于沙箱逃逸的模拟过程,做好了会拿出来和大家分享。 天冷了,大家注意穿衣保暖!谢谢!

原文链接:http://bbs.ichunqiu.com/thread-1892-1-1.html(点击『阅读原文』访问)

小s经常会碰到各位同学询问如何获取 Sebug 邀请码,赚取 KB 等一系列问题,于是小s特意咨询了相关大牛,给大家支支招。

其实,现在 Sebug 有个系列活动,漏洞社区校园帮帮帮--帮助学生赚钱,帮助学生找工作,帮助学生提升能力。其实不止是学生,包括对很多人来说,Sebug 都是一个赚钱加上提升实力的平台、镀金的平台。

首先,最简单的赚钱的问题。白帽子做出相关的贡献是不容易的,需要花费一定的精力,所以我们尊重大家的劳动成果,100 万补贴,甚至后续更多的补贴。那么如何赚这100万呢?针对不同的技术级别的同学,这里给几个建议:

1、对于有一定编程和安全能力的同学,最佳方式就是提交基于 Pocsuite 编写的高质量PoC,在保证足够质量的情况,将得到可观的 KB 奖励来获取现金奖励。之前活动,包括现在排行榜上的第一名的几个同学,比如huakai、hhxx、RickGray、feng等人,都是以高质量的 PoC 来获取 KB,最终兑换了上万的现金奖励。

2、对于编程能力可能不是那么好,但安全能力较好的同学,可以选择提交高质量的漏洞详情来取胜。Sebug 平台上有众多的缺少详情或者详情不规范、较简单,缺少漏洞分析等漏洞,这类漏洞都可以进行提交、完善漏洞详情,一篇排版良好,清晰明了,如果再加上优秀的漏洞分析,这样的一篇详情,也将获得客观的 KB,不输于 PoC。而就漏洞详情来说,现在 Sebug 上的漏洞基本在互联网上都能搜索到,有些甚至已经有人写了分析,有些可能网上的分析没那么详细,那么不管能力高低,尝试去走一遍分析,这本身是一个学习或者进步的过程,然后除了自己的学习、进步,你把分析提交到 Sebug,还能赚钱,何乐而不为呢?

3、对于编程能力、安全能力都一般的同学,同样,也可以在 Sebug 混的风生水起。其实我更建议这类同学好好的参与到 Sebug,去尝试提交详情、提交 PoC,就像上一点说的,去看别人的分析,然后自己尝试分析,这是一个学习进步的过程,慢慢的就提高了自己的安全能力;在有一定安全能力基础上,其实 Python 是个很好入门的语言,如果有兴趣,尝试去编写 PoC,不一定基于 Pocsuite,就大部分的 Web 漏洞来说,PoC 只是构造不同的 Payload 进行 GET 或者 POST 请求,意思是你东西用 Python 写请求某个地址,并把内容拿回来,那其实已经初步具备写 PoC 的能力了,这其实真的不难,大家可以去试试。我更倾向于大家去尝试、学习然后边赚钱的学习之路,毕竟很多同学都有自己的梦想,想学好安全,那么就应该这么做。如果你说你实在学不会,那么我还有最后一个让赚钱的方式,提交完善字段,比如去补充相关漏洞编号、作者等基本的漏洞字段,或者根据详情去整理漏洞概要,这就属于勤劳和总结范畴的内容了,就没什么能力要求了,我想应该都会。

其实就以上三点建议大家可以看到,不管大家能力怎么样,其实是都能通过 Sebug 赚到钱,顺便提高自己的能力。另外,针对在校或者不在校的同学,我们明白相关的证书对大家的重要性,我们将会对一些核心贡献者、月度前三颁发我们的荣誉证书。另外,之后我们还会上线名人堂,个别的同学将会荣登名人堂,这些都是为了帮助大家赚钱,让大家更好找工作,给大家镀金。

另外,除了通过以上说到的方式帮助大家提升实力,引导帮助大家学习,我们还有校园帮帮帮计划,帮助学生赚钱与提升实力以及更好的找到工作,另外,我们也会继续开展 PoC 培训沙龙、联合 i春秋(www.ichunqiu.com)发布一些漏洞分析、PoC编写等学习视频等,大家也可以到 i春秋去进行视频学习和实际演练。我们的目的,就是为了更多的帮助大家,不只是赚钱,同时是提升能力,让大家更好的找到工作!

所以,漏洞赚钱,工作贴金,提升实力,甚至是 CTF 弹药,就上 Sebug!

原文发布于微信公众号 - Seebug漏洞平台(seebug_org)

原文发表时间:2015-12-01

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏北京马哥教育

Python爬虫爬取知乎小结

最近学习了一点网络爬虫,并实现了使用Python来爬取知乎的一些功能,这里做一个小的总结。网络爬虫是指通过一定的规则自动的从网上抓取一些信息的程序或脚本。我们知...

2393
来自专栏程序人生

再谈 API 的撰写 - 总览

背景 去年我写过一篇文章:撰写合格的 REST API。当时 Juniper 裁掉了我们在德州的一支十多人的团队,那支团队有一半的人手在之前的半年里,主要的工作...

4177
来自专栏个人分享

一次极限项目管理,设计,开发,联调与测试

     什么是All In? 是你不知道全力做这件事情会得到什么。但你只想把它做好的感觉。

1211
来自专栏WeTest质量开放平台团队的专栏

5天2亿活跃用户,2017QQ“LBS+AR”天降红包活动后台揭密

作者王家彬,腾讯后台开发工程师,参与“LBS+AR”天降红包项目,其所在“2016春节红包联合项目团队”获得2016公司级业务突破奖。

1573
来自专栏Golang语言社区

求取一份极致的简单:全链路跟踪中间件探索之路

公司内部的业务系统有近千个,基本上很少有比较孤立的;尤其外部系统,即便用户在页面上一个很普通的操作,后台也需要少则几个多则几十个服务协同完成。以前我们定位调用链...

1241
来自专栏FreeBuf

如何通过Python实现自动填写调查问卷

0X00 前言的,我才想起来貌似我也还没做。对于这种无意义的问卷,我是不怎么感冒的,所以我打算使用”特技”来完成,也就是python,顺便重新复习一下pytho...

5445
来自专栏编程一生

架构师之路--谈业务的合理架构

932
来自专栏逸鹏说道

.NET技术+25台服务器怎样支撑世界第54大网站

英文原文:StackOverflow Update: 560M Pageviews A Month, 25 Servers, And It's All Abou...

3837
来自专栏Android机动车

Android模块化开发方案

随着业务的不断发展壮大,移动端所承担的功能也越来越重,特别是代码几易其主之后开始变得杂乱无章,牵一发而动全局的事情时常发生。为了应对团队壮大之后的开发模式,我们...

1502
来自专栏阮一峰的网络日志

谈谈MVC模式

1. 如何设计一个程序的结构,这是一门专门的学问,叫做"架构模式"(architectural pattern),属于编程的方法论。 MVC模式就是架构模式的一...

3135

扫码关注云+社区

领取腾讯云代金券