如何挖EM,EM算法深度解析

OKX欧易app

OKX欧易app

欧易交易所app是全球排名第一的虚拟货币交易所,注册领取6万元盲盒礼包!

APP下载   官网注册

如何挖EM,EM算法深度解析

一、EM算法深度解析

最近在做文本挖掘的时候遇到了EM算法,虽然读书的时候简单地接触过,但当时并没有深入地去了解,导致现在只记得算法的名字。既然EM算法被列为数据挖掘的十大算法之一,正好借这个机会,重新学习一下这个经典的算法。学习的过程中,我发现网上的资料大多讲解地不够细致,很多地方解释得并不明了。因此我决定抛开别人的想法,仅从数学推导本身出发,尽力理解每一个公式的含义,并将其对应到实际的实验过程当中。这篇博客记录了我对与EM算法的思考与理解,也是我人生中的第一篇博客,希望能够对于想要学习EM算法的同学有所帮助。

前面谈到我在做文本挖掘的时候遇到了EM算法,EM算法用于估计模型中的参数。提到参数估计,最常见的方法莫过于极大似然估计——在所有的候选参数中,我们选择的参数应该让样本出现的概率最大。相信看到这篇笔记的同学一定对极大似然估计非常熟悉,而EM算法可以看作是极大似然估计的一个扩充,这里就让我们用极大似然估计来解决一个简单的例子,来开始正式的讨论。

有A,B,C三枚硬币,我们想要估计A,B,C三枚硬币抛出正面的概率,,。我们按如下流程进行实验100次:

记录100次实验的结果如下:

我们将上面的实验结果表述如下:

表示第i次实验中,硬币A的结果,1代表正面,0代表反面;表示第i次实验中,硬币B或硬币C抛出正面的个数,则参数的极大似然估计分别为:

即硬币A,B,C各自抛出正面的次数占总次数的比例,其中为指示函数。

实验流程与1相同,但是我们不慎遗失了硬币A的记录结果,导致我们只知道随后十次抛出了多少次正面,多少次反面,却不知道实验结果来自于硬币B还是硬币C。在这种情况下,我们是否还能估计出,,的值呢?

这时候利用极大似然估计似乎行不通了,因为这种情况下,我们不但缺失了硬币A产生的观测值,同时也不知道哪些观测值属于硬币B,哪些观测值属于硬币C。

有些同学可能会提出,虽然我们无法得到三个硬币各自产生的样本,但是我们依然可以得到每个观测值出现的概率。比如在第一次实验中,我们抛出了5次正面5次反面,我们可以做如下思考:

  假设这5次正面由硬币B得到,那么概率应该为,而这次观测值来自于硬币B,也就是硬币A抛出正面的概率为

  假设这5次正面由硬币C得到,那么概率应该为,而这次观测值来自于硬币C,也就是硬币A抛出反面的概率为

  综合起来,利用条件概率公式,这个观测值出现的概率就是

因此我们可以将样本整体的概率和似然函数利用,,表示出来,通过对似然函数求导,令其关于的偏导数等于0,我们可以求出三个参数的值。

这个思路听上去十分合理,我们可以顺着这个思路进行数学推导,看看可以得到什么样的结果。首先我们计算样本的概率:

对应的似然函数为

其中关于的条件分布为

的分布为

因此我们可以得到

至此,我们成功地得到了似然函数。然而观察可以发现,这个函数是由100项对数函数相加组成,每个对数函数内部包含一个求和,想通过求导并解出导数的零点几乎是不可能的。当然我们可以通过梯度下降来极小化这个函数,借助深度学习库的自动微分系统在实现上也非常容易。但是这种做法过于简单粗暴,有没有办法来优雅地解决这个问题呢?在继续讨论之前,我们先将这类问题进行一般化表述:

我们观测到随机变量产生的m个相互独立的样本,的分布由联合分布决定,是缺失数据或无法在实验中被直接观测到,称为隐变量,我们想要从样本中估计出模型参数的值。在接下来的讨论中,我们假定的取值是离散的,于是可以得到似然函数如下:

接下来,我们就探讨一下,如何利用EM算法解决这个问题。

这一部分的数学推导,主要参考了吴恩达CS229n的笔记,并且根据个人的思考和理解,尽力对公式的每一步进行详细的解释。我们先简单地介绍一下琴生不等式。

琴生不等式有多种形式,下面给出其离散形式的表述和概率论中的表述:

1.若为严格凹函数,为定义域内的n个点,是n个正实数,且满足,则下述不等式成立:

当且仅当时,不等式取等号。

2.若为严格凹函数,为实值随机变量,且期望存在,则下述不等式成立:

当且仅当,即为常数时,不等式取等号。

注:这里将函数上方为凹集的函数称为凹函数,例如函数就是凹函数。

相信大家对琴生不等式都十分熟悉,因此这里就不做过多的说明。接下来,我们将琴生不等式应用到我们的问题中。

回到我们之前的问题上,我们想要极大化下面这个函数:

但是我们无法对这个函数直接求导,因此我们借助琴生不等式,对这个函数进行变换。为了让过程看上去简洁,下面只对求和中的第项进行计算。

令满足,且,则根据琴生不等式,可以得到:

当且仅当为常数时,上述不等式取等号。也就是说,对于任意,是一个与无关的量。设对于任意,我们可以得到:

因此当时,不等式取等号,容易验证此时,与无关。将综合一下,我们可以得到以下结论:

到这里为止,我们已经拥有了推导出EM算法的全部数学基础,基于我们可以构建出E步和M步。上面的数学推导虽然看上去略为复杂,但实际上只用到了三个知识点:

  1.琴生不等式:

  2.条件概率:

  3.联合分布求和等于边缘分布:

对上面的数学推导有疑问的同学,可以结合上面这三点,再将整个推导过程耐心地看一遍。

大部分关于EM算法的资料,只是在数学形式上引入了函数,即,以满足琴生不等式的使用条件,却没有过多地解释函数本身。这导致了很多人完全看懂了算法的推导,却还是不理解这些数学公式究竟在做什么,甚至不明白EM算法为什么叫做EM算法。所以在给出E步和M步之前,我想先谈一谈函数。

我们回顾一下函数所满足的条件(暂时不考虑琴生不等式取等号的限制),

在所有可能的取值处有定义。可以看出,是的样本空间上任意的一个概率分布。因此,我们可以对不等式进行改写。首先我们可以将含有的求和写成期望的形式:

这里指的是在概率分布下,求随机变量和的期望。有同学会问,为什么我们平时求期望的时候只要写,并没有指明是在哪个概率分布下的期望。这是因为一般情况下,我们都清楚地知道随机变量所服从的分布,并且默认在分布下求期望。

举个例子,我手上有一个硬币,抛了10次,问抛出正面次数的期望。这种情况下,大部分人会默认硬币是均匀的,也就是说抛出正面的次数服从二项分布,期望。这时有人提出了质疑,他说我认为你这个硬币有问题,抛出正面的概率只有0.3,那么在他眼里,期望。

回到正题,我们利用等式改写不等式,可以得到:

这正是琴生不等式在概率论中的形式。我们可以将不等式倒过来理解:

  首先,假定随机变量服从概率分布,是的样本空间上的任意一个概率分布。这里可以是一组定值,也可以是关于参数的函数。

  显然,当我们取不同的时,随机变量的期望也会随之改变。需要注意的是,由于与相关,所以这里的期望不是一个数值,而是关于的函数。

  当我们令为的后验分布时,上面的期望最大。这里有两点需要注意,1.后验分布也是一个关于参数的函数。2.由于期望是关于的函数,所以这里的最大指的并非是最大值,而是最大的函数。

  若对于每一个,我们都令为的后验分布,则上述期望之和等于我们要极大化的似然函数,即

通过上述分析,我们为寻找似然函数的极大值点提供了一个思路。我们不去极大化似然函数本身,而是去极大化。至于如何将这个思路实际应用,就要利用到EM算法中的E-step和M-step。

这一节中,我们先给出E-step和M-step的数学形式,随后在结合抛硬币的例子来解释这两步究竟在做什么。下面进入算法的流程,首先我们任意初始化,按下述过程进行迭代直至收敛:

在第次迭代中,

(E-step)对于每个,令

(M-step)更新的估计值,令

EM算法从任意一点出发,依次利用E-step优化,M-step优化,重复上述过程从而逐渐逼近极大值点。而这个过程究竟是怎样的呢,就让我们一步步地揭开EM算法的面纱。

假设我们现在随机初始化了,进入第一轮迭代:

(E-step)

由于我们已经假定模型参数为,所以此时不再是与有关的函数,而是由一组常数构成的概率分布。结合抛硬币的例子来看,这一步是在我们已知模型参数的基础上(虽然这是我们瞎猜的),去推测每一次的观测值是由哪个硬币产生的,或者说我们对每一次观测值做一个软分类。比如我们根据初始化的参数,计算出,。可以解释为第个观测值有20%的概率来自于硬币B,80%的概率来自于硬币C;或者说硬币A抛出了0.2个正面,0.8个反面。

(M-step)

考虑到是一组常数,我们可以舍弃常数项,进一步简化上面这个要极大化的函数

由于不再与相关,因此上面的函数变成了对数函数求和的形式,这个函数通常来说是容易求导的,令导数等于0,我们可以求出新的参数。我们仍旧以抛硬币为例进行解释,

令,可以得到,

这三个参数的解释是显而易见的。我们在E-step中对每个观测值进行了软分类,可以看成是硬币A抛出正面的次数,所以是的极大似然估计;是我们抛硬币B的次数,是硬币B抛出正面的次数,所以是的极大似然估计;对于我们有相同的解释。

我们将这个结果与抛硬币1中极大似然估计的结果相比较可以发现,之前结果中的指示函数变成了这里的,在指示函数下,某个观测值要么来自于硬币B,要么来自于硬币C,因此也称为硬分类。而在函数下,某个观测值可以一部分来自于硬币B,一部分来自于硬币C,因此也称作软分类。

将上述两步综合起来,EM算法可以总结如下:我们首先初始化模型的参数,我们基于这个参数对每一个隐变量进行分类,此时相当于我们观测到了隐变量。有了隐变量的观测值之后,原来含有隐变量的模型变成了不含隐变量的模型,因此我们可以直接使用极大似然估计来更新模型的参数,再基于新的参数开始新一轮的迭代,直到参数收敛。接来下我们就讨论为什么参数一定会收敛。

前面写了太多的公式,但是这一部分我不打算给出收敛性的数学推导。其实数学上证明EM算法的收敛性很容易,只需要证明每一轮迭代之后,参数的似然函数递增,即

二、如何系统地学习数据挖掘

看数据挖掘方面的算法理论时经常感觉一些公式的推导过程如天书一般,例如看svm的数学证明,EM算法..,感觉知识跳跃比较大,那么数据挖掘系统的学习过程是怎么样?

磨刀不误砍柴工。在学习数据挖掘之前应该明白几点:

数据挖掘目前在中国的尚未流行开,犹如屠龙之技。

数据初期的准备通常占整个数据挖掘项目工作量的70%左右。

数据挖掘本身融合了统计学、数据库和机器学习等学科,并不是新的技术。

数据挖掘技术更适合业务人员学习(相比技术人员学习业务来的更高效)

数据挖掘适用于传统的BI(报表、OLAP等)无法支持的领域。

数据挖掘项目通常需要重复一些毫无技术含量的工作。

如果你阅读了以上内容觉得可以接受,那么继续往下看。

学习一门技术要和行业靠拢,没有行业背景的技术如空中楼阁。技术尤其是计算机领域的技术发展是宽泛且快速更替的(十年前做网页设计都能成立公司),一般人没有这个精力和时间全方位的掌握所有技术细节。但是技术在结合行业之后就能够独当一面了,一方面有利于抓住用户痛点和刚性需求,另一方面能够累计行业经验,使用互联网思维跨界让你更容易取得成功。不要在学习技术时想要面面俱到,这样会失去你的核心竞争力。

一、目前国内的数据挖掘人员工作领域大致可分为三类。

数据分析师:在拥有行业数据的电商、金融、电信、咨询等行业里做业务咨询,商务智能,出分析报告。

数据挖掘工程师:在多媒体、电商、搜索、社交等大数据相关行业里做机器学习算法实现和分析。

科学研究方向:在高校、科研单位、企业研究院等高大上科研机构研究新算法效率改进及未来应用。

二、说说各工作领域需要掌握的技能。

(1).数据分析师

需要有深厚的数理统计基础,但是对程序开发能力不做要求。

需要熟练使用主流的数据挖掘(或统计分析)工具如Business Analytics and Business Intelligence Software(SAS)、SPSS、EXCEL等。

需要对与所在行业有关的一切核心数据有深入的理解,以及一定的数据敏感性培养。

经典图书推荐:《概率论与数理统计》、《统计学》推荐David Freedman版、《业务建模与数据挖掘》、《数据挖掘导论》、《SAS编程与数据挖掘商业案例》、《Clementine数据挖掘方法及应用》、《Excel 2007 VBA参考大全》、《IBM SPSS Statistics 19 Statistical Procedures Companion》等。

(2).数据挖掘工程师

需要理解主流机器学习算法的原理和应用。

需要熟悉至少一门编程语言如(Python、C、C++、Java、Delphi等)。

需要理解数据库原理,能够熟练操作至少一种数据库(Mysql、SQL、DB2、Oracle等),能够明白MapReduce的原理操作以及熟练使用Hadoop系列工具更好。

经典图书推荐:《数据挖掘概念与技术》、《机器学习实战》、《人工智能及其应用》、《数据库系统概论》、《算法导论》、《Web数据挖掘》、《 Python标准库》、《thinking in Java》、《Thinking in C++》、《数据结构》等。

(3).科学研究方向

需要深入学习数据挖掘的理论基础,包括关联规则挖掘(Apriori和FPTree)、分类算法(C4.5、KNN、Logistic Regression、SVM等)、聚类算法(Kmeans、Spectral Clustering)。目标可以先吃透数据挖掘10大算法各自的使用情况和优缺点。

相对SAS、SPSS来说R语言更适合科研人员The R Project for Statistical Computing,因为R软件是完全免费的,而且开放的社区环境提供多种附加工具包支持,更适合进行统计计算分析研究。虽然目前在国内流行度不高,但是强烈推荐。

可以尝试改进一些主流算法使其更加快速高效,例如实现Hadoop平台下的SVM云算法调用平台--web工程调用hadoop集群。

需要广而深的阅读世界著名会议论文跟踪热点技术。如KDD,ICML,IJCAI,Association for the Advancement of Artificial Intelligence,ICDM等等;还有数据挖掘相关领域期刊:ACM Transactions on Knowledge Discovery from Data,IEEE Transactions on Knowledge and Data Engineering,Journal of Machine Learning Research Homepage,IEEE Xplore: Pattern Analysis and Machine Intelligence, IEEE Transactions on等。

可以尝试参加数据挖掘比赛培养全方面解决实际问题的能力。如Sig KDD,Kaggle: Go from Big Data to Big Analytics等。

可以尝试为一些开源项目贡献自己的代码,比如Apache Mahout: Scalable machine learning and data mining,myrrix等(具体可以在SourceForge或GitHub.上发现更多好玩的项目)。

经典图书推荐:《机器学习》《模式分类》《统计学习理论的本质》《统计学习方法》《数据挖掘实用机器学习技术》《R语言实践》,英文素质是科研人才必备的《Machine Learning: A Probabilistic Perspective》《Scaling up Machine Learning: Parallel and Distributed Approaches》《Data Mining Using SAS Enterprise Miner: A Case Study Approach》《Python for Data Analysis》等。

三、以下是通信行业数据挖掘工程师的工作感受。

真正从数据挖掘项目实践的角度讲,沟通能力对挖掘的兴趣爱好是最重要的,有了爱好才可以愿意钻研,有了不错的沟通能力,才可以正确理解业务问题,才能正确把业务问题转化成挖掘问题,才可以在相关不同专业人才之间清楚表达你的意图和想法,取得他们的理解和支持。所以我认为沟通能力和兴趣爱好是个人的数据挖掘的核心竞争力,是很难学到的;而其他的相关专业知识谁都可以学,算不上个人发展的核心竞争力。

说到这里可能很多数据仓库专家、程序员、统计师等等都要扔砖头了,对不起,我没有别的意思,你们的专业对于数据挖掘都很重要,大家本来就是一个整体的,但是作为单独一个个体的人来说,精力有限,时间有限,不可能这些领域都能掌握,在这种情况下,选择最重要的核心,我想应该是数据挖掘技能和相关业务能力吧(从另外的一个极端的例子,我们可以看,比如一个迷你型的挖掘项目,一个懂得市场营销和数据挖掘技能的人应该可以胜任。这其中他虽然不懂数据仓库,但是简单的Excel就足以胜任高打6万个样本的数据处理;他虽然不懂专业的展示展现技能,但是只要他自己看的懂就行了,这就无需什么展示展现;前面说过,统计技能是应该掌握的,这对一个人的迷你项目很重要;他虽然不懂编程,但是专业挖掘工具和挖掘技能足够让他操练的;这样在迷你项目中,一个懂得挖掘技能和市场营销业务能力的人就可以圆满完成了,甚至在一个数据源中根据业务需求可以无穷无尽的挖掘不同的项目思路,试问就是这个迷你项目,单纯的一个数据仓库专家、单纯的一个程序员、单纯的一个展示展现技师、甚至单纯的一个挖掘技术专家,都是无法胜任的)。这从另一个方面也说明了为什么沟通能力的重要,这些个完全不同的专业领域,想要有效有机地整合在一起进行数据挖掘项目实践,你说没有好的沟通能力行吗?

数据挖掘能力只能在项目实践的熔炉中提升、升华,所以跟着项目学挖掘是最有效的捷径。国外学习挖掘的人都是一开始跟着老板做项目,刚开始不懂不要紧,越不懂越知道应该学什么,才能学得越快越有效果。我不知道国内的数据挖掘学生是怎样学的,但是从网上的一些论坛看,很多都是纸上谈兵,这样很浪费时间,很没有效率。

另外现在国内关于数据挖掘的概念都很混乱,很多BI只是局限在报表的展示和简单的统计分析,却也号称是数据挖掘;另一方面,国内真正规模化实施数据挖掘的行业是屈指可数(银行、保险公司、移动通讯),其他行业的应用就只能算是小规模的,比如很多大学都有些相关的挖掘课题、挖掘项目,但都比较分散,而且都是处于摸索阶段,但是我相信数据挖掘在中国一定是好的前景,因为这是历史发展的必然。

讲到移动方面的实践案例,如果你是来自移动的话,你一定知道国内有家叫华院分析的公司(申明,我跟这家公司没有任何关系,我只是站在数据挖掘者的角度分析过中国大多数的号称数据挖掘服务公司,觉得华院还不错,比很多徒有虚名的大公司来得更实际),他们的业务现在已经覆盖了绝大多数中国省级移动公司的分析挖掘项目,你上网搜索一下应该可以找到一些详细的资料吧。我对华院分析印象最深的一点就是2002年这个公司白手起家,自己不懂不要紧,一边自学一边开始拓展客户,到现在在中国的移动通讯市场全面开花,的确佩服佩服呀。他们最开始都是用EXCEL处理数据,用肉眼比较选择比较不同的模型,你可以想象这其中的艰难吧。

至于移动通讯的具体的数据挖掘的应用,那太多了,比如不同话费套餐的制订、客户流失模型、不同服务交叉销售模型、不同客户对优惠的弹性分析、客户群体细分模型、不同客户生命周期模型、渠道选择模型、恶意欺诈预警模型,太多了,记住,从客户的需求出发,从实践中的问题出发,移动中可以发现太多的挖掘项目。最后告诉你一个秘密,当你数据挖掘能力提升到一定程度时,你会发现无论什么行业,其实数据挖掘的应用有大部分是重合的相似的,这样你会觉得更轻松。

三、漏洞可以随便挖吗

今天测试时发现一个任意用户登录漏洞,简单记录一下(em...写得真的很简单的那种!)

登录成功后的一个请求,里面包含了当前登录用户的用户名和user_id:

后面紧接着一个包含敏感信息的数据包,如下:

可以看到返回信息中包含了当前用户的密码MD5,且可以正常解密。更换为其他的user_id:

可以看到,返回了其他user_id的密码,但是,正常情况下,只有在成功登录一个用户后才能获取用户的user_id,所以要想登录他人账户,必须要知道user_id值对应的用户名.....,既然系统会有一个返回密码的数据包,那就可能有其他的敏感信息返回数据包,于是打开burp的hsitory,底部搜索user_id,终于在茫茫数据包中发现了一个接口:

一个请求,通过登录用户名,返回信息包含了该用户名对应的user_id:

通过id获取密码:

不断遍历用户名可以获得更多的user_id,也就可以通过上面的请求获取更多的用户密码MD5,通过解密后的用户名密码即可登录任意用户:

漏洞挖掘类型总结

如果你刚刚好是一个刚刚学完基础的小白,如果你刚刚好没有参加各种培训,完全自学。

那么你的漏洞清单可能是这样的。

暴力破解漏洞

sql注入漏洞

命令执行漏洞

xss漏洞(跨站脚本)

csrf漏洞(跨站伪造请求)

xxe漏洞

文件上传漏洞

文件包含漏洞

各cms的公开漏洞

没错差不多就是这样的。当然也有可能一些没用写到,因人而异。

如果你有幸看到一个大佬的漏洞清单。那么有可能除了上面那些,还多了下面这几项逻辑漏洞

ssrf漏洞

信息泄露

js文件可能存在的未授权访问

组合漏洞

……

然而这些也只是一部分,不过我不是大佬,不过欢迎大佬补存,下面我就单讲一下我补充的几种漏洞类型吧。

3:漏洞类型详解

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

逻辑漏洞

逻辑漏洞也是一个经久不衰的话题,不过逻辑漏洞并不像前面几种漏洞,可以用扫描器去扫,逻辑漏洞目前,据我所知是没有一个扫描器可以敢说自己能扫到逻辑漏洞的。或许有的厂家敢说自己没有一个sql注入,但是没人敢说自己没有逻辑漏洞(我想也没有厂家敢说自己没有sql注入吧,哈哈哈)。而且,由于现在waf,和防火墙的逐渐完善,sql注入,上传等漏洞,也越来越难以查找和利用,而逻辑漏洞则不存在这种问题。

何为逻辑漏洞,就是由于开发者在开发过程中,由于代码逻辑不严,而造成的一系列可以被攻击者加以恶意利用的漏洞。而逻辑漏洞也是一类漏洞的总称。

举个例子最为常见的就是以低价购买任意价格的东西的支付漏洞,或者找回密码流程控制不严格,导致的可以修改任意用户的登陆密码,还有越权,越权查看他人订单,越权查看他人个人信息等等。

当然这只是一部分,我这里也只是一个引子,具体漏洞的原理以及介绍大家可以去自行搜索关键字,有很多大佬的文章就写得比较好,不然我这篇文章就要写个几十页了。一些漏洞详情大家可以去看乌云。

信息泄露

信息泄露漏洞顾名思义就是信息泄露,信息泄露也分好多种,如。

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

组合漏洞

组合漏洞是一个可以吧低危漏洞变成高危漏洞的一个神奇的东西。比如你找到一个xss漏洞和一个csrf漏洞,如果两个漏洞单独提交,或许是两个低危,或许是两个忽略。但是如果你把你的xss和csrf组合起来就有可能变成一个高危漏洞,打组合拳,key师傅组合拳打的很厉害,向师傅看齐,key师傅给我说,挖到低危不要着急提交,存起来,万一某一天碰见一另一个漏洞,组合一下,就可以一发入魂了。

说个小技巧,如果你想要详细的漏洞列表,可以去多收集几家src的漏洞说明手册,然后去重,就是一份完美的漏洞列表。

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

这一节讲一下挖掘漏洞应该如何提高和应该有哪些好的习惯。

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

耐心

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

会看、会记

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

懂收集

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

勤动手

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

本文来自用户投稿,不代表币大大立场,如若转载,请注明出处:https://czxurui.com/jys/171205.html

上一篇 2025年07月03日
下一篇 2025年07月03日

相关推荐

  • 苹果商店搜不到欧,被算法折叠的数字文化

    苹果商店搜不到欧,被算法折叠的数字文化 当用户在苹果App Store输入"欧"字搜索时,屏幕上跳出的不是欧洲地图、欧式装修或欧冠直播,而是一片近乎空洞的推荐列表,这个看似简单的搜索异常,背后藏着数字文化被算法筛选、规训的隐秘逻辑。 "欧"作为中文里高频使用的单字,本该

    2026-08-03 18:30:02
    9 0
  • 币安Web3合约算法,开启去中心化交易新纪元

    币安Web3合约算法,开启去中心化交易新纪元 随着区块链技术的飞速发展,去中心化金融(DeFi)成为了金融科技领域的热门话题,作为全球领先的加密货币交易所之一,币安不仅在传统数字货币交易领域占据领先地位,更在探索和推动Web3技术的应用方面走在了行业前列,币安推出的We

    2026-07-27 09:30:03
    28 0
  • 以太坊的基石,理解其核心算法与共识机制

    以太坊的基石,理解其核心算法与共识机制 在探讨区块链世界的璀璨明星以太坊时,一个核心问题常常被提及:以太坊的核心算法是什么?要准确回答这个问题,我们需要明确,以太坊的“核心算法”并非单一指某一种算法,而是由其底层共识机制、虚拟机以及一系列密码学算法共同构成

    2026-07-27 02:30:01
    20 0
  • 以太坊的密码心脏,深度解析其币种算法与演变

    以太坊的密码心脏,深度解析其币种算法与演变 在加密货币的世界里,以太坊(Ethereum)无疑是最具影响力和创新性的项目之一,它不仅仅是一种数字货币(以太币,ETH),更是一个支持智能合约的去中心化应用平台,而支撑这一切运行的底层技术,其核心之一便是决定如何生成新币、

    2026-07-26 06:30:01
    19 0
  • 币安Web3.0时代的20倍合约收益算法,逻辑、风险与未来展望

    币安Web3.0时代的20倍合约收益算法,逻辑、风险与未来展望 在Web3.0技术浪潮下,去中心化金融(DeFi)与中心化交易所(CEX)的融合正在重构数字资产交易生态,币安作为全球领先的加密货币平台,近期推出的“Web3.0时代20倍合约收益算法”,旨在通过技术创新提升杠杆交易的效率

    2026-07-22 16:30:01
    17 0
  • 盗梦空间以太坊能量空间,当梦境算法遇上区块链共识

    盗梦空间以太坊能量空间,当梦境算法遇上区块链共识 在克里斯托弗诺兰的《盗梦空间》中,梦境被构建成可被潜入、塑造甚至多层嵌套的复杂空间,意识在此流动,现实与虚幻的边界模糊,当这个充满想象力的“盗梦空间”与以太坊——那个基于区块链技术、构建去中心化应用的全球性

    2026-07-21 13:30:01
    26 0

发表回复

8206

评论列表(0条)

    暂无评论

binance币安交易所
已有2000万用户加入币安交易所

立即下载