我摊牌了,其实我是一名黑客,这是我的自白书。
我将坦白当我准备入侵一个目标时,我是如何收集信息并入侵的。最重要的是,我会给你们一些有用的忠告。
我是如何收集信息的
当我有了一个目标,我就需要开始对目标进行信息收集。
信息收集阶段很重要,因为目标一般对我来说都是黑盒子,我需要进行大量的信息收集才能知道这个系统的运行原理,以及哪里有漏洞可以利用。
收集信息一般分为以下几种类别,咳咳,划重点了,必考的,注意记笔记。
1、基本初始信息
- 比如网站的基本信息,以及背景,经营内容等。
2、技术信息
- 网站的技术栈,以及版本
- IP地址,端口,DNS,域名,子域名等
- 网站扫描,包括子目录、敏感信息等
- 关联系统,关联APP等,比如子公司的网站,或者内部使用的APP
- 常见的工具有:nmap, dirsearch, subbrute等
3、社工
- 关键重要人物信息,员工信息
- 内部运营方式,公司文化
- 社交媒体信息
- 利用人获得的信息,因为人才是最大的漏洞。
4、漏洞扫描
- 有很多漏洞扫描工具,可以帮助提前发现一些比较严重或者可以利用的漏洞。
- 常见的工具有:Nikto等
5、抓包
- 通过抓包可以获取一些重要API或者敏感信息,也可能伪造中间人攻击
- 常见的工具有:Fiddler,Wireshark等
6、Google hacking
- 可以帮助你收集关于这个网址的一切,比如可能找到一些敏感信息或后台入口等
信息收集的方法有很多种,但大多都是靠工具自动化,程序员都很懒,能自动化的事情绝不手动做。
收集到的任何一个小细节都可能成为你入侵这个系统的突破口。
通过信息搜集阶段,我们一般能得到以下这些成果:
- 网站后台登陆地址。
- 网站内部管理系统网址。
- 有漏洞的老版本软件。
- 社工信息主要用于构建爆破密码字典和获取敏感信息。比如ThoughtWorks的某个系统的密码一定包含TW或者thoughtworks。或者通过人获得的关键信息,比如密码。
- 已知漏洞。并不是所有网站都会关注已知漏洞并修复,可以利用一些已知漏洞进行入侵。
- 网站的一些内部运行原理。比如ThoughtWorks强制要求员工定期更新密码,比如某个关键系统是使用的某开源库。
我是如何入侵的(WEB端)
终于来到彰显我实力的部分了。
入侵成功一般有三种程度,其中第三种最危险:
- 拿到或修改未授权的数据。
- 拿到web shell,可以进行当前账号能操作的所有权限,也可以尝试提权。
- 拿到root权限,可以进行所有羞羞的事情。
常见的网站入侵手段主要有以下几种。大部分手段的目的都是为了直接获取想要的信息或者获取shell/root权限。
1、SQL注入
- 简单来说,就是利用恶意SQL语句让系统能执行你想执行的SQL语句。有些SQL语句是可以执行系统命令的,是不是觉得很可怕。所以SQL注入在某些情况下是可以拿到root权限的。
- 这个漏洞在过去比较常见,很多人都知道它,但现在大型正规网站基本上都没有这个漏洞了。通常需要在收集阶段去慢慢查找有没有SQL注入漏洞,也有一些工具可以直接扫描。最好用的SQL注入工具就是SQLMAP。
- 大部分SQL注入可以直接导致黑客拿到shell,严重的可以直接拿到root权限,即使拿不到shell也可以dump你的数据库。所以危险系数非常高。
2、XSS和CSRF攻击
- XSS全称是Cross-site scripting,即跨站脚本,CSRF全称是Cross-site request forgery,即跨站请求伪造。他们的原理和SQL注入差不多,简单来说就是利用前端代码来获取一些重要信息或者伪造一些信息。
- 通常你并不知道一个网站有没有这两个漏洞,需要在收集阶段就不停的测试查找有没有XSS和CSRF漏洞,也有一些工具可以自动扫描。比如XssPy。
- 这两个漏洞可能导致黑客拿到管理员用户名密码,登陆后台;或者进行非法的操作,比如当你在自己电脑访问某账户时,黑客通过你正在浏览的别的网站转走了你的钱。所以危险系数也非常高。
3、缓冲区溢出攻击
- 这个比较难懂,简单解释就是让代码溢出缓冲区从而能执行你想执行的代码。
- 这个漏洞依然广泛存在,只是要实现它的难度稍大,所以一般的低端黑客都不会这门功夫。这个几乎没有比较简单的工具能直接扫描,大部分需要你去看源码手动查找漏洞。
- 缓冲区溢出攻击可以让黑客在拿到web shell后提权以获得系统的最高等级权限,所以危险系数非常高。最出名的当属20年前的蠕虫病毒了,只是当时的目的不是为了入侵。
4、API
- 这个可能是大家最能理解和接受的入侵方式了。因为现在大部分应用都使用了Restful API,然而并不是所有API都完美的做好了认证和鉴权。这就让我们这种黑客有了可乘之机,可以通过API的非法调用来获取网站的数据或者入侵。
- API利用可以分为横向和纵向越权。横向就是一个用户访问别的用户的数据,比如最简单的例子就是,如果客户的ID是自增的,就可以通过API遍历的方式获取这个网站数据库里面的所有客户数据。纵向就是越权访问更高级别的,比如我通过API的漏洞,把自己的账号升级成为管理员账号。所以这种漏洞是能做到拿到root权限的。
5、逻辑/业务漏洞
- 这通常需要对网站的业务和使用逻辑比较熟悉。黑客常常会先重度使用网站,以便能发现一些业务或者逻辑漏洞。
- 比如验证码能绕过,或者某个重要API未鉴权,再或者我能修改别人的收款账号,让钱全部转进我的口袋。别问我是如何知道的。
- 最典型的例子就是前段时间火遍大江南北一夜之间让拼多多损失一千万的薅羊毛事件。所以千万别小看这种漏洞。轻则让你损失一千万,重则,嘿嘿,你自己想。
6、上传漏洞
- 上传漏洞是指利用网站的上传接口上传一些恶意的文件,以达到获取信息或者控制系统的目的。比如上传一个后台管理网页,我就可以通过我自己上传的后台管理界面登陆并查看网站的所有信息。
- 这种漏洞常出现在可以上传文件的地方,比如头像上传,附件上传。由于系统未对上传文件进行合法校验,导致了漏洞的存在。由于入侵程度是可以达到root权限的,所以危险系数非常高。
7、已知漏洞
- 即指的是现有框架/软件/系统已经公布存在的漏洞。
- 最出名的当属前段时间震惊全世界的勒索病毒,病毒利用了某些版本的Windows的SMB协议中的漏洞,从而恶意加密用户文件以勒索比特币。最新新闻是该组织宣布他们准备收手了,因为他们已经挣了30亿美元了。为什么我不是他们中的一员?。
- 再比如,早期的openSSH版本有一个大漏洞是可以遍历用户名,这样你就可以用获取到任意有openSSH服务器的用户名,再利用一个较好的密码字典就可以爆破服务器,然后登上服务器做所有羞羞的事情了,想想就好激动呢。目前很多人都还在用有这个漏洞的openSSH版本,别问我如何知道的。
- 已知漏洞之所以还能成功入侵,是因为并不是所有人所有公司都会关注漏洞的公布,以及及时做更新。所以依然有大量的人或公司在使用有已知漏洞的框架或系统。嘿嘿,赶快看看你有没有什么老版本的软件有重大漏洞呀。
8、0day
- 那什么是0day呢,0day恰好是已知漏洞的反义词,就是未知漏洞。就是指那些你第一个发现的漏洞,你是唯一知道这个漏洞的人,你又可以利用你发现的0day漏洞做羞羞的事情了呢。如果你发现一个可以拿到root权限的0day漏洞,那就不得了了。至于你要不要公布出来,就取决于你是白帽子还是黑帽子咯。
- 那怎么发现0day漏洞呢,这个就需要结合上面的所有方法去慢慢挖掘了,当然最重要的是少不了要专研源码。哎,看源码最头疼了,不说了,写完我还要继续看源码呢。
我是如何入侵的(APP端)
和网站相比,在这个移动互联时代,越来越多的人在使用移动APP,越来越多的公司推出了移动APP,但注重移动APP安全的人却少之又少。
那么针对APP的入侵手段有哪些呢?
1、抓包
- 通过抓包可以获取APP的所有请求,然后伪造请求来获取自己想要的数据。比如app领取无门槛优惠券是在客户端验证每人只能领一次,那我就可以通过抓包,然后直接发送请求的方式领取无数次。
- 抓包有时候也能获取很多敏感信息,比如用户名密码。市面上大部分app都是明文发送用户名密码的。不要以为用了HTTPS就是加密的,随便找个证书做一个中间代理就可以看到所有解密后的数据。这个时候你就可以偷偷连入邻居家的Wi-Fi,然后抓取邻居的用户名密码了。别问我如何知道的。
- 抓包等同于利用API入侵,所以有时候是可以做到拿到root权限的。危险系数非常高。
2、反编译源码
- APP移动端最大的漏洞就是所有源码都在你的手机上躺着的。虽然他们都是加了密或者混淆过的。但这些手段难得倒单身的程序员吗?加密或者混淆的代码就好像把一张拼图打乱了放进你手机,但只要你有足够耐心和方法,是一定能把代码拼还原的。
- 当然,目前已经有很多自动化工具能帮你反编译源码了,不管是Android还是iOS都能获得其源码。
- 既然都有源码了,不仅可以查找里面的敏感信息和漏洞,还能研究该APP的业务内容,以及技术栈。比如,你可以找逻辑或业务漏洞。也可以找到一些隐藏的API,做越权调用。而且,你很可能在里面发现一个0day漏洞。
3、和网站一样的手段
- 当然,刚才上面讲到的所有对付网站的手段,全都适用于APP客户端。
- 比如,APP端也能做SQL注入,因为这个漏洞其实是在服务端的,所以和客户端是什么形式没有关系。同时,APP端也可以利用XSS或者CSRF攻击,虽然XSS和CSRF都是前端代码,但因为管理员总是在网页端访问后台管理系统的。另外,大部分APP都有上传头像功能,说不定就有上传漏洞哦。
来自一个可爱的黑客的忠告(防范方法&安全实践)
如果你不听我的这些忠告,我就不再是你的小可爱了。
那我们就来看看如何防范上面的入侵手段,以及哪些安全实践是我们应该牢记于心的。
1、关于端口,目录,子域名等
- 绝不开放多余的端口。定期做好端口所用软件的更新工作。能不开放22端口就不开放。因为每天都有黑客实时在全球扫描开放的22端口。有Linux服务器的小伙伴可以去检查一下你的服务器,如果22端口开着,看看是不是每天都有很多ssh登陆失败的日志。
- 严格管理网站目录的访问权限,不仅要认证,也要鉴权。某个不起眼的目录可能就成为了黑客进入的钥匙。
- 哪怕是仅内部使用的域名或子域名,都要严格尊从安全实践。你绝对想不到黑客能在最边缘的网站里面找到什么最核心的内容。
2、密码与敏感信息
- 一定要定期更换密码,这一点TW做得非常好。你永远不知道谁在背后悄悄的用你的生日和电话爆破你的账户。(不是我)
- 敏感信息一定不要轻易写在某个公开的地方,包括写在源代码里。可执行的二进制文件都是可以反编译的,所有敏感信息都将暴露在外。另外,全球每天都有黑客在定期扫描GitHub,就是为了获取某个粗心鬼提交的服务器账号或者数据库连接字符串。TW也在定期扫描GitHub,不一样的是,TW是为了防范员工提交了敏感信息。
- 撞库。撞库指的是用从别的地方获取的用户名密码来尝试登陆某个指定系统。比如我获取了你的手机号和微信密码,我就可以用来尝试登陆支付宝,因为很可能你使用了同一个密码。撞库经常发生,此前很多大型互联网公司都遭遇过撞库。可见,定期更改密码多重要,更重要的是不要所有地方都使用同一个密码。
3、社会工程学
- 社会工程学是一门艺术,掌握好了就像007一样无孔不入。因为人才是最大的漏洞。如果社工做得好,是可以直接获取登陆用户名和密码的。
- 比如钓鱼就是一种常用的社工手段。其中钓鱼网站和钓鱼邮件是最常见的。而钓鱼邮件对于客服人员或者常用邮件的公司员工是最好用的。别问我如何知道的。
- 再比如,回忆一下有没有某个和你搭讪的小哥哥问过你关于密码的问题。(我不是那个小哥哥)
- 终极比如,如果我有TW员工的用户名密码,我是不是可以获得超级多的TW内部数据信息。那如何获得TW员工的用户名密码呢?自己想去吧。
4、API
- 不要以为访问API需要用户名密码你的API就是安全的。有太多手段可以获取或绕过用户名密码。也不要以为用了HTTPS就是安全的,它只是一层防普通人的壳。
- 所以,对于API不仅要做认证,也一定要做鉴权。认证指的是访问API需要提供的访问凭证,而鉴权则指的是某个已认证的用户是否有权限访问某个资源。记住,less is more。
- 同时参数的传递也会暴露很多信息,必要时也要对参数进行加密。这一点谷歌就做得很好,它大部分网页的参数都是加密传递的。
- 不要以为你又是API Gateway,又是ELB的,又是反向代理的,就无法进入你的服务器了。API就是黑客进入服务器的一条直路。所以API的安全相当重要。
5、SQL注入
- 其实目前使用的Spring等框架开发的网站后端,几乎都没有SQL注入漏洞了,因为从框架层面就杜绝了这个漏洞。这个漏洞主要出现在早期的PHP框架和ASP.net。
- 杜绝这个漏洞出现的方法就是一定要对SQL的传入参数做验证,也一定不要拼接SQL语句。
6、XSS和CSRF
- 杜绝这个漏洞的方法也是对传入参数一定要做验证。
- 同时一定不要把前端传来的数据直接存入数据库,你永远不知道前端会传来一段什么样的恶意代码。
7、上传漏洞
- 同上面两个漏洞一样的,它告诉我们不管输入是什么,一定要做验证,特别是文件。因为它有可能是带有恶意代码的文件。
- 不仅要验证文件类型,还要验证文件大小,以及要验证文件内容。
8、缓冲区溢出漏洞
- 这个漏洞是广泛存在的,也是比较难攻击和难防的。
- 可以通过使操作系统的缓冲区不可执行,从而阻止攻击者植入攻击代码。也可以利用编译器的边界检查来实现缓冲区的保护。
9、已知漏洞
- 已知漏洞可能是某个框架的漏洞,比如Spring框架的漏洞。也可能是一个软件的漏洞,比如OpenSSH的漏洞。同时它也可能是操作系统的漏洞,比如前段时间比较火的Linux内核漏洞。
- 防范已知漏洞的方法就是定期关注重大漏洞的发布,并及时更新修复。比如Windows的勒索病毒,如果你及时更新了操作系统就不用怕这个病毒了。
10、反编译
- 防范反编译最基本的一步就是混淆代码,混淆之后的代码会变得非常难读。但读懂这个代码也只是时间问题。
- 因此,一定不要把任何敏感信息放到会编译进客户端的代码。包括一些敏感的API或者测试数据。
11、逻辑&业务漏洞
- 这个漏洞告诉我们有完善的测试流程是多么的重要。
- 我们每天实践的TDD、自动化测试等都是可以防范这种漏洞的最佳实践。
- 这个漏洞发生的原因常常是因为某个程序员为了赶进度匆匆上线了一个没有测试的功能造成的。
- 同时,绝不能依赖sonarQube/veracode等工具来帮我们检查漏洞,它只是必须有的底线,但不是全部。还需要大家把安全牢记于心,就像人剑合一。
12、0day
- 其实我们每天code review中就能发现很多0day漏洞。所以坚持正确的敏捷实践还能在安全上给我们带来很多好处。
- 完善的测试系统也是杜绝0day漏洞的好方法。
- 同样,不要依赖sonarQube/veracode等工具来帮我们检查漏洞,更多的要靠人的安全意识。道路千万条,安全第一条,代码不规范,亲人两行泪。
最后
看完了这份自白书,是不是有点蠢蠢欲动。不管你是想去尝试入侵也好,还是学习安全实践也好,记得要做一个安全守法的小可爱哦。
黑客常常为了金钱,虚荣心或者私利而不择手段的入侵其他系统。有的黑客是白帽子,会公布找到的漏洞,比如谷歌就会奖励找到漏洞的黑客。但有的黑客会在暗网等地下市场买卖数据以谋取暴利,或者入侵系统进行引流或者植入恶意广告来挣钱,也或者会把入侵的机器作为肉鸡做其他坏事,比如挖矿。
技术只是一种工具,就看掌握它的人如何去使用它。攻和防是安全领域永恒的话题。内建安全也一直都是TW在努力的方向。只有当我们知道了如何入侵,才能知道如何防范。
最后,这只是一份入门版的介绍,因为内容很多,很多知识都只是基础的提到了,未来会展开细讲更多的黑客手法和安全实践。
也欢迎任何小可爱找我一起探讨最佳安(ru)全(qin)实(fang)践(fa)。
本文版权属ThoughtWorks公司所有,如需转载请在后台留言联系。