张大胖上大学的时候就对网络安全非常感兴趣, 经常上网去搜索那些传奇的黑客故事,然后心里痒痒的想小试牛刀。
那个时候大家的安全意识非常薄弱,张大胖学会了SQL注入以后,居然用它获得了一个BBS网站的用户列表,并且包括所有的密码——这些密码都是明文保存在数据库中的。
有了这一次的成功经验,张大胖决定向邮箱系统进军。
邮箱系统也好不到哪里去,没有验证码,也没有登录失败几次以后的账户锁定,这就意味着张大胖可以不断尝试密码,直到成功。
当然手工做是不行的,需要软件和密码字典,张大胖搜了一下,发现了小榕写的溯雪:
看到这个工具,张大胖就激动起来,准备找个邮箱做实验, 用谁的呢?他眼珠一转,为什么不去自己暗恋的女生的邮箱去看看?就这么办!
张大胖有点像做贼似地输入邮箱的URL,溯雪自动定位到了用户名和密码的表单,记录下了field name,接下来就是等待溯雪去自动尝试了。
不知道过了多长时间,也不知道溯雪尝试了多少密码,突然间,让人惊讶的事情发生了,居然登录了!
张大胖用发抖的手点开了收件箱,那里只有三封无关痛痒的邮件,还有一个广告,让他好生失望。
怎么办?在邮箱中写上张大胖到此一游?张大胖没这个胆量。 修改一下密码?似乎也没有什么用处。
于是张大胖灰溜溜地退出了。
第二天, 张大胖看了一篇文章《脚本小子》,说脚本小子不像真正的黑客那样发现系统漏洞,他们通常使用别人开发的程序来恶意破坏他人系统, 被真正的黑客所鄙视。
张大胖心想:这是不是在说我?我也没做破坏啊,我就是有点好奇而已。
不过只是用这些工具确实也没啥意思,还是学一点黑客的基础知识吧,先从著名的缓冲区溢出开始。
真正深入学习以后张大胖就傻眼了,想理解缓冲区溢出, 首先得理解进程在内存的布局,函数调用是如何通过栈帧实现的,参数是怎么传递的,这一切都和汇编密切相关,什么EBP, ESP,RET,让张大胖头晕眼花,不得不恶补了一下大学勉强及格的汇编。
理解了原理还远远不够,还得找到那些具备缓冲区漏洞的程序, 用巧妙构造的输入数据去覆盖返回地址,这样函数调用返回的时候才能跳转到攻击者指定的地方。
缓冲区溢出详情参见文章《CPU阿甘之缓冲区溢出》
我的妈呀,这是人干的活吗?张大胖觉得自己智商余额严重不足,但是还不死心,又去学逆向工程,这是对C/C++和汇编的考验,得理解PE,ELF这样的文件格式(和操作系统紧密结合),掌握密码学,加壳脱壳等知识,熟练使用逆向分析工具,调试工具。
还是明智一点,转战Web安全吧。
同源策略,跨站脚本攻击(XSS), 跨站请求伪造(CSRF), 点击劫持,注入攻击...... 这些东西就比缓冲区溢出要容易理解了,更好玩的是,都是在浏览器中进行,掌握了JavaScript等知识以后,立刻就能玩起来。
张大胖自己搭建了一个实验的网站,用一些小例子把这些攻击和防御都玩了一遍,比如alert一下"受害者"的cookie, 建立一个简单的钓鱼链接等等。
学了一段时间以后,张大胖准备在真正网站上小试牛刀,可是他发现这些网站都已经变“精”了,防护得很严密,对输入数据有严格控制, 他好不容易找到一个XSS漏洞,但是费劲了心机,花了好几个小时,也无法注入一段有效的攻击代码。
张大胖叹了一口气,这黑客真不是这么容易当的, 自己不是这块儿料。
在安全领域,理论和实践之间有着巨大的鸿沟,虽然懂得了原理,但是想要实施一次漏洞攻击,那一定得有非凡的创造力,再加上无与伦比的耐心。
张大胖对当一名黑客丧失了信心,也丧失了好奇心,他开始明白最初的好奇其实是自己不切实际的幻想:在网络世界中无所不能,行侠仗义。
他果断把精力转到了Web开发领域,走上了开发之路。不过,他的“黑客经历”也没有浪费,因为在Web开发中,他的安全知识也派上了用场, 帮助公司的产品来堵上安全漏洞,变得更加安全。
注:真正的黑客是守护者和建设者,不是破坏者。
推荐阅读做技术最怕埋头苦干探索Flutter异步消息的实现互联网 HR 黑话大全,太真实了!
编程·思维·职场