程序员如何实现财富自由?

有国外的码农在论坛里提问:“为了过上更好的生活我两年前移民到法国后,开始从事前端开发,我的月薪从当时的1.5万涨到现在的1.9万。这样的工资还算可以,但我觉得不够多。

我在想为什么所有人都能赚大钱?而我作为码农,实在不知道该如何提高自己的收入,又该怎么做才能买上房子,让生活过得更好些呢?”

原来不单是中国人在焦虑买房升职加薪的事,同一个世界同一个挣钱买房的命题。

那么作为程序员,我们该如何才能赚到更多的钱呢?今天我们来聊聊程序员通向财富自由之路的几个阶段。

初阶:跳槽

正如网友skc说的,如果你唯一的目标是赚钱,那么跳槽绝对是最快和最有效的方法。

如何做呢?

美国程序员建议道:“定期更换公司,每次要求薪资增加15-20%,在你达到开发者工资中位数之前,每年10%的加薪应该是常态。”

程序员李辉便是如此,工作六年,工资从刚毕业的六千块钱到现在的3.5万,他经历了四次跳槽。

他说工作只是为了挣钱,老板不给涨工资就换另一家了。他从不认为说要考虑工作稳定、跟同事感情好、领导人很好就不跳槽了。

李辉认为去哪还不是干活,当然要去钱多的公司。

关于跳槽如何谈工资,他有一套经验总结:普通程序员涨薪20%并不算多,他一般往涨薪30%以上要的,不给就再去别的公司面试去。每次跳槽不容易,当然得使劲要。

但这样通过跳槽涨薪的方式,适合工作几年的年轻程序员,一旦这个人达到了一定的工资上限,跳槽并不会有太大的涨薪,还会被对方质疑你为什么会频繁跳槽。

李笑来在《财富自由之路》写道,“跳槽,跳上三五次,薪水翻番的情况也很多。但从长远来看,这样做不仅是不明智的,其结果也是很明确的:你见到多少人通过频繁跳槽获得财富自由了?一个都没有。”

而且如果仅奔着钱去的话,最后你可能会发现你被困在了一个除了他们的工资之外你并不真正喜欢的公司里。

进阶:给自己加薪

程序员除了可以通过跳槽涨薪外,还能通过哪些渠道增加收入呢?

做副业。

曾听过一位技术大牛说,我好几年没动过工资卡了。平常的房贷、养娃、生活开销均是副业挣来的。

很多程序员会问,我只会写代码,难道只能通过拉私活来挣钱吗?

不是的。

曾看过一对程序员和运营夫妻的小比赛:两人在两个小时内看看谁挣的钱多?

程序员想了想自己只会编程,两个小时不能拉到一个编程私活。于是拿起车钥匙,打算出门去拉黑车。妻子拉住他,笑了,堂堂程序员咋只能去干“苦力”呢?开两小时的黑车最多能挣两三百块。

他完全忽略了自身的优势:研究生、一线互联网背景、程序员。

妻子分析道,你和程序员最懂软件网站的代码问题所在,为什么不去挖漏洞赚钱呢。于是程序员花了半个月学习挖漏洞的技巧,在腾讯SRC漏洞平台挖到漏洞,提交到平台就拿到了奖励。

两个月过去,他每月多赚15k。

“商机”是要自己去发现的,程序员由主业延伸能做的副业很多,例如打CTF比赛,参加护网行动等。

高阶:自主创业

笔者采访了一位80后IT创业者王亮,谈谈他是如果从一位小码农走到如今已实现财富自由的职业经理人。

王亮大学成绩不好,毕业时想谋一个好出路,于是他面试了80多家IT公司,最终他成功去了一家大公司当开发。工作一段时间后,他发现大公司已无技术可学,然后跳槽到某银行,在那的六年时间从一名初级程序员成长为带领几百人的项目经理。

他在这此全职工作期间还尝试兼职创业两次。最后在银行呆了六年后他察觉到了职业瓶颈,于是离开平台自主创业。

由于积累了不少技术资源、人脉资源和商业资源,两年时间他的公司营业额从0增长到5000万,他个人税后收入为几百万。后来公司被腾讯投资,估值几亿。目前他在做职业经理人,玩一堆小公司。

他说,现在不需要考虑挣钱和赔钱的事了,主要是改变了生活方式和思考方式。

一些建议

确定好目标

笔者通过和王亮的采访得知,他是个很有职业规划的人。他明确自己30岁后要自主创业,为此他提前5、6年开始做准备。他知道自己需要具备技术技能、行业知识、管理技能、人脉资源等的资本才能创业,所以他从大公司+研发转管理的路子开始走。

他说,如果程序员在工作了三五年,甚至十年八年后,仍不知道自己该在哪个节点具备那些能力的话,又该如何挣大钱呢?

“**对于****这些节点的规划非常重要,一般来说,每个人在每两三年会有一个大机遇, 如果他看好了抓住一次,那他的人生就变了。**所以说每三年的大机遇是和一个人的职业生涯的规划是相符的。

如果浪潮来了,你仍浑浑噩噩的,或者即使知道浪潮已到,但你没有对应的能力去捕捉到它,那就错失财富了。”他说。

扩大视野

很多程序员圈子较小,只能看到身边的同事朋友跳槽去了BAT或者TMD,月薪好几万,便觉得是殿堂级的目标。等自己到达了这个目标后得意洋洋,每个月盯着不菲的工资却止步不前了。

实则不是的,王亮说,“如果你早知道同一届的同学现在年薪都300万了,你就不会觉得自己的30、40万工资高了。”

王亮也有短视的经历:在2012年时蚂蚁金服、百度曾经邀请他加入。但由于他视野不够,看不准互联网金融的机会,他都拒绝了。“如果当时早早加入了,没准现在的路可能会更好。”王亮遗憾道。

倒逼成长

作为白手起家的普通人,在工作的前几年王亮家庭并不具备All in创业的条件。但是王亮的创业目标早已确定,在规定的时间点到达之际,他必须离开平台,那他怎么办呢?

他倒逼自己,将所有的准备往前赶:在那几年里,王亮每天晚上八九点下班后,开始做兼职创业的事情,经常干到早晨凌晨三四点,然后早上八点接着上班。

“往前赶的过程非常痛苦的。因为在没有人去督促你的情况下,你想做这个事情,挺难的。”王亮说。

聚焦

无论是做技术还是做管理,抑或到最后自主创业了,王亮始终在一个行业里折腾。他说“你需要在某一领域做到专心,你专心做完后才能去做扩张的事情”。

很多程序员跳槽时不看行业,一年一跳,每次的行业领域均不同行业知识均需要从头积累。一个行业需要从事三五年,才能深入认知其行业规律。频繁更换导致每个行业资源积累均是泛泛而言,达不到深层积累。

追寻财富有很多条路,但不外乎“内修武功”:提高自身各项能力、提高单位时间价值、培养独特的眼光、人脉积累;“外观八方”:观察行业趋势、思考机遇等。

“这个世界非常多样,自我实现的方式也绝不止哪一种。我们每个人都不一样,永远不要试图成为他人,那是妄念。我们唯一能做的,就是看清自己并努力成为更好的自己,这条路永远都不会错。”

除了上述的增长财富的方式,身边还有程序员跟对公司,并在忠诚地工作多年,一纸期权变帝都房子的例子。

那么作为程序员,你有什么好的挣钱方式呢?欢迎在文末留言哦。

学习漏洞挖掘的正确顺序

当然,学习漏洞挖掘之前,需要掌握以下几个方面的内容:
在这里插入图片描述

编程语言和计算机基础知识
在漏洞挖掘过程中,挖掘者需要编写代码来验证和利用漏洞,因此需要至少掌握一种编程语言,如C、Python、Java等。同时,还需要了解计算机的基础知识,例如计算机系统的组成结构、操作系统的原理、计算机网络的基本概念、数据库的工作原理等。如果没有这方面的基础知识,就很难理解漏洞挖掘中所需要的各种技术和工具。

安全基础知识
漏洞挖掘是一项安全工作,因此需要掌握一些安全基础知识,例如Web安全、网络安全、应用程序安全、二进制安全等。建议挖掘者先学习一些基础的安全知识,例如OWASP Top 10漏洞、常见的网络攻击技术和漏洞类型等,这可以帮助挖掘者更好地理解漏洞挖掘中所面临的问题和挑战。

漏洞挖掘工具
学习漏洞挖掘需要掌握一些常用的漏洞挖掘工具,例如Burp Suite、Metasploit、Nmap、Wireshark、IDA等。这些工具可以帮助挖掘者加速漏洞挖掘的过程,同时也能帮助挖掘者深入理解漏洞的原理和产生的原因。例如,Burp Suite可以帮助挖掘者拦截和修改HTTP请求,Metasploit可以帮助挖掘者构造攻击载荷等。

学习漏洞挖掘技巧和方法
学习漏洞挖掘需要了解一些常用的技巧和方法,如Fuzzing、代码审计、反向工程、漏洞利用等。这些技巧和方法能够帮助挖掘者更快速地发现漏洞,并且深入理解漏洞的原理和利用方式。例如,Fuzzing可以帮助挖掘者通过自动生成大量的输入数据,来测试程序是否存在漏洞,代码审计可以帮助挖掘者通过分析代码来发现漏洞等。

总的来说,学习漏洞挖掘需要综合掌握多方面的知识,包括编程、计算机基础知识、安全基础知识、漏洞挖掘工具以及漏洞挖掘技巧和方法。建议先从基础知识入手,逐步深入学习,不断实践,并在实践中发现和解决问题,才能逐渐成为一名优秀的漏洞挖掘者

对于有一些基础知识的初学者,应该怎样进行漏洞挖掘呢?

**2024黑客&网络安全教程**👇

在这里插入图片描述

一、如何发现漏洞
从某个角度来讲,我们可以将漏洞挖掘工作比作玩迷宫游戏,不同的是,这个迷宫与我们平时所见的游戏中的迷宫略有不同:
在这里插入图片描述

(1)你无法立即看到它整体的外观
(2)随着漏洞挖掘工作的深入,这个迷宫的形状逐渐扩大
(3)你将会拥有多个起点及终点,但是无法确定这些点具体在哪里
(4)最终这个迷宫可能永远也无法100%的完整,但是却能够弄清楚A点至B点的一条完整路径

具体一点地描述,我们可以将漏洞挖掘工作归结为三个步骤:

(1) 枚举程序入口点(例如:与程序交互的接口)
(2) 思考可能出现的不安全状态(即漏洞)
(3) 设法使用识别的入口点到达不安全状态

即是说,在这个过程中,迷宫是我们研究的应用程序,地图是我们对程序的理解程度,起点是我们的入口点(交互接口),终点为程序的不安全状态。

所谓入口点,既可以是UI界面上直观可见的交互接口,也可以是非常模糊与透明的交互接口(例如IPC),以下是部分安全研究员较为感兴趣的关注点:

(1) 应用程序中比较古老的代码段,并且这一部分随着时间的推移并没有太大的变化。
(2) 应用程序中用于连接由不同开发团队或者开发者开发的程序模块的接口部分
(3) 应用程序中那些调试和测试的部分代码,这部分代码本应在形成Release版本时去除,但由于某些原因不小心遗留在程序中。
(4) C-S模式(带客户端和服务端)的应用中客户端及服务端调用API的差异部分(例如网页表单中的hide属性字段)
(5) 不受终端用户直接影响的内部请求(如IPC)

从攻击面上来划分,可以将漏洞分为两大类,通用漏洞(General)和上下文漏洞(Contextual)。通用型漏洞是指在我们对应用的业务逻辑不是非常熟悉的情况下能够找出的漏洞,例如一些RCE(远程代码执行)、SQLi(sql注入)、XSS(跨站)等。上下文漏洞是指需要在对应用的业务逻辑、认证方式等非常熟悉的情况下才能找到的漏洞,例如权限绕过等。

在漏洞挖掘的过程中,首先根据经验优先考虑研究测试那些可能会对应用产生巨大威胁的部分。一些轻量级威胁检测模型(如STRIDE)可以辅助我们做出这样的决策。

下面我们来看一个WEB应用程序的漏洞示例,后面将会介绍桌面程序:
在这里插入图片描述

首先我们假设目标web应用是一个单页面应用程序(single-page-application SPA),我们已经获得合法验证去访问这个应用,但是我们没有任何关于服务端的源代码或者二进制文件。在这种情况下,当我们枚举入口点时,可以通过探寻该应用的不同功能来进一步了解其业务逻辑及功能,可以通过抓包分析看HTTP请求内容,也可以分析客户端的网页代码获取需要提交表单的列表,但是最终的限制还是我们无法具体知悉客户端和服务端调用的API之间的区别,不过通过以上方法,我们可以找到一些入口点。

接着就是操作这些入口点,以试图达到我们预期的不安全状态。由于漏洞的形态很多,我们通常需要构建一个适用于该测试应用程序的业务功能漏洞的测试集,以求达到最高效地寻找漏洞。如果不那样做的话,我们就将会在一些无用的测试集上花费大量时间,并且看不到任何效果(举个例子,当后台的数据库为Postgres时,我们用xp_cmdshell去测试,测试再多次都无济于事)。所以在构造测试集时,需对应用程序的逻辑有较深的理解。下图形象地展示了低效率测试集的效果:
在这里插入图片描述

对于桌面应用程序,漏洞挖掘的思路本质上与web程序是类似的,不过也有一些区别:最大的区别在于,桌面应用的执行方式与流程与web程序不一样,下图展示的是桌面应用漏洞挖掘的一些内容:

在这里插入图片描述

与黑盒测试相比,当有源代码时(白盒测试),在寻找代码入口和程序执行路径等漏洞挖掘点时所做的猜测性的工作会大大减少,在这种情况下,将数据载荷从入口点执行到不安全的程序位置的效率低于从不安全的程序位置回溯至入口点。不过在白盒测试中,你对代码的测试的覆盖面可能会由于你自己的知识局限性而受到影响。

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

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

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

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

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

下面这张表格介绍了挖掘web应用程序和桌面应用程序的漏洞时所需要掌握的内容。每个类别中的条目仅用于说明目的,并非详尽无遗。

在这里插入图片描述

这些知识领域将会帮助你提高挖掘漏洞的能力。如果说上面一节是讲诉挖掘漏洞所需要的知识,那么下面的这一节将讲诉挖漏洞如何做。

三. 漏洞挖掘需要做什么
当分析一个应用程序时,你可以使用下图展示的四个“分析模型”,如果遇到障碍导致思路受阻时,你可以从其中一个模型切换到下一个模型,当然,这不是一个线性的切换,你也可以有自己的一套方法。
在这里插入图片描述

在每一个模型之中都有主动活动(active activities)与客观活动存在(passive activities),主动活动需要我们对程序的执行环境及上下文有一个比较全面的了解,而客观活动却不一定,比如它是客观存在与程序的一些技术文档之中。不过,这种划分也不一定严格,不过对于每一个活动,我们可以从以下几方面去考虑:

(1) 理解有关漏洞的相关模型
(2) 试图假设一个场景去破坏程序
(3) 尝试去破坏程序

四. 有关漏洞挖掘的其他想法
漏洞的复杂性
漏洞的复杂性分布非常广。一方面,有很多漏洞非常简单与直观,并且利用代码一目了然,比如说经典的sql注入。另一方面,在系统中有的看似并不相关,并且就其自身而言并非不安全,但是当这些东西以一种特定的方式结合起来的时候,就有可能引发大的漏洞,比如说条件竞争,或者一些其他的复杂的逻辑漏洞。可以尝试将这些漏洞按照复杂级别分为“一级漏洞”和“二级漏洞”,不过也有其他分类方法。引用一局来自Project Zero的Ben Hawkes说过的一句话:

Themodern exploit is not a single shot vulnerability anymore. They tend to be achain of vulnerabilities that add up to a full-system compromise.

如今想要完成一个完整的利用,只靠单一的漏洞往往行不通。很多时候我们需要靠一连串的漏洞才能完成一起完整的利用,致使系统“妥协”。

团队工作
在一个团队中工作能够有效帮助自己了解自己不知道的知识,以及提高自己已知的知识。不过在团队中要需要注意工作的方式方法,知之为知之,不知为不知,永远不要强行假装精通你不熟悉的东西,因为精通的人可以很轻易的指出你的症结。如果一个团队里面大家都不坦诚相待,那么这不是一个合格的团队,你可以尽早更换。在优秀的团队中,不要指望别人会把所有的知识交给你,要学会如何高效的学习,并在团队交流与合作中不断提高。

五. 写在最后
希望这篇文章在可以帮助你解开一些对于漏洞挖掘的谜团。后续需要会再补充。在学习和研究漏洞挖掘的过程中遇到困难并感到不知所措是很正常的。不过学习的过程就是这样,只有不断的去尝试才会进步。祝你在漏洞挖掘的路上走的越来越远。

img

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

网络安全技术库

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值