这个是纯技术贴,也算是在这个方向搞这些年的经验交流贴,观点都是个人的经验之谈。
我先说一下我目前的技术栈吧:精通Javascript逆向、协议逆向、滑块破解等网页逆向技术,有成功逆向多个一线大厂加密参数、滑块算法的经验;熟悉浏览器内核,能独立开展指纹浏览器相关研究,熟悉C++;掌握Android逆向和Android Hook技术,熟悉java层逆向、基本掌握so层逆向技术,能开展常规app协议分析(做的比较少);熟悉OWASP Top 10漏洞,能够独立开展常规Web漏洞挖掘(目前已经不做了),拥有多个中高危漏洞编号;熟悉常规渗透测试和红队手段,能够独立开展渗透测试项目(目前已经不做了);了解Windows逆向和pwn,能阅读汇编语言(目前已经不做了)。
首先,如果年轻我首先还是建议转开发,有学历的去卷算法(盾内应该都很难具备这一条)。网络安全应该是这里面国内生态最差的一个了,有兴趣的去脉脉看一下安全厂商的现状,基本都在亏钱,没有赚钱的安全厂商,我没有贬低这个行业,但是市场现状就是这样,事实是国内的市场并不需要大量专业的安全人员,绝大部分安全的工作都是后端开发和运维给兼职干了。走开发的话转网安相对容易一点,很多功能点都清楚代码是怎么实现的。
其次,把你的技术方向和想去的公司的业务结合起来。啥意思呢?因为公司招人都是为了自己的业务安全,你挖src非常牛,挖web非常牛,那你可以去一些电商公司,试想,一个做Windows逆向的人,你让他去某东、某宝就职,能去吗?岗位机会很少啊,人家的业务就不是干这个的,但是你要是Windows逆向非常强,微软、360这些是可以去的,因为微软的业务就是Windows,360的一个业务就是主机安全。
第三,要选对技术方向,网安本身它是一个大类方向不是小类,涵盖的技术方向太多了,Windows逆向、渗透测试、安全开发、安卓逆向、应急响应等等,如果选择错了方向的话会有点亏时间,但也不是非常亏,有些方法论都是相通的,比如你做Android逆向的Java层逆向,和你做Java代码审计挖洞其实差不多,Java语言本身就容易被反编译,还有比如web漏挖,php、java的系统上手之后不都是要看路由么,思路大同小异。
第四,要了解自己的思维方式,根据思维方选择合适的方向。因为网安这个领域很看思维方式,有些人的思维方式他就不适合漏洞挖掘,没有贬低的意思,我自己也是这样,虽然我曾经挖出来过一些洞,但是我知道我不适合这个方向,漏洞挖掘是一个需要创造性思维方式的领域,而我在这方面是缺乏的,包括我现在做的JavaScript逆向里的协议逆向,相对而言就不那么吃创造力的天赋点,有挖过src的应该知道,那有的黑盒测试就是脑洞大开的方法测出来的洞,很多洞都是常规思路搞不出来的(CTF里更甚,当然CTF后面会说),当我意识到我的思维不适合做漏挖的时候就果断转方向了。
第五,尽量避免就业面窄的方向,我这里主要说的就是Windows逆向,这个就业面窄,Windows逆向的兴起在世纪初就开始有人做了,当时是蓝海,这个方向发展了二十年,已经被玩烂了,能去的厂商就那么些,排除360这些安全厂商,剩下就是去游戏厂商做游戏安全(反外挂方向)了,岗位也就那么些,所以这个方向我也没做很深,当时上学的时候破解了几个软件就没再深究了。
第六,src不建议新手太花时间去挖,ctf可以适当去打但是也要多调CVE。src作为黑盒测试,作为技术成长期特别是入行不久的人来说,不适合去大量花时间搞这个,因为你掌握的测试方法就那么些,拿到一个站,先信息收集找资产、扫目录、扫子域名、然后找功能点、抓包、多个账号测逻辑洞、看到框框插个xss、看到?参数名=就插个sql、看到参数可控就测一下命令执行或者目录穿越、注册多个账号测越权等等,常规思路就是这些,你用这些思路去反复的做src黑盒,并不能提升你对漏洞原理和代码层面的认知,也就是说你是去反复验证你自己“已知”的漏洞测试思路,而不是去“发现未知”,技术层面提升比较慢,你可能花了半个月去挖src,结果连MVC框架是什么都不知道。src说完了再说一下ctf,目前的ctf(我只说web方向)相当一部分脱离real world,单纯为了脑洞而脑洞,挖洞这一块还是建议要经常调试实际的漏洞和挖实际的系统去,这样才能加深对业务代码的理解。
第七,用好AI,有AI很多时候能节省大量时间,很多工具类代码直接丢AI让他写就行,比如我做网页逆向的时候的hook代码。
第八,重要的事情说三遍,代码功底,代码功底,代码功底!做逆向也要,挖洞也好,红队也好,代码功底是必备的。
第九,学会合理规划学习进度,我这里说的主要是不要把大量时间花在编程语言基础上,基础的意思是什么?就是你做漏挖,做Java也好PHP也好,需要你懂开发,但不是说得精通开发到像个专业的开发人员,比如Java的常见数据类型、运算符、类和对象这些,大概过一遍就行了,知道了大概是什么东西之后就去结合实际的系统再去理解,光去一遍遍看一些十几行的demo,效果肯定不如你去结合实际的系统来理解这个东西的,我当时转js逆向的时候,js基础我就花了半天看一遍之后就去调试代码去了,遇到不懂的代码片段或者语法就问AI呗,这样才能把效率最大化。
第十,学习路线问题。我这里只说我做过比较多的方向,一个是渗透测试,这个方向覆盖面太广了,我自己也不敢说我非常精通,只敢说我懂点皮毛吧,入门的话可以去B站先看一些几年前的课程(小迪的课我记得有免费的),有代码基础的可以倍速或者跳着看,就是先对整个渗透测试有个基本概念,什么是扫描啊?什么是打点啊?什么是OWASP Top 10啊?内网是什么啊?隧道代理是什么啊?提权是什么啊?什么叫web shell?进了内网之后该做什么?这些都有基础之后,再结合一些靶场去验证自己的思路。一个是JavaScript逆向,也是我现在主要在做的,这个的基础其实就是JavaScript和代码逆向的思维,附带一些加密算法基础,我感觉比渗透测试相对需要了解的东西少。
第十一,不要乱花钱报课。网安这个圈子鱼龙混杂,卖水课、割韭菜的大有人在,有的课的目录一看就是大水逼,还有知识星球割韭菜的,进去了发现都是拿着其他人发过的东西当二道贩子的,什么人都能自称“黑客”“师傅”,我现在都不敢说我的水平达到了“黑客”的级别,在红队方向顶多算是better script kiddie。我个人推荐的课的话,渗透测试我推荐小迪和月总的,安卓逆向和js逆向我推荐小肩膀的(小肩膀不是教挖洞的,课程是协议逆向),这些都在B站上能搜到。