如果你也在学渗透测试,打了很多靶场但面对真实网站还是不知道从哪下手;

如果你也觉得“学了那么多课,但感觉用不上”;

那么这篇文章可能对你有帮助。

        写这篇笔记的理由有很多,一是想要记录当前的每一个阶段都能收获什么,二是大概是看过一些关于人活一天少一天,总要在后面给自己留点记忆怀恋的文章被触动到了,于是一直坚持到现在吧(我也不知道从什么时候开始,突然就逐步记录起自己的日常)。总而言之,记录的习概总是好的,这篇笔记将记录我学习过程中的一些感悟,全部是以第一视角带入。本人目前是大专二年级(下学期),信息安全技术应用专业,近两年的学习生活让我愈发习惯大学,但即将面临就业,目前专业成绩光看成绩还算一般(然而学得越多越发现自己的肤浅,单靠目前所学实属难以满足就业需求,有过许多比较“光鲜艳丽”的经历,然而实际上我知道比起真正优秀的人来说我反而有点拿不上台面,不上不下的适中水平往往很难受,相信很多人都有这种体验,如果你没有请忽略),在4月份时被老师“点醒”了,原来一切都还来得及,也庆幸一切也还来得及。目前本人面临的问题如下:学校教的课程但看专业成绩而言似乎还可以,但真正去找工作的话其实也只是学了一些皮毛;老师善意布置的一些任务其实还没怎么学,如果学完了此时找工作也算入门,会有一些底气;长时期漫无目的,太“适应”大学生活了。

        不知道大多数的人有无经济压力,目前而言我没有,但我深知过一段时间(实习)其实将会面临很大的就业压力,有很多人都考虑升本,但那是他们的事,我一开始来到这就是为了就业,这倒是从始至终没有改变过的目标,因而我不得不做出改变,那么先来看看我学了什么,又学习到了什么程度。专业课细看下来,分为两类:理论和实操,而这个专业学习的课程内容说实话挺杂,别的专业学的我们学,别的专业不学的我们也学,而且我们学的还不精。不知道同专业别的院校会学什么课程,按照时间顺序专业课我们学习了互联网基础、编程基础(python)、信息技术(办公三件套)[大一上]、PHP与MySQL网站开发、信息安全基础、Windows系统安全管理(windows server2019)、PHP与MySQL网站开发实训、网络安全评估实训[大一下]、Web开发(JS技术)、Web安全应用(大部分的web漏洞)、Linux系统安全管理(一些基础的Linux操作)、C语言与汇编语言(利用Linux写一些C语言,简单熟悉,汇编的部分有点抽象)、Web安全攻防实训、操作系统防护实训[大二上]、网络协议分析、网络设备安全配置(学这个将来可以到企业配配网关当个网管)、密码学应用(数学难学)、渗透测试技术应用(这个感觉是最有用的课,但是需要一些基础)[我因为上了企业的工学交替班(从零基础到就业)将所有专业课置换掉了(大笑)]云计算基础(简单的云知识+部分云安全,高深莫测的内容)[本学期在学],因为工学交替班,周六日反而成了最忙的时候,平时专业课的时间可以空闲出来,多磨砺一下技术。课程体系整体看上去很唬人,然而学了一圈下来,我深刻体会到单靠课上的内容走不远的感觉。并非是指教的东西太老,事实上我们学的课很新,然而更多的都是起到“点化”作用,所谓“师傅领进门,修行看个人”。既如此,再看看我学到什么程度:

        Web的常见漏洞我基本上学过,在课上按老师要求打了一些靶场,自己也配了一些环境搭建了些靶场,目前打起来算不上是游刃有余,属于那种基本会一点,但是懂得不深,当然也有自己的一部分理解在内。各类编程语言说实话这个专业主要是要求能看懂(绝对不是因为自己的编程能力不行给自己找借口[捂脸]),现在AI发展地这么好,我反而感觉思路很重要,想法很重要,剩下的一部分内容可以让AI帮忙完成。但是对于渗透测试而言,我倒觉得需要有深刻理解,自己动手,少用AI比较好,因为AI只是工具,而你学会了的东西就是你自己的,目前渗透测试我也没有较好的学习路径,比较推荐的就是多做一些ctf题目。这时就会有很多新手要问了,ctf是什么,不知道的话,自己上手用浏览器搜一下就大概明白了,是一种竞技类夺旗赛,能极大程度地证明你的能力,也能提升你的水平,闲暇时刻可以多拿来练手。这么看来,其实我目前的水平应该和绝大多数大学生一样,在校内专业课还看得过去,一旦去实习、就业,那么可能就是那种什么都不会的,而一个很扎心的情况就是,这行企业要的人是那种能够直接上手的。

        很多人看到这里或许会忧虑,那怎么办,实际上时间还来得及。因为是笔记,所以这里我只会记录我的学习方式、我的理解以及我的收获,想学习专业的内容,“术业有专攻”,b站上有相当多的课程(比较推荐暗月、小迪的课程,有对应所需的资源),工具什么的也不一一赘述,我这边来详细描述一下我对安全行业中我想要实习的岗位的一些理解:渗透测试工程师(红队),这个岗位学安全的可能不陌生,那么具体要做什么?又需要达到什么水平?很多人其实到这里就已经含糊不清了,而很多就业招聘上要求达到的水平能力也用非常“专业”的术语来描述,会什么什么工具,能够写什么什么报告之类的,然而事实上却远不止此,可以说期间忽略了绝大多数的过程,而这其中的过程又恰恰是我们需要学习掌握的。

        先来讲述什么是渗透测试,顾名思义,需要进行渗透挖掘(漏洞),分析测试有没有漏洞。一般来说我们需要利用专业所学攻击目标者的服务器(网站之类的),然后不断地提权、渗透、横向移动、拿下域服务器,写专业报告之类的,看起来很“专业”吧!然后我们所学的内容也是围绕这些进行展开的,那这么看来我们可真是“术业有专攻”。然而,一旦你学习了一段时间,其实你会发现你所学的内容和岗位要求你要干的活、要达到的水平非常的割裂。很多人谈起学操作系统、学各类编程语言能说的头头是道,说各种漏洞能滔滔不绝,很多学习的人是这样,很多教学的人也是这样。学习的人一开始会迷茫,然后懵懵懂懂地学一部分,学到打靶场时会感觉自己又行了,学操作系统时会迷茫,学搭建靶场时又感觉好像懂了,学一些行业基础理论如什么什么协议时觉得好像很重要,又好像没那么重要,学编程语言不明白为什么要学,到自己写脚本、看网页时又感觉会了。但是真的会了吗?我也不罗嗦,直接指出感觉割裂是在于环境不同。初学者攻击的各类靶场,无非是一些线上靶场、自己下载搭建的靶场、老师给的靶场,很容易就能上手使用,但是很多人打靶场时很厉害,真正让其挖掘某个网站漏洞时,又会感觉自己所学完全无用(或许不能说“很”,还是能看懂一些东西的),而割裂感很大程度就是源自环境不同,平时搭建的靶场和你的网段都是在同一网段的内网下,而实际上工作需要你从外网入手,就这一处,改变已然很大。

        要细究其中的道理,我们来看看渗透测试的流程是什么:信息收集->网站注入->上传后门->内网渗透->横向移动提权->拿下域控(期间有一些过程暂时省略),而更为具体的内容应该是:信息收集,利用你现有工具进行自动化扫描,期间会用到nmap、goby、dirseach这类工具,获取网站的域名、子域名、ip、端口信息、版本号,这一部分的信息收集相当重要,但是很多人不理解为什么重要,一般我们要攻击网站拿到一个可交互的网页(理解为你能搜索、而没能登录网站,你所干的事网站能够回应你)就差不多了吧,这也是很多人开始迷茫的地方。这里按照我的理解,域名、子域名、ip是为了方便找可交互页面,但是端口号、版本号这类是为了查看能够对应什么服务,这些服务有什么公布的漏洞(对初学者而言,难点在于理解此处,因为后期的工作基本围绕于此)。接下来更多的情况是找到交互页面后进行注入测试攻击,尝试能否拿到数据库数据、获取网站服务器权限,真实的工作场景之中,要求的是你能够快速地找出漏洞,绝不是如你学习期间已知漏洞,手工注入那样,而是怎么快怎么方便怎么来,这里的web注入非常推荐使用sqlmap、brup suite等渗透测试主流工具。问题来了,现在的网站大多数的防护措施都比较好,而我们学习所用的靶场基本上没有防护措施一说,就算有也不严格,渗透测试还要求在不触发警报的前提下完成攻击,简直就是难上加难,这里给一个建议,便是使用一些复杂有安全措施的进阶靶场。

        当然,web渗透的一大技巧是耐心、细心。仔细想想你学各种编程语言肯定不只是写一个脚本工具、一句话木马那么简单吧,重要的是看网站的源码。很多网站明面上难以找到攻击点,但是有时候网页细节难免会没做好,利用f12查看网页源码、查看使用的api接口,说不定会有特殊的收获,再者查看网页所用的框架,看看能不能找到对应版本的漏洞进行利用,诸如此类,均需要自己一步一步总结得出经验,而这种经验绝非每日练习靶场能得来的,闲暇时间不妨试试找几个网站多看看其框架,多看看其代码结构,另外就是还要考虑开发者的习惯以及开发者的思路。做好这些,将是让你感觉不那么割裂的开端。

        当你费尽一番功夫拿下这个网站服务器时,你的渗透测试工作也才刚刚开始。没错,拿下网站是入门,护网行动(国家、省会、大型公司每年都会举办的一种安全活动,一般时间是两周,薪资丰厚)的初级红队所需达到的水平便是如此,这个目标目前我还在努力中,但路径已经清晰了。当拿下网站服务器时,你需要考虑到网站后续的更新以及一些查杀,为了能够持续控制该网站以及方便后续工作,你需要稳定你的“后门入口”,如在多处藏好你的木马文件,以便随时连接。这只是开端,接下来你需要进行信息收集。因为你无法访问目标的内网,拿下目标网站服务器的目的是让你能够连接上内网,获取更多数据权限信息,最终拿下域控制器(不知道什么是域、什么是域控,需要学习了解有关操作系统的内容)。当你第一次进入目标内网时,你可能会迷茫,犹如黑夜中的星火,你想要知道其他服务器、其他电脑的存在,这又将用上信息收集。和你在外网用工具得到目标服务器的信息一样,你需要小心翼翼地在不触发警报的前提下,尽可能的得到更多信息,比如别的更高一级的服务器。在内网中,你可能是域成员,你也可能不是,为什么要强调这个,这不得不说粗略解释一下:网站服务器好比一家公司的大门,你控制住这个大门时,意味着你有进入公司的权限,但是公司的其他电脑你无法操控。而这么多电脑之中,一般必有一台域控或多台域控,也必有防火墙等,你的目的是绕过防火墙在不惊动所有人的前提拿下域控,这相当于拿下整个公司的电脑,如果你是域成员,那么很大程度上你可以更简单发现谁是域控,怎么看自己是不是域成员,这与信息收集紧密相关。所以一般在大型的攻击之中,拿到权限后的攻击者们往往会蛰伏一段时间,尽可能地查看自己现有的资料,万一你在你的跳板机(你拿下的服务器,作为你渗透内网的机器)找到了关键的时间戳(相当于域凭证,证明你的身份,具体信息可自行搜索),便能省下一些功夫,当然这靠运气和细心。

        此时你已蛰伏于内网,利用渗透测试所学知识进行信息收集,找到了一些存活的主机,发现了一些开放端口(如22端口,ssh服务专用;445端口,一个重要协议端口,永恒之蓝漏洞可能可利用),你可以依据所学(协议分析)进行漏洞利用。初级的渗透测试工作者是脚本小子,不知道里面的弯弯绕绕,但是会用工具,会利用已知漏洞进行攻击渗透;中级的渗透测试工程师可以看懂一些底层协议逻辑,能够修改一些工具,绕过检测,成功的概率更大;高级的渗透人员或者说安全研究者,专门研究协议漏洞,找破绽,可能会发现0Day(没有被其他人发现或者大多数人知道的漏洞),这是三者区别,理解不同攻击的手段可能也会各不相同,但最终你利用漏洞横向移动,将这台机器也给控制了,这时你可以翻找查阅有关域控制器的更多资料了。运气好的话,说不准能够获得其他的账户密码,总而言之,内网渗透就是这样不断横向移动、提权、加固后门(准确来说是隧道)的行动,直到最后拿下域控。当然,在此期间为了不让其他人发现,你不仅需要绕过各种检测,还要利用你的权限删除你来过的痕迹。

        到最后,当完成一次完整的渗透测试时,还需进行总结,总结中需要包含你每一个步骤是如何实现的描述,毕竟渗透测试是为了给目标提供安全检测服务,你还需要写下你的修复建议,这期间将会用上你的所学、你的理解,这么看来,一次完整的渗透测试流程与日常学习靶场相比,是否会有割裂感?这是必然的,然而如果你能自己手动利用虚拟机初步搭建靶场,实现由外网到内网的转变,期间割裂感便会大大减少。经过一番深刻的理解,我已初步扫清一丝迷茫,在不远的将来,或能扎根于此行业,此笔记来自于一位普通的大学生,后续或将持续更新所学所得。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐