热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

学习黑客十余年,如何成为一名高级的安全工程师?

  1.前言 说实话,一直到现

  1. 前言 

说实话,一直到现在,我都认为绝大多数看我这篇文章的读者最后终究会放弃,原因很简单,自学终究是一种适合于极少数人的学习方法,而且非常非常慢,在这个过程中的变数过大,稍有不慎,就会与当初的理想失之交臂。

文末准备了学习路线。

但是,毕竟有像我当年一样的年轻人,他们有毅力、有理想,他们真的可以坚持十年来学习这门技术,而如果有人稍加指导,就有可能将他的自学时间缩短一倍,甚至更多。因此,本着不漏掉一个人的初心,便有了这篇长文,这篇文章除了提炼了我自己长达十年的自学历程,就我这么多年的经验来看,更多的人之所以没能学好,其实就是内在的东西准备的过于潦草了,希望本文能对想要自学的读者提供力所能及的帮助。

 2. 经验

学习十余年的经验,最终我的心得是——决定大多数人是否能够学会这个技术的关键点,是对一些基本问题的理解是否准确。

用人话说就是,用遵循世间规则的智慧(道)去引导内心的冲动与目标(术)的能力决定你这次学习的最终结局(甚至是更大的,这一生的结局)。

下面我就从三个典型的认知谬误分别讲解这个问题:

首先,是终点与成长的博弈。

我曾经问过很多学习黑客技术的初学者为什么要学习这个,我得到的最多答案就是“我要变得很牛逼”,然而至于如何才算牛逼呢,他们的答案是“如果我学会黑客技术,我就_____”,而当你继续问要学习什么才能这么牛逼时,基本上就给问住了。

当然,我这篇文章的目的就是为了解决这个被问住的问题,但是笔者现在的经验毕竟不同于八年前学习的状态,我感觉自己有义务、也有能力给出各位初学者一个更好的,可以受用一生的答案,因此才有了这段废话,但就我个人而言,我认为这才是我的心得的精华之所在。

我相信绝大多数阅读本篇文章的同学都在高中时听到过一句话,那就是“只要如何如何学习,就能考上好大学,就成功了!”这种一劳永逸的想法源自于我们人类千百万年的进化,但是随着近几千年的发展,这种想法逐渐成为了我们的桎梏。而可悲的是,作为新人类的我们,却还要忍受高中教育的这种错误价值观的强化,最终的结果是接受更多教育的我们反而被削弱了自己的价值。

经历过高考的各位同学都应该心有感触:

  • 当你在高中时,你被告知必须考上大学才能成功

  • 当你在初入大学认为已经成功之时,你被告知必须修够学分拿到毕业证才能成功

  • 而当你成功毕业认为已经成功之时,你被告知必须找个好工作才能成功

  • 而当你千辛万苦终于找个好工作时,你被告知必须出色完成 KPI 快速升职加薪才能成功

  • 当你使出吃奶的劲儿升职加薪之后,你被告知必须在北京买上几百万的房子才能成功

  • ……


而如果你一直以这种思维生活/学习下去,那么你基本上就不会成功,你的每一次目标的达成都会让你多一分怨气,少一分斗志,最后大多数人就局限在这个死循环中被吞没了。而且更加要命的是,由于你过于关注每次达成“成功”的局部,而无法以更大的格局思考问题。

如果你突破不了基因带给你的桎梏,那么你将永远是芸芸众生,而我们都知道芸芸众生中是不可能有黑客这种精英出现的。

因此,在你正式准备学习黑客之前,建议你要先了解一个客观事实,那就是——只有成长才是永恒的主题,过程中的成功仅仅是你成长路上的里程碑而已。

也就是你要搞清楚一件事,所谓的成功只不过是供你意淫的一个小目标,而并非就是终点,如果你认识不到这一点,那么就会出现很严重的问题。

举例来说,如果小明认为“如果我要学会黑客技术,我就可以盗美女的 QQ 号啦”,那么如果小明是按照一个专业黑客的路线发展的话(无此想法的读者请右上角点击关闭,出门左转各大黑客网站),小明首先需要做的就是要精通 C 语言。

而学习 C 语言与盗 QQ 这种工具流比起来,简直不知道要高级多少倍,因此自然也要更困难些,这样就会导致小明做着一件实际价值很高,但在小明看来却不值一提的事(C 语言在小明心里远不及盗 QQ 高级),这种落差带来的认知失调最终会将你学习黑客技术的激情冲的一干二净。

因此,学习黑客技术的第一条铁律就是不要有终点思维,深刻理解成长才是永恒的主题

其次,是幻想与价值的博弈。

懒惰是最容易容易让人们产生幻想的行为。因为懒惰,所以不能得到,但是内心又无比渴求,所以只能通过幻想来麻痹自己。这里的幻想可能是自己有意识的幻想,也有可能是无无意识的幻想,甚至自己都不知道正处于幻想中。

但是你大可不必为此而自责,最起码对于我来说,或者我通过观察周围的人而得出的结论,包括我在内的几乎所有人都在无时不刻的与懒惰做着斗争,例如“事情太多”、“这太难了”、“没有灵感”等等都是因懒惰而产生的幻觉。因此,任何一位你眼中的大牛无不是通过了无数次与懒惰的殊死博弈才取得的今天的成就。

因此,你要知道,只有你真正俯下身子去一点点的学习知识,才会使得你离黑客越来越近。但可怕的是,大多数初学者并不懂得这些,他们在内心深处始终都认为有那么一种灵丹妙药可以让他在更短的时间内掌握黑客技术,从而去花费数倍于所谓的“更短时间”的时间去寻求这本就不存在的方法。

因此,学习黑客技术的第二条铁律就是不要抱有任何幻想、任何偷奸取巧,只要你决定这条路是自己去走,那么无论你如何寻找奇技淫巧,最终都不会让你少走半步。

最后,是浮躁与耐心的博弈。

自大、自满、眼高手低皆来源于浮躁,而最致命的是,如今这个社会的整体就是浮躁的。

如果你理解了成长的意义,如果你已坚定信心笃学技术,那么,你还有可能被最后一块石头所绊倒,那就是对自己的耐心

包括我在内的绝大多数人,在制定目标时都会高估自己的精力、高估自己的效率、高估自己的智商,甚至高估自己对此事的兴趣。

这一系列的高估会在学习后半段严重干扰我们的学习效果,那种现实与理想的差距会导致你对自己能力的认知失调,进而过低的估计自己各方面能力,最终导致失败。

因此,学习黑客技术的第三条铁律就是时刻葆有对低效率的自己的耐心

3. 要考虑的问题

想要做任何事情之前,一定要想清楚三个问题,分别是你为什么要做,你愿意为此付出什么,你想要的结果是什么。而所谓的智慧,就是一个人通过这种方式不断的调整自己对于各种事情的预期,从而达到一种与外界的平衡。如果将这个思路映射到黑客学习这件事上,大体可以分为如下三个问题。

首先,要考虑清楚你为何要学这个。说白了就是你的动机是什么,如果你的动机是不可持续的,例如盗个扣(甚至是挖个系统级 0Day 漏洞),那么我建议你将自己的动机修改为可持续的,例如你想保持一项什么记录(甚至是让其他人更加尊敬你),因为这类动机是在不断变换的,只有这类动机才能让你有一个更加长久的动力源泉,才能促使你坚持的更久,也就能取得更大的成就。

其次,要考虑明白你可以付出什么。你要清楚的是,任何事情都是有代价的,而且如果你此时的年龄越小,你那么你对“代价”的理解就越不深刻,这点一定要着重加以注意。

黑客技术是一件非常有魅力、非常有价值,同时也是非常酷的一件事,但是这么有魅力的事情,如果你想要完成它,要么需要极佳的运气,要么就是需要你付出非人的努力。

举例来说,最近我们经常看到媒体在报道时说国内某组织的某黑客在几秒内就攻破了 IE 浏览器,在几秒内就绕过了 XX 保护机制。但事实的真相是他们其实就是运行了一个自己准备好的代码而已,而媒体上说的这几秒钟的时间其实是代码的运行时间。据我说知,他们在参赛之前,整个团队为了这几秒钟的 ShowTime,需要经历至少十余个甚至数十个不眠之夜,然后才能打造出可能仅有几百个字节的艺术品般的代码(也就是 Exploit),最后才能拿去现场过五关斩六将。

如果在这个十三亿人口的国度里最牛逼的黑客都需要如此付出,那么作为目前默默无闻的你来说,想要学会这门技术应该需要多少个不眠之夜呢?

最后,要考虑你的学习方向是什么。信息安全领域的方向太多了,如果最粗旷的分,大致可以分为网络安全、软件安全、基础安全这三类。其中网络安全包括网络渗透、通讯安全、电信安全等,软件安全包括授权控制、漏洞挖掘、加密解密等,基础安全分为理论安全、密码学等。

我收到的最多的、也是令我最郁闷的问题就是“你的那幅图我已经看了,但是我想知道我应该怎么学呢?或是从何处开始呢?”是的,你没看错,纵然我这幅图获得了超乎想象的关注,但是仍有很大一部分人似乎并没有因为这个世界上多出这幅珍贵的图而获得什么,他们仍然是迷茫的,当然,这也并不能全怪他们。

所有人的成长都是从知道自己不需要什么东西开始的,举例来说,几乎 95%以上的大学生其实根本就不知道自己想要什么,只知道自己不想要什么,这其实就是不成熟的一种表现,用我们那个方言讲就是“青瓜蛋子”。

那么“青瓜蛋子”们最需要的是什么呢?就是前辈们的指导,告诉他们,他们真正的需求是什么,然后他们恍然大悟,似乎这就真的是他们此时所最需要的东西了。

而就大多数事情而言,根本没那么复杂,随意挑选一个你最感兴趣的方向就好了;如果挑不出来,那就随意挑一个你感觉自己最擅长的;如果还挑不出来,那就挑一个你感觉最顺眼的即可。

学习信息安全技术如同做其他事情一样,最终如果你要想有所成就,必然是登上这个领域数座高峰的强者,然而你一开始并不能做到这一点,因此最简单的方法就是随便挑选一座不是太低的山峰蹬一蹬试试看。因为只要你能登上其中的一座山峰,就能一览众山小,就掌握了快速登顶相邻山峰的方法。

学习信息安全技术同样如此,你应该想找一个不是太浅的方向(例如渗透就有些浅)深入研究下去,等你将这个领域彻底研究明白后,其他方向的技术自然就能触类旁通了。

4. 学习路线详解

https://mp.weixin.qq.com/s/rB52cfWsdBq57z1eaftQaQ

【一一帮助网络安全提升点我一一】
①网络安全学习路线
②20份渗透测试电子书
③安全攻防357页笔记
④50份安全攻防面试指南
⑤安全红队渗透工具包
⑥网络安全必备书籍
⑦100个漏洞实战案例
⑧安全大厂内部视频资源
⑨历年CTF夺旗赛题解析


第一步:计算机基础

这第一步,其实跟网络安全关系都不太大,而是进入IT领域的任何一个人都要掌握的基础能力。下面五大课程,是大学老师当年教给我们的,不管你是什么技术方向最好都好好学的技术,如今看来,仍然不过时:

  • 计算机网络
  • 计算机组成原理
  • 操作系统
  • 算法与数据结构
  • 数据

这每一门课程其实都内有乾坤,基本都不能做到一次学习就能掌握,而是伴随每个人的职业生涯,不同的技术阶段都会有不一样的认识和感受。
具体学起来建议参考敏捷开发,不断迭代:有一个粗略的认识**->有了进一步的认识->彻底掌握->温故而知新。**不用纠缠于把一门课程全部学完学懂才进入下一门课程。

第二步:编程能力

有了上面的一些基本功后,这个时候就需要动手,来写点代码,锤炼一下编程的功底。
下面三项,是安全行业的从业者都最好能掌握的语言:

  • Shell脚本:掌握常用的Linux命令,能编写简单的Shell脚本,处理一些简单的事务。
  • C语言(C++可选):C语言没有复杂的特性,是现代编程语言的祖师爷,适合编写底层软件,还能帮助你理解内存、算法、操作系统等计算机知识,建议学一下。
  • Python:C语言帮助你理解底层,Python则助你编写网络、爬虫、数据处理、图像处理等功能性的软件。是程序员,尤其是黑客们非常钟爱的编程语言,不得不学。

第三步:安全初体验

有了前面两步的打底,是时候接触一些网络安全的技术了,刚刚开始这个阶段,仍然不要把自己圈起来只学某一个方向的技术。这个阶段,我的建议是:但当涉猎,见往事耳。
网络协议攻击、Web服务攻击、浏览器安全、漏洞攻击、逆向破解、工具开发都去接触一下,知道这是做什么的,在这个过程中去发现自己的兴趣,让自己对网络安全各种领域的技术都有一个初步的认识。

第四步:分方向

在第三步中,慢慢发现自己的兴趣点,是喜欢做各种工具的开发,还是喜欢攻破网站,还是痴迷于主机电脑的攻击···
这个时候就可以思考自己后面的方向,然后精力开始聚焦在这个方向上,通过上面思维导图中各自方向的技术去持续深耕,成为某一个领域的大拿。

尾言

说实话,上面讲到的资料包获取没有任何门槛。
但是,我觉得很多人拿到了却并不会去学习。
大部分人的问题看似是 “如何行动”,其实是 “无法开始”
几乎任何一个领域都是这样,所谓 “万事开头难”,绝大多数人都卡在第一步,还没开始就自己把自己淘汰出局了。
如果你真的确信自己喜欢网络安全/黑客技术,马上行动起来,比什么都重要

网络安全领域就像是一棵硕果累累的参天大树,底下站着无数观望者,他们都声称自己喜欢网络安全,想上树摘果,但面对时不时垂下来的藤枝,他们却踌躇不前,犹豫不决。

实际上,只要任意抓住一根藤枝,都能爬上这棵树。
大部分人缺的,就是这么一个开端。

参考书籍列表

所有书籍共计 2632.50 元,大概 15000 页。这些内容脱产自学的话至少需要 3 年。边工作边自学的话,如果工作内容不能与学习内容高度重合,那么至少需要 5 年以上时间。


推荐阅读
  • 恶意软件分析的最佳编程语言及其应用
    本文介绍了学习恶意软件分析和逆向工程领域时最适合的编程语言,并重点讨论了Python的优点。Python是一种解释型、多用途的语言,具有可读性高、可快速开发、易于学习的特点。作者分享了在本地恶意软件分析中使用Python的经验,包括快速复制恶意软件组件以更好地理解其工作。此外,作者还提到了Python的跨平台优势,使得在不同操作系统上运行代码变得更加方便。 ... [详细]
  • 腾讯安全平台部招聘安全工程师和数据分析工程师
    腾讯安全平台部正在招聘安全工程师和数据分析工程师。安全工程师负责安全问题和安全事件的跟踪和分析,提供安全测试技术支持;数据分析工程师负责安全产品相关系统数据统计和分析挖掘,通过用户行为数据建模为业务决策提供参考。招聘要求包括熟悉渗透测试和常见安全工具原理,精通Web漏洞,熟练使用多门编程语言等。有相关工作经验和在安全站点发表作品的候选人优先考虑。 ... [详细]
  • Python语法上的区别及注意事项
    本文介绍了Python2x和Python3x在语法上的区别,包括print语句的变化、除法运算结果的不同、raw_input函数的替代、class写法的变化等。同时还介绍了Python脚本的解释程序的指定方法,以及在不同版本的Python中如何执行脚本。对于想要学习Python的人来说,本文提供了一些注意事项和技巧。 ... [详细]
  • svnWebUI:一款现代化的svn服务端管理软件
    svnWebUI是一款图形化管理服务端Subversion的配置工具,适用于非程序员使用。它解决了svn用户和权限配置繁琐且不便的问题,提供了现代化的web界面,让svn服务端管理变得轻松。演示地址:http://svn.nginxwebui.cn:6060。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 学习SLAM的女生,很酷
    本文介绍了学习SLAM的女生的故事,她们选择SLAM作为研究方向,面临各种学习挑战,但坚持不懈,最终获得成功。文章鼓励未来想走科研道路的女生勇敢追求自己的梦想,同时提到了一位正在英国攻读硕士学位的女生与SLAM结缘的经历。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • Webmin远程命令执行漏洞复现及防护方法
    本文介绍了Webmin远程命令执行漏洞CVE-2019-15107的漏洞详情和复现方法,同时提供了防护方法。漏洞存在于Webmin的找回密码页面中,攻击者无需权限即可注入命令并执行任意系统命令。文章还提供了相关参考链接和搭建靶场的步骤。此外,还指出了参考链接中的数据包不准确的问题,并解释了漏洞触发的条件。最后,给出了防护方法以避免受到该漏洞的攻击。 ... [详细]
  • Android源码深入理解JNI技术的概述和应用
    本文介绍了Android源码中的JNI技术,包括概述和应用。JNI是Java Native Interface的缩写,是一种技术,可以实现Java程序调用Native语言写的函数,以及Native程序调用Java层的函数。在Android平台上,JNI充当了连接Java世界和Native世界的桥梁。本文通过分析Android源码中的相关文件和位置,深入探讨了JNI技术在Android开发中的重要性和应用场景。 ... [详细]
  • 本文介绍了Linux Shell中括号和整数扩展的使用方法,包括命令组、命令替换、初始化数组以及算术表达式和逻辑判断的相关内容。括号中的命令将会在新开的子shell中顺序执行,括号中的变量不能被脚本余下的部分使用。命令替换可以用于将命令的标准输出作为另一个命令的输入。括号中的运算符和表达式符合C语言运算规则,可以用在整数扩展中进行算术计算和逻辑判断。 ... [详细]
  • 本文介绍了Windows操作系统的版本及其特点,包括Windows 7系统的6个版本:Starter、Home Basic、Home Premium、Professional、Enterprise、Ultimate。Windows操作系统是微软公司研发的一套操作系统,具有人机操作性优异、支持的应用软件较多、对硬件支持良好等优点。Windows 7 Starter是功能最少的版本,缺乏Aero特效功能,没有64位支持,最初设计不能同时运行三个以上应用程序。 ... [详细]
  • 31.项目部署
    目录1一些概念1.1项目部署1.2WSGI1.3uWSGI1.4Nginx2安装环境与迁移项目2.1项目内容2.2项目配置2.2.1DEBUG2.2.2STAT ... [详细]
  • 2022年的风口:你看不起的行业,真的很挣钱!
    本文介绍了2022年的风口,探讨了一份稳定的副业收入对于普通人增加收入的重要性,以及如何抓住风口来实现赚钱的目标。文章指出,拼命工作并不一定能让人有钱,而是需要顺应时代的方向。 ... [详细]
  • 本文介绍了使用readlink命令获取文件的完整路径的简单方法,并提供了一个示例命令来打印文件的完整路径。共有28种解决方案可供选择。 ... [详细]
author-avatar
Yunir_944
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有