漏洞挖掘的常用方法有哪些,那种比较适合小白上手?

2021-05-26 09:36发布

7条回答
yjh
2楼 · 2021-05-26 11:23

目前,还不存在漏洞自动挖掘的解决方案,更没有漏洞自动挖掘程序,只有一些漏洞挖掘的思路、方法和漏洞挖掘的辅助工具,主要以人工分析为主。漏洞挖掘在很大程度上是个人行为,漏洞挖掘的思路和方法因人而异,但漏洞挖掘的方法还是有迹可寻的,归纳起来,漏洞挖掘方法主要有补丁比较和测试技术两种。补丁比较是指通过比较安装补丁前后文件的差异来定位漏洞的方法。主要包括源码补丁比较和二进制补丁比较两种。源码补丁比较和二进制补丁比较存在的共同问题是,比较效率较低,需要研究快速的比较算法。此外,二进制文件存在的编译器相关、代码优化等问题,使得补丁前后的文件差异较大,如何提取指令序列的特点,抽象出特定的规律,仍然是有待进一步解决的问题。根据对已有漏洞的分析发现,绝大多数的漏洞都是由固定的几种原因造成的,通过对上述原因的分析,可得出这样一个结论:这些问题都可以通过软件测试技术检查,因此可以通过软件测试技术进行漏洞挖掘。软件测试技术根据是否可以访问源代码分为白盒测试、黑盒测试和灰盒测试

pipi雪
3楼 · 2021-05-26 14:48

0x02: 漏洞挖掘类型总结

      如果你刚刚好是一个刚刚学完基础的小白,如果你刚刚好没有参加各种培训,完全自学。那么你的漏洞清单可能是这样的。
        暴力破解漏洞
        sql注入漏洞
        命令执行漏洞
        xss漏洞(跨站脚本)
        csrf漏洞(跨站伪造请求)
        xxe漏洞
        文件上传漏洞
        文件包含漏洞
        各cms的公开漏洞
      没错差不多就是这样的。当然也有可能一些没用写到,因人而异。
      如果你有幸看到一个大佬的漏洞清单。那么有可能除了上面那些,还多了下面这几项
        逻辑漏洞
        ssrf漏洞
        信息泄露
        js文件可能存在的未授权访问
        组合漏洞
        ……
      然而这些也只是一部分,不过我不是大佬,不过欢迎大佬补存,下面我就单讲一下我补充的几种漏洞类型吧。

0x03: 漏洞类型详解

      正式开始前插一条,我之前对漏洞的定义有一点点误解,以为只有上面列表上的才是漏洞,其实不然,只要可以给厂商带来损失的全都是漏洞。逻辑漏洞也是基于这条。回顾一下自己的挖掘过程,其实漏掉了很多。

逻辑漏洞

      逻辑漏洞也是一个经久不衰的话题,不过逻辑漏洞并不像前面几种漏洞,可以用扫描器去扫,逻辑漏洞目前,据我所知是没有一个扫描器可以敢说自己能扫到逻辑漏洞的。或许有的厂家敢说自己没有一个sql注入,但是没人敢说自己没有逻辑漏洞(我想也没有厂家敢说自己没有sql注入吧,哈哈哈)。而且,由于现在waf,和防火墙的逐渐完善,sql注入,上传等漏洞,也越来越难以查找和利用,而逻辑漏洞则不存在这种问题。
      何为逻辑漏洞,就是由于开发者在开发过程中,由于代码逻辑不严,而造成的一系列可以被攻击者加以恶意利用的漏洞。而逻辑漏洞也是一类漏洞的总称。最常见的逻辑漏洞可以分为以下类型
        验证码爆破
        支付漏洞
        注册/忘记密码处逻辑漏洞
        越权
        ……
      举个例子最为常见的就是以低价购买任意价格的东西的支付漏洞,或者找回密码流程控制不严格,导致的可以修改任意用户的登陆密码,还有越权,越权查看他人订单,越权查看他人个人信息等等。
      当然这只是一部分,我这里也只是一个引子,具体漏洞的原理以及介绍大家可以去自行搜索关键字,有很多大佬的文章就写得比较好,不然我这篇文章就要写个几十页了。一些漏洞详情大家可以去看乌云。

信息泄露

      信息泄露漏洞顾名思义就是信息泄露,信息泄露也分好多种,如。
        源码泄露
        用户信息泄露
        员工信息泄露
        等等
      对于源码泄露,大家可以去github上找,很多程序员会把源码开放在github上,甚至有的人用户名密码都不改的,数据库连接密码啊直接存在源码中,当然想我这种菜鸡找到这种源码泄露就直接提交了,有能力的大佬,直接就是一波审计,然后嘿嘿嘿。而对于员工信息泄露,可以在收集信息的时候收集账号,然后放在社工库跑跑,或者记录下来账号用来爆破。

组合漏洞

      组合漏洞是一个可以吧低危漏洞变成高危漏洞的一个神奇的东西。比如你找到一个xss漏洞和一个csrf漏洞,如果两个漏洞单独提交,或许是两个低危,或许是两个忽略。但是如果你把你的xss和csrf组合起来就有可能变成一个高危漏洞,打组合拳,key师傅组合拳打的很厉害,向师傅看齐,key师傅给我说,挖到低危不要着急提交,存起来,万一某一天碰见一另一个漏洞,组合一下,就可以一发入魂了。
说个小技巧,如果你想要详细的漏洞列表,可以去多收集几家src的漏洞说明手册,然后去重,就是一份完美的漏洞列表。

0x04:个人提高漏洞挖掘能力的方法

这一节讲一下挖掘漏洞应该如何提高和应该有哪些好的习惯。
        细心
        耐心
        会看
        会记
        懂收集
        勤动手
        爱学习

细心

      细心放在第一位,是因为细心真的是非常非常非常重要,我有幸请教过很多大佬成功的秘籍,他们告诉我的第一个词语就是细心,正所谓心细则挖天下。很多漏洞都是需要细心才可以发现,不放过数据包中的任何一个参数,不放过网站的任意一个点,我曾问过团队的小石师傅,如何挖掘那些很多人都挖过的src,这么多人都挖过,一些功能点我还要在测一遍吗。小石师傅并没有给我直接回答,而是讲了他一个漏洞的挖掘经历,那是挖美团的时候,小石师傅直接主站开始挖,并且在个人资料一个很明显的地方,挖到了一个储存xss的高危漏洞。所以,在我们进行漏洞挖掘的时候,不要放弃任何一个可能存在漏洞的地方,每个人都有不同的挖掘方式,网站这么大,总会有几个漏测的地方,并且一个漏洞修复了,谁敢保证,修复完了,就不能再修一个漏洞出来了呢。

耐心

      耐心同细心一样,可以说是一对cp。如果你本身就足够信心,那么我想你的耐心也不会差。如果说细心是你漏洞挖掘的利剑,那么耐心就是你的磨刀石,很多时候,碰到一个破站盯几天才能挖到一个漏洞,你坚持下来了就是胜利者,有人说挖洞,也是个运气活,运气好了随随便便就是几个高危,运气不好,几天也挖不到一个。虽然有一定的道理,但是当你的能力足够强,有了自己的套路,想挖漏洞还是轻松加愉快。

会看、会记

      会看,会记。这个就简单了,就是要多看多记,多看漏洞详情,多看技术文章,漏洞详情可以在乌云看,还有网上很多人分享的案例,主要是乌云。看完就要记,要让你看的东西真正的成为你的东西,如果你面对一个厂商,还是有无从下手的感觉,就去乌云看漏洞详情,一个一个看,然后把漏洞出现的位置,以及使用的一些技巧记下来,成为属于自己的漏洞挖掘手册,这也是我最近在做的一个事情。还有一些好的文章,好的技巧,或许你一时半会也用不到,但是你要学会记,总有用到的一天。

懂收集

      key师傅说过,漏洞挖掘说白了就是一个fuzz的过程,而fuzz最关键的是什么,就是一本高效的字典,没错我们要学会收集字典,想公开的字典有fuzzdb,是一个非常好的fuzz字典合集,当然我们在收集他人字典的同时我们也要自己收集字典,曾经看到一个大佬,搜集了github大量的开发项目的路径,然后组成字典。我也不要求小白可以写程序然后自动收集字典,但是,我们在平时的漏洞挖掘过程中,遇到的一些东西还是要多多的去收集一下,逐步慢慢的形成自己的一本专用字典,绝对可以提高你的漏洞挖掘效率。当你有一本自己收集的字典时,相信你也成为一名大佬了。

勤动手

      当你看了大量漏洞,记了大量笔记,这个时候,我相信你最需要的,就是实战,实战是可以把所学所看融会贯通的最快方法,没有之一,只有实战可以锻炼自己的挖洞能力,和效率。看到新的漏洞多去搭建环境复现,这也是对能力的一种提升。

爱学习

      学习,学无止境,又是我key师傅说过,知识面有多广,决定了你可以挖多少漏洞,多学习,至于学什么呢,学js,学代码审计,学开发,学json,等等等等,有的时候真的感觉,你要成为一个开发人员,了解详细的信息传输和交换原理,才可以挖到更加深入的漏洞。如果有一天你感觉挖不到漏洞了,不如放下手头的一切去学习吧,小伙子。

0x05:总结

      此篇文章献给,和我一样迷茫的小伙伴,希望大家可以越走越远。最后给你们一个建议,加一个好团队,学习氛围也很重要的。

上诉文章转自:http://canmengblog.lofter.com/post/1d61af1b_eec266bf

-------------------------------------------------------------

PS:  什么是Fuzz?

 

进行软件漏洞挖掘时,通常有静态分析(staticanalysis)、动态分析(dynamicanalysis)、符号执行(symbolicexecution)、模糊测试(fuzzing)这几种技术手段。

静态分析就是不真正的运行目标程序,但是通过对它进行各种语法、语义、数据流等的分析,来进行漏洞发掘。静态分析是由静态分析软件完成的;它的速度快,但是误报率高。

动态分析就是我们通常见到的大佬们用od一步步跟踪程序运行进行的分析。它的准确率很高,但是需要调试人员丰富的知识储备,而且这种调试方法很难进行大规模的程序漏洞挖掘。

符号执行简单来说,就是试图找到什么输入对应什么样的运行状态,它要去覆盖所有的执行路径。因此,当被分析的程序比较复杂,有很多执行路径时,就会遇到路径爆炸的问题。

模糊测试不需要人过多的参与,也不像动态分析那样要求分析人员有丰富的知识。简单解释,它就是用大量的输入数据自动去执行程序,从而发现哪些输入能够使程序发生异常,进而分析可能存在的漏洞。当前比较成功的fuzzer(执行模糊测试的程序)有AFL、libFuzzer、OSS-Fuzz等。


aijingda
4楼 · 2021-05-27 10:12

漏洞挖掘需要具备的知识

从事漏洞挖掘工作需要具备的知识是极其广泛的,并且随着时间在不断改变,也取决于你所研究的对象(web程序、桌面程序、嵌入式等等)。不过,万变不离其宗,所需要掌握的知识领域却总可以认为是确定的,大致可以分为以下四个方面:

(1) 程序正向开发技术。这是一个开发者需要掌握的能力,包括编程语言、系统内部设计、设计模式、协议、框架等。拥有丰富编程经验与开发能力的人在漏洞挖掘过程中往往比那些只对安全相关领域有所了解的人员对目标应用能有更深入的理解,从而有更高的产出。

(2)攻防一体的理念。这些知识涵盖了从基本的安全原则到不断变换的漏洞形态及漏洞缓解措施。攻击和防御结合的理念,能够有效帮助研究者既能够发现漏洞,同时也能够快速给出有效的漏洞缓解措施和规避方法。

(3)有效使用工具。能够高效的使用工具能够快速将思路转化为实践,这需要通过花时间去学习如何配置和使用工具,将其应用于自己的任务并构建自己的工作流程来不断积累经验。更进一步,需要深入掌握所使用工具的原理,以及如何对其进行二次开发,以使得其能够更加高效的应用于当前的工作实际。事实上,面向过程的学习方法往往比面向工具的学习方法更加高效以及有价值,当自己发现一个在使用一个工具遇到瓶颈时,先不要退缩,尝试去改造它,或者通过自己动手实践去完成能够适应当前工作的工具,这往往能够帮助快速积累大量实践经验。帮助我们以后更加高效的去实践漏洞挖掘工作。

(4)对目标应用的理解。最后,也是最重要的,作为一个漏洞挖掘人员,对自己研究的应用程序在安全性方面必须要比这个程序的开发者或维护者有更深的理解。这样你才能尽可能的发现这个程序中的漏洞并修复它。

freediandianer
5楼 · 2021-05-27 15:42

漏洞挖掘方法主要有补丁比较和测试技术两种。

tiu
6楼 · 2021-06-04 18:11

目前,还不存在漏洞自动挖掘的解决方案,更没有漏洞自动挖掘程序,只有一些漏洞挖掘的思路、方法和漏洞挖掘的辅助工具,主要以人工分析为主。漏洞挖掘在很大程度上是个人行为,漏洞挖掘的思路和方法因人而异,但漏洞挖掘的方法还是有迹可寻的,归纳起来,漏洞挖掘方法主要有补丁比较和测试技术两种。补丁比较是指通过比较安装补丁前后文件的差异来定位漏洞的方法。主要包括源码补丁比较和二进制补丁比较两种。源码补丁比较和二进制补丁比较存在的共同问题是,比较效率较低,需要研究快速的比较算法。此外,二进制文件存在的编译器相关、代码优化等问题,使得补丁前后的文件差异较大,如何提取指令序列的特点,抽象出特定的规律,仍然是有待进一步解决的问题。根据对已有漏洞的分析发现,绝大多数的漏洞都是由固定的几种原因造成的,通过对上述原因的分析,可得出这样一个结论:这些问题都可以通过软件测试技术检查,因此可以通过软件测试技术进行漏洞挖掘。软件测试技术根据是否可以访问源代码分为白盒测试、黑盒测试和灰盒测试。

体育组自行车
7楼 · 2021-08-22 17:52

1. 代码审查

要求:

-熟悉常见的漏洞类型;

-熟悉逆向工程技术;

2. 黑盒测试

要求:

-熟悉常见的漏洞类型;

-【自动化黑盒测试】了解黑盒测试工具的运行机制以及使用和配置方法;

3. 文档研究

要求:

-熟悉常见的漏洞类型;

-曾经当过程序员,或者了解程序员得思维方式;


老易
8楼 · 2021-11-05 13:37

一、漏洞挖掘的前期–信息收集

虽然是前期,但是却是我认为最重要的一部分;很多人挖洞的时候说不知道如何入手,其实挖洞就是信息收集+常规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/GitPr

  • svn信息泄漏:这个只能用扫描器了

  • 敏感文件:比如数据库配置文件啦(有案例的)、网站源码啊、数据库备份文件等等

  • 敏感目录:网站后台目录/一些登录地址/一些接口目录

  • email:邮箱命名规则、公司是否具有邮箱默认密码(这个可以采取社工,毕竟我司默认密码就很弱鸡)。

  • 员工号:很多oa、um、sso系统都是采用员工号登录的,所以知道员工号的规则很多时候能帮助我们进行撞库。

  • 商家信息:如果是一些具有商家系统的,能收集到一些商家账户(自己搞去,可以注册,注册资料请百度)就可以进入很多系统来测试了。

4、小结一下

其实很多时候,我们通过信息收集能得到不少的漏洞了,我这里举几个简单的案例:

  • 通过搜索引擎获取系统管理页面,直接越权访问;(说好的没有详细)

  • 通过github直接找到管理后台账号密码;

  • 通过目录/文件扫描直接得到系统信息(ip、管理员账号密码)连入服务器;

  • 当然也有很多通过信息收集得到一些东西结合其他手段;


相关问题推荐

  • 回答 6

    这个还是因人而异吧,看你自己对哪方面感兴趣,兴趣是最好的老师,感兴趣了才愿意钻研学习下去,简单说一下这两个学习知识方面的不同吧:软件测试岗位虽然对于从业者的知识基础要求不高,但是软件测试岗位所涉及到的知识面还是比较广的,所以软件测试人员也需...

  • 回答 5

    SQL注入漏洞的危害:1、数据库中存储的用户隐私信息泄漏;2、通过操作数据库对某些网页进行篡改;3、修改数据库一些字段的值,嵌入网马链接,进行挂马攻击;4、数据库服务器被恶意操作,系统管理员帐户被窜改;5、数据库服务器提供的操作系统支持,让黑客得以...

  • 回答 16

    一、CISP(Certified Information Security Professional)证书中文叫注册信息安全专业人员,由中国信息安全产品测评认证中心实施的国家认证。可以说,这是目前国内对于个人来说认可度最高的信息安全人员资质,堪称最权威、最专业、最系统。根据实际岗位的不...

  • 回答 14

    渗透测试(也称为pentest)是测试移动应用程序漏洞的过程。此测试的主要目的是确保外部人员的重要数据.通过模拟黑客的思维和攻击手段,对计算机业务系统的弱点、技术缺陷和漏洞进行探查评估。经过客户授权后,在不影响业务系统正常运行的条件下,渗透人员在黑...

  • 回答 1

    网络安全是指网络系统的硬件、软件及其系统中的数据受到保护,不因偶然的或者恶意的原因而遭受到破坏、更改、泄露,系统连续可靠正常地运行,网络服务不中断。主要涉及到的有:1、物理措施:例如,保护网络关键设备(如交换机、大型计算机等),制定严格的网络...

  • 回答 33

      网络安全工程师学习内容:  1、计算机应用、计算机网络、通信、信息安全等相关专业本科学历,三年以上网络安全领域工作经验;  2、精通网络安全技术:包括端口、服务漏洞扫描、程序漏洞分析检测、权限管理、入侵和攻击分析追踪、网站渗透、病毒木马防...

  • 回答 26

      学历不是问题,技术才是硬道理!只要你的技术过硬的话,你完全可以进国家安全部门去工作的。比如公安局里的网监工作,大都是九零后的电脑方面的精英。未必都是本科生。还有从社会上特招进去的。所以说,现在是拿技术说话,不是靠学历吃饭的时代了。  网...

  • 回答 16

    网络安全的知识是比较简单的,比较好入门,好多知识理论,大家都是可以听懂的,这是完全没有问题的。网络安全最终的则是实战的应用,怎么把这些理论知识运用到事件中,这些才是重中之重。所以在选择培训机构的时候,也需要尽量去找这些实践操作多的培训机构。...

  • 回答 22

      能够胜任的岗位主要有:渗透测试工程师、大数据安全工程师、信息安全工程师、安全测试工程师、安全服务工程师、安全运维工程师、系统安全工程师、服务器安全工程师、云计算安全工程师、网络安全工程师、安全分析师、渗透讲师等;  按照web渗透、内网渗透...

  • 回答 23

    一些典型的网络安全问题,可以来梳理一下:IP安全:主要的攻击方式有被动攻击的网络窃听,主动攻击的IP欺骗(copy报文伪造、篡改)和路由攻击(中间人攻击);2. DNS安全:这个大家应该比较熟悉,修改DNS的映射表,误导用户的访问流量;3. DoS攻击:单一攻击...

  • 回答 19

    运维一般是设备或者环境的搭建和维护,网络安全可以看做是防火墙

  • 回答 12

    先说说运维工程师和网络工程师的区别。运维工程师是泛指,网络工程师为特指,所以不能这么对比。你应该这么理解,网络工程师是一个人(也可以是理解成一个岗位),而运维则是他的工作内容。从工作内容上来说,运维可细分为桌面运维、网络运维、服务器运维三大...

没有解决我的问题,去提问