前言
这篇文章只是一个老年人单纯从自己的角度分享一下渗透测试这项苦逼活的心得,在阅读之前,希望各位读者和我一样在脑海固定一个前提:
搞站,三分靠细心,七分天注定。运气,永远是决定一次入侵能否成功的最重要因素。不要以为大牛搞不定的咱们也搞不定,这不是编程,1+1永远不等于2。
一、你了解什么是渗透吗?
我读过很多网络安全方面的文章,当然,不是那种学术型的著作,那种我也读不懂,主要是各类公众号、网站、论坛上面发布的。其中关于渗透测试的文章,很多都是HW式的常规打法:
外网收集信息 -> 扫描、打点 -> 获取权限后收集内网信息 -> 密码碰撞、内网漏洞扫描 -> 获取目标权限
这样有错吗?没有。而且相当正确。但是很容易会导致:
1.思维固化,当某一个步骤受挫的时候只会继续重复之前的操作。
2.过度依赖工具。
3.最重要的一点,渗透这个时候已经变成了一种任务,我们的目的也变成了完成任务。
看到这里有的小伙伴就会说了,难道渗透测试的项目不是任务吗?确实,项目是一种任务,但是,请回想一下,我们当初为什么会选择这个行业呢?难道仅仅是为了挣钱吗?
我相信大部分入行的人,起初都是被黑客这个神秘的词语所吸引,还有获得权限之后的快感和自豪感,才会毅然决然投入到这个深坑的。
那么,当时奋不顾身的那种初心,现在还记得吗?
渗透,本来就是一种乐趣,无论成功与否,重点是我们要享受那个过程。
这看起来像是在讨论形而上的哲学,个人觉得,很多时候,信念才是支撑我们冲破困境和障碍的根本,没有信念,何来思路。
二、搞渗透需要具备什么?
1)基础
做任何事,都需要一个扎实的基础。
比如建楼房,无论你想建多高,地基一定要打得牢固,否则狂风暴雨一来就会摇摇欲坠。
比如打篮球,无论你身体素质有多好,最基本的运球传球射球都必须熟练,否则就会让人贻笑大方。
渗透亦是如此。但是由于计算机及互联网的多样性,以及渗透本身的特殊性,需要的基础知识更多更杂,这时候就不要求全部都精通,但是必须得知道是什么回事。
我根据自身的情况大概总结了一下需要的基础:
1.网络架构
这个概念其实有点模糊,通俗来说,就是需要对构成网络的路由、交换机以及我们最常见到的IP地址,子网掩码、网关有初步的认识,不需要通读TCP/IP协议,不需要知道登陆路由器和交换机之后怎么敲命令,但是起码我们得知道,当我们在渗透过程中遇到这些问题的时候应该怎么去请教百度。
举个简单的例子,目标是192.168.1.135,咱们现在掌握的机器是192.168.1.53,子网掩码是255.255.255.192,那怎么知道是不是同一个网关呢?不会计算,没关系,我们只要知道,遇到这个的时候,百度一下“IP地址计算器”就可以获得想要的答案,就足够了。
看过一些文章,说渗透知识需要懂得这个懂得那个,很容易让人望而却步。其实,渗透测试不是义务教育,不是公务员考试,我们不需要成为一座图书馆,搜索引擎才是图书馆,我们掌握的知识可以仅限于一个索引,知道该怎么去寻找想要的书籍就足够了。
当然,如果脑袋容量足够,当我没说。
2.web服务器、web中间件、web容器
常见的有IIS、Apache、Nginx、Tomcat、Weblogic、Jetty等等,根据之前说的,我们不需要掌握如何搭建,如何配置,每一项配置的功能是什么,只需要知道:
1.它们大概的区别。
2.它们起到了什么作用,支持什么语言。
3.如何分辨它们。
4.重点的配置文件都在什么位置。
5.如果需要增加或者修改某些功能应该怎么做。
……
其实,上面这些,都可以在我们的图书馆——搜索引擎里面找到。
3.脚本语言
常见的web脚本语言基本就这几种:
1.asp
虽然现在的web很少有用asp的,但是还是建议大家熟悉一下它的语法。
2.aspx(.net全家桶)
这个没得说,微软的东西,跟windows契合性非常好,.net语法也不难,和asp有相似的地方。
3.php
灵活性比较大的语言,语法相对也不难。
4.java
这个就不说了,因为我也不太懂,现在大型网站基本都是这个,难度相对大,如果熟练的话搞起来会比较轻松。
5.perl
现在使用这个的并不多。
6.cgi
同上
7.python
近几年比较流行的语言,主要代表是django。
8.golang
同上
渗透测试现在的主流依然还是web渗透,所以对于web脚本语言是必须要掌握的。至于这个掌握,可以大概分为两个方面:
如果你不是想尝试漏洞挖掘的话,可以定义为:能简单看懂就行。
如果你对各种语言基本有涉猎,想尝试漏洞挖掘的话,有几点方向:
1.明确我们是作为漏洞挖掘者,不是开发者,如果站在开发者的角度去系统学习,时间和精力投入会非常大。
2.熟悉当前各种流行框架,举个例子,MVC框架开发的web,必须知道模型、视图、控制器分别在哪里。
3.熟悉容易产生安全问题的函数。
4.熟练使用已有的调试web代码工具。
5.记住一点:一切的输入都是有害的。
4.数据库
相比前面那几项,数据库我觉得需要懂得的东西就稍微多了一些。
1.熟知目前主流数据库的名称,它们之间的差别和它们之间各自的独有特点。
2.懂得常规sql语法,了解各种数据库语法之间的相同和不同。
3.了解各种数据库在渗透测试中能被利用的函数、存储过程等等。
4.在遇到waf或者策略限制的环境时,能够利用数据库某些特性绕过。比如:mysql的内联注释等等。
5.操作系统
这个是比较重要的一环,无论是什么样的web,都是搭建在操作系统上面,最终我们的目标还是获取到操作系统的权限。所以,对操作系统的熟悉程度,决定了我们渗透的深度。
所以操作系统涉及的基础就比较多。
1.常用的命令行命令。除非是打HW这种快速拿分的项目,否则我特别不推荐在获得一台服务器权限的时候立刻就登陆远程桌面。所以对于常用的查看在线用户、查看网络连接、查看进程等命令必须要熟知。
2.敏感的目录和文件,例如任意用户可读可写可执行的目录、个人及系统程序配置文件等等。
3.系统本身独有的特性。例如windows下文件名大小写不敏感、linux下所有的东西都是一个文件等等。
4.系统身份认证的过程。例如windows网络认证是通过ntlm散列、linux远程登陆大部分会依靠PAM等等
……
关于操作系统,还有很多,我感觉全部列出来的话,对于各位看官也是一点作用都没有的。有谁会把学习当作流水账记载呢?就像以前的小学课本里面<<卖油翁>>一文说的那样,“无他,唯手熟尔”。
所以,我建议,在自己的机器上装一个不熟悉的操作系统,然后一直去使用它。
6.常见的漏洞及原理
这里的漏洞不是指某个程序的漏洞,而是指根据漏洞成因的分类,包括但不限于:
1.八百年前的sql注入。
2.文件上传。
3.xss
4.xxe
5.csrf
6.ssrf
7.反序列化
……
所谓的原理,就是需要了解为什么会产生这种漏洞,在什么样的情况下会产生这种漏洞,遇到这种漏洞但是有限制的时候应该怎么去突破等等。这些都必须有深刻的了解。
7.移动端安全
随着通信技术的不断提高,目前移动端安全的重视程度已经逐渐与web端并驾齐驱,而且相对漏洞比web端多很多,因为防护还不完善。如果对这方面有兴趣,可以研究安卓和IOS下的APP抓包、脱壳与解密。因为我对这方面也不太懂,所以给不出什么好的意见。
8.近源渗透
这是近几年逐渐引起重视的一种方式。为什么单独把一个方式放到一个栏目里面讲呢?因为近源渗透打开口子的方法和web是完全不一样的概念,是需要运用到社会工程学、无线通信技术、硬件破解等不同的知识,同时也是一个比较烧钱的方式。好处在于,如果路线对了,能够达到事半功百倍的效果,而且很多公司都是web防护做得滴水不漏,但是内部防护千疮百孔,所以使用近源渗透有时候会达到一个出其不意的效果。如果时间足够,建议去了解下这方面的知识。
9.最好掌握一门编程语言
最后单独说一下关于编程语言的问题。个人觉得,搞渗透测试,最好能掌握一门编程语言。不要求能像优秀的程序员一样,想写什么就信手拈来,但是起码能够读懂一些poc、exp或者小工具的源码,能根据自己的需求去修改或编写一些代码。渗透和编程其实是相辅相成的,计算机提供的服务本质上就是一行行的代码,学会用编程的思维去看待渗透,有时候思路会比较明确。
编程语言的种类非常多,个人觉得,无论你想要学习哪一门,首先得学习C语言。只看到指针那一章就足够了。如果你理解了C语言的常规语法,对于其他语言上手就相对简单。
目前比较成熟的编程语言主要有:
1.python
语法简单,功能强大,前人造的轮子相当多,可以说是入门的不二选择,缺点就是稳定性稍差,对多线程的支持不好。
2.C#
有微软为其背书,功能可以说是相当强大,缺点也很明显,对于windows之外的系统支持并不好,而且需要安装.net组件才能运行。
3.golang
语法简单,并发好,稳定性也不错,跨平台性非常好,缺点是体积相对大,许多轮子需要自己造,但是渗透需要的大部分都有人做好了,个人比较推荐它。
其他的不怎么了解,就不乱下结论了。
2)经验
如果把基础比作地基,那么经验就是钢筋水泥,它们能保证我们的渗透过程稳固而有效果。每一次成功的渗透都是一笔经验,每一次失败,更是一笔不可多得的经验。这些经验如果写成文章一一列出,估计看官很快就会忘记,只有真正设身处地地经历过失败的煎熬和无数次尝试最终成功的喜悦,才会对其中所用到的知识、手法印象更加深刻。所以,经验跟基础的重要性是一样的,我们一定要重视它。
3)形而上
这点是比较有争议的地方,也是我为什么要提笔写这篇文章的主要原因。很多新入门的朋友都会迷茫,不知道该往什么方向学习好,除了不断学习网上的文章,还有向大牛请教之外,仿佛找不到自己的发展道路了。每个人的性格都不一样,我觉得在你到处请教拜师的时候,不妨先问一下自己,我感兴趣的是什么?我比较擅长的是什么?我觉得自己能够做到什么?这就是投入学习之前必须要做的第一步:
找准自己的定位。
要明白,没有谁可以成为谁,每一个人都是独一无二的,每一个人的成长轨迹都是不可复制的,每个人渗透的风格更是万紫千红,正如本文开头所说的,大牛搞不下来的,不代表你也搞不下来。这就是第二步:
形成自己的风格
接下来,就是最重要的了。搞渗透其实是很有意思的事,能接触到很多不同的东西,获得权限或者测试成功的时候会格外的喜悦。这种喜悦很多时候都需要相当长时间的折磨和沉淀才能获得的。遇到困难,不要轻易放弃;研究技术,遇到深奥的不懂的地方,不要舍远求近,继续扎进去就对了。
很多人都会犯一种错误,本身已经积累了不少基础和经验,搞起站来也是得心应手,但是内心逐渐浮躁,满足于现状,不求进步,停止学习,这样的话很快就会被淘汰。
这就是第三点:
稳定自己的心态
三、我适合搞渗透测试吗?
相信很多人都和我一样,有这个疑问,不仅仅问大佬,也问过自己。我觉得这个问题应该是无解的,因为搞渗透测试它不同于搞开发或者搞运维,它有一个不确定性,就是有很多时候你为了完成一个项目付出百分百的精力,却不一定能获得百分百的收获,甚至可能一点收获都没有,除了各种失败的经验。这样的情况还挺常见。所以没有人,包括你自己,能确定你适不适合。如果确实需要一个答案的话,我觉得唯一的答案就是:
别问自己适不适合,先看看自己愿不愿意。
兴趣是唯一的老师,努力是唯一的捷径。
如果你是天赋异品,谁与争锋,你的电脑,我的权限,那当我没说。
后记
谢谢各位看官赏脸,来看小弟我自言自语。希望大家都能够找到适合自己的道路,一飞冲天,权限在手,天下我有。
推荐站内搜索:最好用的开发软件、免费开源系统、渗透测试工具云盘下载、最新渗透测试资料、最新黑客工具下载……
还没有评论,来说两句吧...