一、缝隙发掘的前期–信息搜集
尽管是前期,可是却是我以为最重要的一部分;
许多人挖洞的时分说不知道如何入手,其实挖洞便是信息搜集+常规owasp top 10+逻辑缝隙(重要的或许便是思路猥琐一点),这些缝隙的测验办法自身不是特别杂乱,一般混迹在安全圈子的人都能复现缝隙。接下来我就着重说一下我在信息搜集方面的心得。
1、域名信息搜集
src一般都只收对应的缝隙,许多src的公告里边就会明确规模;然后咱们就需求根据这些规模来确认域名。
假如src上面没有给出规模,那么需求咱们去搜集,你需求知道哪些domain是该公司的,首要经过手艺来查看:
- 网站的关于页面/网站地图
- whois反查
- 一些网站里边的跳转恳求(也能够关注一下app)
- 还有便是百度,有些会在title 和 copyright信息里边呈现该公司的信息
- 网站html源码:首要便是一些图片、js、css等,也会呈现一些域名
- apk反编译源码里边
…………还需求你们来弥补
2、子域名信息搜集
东西:
- subdomain lijiejie的子域名搜集东西(个人觉得挺好用的);
- layer:这个东西也不错;
其他的还有许多,比方kali下的等等,不写那么多免得看着蛋疼;
可是只需是东西就会有误报,建议咱们对获取的子域名写个脚本处理一下;判别哪些是能够拜访的,哪些是不能够拜访的,哪些拜访是测验页面的。能够节约不少时间。
手艺:其实也是能够东西化(爬虫思想,不过爬虫不是很精确)
运用google hacking 查找,咱们必定不要只用google 查找,这样是不全面的,还有 bing(不必拜访外国网站)、百度、360等等,因为许多国内的网站运用google去查找是搜不到的。这儿就不说语法了,贴几条常用的就行了。
搜集域名和mail地址:
搜集灵敏文件:site:xxx.com filetype:doc
搜集办理后台:site:xxx.com 办理/site:xxx.com admin/site:xxx.com login
搜集mail:site:xxx.com intext:@xxx.com/intext:@xxx.com
搜集灵敏web途径:site:xxx.com intitle:登录/site:xxx.com inurl:sql.php
3、灵敏信息搜集
这一块是比较大的一块,我这儿举一些:
- github源代码:网上有东西(github.com/repoog/GitP…
- svn信息走漏:这个只能用扫描器了
- 灵敏文件:比方数据库装备文件啦(有案例的)、网站源码啊、数据库备份文件等等
- 灵敏目录:网站后台目录/一些登录地址/一些接口目录
- email:邮箱命名规则、公司是否具有邮箱默许暗码(这个能够采取社工,究竟我司默许暗码就很弱鸡)。
- 职工号:许多oa、um、sso体系都是选用职工号登录的,所以知道职工号的规则许多时分能协助咱们进行撞库。
- 商家信息:假如是一些具有商家体系的,能搜集到一些商家账户(自己搞去,能够注册,注册材料请百度)就能够进入许多体系来测验了。
4、小结一下
其实许多时分,咱们经过信息搜集能得到不少的缝隙了,我这儿举几个简略的案例:
- 经过查找引擎获取体系办理页面,直接越权拜访;(说好的没有具体)
- 经过github直接找到办理后台账号暗码;
- 经过目录/文件扫描直接得到体系信息(ip、办理员账号暗码)连入服务器;
- 当然也有许多经过信息搜集得到一些东西结合其他手法;
二、缝隙发掘的中期–信息处理
1、信息收拾
关于第三节说到的那些信息搜集技能,咱们不能搜集完了就完了,必定好好收拾,会对后期渗透有很大的协助。这儿说一下具体怎么收拾。
运用word或excel或txt 都行,我建议word 和excel 因为txt究竟太简略了。分类:
- 哪些网站功用相似;
- 哪些网站或许运用的同一模版;
- 哪些网站有waf(这个一般在url中标明就好);
- 哪些网站能登录(注册的账号也必定要记住,最好能够准备两个手机号,两个邮箱便利注册);
- 哪些网站暴露过哪些类型的缝隙(这个只能去乌云上面找);
- 网站现在有哪些功用(这个略微关注一下网站公告,看最近是否会有事务更迭);
2、缝隙收拾
咱们辛苦的挖洞必定要对咱们发掘出来对缝隙有一个记载,记载的能够略微具体一些,一是能够便利自己今后回忆,还有便是今后说不定有些当地呈现了跟以前相同的功用,这样就便利咱们更快的找到缝隙。这儿建议doc文档,图片能够贴的具体一些。
第二个便是经过缝隙得到的一些数据:
- 订单信息;遍历、注入
- 用户信息:这个能够经过撞库获取、恣意暗码重置获取、注入
- 数据库用户名暗码:注入、装备走漏
为什么咱们要收拾这些数据,因为咱们要根据这些数据来规划咱们的字典。爆炸完好了,相同的6。
三、缝隙发掘的后期–缝隙发掘
有了前两步,这儿我会写的少一点,究竟缝隙的类型就那么些,像前文说过便是owasp top 10、逻辑,关于发掘这些缝隙,我觉得没什么特别好的办法,便是抓包剖析逻辑(这儿说的不包括对软件客户端的发掘、app的发掘);
首要咱们需求对一个网站/app有一个了解要知道它的功用点有哪些(后期我会更新一个checklist介绍一下哪些功用会对应什么样的缝隙)。
其次咱们要剖析这个网站/app里边的恳求哪些是咱们能够操控的参数,这些当地便是缝隙常常出没的点。
最后便是剖析逻辑,这一类别的缝隙首要仍是触及一套流程,这儿举个比方:
例:”咱们买东西”
- 首要咱们要选择:
- 挑选触及查询(是否能够SQL注入)
- 参加购物车:商品数量是否能够为负
- 询问商家:
- 跳转客服体系,跳转url中是否含有用户参数
- xss打客服cookie
- 钓鱼+社工
- 下单:
- 填地址,触及刺进(注入)、xss
- 修改单价
- 修改总额(这儿说明一下修改总额:状况1,便是咱们或许会遇到能够运用优惠卷的状况,比方咱们买了100的东西只能运用5块的优惠价,可是我有一张50的优惠卷是否能够运用;状况2,打折咱们是否能够修改打折的折扣;状况3,咱们是否能够修改运费,将运费改为负数;状况n)
- 补白:xss,sql注入
- 电子收据:
- 会写昂首
- 支付:
- 传输进程中是否能够修改,假如是扫描二维码支付,咱们能够剖析一下二维码中的恳求url看是否能够修改今后从头生成二维码(这儿不讨论具体的支付了,因为微信和支付宝都很安全)
- 订单完成:
- 是否能够遍历订单
- 评价:
- 注入、上传图片、xss
- 退货…………
咱们能够无限延伸,这儿仅仅抛砖引玉。
其实这方面的文章很少,几个原因:
- 咱们会觉得便是经历,玩多了就天然会了,教不了什么;
- 这种分享经历特别不好写,到现在也不知道我写了什么,其实都是一个思路点;
- 懒,不愿意……必定都有必定的原因;
建议:
src慢慢的挖多了体系更新不快,事务不多天然就很难挖了,所以必定要有坚持精神,深入发掘认识,因为挖洞没有幻想中的那么简略;不要想一步登天,多去看看一些案例剖析一下他人的发掘思路,然后跟着学。
四、安全缝隙相关的概念
安全缝隙的界说
咱们常常听到缝隙这个概念,可什么是安全缝隙?想给它一个清晰完整的界说其实是十分困难的。假如你去查找一下关于缝隙的界说,底子上会发现高大上的学术界和讲究有用的工业界各有各的说法,缝隙相关的各种角色,比方研究者、厂商、用户,对缝隙的认识也是十分不共同的。
从业多年,我至今都找不到一个满足的界说,于是我自己界说一个:安全缝隙是信息体系在生命周期的各个阶段(规划、完成、运维等进程)中产生的某类问题,这些问题会对体系的安全(机密性、完整性、可用性)产生影响。
这是一个从研究者视点的偏狭义的界说,影响的主体规模限定在了信息体系中,以尽量不把咱们所不熟悉的方针扯进来。
缝隙之所以被描绘为某种“问题”,是因为我发现无法简略地用脆弱性、缺点和Bug 等概念来涵盖它,而更象是这些概念的一个超集。缝隙会在体系生命周期内的各个阶段被引进进来,比方规划阶段引进的一个规划得十分简略被破解的加密算法,完成阶段引进的一个代码缓冲区溢出问题,运维阶段的一个过错的安全装备,这些都有或许终究成为缝隙。
界说对安全的影响也只触及狭义信息安全的三方面:机密性、完整性和可用性。缝隙形成的灵敏信息走漏导致机密性的损坏;形成数据库中的信息被非法篡改导致完整性的损坏;形成服务器进程的溃散导致可用性的丧失。缝隙也或许一起导致多个安全特点的损坏。
安全缝隙与Bug的联系
缝隙与Bug 并不等同,他们之间的联系底子能够描绘为:大部分的Bug 影响功用性,并不触及安全性,也就不构成缝隙;大部分的缝隙来历于Bug,但并不是悉数,它们之间仅仅有一个很大的交集。能够用如下这个图来展现它们的联系:
已知缝隙的数量
各个缝隙数据库和索引收录了大量已知的安全缝隙,下表是一个干流缝隙库的数量的大致估量,缝隙一般最早从20 世纪90 时代开端:
事实上,即便把不知道的缝隙排除在外,只需订了若干缝隙相关的邮件列表就会知道:并不是一切缝隙数据库都会收录,就算把上面的所列的数据库中的一切条目加起来去重今后也仅仅收录了一部分的已知缝隙而已,实践的已知缝隙数比总收录的要高得多。
安全缝隙的分类
和其他事物相同,安全缝隙具有多方面的特点,也就能够从多个维度对其进行分类,要点关注根据技能的维度。留意,下面说到的一切分类并不是在数学意义上严厉的,也便是说并不确保同一抽象层次、穷举和互斥,而是极端简化的出于有用为意图分类。
根据运用方位的分类
本地缝隙
需求操作体系级的有效帐号登录到本地才干运用的缝隙,首要构成为权限提高类缝隙,即把自身的履行权限从普通用户级别提高到办理员级别。
实例:
Linux Kernel 2.6 udev Netlink 音讯验证本地权限提高缝隙( CVE-2009-1185 )进犯者需求以普通用户登录到体系上,经过运用缝隙把自己的权限提高到 root 用户,获取对体系的彻底操控。
长途缝隙
无需体系级的帐号验证即可经过网络拜访方针进行运用,这儿强调的是体系级帐号,假如缝隙运用需求诸如FTP 用户这样运用级的帐号要求也算是长途缝隙。
实例:
Microsoft Windows DCOM RPC 接口长主机名长途缓冲区溢出缝隙(MS03-026 )(CVE-2003-0352)进犯者能够长途经过拜访方针服务器的 RPC 服务端口无需用户验证就能运用缝隙,以体系权限履行恣意指令,完成对体系的彻底操控。
根据要挟类型的分类
获取操控
能够导致绑架程序履行流程,转向履行进犯者指定的恣意指令或指令,操控运用体系或操作体系。要挟最大,一起影响体系的机密性、完整性,乃至在需求的时分能够影响可用性。首要来历:内存损坏类、CGI 类缝隙
获取信息
能够导致绑架程序拜访预期外的资源并走漏给进犯者,影响体系的机密性。
首要来历:输入验证类、装备过错类缝隙
拒绝服务
能够导致方针运用或体系暂时或永久性地失掉响应正常服务的才能,影响体系的可用性。
首要来历:内存损坏类、意外处理过错处理类缝隙。
根据技能类型的分类
根据缝隙成因技能的分类比较上述的两种维度要杂乱得多,关于现在我所见过的缝隙大致概括为以下几类:
- 内存损坏类
- 逻辑过错类
- 输入验证类
- 规划过错类
- 装备过错类
以下是对这几类缝隙的描绘和实例剖析。
内存损坏类
此类缝隙的一起特征是因为某种办法的非预期的内存越界拜访(读、写或兼而有之),可控程度较好的状况下可履行进犯者指定的恣意指令,其他的大多数状况下会导致拒绝服务或信息走漏。对内存损坏类缝隙再细分下来历,能够分出如下这些子类型:
- 栈缓冲区溢出
- 堆缓冲区溢出
- 静态数据区溢出
- 格局串问题
- 越界内存拜访
- 开释后重用
- 二次开释
栈缓冲区溢出
最古老的内存损坏类型。发生在仓库中的缓冲区溢出,因为运用起来十分安稳,大多能够导致履行恣意指令,要挟很大。此类缝隙前史十分悠长, 1988 年著名的Morris 蠕虫传达手法之一便是运用了finger 服务的一个栈缓冲区溢出缝隙。在2008 年之前的简直一切影响面巨大的网络蠕虫也底子运用此类缝隙,汇总状况能够见下表:
上面表格里列出的蠕虫即便经过多年,在当时的互联网上还常常被捕捉到。栈溢出缝隙是相对比较简略发现的缝隙,静态动态剖析的办法关于此缝隙的发掘现已相当成熟,因而这类缝隙,特别是服务端程序中,现在底子处于日渐消亡的状况。
实例:
- 暴风影音stormtray 进程长途栈缓冲区溢出缝隙
长度查看不充沛的串衔接操作。
- Sun Solaris snoop(1M)东西长途指令履行缝隙( CVE-2008-0964 )
无长度查看的*printf 调用。
- Novell eDirectory HTTPSTK Web 服务器栈溢出缝隙无长度查看的memcpy 调用。
- FlashGet FTP PWD 指令超长响应栈溢出缝隙
- Imatix Xitami If-Modified-Since 头长途栈溢出缝隙。极端风险的sscanf 类调用。
- Borland StarTeam Multicast 服务用户恳求解析长途栈溢出缝隙( CVE-2008-0311 )
- Microsoft DirectShow MPEG2TuneRequest 溢出缝隙( CVE-2008-0015 )手抖,缓冲区的指针被作为缓冲区自身被数据覆盖溢出。
堆缓冲区溢出
导致堆缓冲区溢出的来历与栈溢出的共同,底子都是因为一些长度查看不充沛的数据操作,仅有不同的当地仅仅发生问题的方针不是在编译阶段就现已确认分配的栈缓冲区,而是随着程序履行动态分配的堆块。
实例:
- HP OpenView NNM Accept-Language HTTP 头堆溢出缝隙( CVE-2009-0921)典型的先分配后运用的堆溢出问题。
- PHP (phar extension)堆溢出缝隙堆溢出特有的溢出样式:因为整数溢出引发Malloc 小缓冲区然后终究导致堆溢出。
静态数据区溢出
发生在静态数据区BSS 段中的溢出,十分罕见的溢出类型。
实例:
- Symantec pcAnyWhere awhost32 长途代码履行缝隙(CVE-2011-3478)
格局串问题
在printf 类调用中因为没有正确运用格局串参数,使进犯者能够操控格局串的内容操纵printf 调用越界拜访内存。此类缝隙经过静态或动态的剖析办法能够相对简略地被发掘出来,因而现在现已很少能够在运用广泛的软件中看到了。
实例:
- Qualcomm Qpopper 2.53 格局串处理长途溢出缝隙(CVE-2000-0442)
越界内存拜访
程序盲目信赖来自通讯对方传递的数据,并以此作为内存拜访的索引,变形的数值导致越界的内存拜访,形成内存损坏或信息走漏。
实例:
- OpenSSL TLS 心跳扩展协议包长途信息走漏缝隙 (CVE-2014-0160)缝隙是因为进程不加查看地运用通讯对端提供的数据区长度值,按指定的长度读取内存回来,导致越界拜访到大块的预期以外的内存数据并回来,走漏包括用户名、口令、
SessionID 乃至是私钥等在内的灵敏信息。
开释后重用
这是现在最干流最具要挟的客户端(特别是浏览器)缝隙类型,大多数被发现的运用 0day缝隙进行的水坑进犯也简直都是这种类型,每个月各大浏览器厂商都在修正大量的此类缝隙。技能上说,此类缝隙大多来历于方针的引用计数操作不平衡,导致方针被非预期地开释后重用,进程在后续操作那些现已被污染的方针时履行进犯者的指令。与上述几类内存损坏类缝隙的不同之处在于,此类缝隙的触发根据方针的操作异常,而非根据数据的变形异常(一般是不是契合协议要求的超长或变形字段值),一般根据协议合规性的异常检测不再能起作用,检测上构成极大的挑战。
实例:
- Microsoft IE 非法事件操作内存损坏缝隙(CVE-2010-0249)
著名的Aurora 进犯,涉嫌入侵包括Google 在内的许多大互联网公司的行动,就运用了这个CVE-2010-0249 这个典型的开释后重用缝隙。
二次开释
一般来历于代码中触及内存运用和开释的操作逻辑,导致同一个堆缓冲区能够被重复地开释,终究导致的成果与操作体系堆办理的完成办法相关,很或许完成履行恣意指令。
实例:
- CVS 长途非法目录恳求导致堆损坏缝隙( CVE-2003-0015)
逻辑过错类
触及安全查看的完成逻辑上存在的问题,导致规划的安全机制被绕过。
实例:
- Real VNC 4.1.1 验证绕过缝隙( CVE-2006-2369 )
缝隙答应客户端指定服务端并不声明支撑的验证类型,服务端的验证交互代码存在逻辑问题。
- Android 运用内购买验证绕过缝隙
Google Play 的运用内购买机制的完成上存在的缝隙,在用户在Android 运用内购买某些数字资产时会从Play市场获取是否现已付费的验证数据,对这块数据的解析验证的代码存在逻辑问题,导致进犯者能够绕过验证不必真的付费就能买到东西。验证相关的代码如下:
代码会先查看回来的数据签名是否为空,不空的话查看签名是否正确,假如不对回来失败。问题在于假如签名是空的话并没有对应的else逻辑分支来处理,会直接履行最下面的return true 操作,导致的成果是只需回来的音讯中签名为空就会回来验证经过。
输入验证类
缝隙来历都是因为对来自用户输入没有做充沛的查看过滤就用于后续操作,绝大部分的CGI缝隙归于此类。所能导致的成果,常常看到且要挟较大的有以下几类:
- SQL 注入
- 跨站脚本履行
- 长途或本地文件包括
- 指令注入
- 目录遍历
SQL注入
Web 运用对来自用户的输入数据未做充沛查看过滤,就用于构造拜访后台数据库的SQL 指令,导致履行非预期的SQL 操作,终究导致数据走漏或数据库损坏。
实例:
- 一个网站Web 运用的数值参数的SQL 注入缝隙。
跨站脚本履行(XSS)
Web 运用对来自用户的输入数据未做充沛查看过滤,用于构造回来给用户浏览器的回应数据,导致在用户浏览器中履行恣意脚本代码。
实例:
YouTube 上的一个存储式XSS 缝隙。
长途或本地文件包括
PHP 言语支撑在URL 中包括一个长途服务器上的文件履行其间的代码,这一特性在编码不安全的Web 运用中很简略被乱用。假如程序员在运用来自客户端的URL 参数时没有充沛地查看过滤,进犯者能够让其包括一个他所操控的服务器上的文件履行其间的代码,导致长途文件包括指令履行。
实例:
- 一个长途文件包括运用的比方
假如Web 运用支撑在URL 参数中指定服务器上的一个文件履行一些处理,对来自客户端URL数据及本地资源的拜访答应假如未做充沛的查看,进犯者或许经过简略的目录遍历串使运用把Web 主目录以外的体系目录下的文件包括进来,很或许导致信息走漏:
实例:
- 一个网站存在的本地文件包括的缝隙
指令注入
触及体系指令调用和履行的函数在接收用户的参数输入时未做查看过滤,或者进犯者能够经过编码及其他替换手法绕过安全限制注入指令串,导致履行进犯指定的指令。
实例:
- AWStats 6.1 及以下版本configdir 变量长途履行指令缝隙( CVE-2005-0116 )
典型的因为 Perl 言语对文件名特性的支撑参加未充沛查看用户输入的问题,导致的指令注入缝隙,awstats.pl 的1082 行:
if(open(CONFIG,”searchdirsearchdirPROG.$SiteConfig.conf”)) 。
目录遍历
触及体系用于生成拜访文件途径用户输入数据时未做查看过滤,并且对终究的文件绝对途径的合法性查看存在问题,导致拜访答应方位以外的文件。多见于CGI 类运用,其他服务类型也或许存在此类缝隙。
实例:
- Novell Sentinel Log Manager “filename”参数目录遍历缝隙( CVE-2011-5028 )
www.example.com/novelllogma…
- HP Data Protector Media Operations DBServer.exe 目录遍历缝隙
在HP Data protecetor Media Operations 的客户端衔接服务端时,经过私访有的通讯协议,客户端会首要查看[体系分区]:\Documents and Settings[用户名]\Application Data 下面是否有相应的资源(如插件等),假如没有,则会向服务器恳求需求的文件,服务器没有验证恳求的文件名的合法性,并且这个进程不需求任何验证,进犯者精心构造文件名,能够读取服务端装置目录地点分区的恣意文件。
- RHINOSOFT SERV-U FTP SERVER 长途目录遍历缝隙
- Caucho Resin 长途目录遍历缝隙
规划过错类
体系规划上对安全机制的考虑缺乏导致的在规划阶段就现已引进的安全缝隙。
实例:
- LM HASH 算法脆弱性
这个算法至少存在以下3 方面的缺点:
1、口令转换为大写极大地缩小了密钥空间。
2、切分出的两组数据分别是独立加密的,暴力破解时能够彻底独立并行。
3、缺乏7 字节的口令加密后得到的成果后半部分都是相同的固定串,由此很简略判定口令长度。
这些算法上的缺点导致进犯者得到口令HASH 后能够十分简略地暴力猜测出等价的明文口令。Microsoft Windows 图形烘托引擎WMF 格局代码履行缝隙(MS06-001) (CVE-2005-4560)假如一个 WMF 文件的 StandardMetaRecord 中,Function 被设置为 META_ESCAPE 而Parameters[0] 等于SETABORTPROC,PlayMetaFileRecord()就会调用Escape()函数,Escape()调用 SetAbortProc()将自己的第四形参设置为一个回调函数,把图像文件中包括的一个数据块象Shellcode 那样履行。此缝隙从Windows 3.1 一直影响到2003,进犯者只需让用户处理歹意的WMF 文件(经过挂马或邮件)在用户体系上履行恣意指令,缝隙实在是太好用影响面太大了,以至有人以为这是一个故意留的后门,其实影响规划的功用是处理打印任务的取消,功用现已被抛弃,但抛弃的代码并没有移除而导致问题。
- 搜狐邮箱暗码找回功用
暗码找回功用在要求用户提供找回暗码需求的问题答案时,在回来给用户的页面中就现已包括了答案,只需经过查看页面源码就能看到,使这个找回暗码功用的安全验证彻底形同虚设,进犯者由此能够操控恣意邮箱。之所以这么规划,或许便是为了尽或许地少对数据库的查询,而把用户帐号安全底子不放在心上。
- 紫光输入法用户验证绕过缝隙
这是相似于2000 年微软输入法缝隙的比方,经过拜访输入法设置的某些功用绕过操作体系的用户验证履行某些操作。
装备过错类
体系运维进程中默许不安全的装备状况,大多触及拜访验证的方面。
实例:
- JBoss 企业运用平台非授权拜访缝隙( CVE-2010-0738 )
对操控台拜访接口的拜访操控默许装备只制止了HTTP的两个首要恳求办法GET 和POST,事实上HTTP 还支撑其他的拜访办法,比方HEAD,尽管无法得到的恳求回来的成果,可是提交的指令仍是能够正常履行的。
- Apache Tomcat 长途目录信息走漏缝隙
Tomcat 的默许装备答应列某些目录的文件列表。
各种眼花缭乱的安全缝隙其实体现的是人类在干事的各种环节上犯过的过错,经过改进东西流程准则能够得到某些种程度的处理,但有些触及人性十分不简略处理,并且随着信息体系的日趋杂乱,咱们能够看到更多的新类型缝隙,这个范畴永久都有的玩。
挖洞小技巧
1.敢于置疑缝隙的存在,然后再去验证它
2.从开发规划的视点去看,想开发所想
3.了解事务和情报搜集
4.坚持和努力就会有所回报
5.多看师傅们的文章,学会师傅们的骚操作和思路
6.命运也很重要,可是努力的人命运一般不会太差哦