文章目录
本文整理的学习路线,清晰明了,重点分明,能快速上手实践,相信想学的同学们都能轻松学完。都是干货啦,先收藏⭐再看吧。本文偏基础能让萌新们快速摸到渗透测试的门道,少走弯路,也能让正在学习的小伙伴们查漏补缺,也欢迎大佬们在评论区指正错误~
这里附上我之前学习的路线图

Web渗透测试分为白盒测试和黑盒测试,白盒测试是指目标网站的源码等信息的情况下对其渗透,相当于代码分析审计。而黑盒测试则是在对该网站系统信息不知情的情况下渗透,以下所说的Web渗透就是黑盒渗透。
Web渗透分为以下几个步骤,信息收集,漏洞扫描,漏洞利用,提权,内网渗透,留后门,清理痕迹。一般的渗透思路就是看是否有注入漏洞,然后注入得到后台管理员账号密码,登录后台,上传小马,再通过小马上传大马,提权,内网转发,进行内网渗透,扫描内网c段存活主机及开放端口,看其主机有无可利用漏洞(nessus)端口(nmap)对应服务及可能存在的漏洞,对其利用(msf)拿下内网,留下后门,清理痕迹。或者看是否有上传文件的地方,上传一句话木马,再用菜刀链接,拿到数据库并可执行cmd命令,可继续上大马…思路很多,很多时候成不成功可能就是一个思路的问题,技术可以不高,思路一定得骚。
html+css+js
前端三要素 html、css、js是被浏览器解析的代码,是构成静态页面的基础。也是前端漏洞如xss、csrf的基础。
重点了解html和js
能力要求:能够写出简单表单,能够通过js获取DOM元素,控制DOM树即可。
apache+php
推荐使用phpstudy来进行傻瓜式安装,可以少走很多弯路。通过apache+php体会一下网站后端的工作,客户端浏览器通过请求apache服务器上的php脚本,php执行后生成的html页面返回给浏览器进行解析。
重点了解php
能力要求:了解基本网站原理,了解php基本语法,开发简单动态页面
mysql
之前已经安装的phpstudy可以轻易的安装mysql。mysql是一款典型的关系型数据库,一般来说,大部分网站都会带有数据库进行数据存储。
重点了解sql语句
能力要求: 能够用sql语句实现增删改查,并且能用php+mysql开发一个增删改查的管理系统(如学生管理系统)
python
虽然 “php是最好的语言”,但它主要还是应用在服务端做网站开发,我们搞安全经常需要写一些脚本或工具来进行诸如密码爆破、目录扫描、攻击自动化等操作,需要一个方便且趁手的编程语言,这里我推荐python
重点学习requests、BeautifulSoup、re这三个库
能力要求: 了解python基础语法,能够用python爬取网站上的信息(requests+BeautifulSoup+re)
burpsuite
web安全的工具很多,但我觉得必备的渗透工具还得是它
重点学习Proxy、Repeater、Intruder三个模块,分别用于抓包放包、重放包、爆破
初步使用即可,在中期的漏洞学习中去逐渐熟练它
能力要求: 能够用burpsuite抓包改包、爆破用户名密码
此时我们对网站已经不再陌生,能够自己动手完成一个简单站点。但我们写出来的代码真的安全吗?进入中期,我们便要开始着眼经典漏洞的学习。
一个漏洞的学习,要搞明白三点(每学完一个漏洞就问自己这三个问题):
SQL注入
(1) 了解产生sql注入的原理
(2) Union注入
(3) POST类型注入
(4) 万能用户
(5) 盲注
能力要求: 能够手工注入出任意表的数据,熟悉三种盲注的手法,能够通过sql注入实现任意文件读取和任意文件写入,能够自己编写一个不含sql注入的查询功能
文件上传
(1) 了解原理
(2) 会编写一句话木马
(3) 会用cmd命令吧一句话木马与图片结合
(4) 利用一句话木马getshell
能力要求: 会写php的webshell,明白webshell的原理,熟悉常见的文件上传绕过方法(如过后缀检测、过文件头检测、过MIME类型检测),能够自己编写一个不含漏洞的上传功能
文件包含
(1) 了解原理
(2) 会利用文件包含与文件上传文件相结合来getshell
(3) 会访问容易文件
(4)file协议、php伪协议的利用
命令执行
(1) 了解原理
(2) 了解一些cmd的基本命令
(3) 知道哪些特殊字符有特殊作用
(4)php常见的代码执行(eval)、命令执行(system)函数
XSS
(1) 了解原理
(2) 学一下javascript的基本语法
(3) 然后会利用xss获取cookie
(4) 编写一个简单的xss蠕虫
CSRF
(1) 了解原理
(2) 可以利用CSRF进行一些小操作(通过csrf让用户点击恶意链接就触发敏感操作)
(3) 结合xss来利用
变量覆盖
(1) 了解原理
(2) 利用变量覆盖来getshell
XEE
(1) 了解一些XML的语法
(2) 了解原理
(3) 会用XEE来getshell之类的
反序列化
(1) 了解序列化
(2) 了解反序列化
(3) 了解POP链
逻辑漏洞
多多参与CTF赛事
参与当下举行的ctf赛事是最好的学习方法之一,即使是初学者也能够找到一些适合自己能力的赛事,比如极客大挑战、UNCTF、各个大学的新生赛等等都是不错的选择,在比赛中去发现自己知识的不足,然后去针对的补充这部分知识,是很好的学习循环,无需迷茫的去到处获取知识,而是在需要时去学习。
Tips: 或许有人觉得直接刷题是一样的,但完全不是,当下比赛中的题往往更加前沿和流行,你可以找到当下的ctf题目趋势,紧跟技术热点,而且可以多多融入ctf竞技的氛围中,成长的更快。
ctfhub 可以很方便的查看最近举行的ctf赛事
多多看其他师傅的博客
打完ctf比赛的你肯定是想看writeup(答案)的,一般来说赛后过几天就会有很多师傅发出他的writeup,从比赛群、百度等途径都可以找到。多多看看其他师傅的解题思路,关注几个大牛,看看他们发的技术文章,都是很好的学习方法。
web安全其实是个大坑,进去容易出去难,入门容易提升难,我们这行没有其他专业那么有趣,甚至可以说是枯燥乏味,但是还是希望选择web路线的学弟学妹们坚持web这条路线,不要中途放弃
很好奇,就使用rubyonrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提
我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当
我有一个围绕一些对象的包装类,我想将这些对象用作散列中的键。包装对象和解包装对象应映射到相同的键。一个简单的例子是这样的:classAattr_reader:xdefinitialize(inner)@inner=innerenddefx;@inner.x;enddef==(other)@inner.x==other.xendenda=A.new(o)#oisjustanyobjectthatallowso.xb=A.new(o)h={a=>5}ph[a]#5ph[b]#nil,shouldbe5ph[o]#nil,shouldbe5我试过==、===、eq?并散列所有无济于事。
我有一些Ruby代码,如下所示:Something.createdo|x|x.foo=barend我想编写一个测试,它使用double代替block参数x,这样我就可以调用:x_double.should_receive(:foo).with("whatever").这可能吗? 最佳答案 specify'something'dox=doublex.should_receive(:foo=).with("whatever")Something.should_receive(:create).and_yield(x)#callthere
Sinatra新手;我正在运行一些rspec测试,但在日志中收到了一堆不需要的噪音。如何消除日志中过多的噪音?我仔细检查了环境是否设置为:test,这意味着记录器级别应设置为WARN而不是DEBUG。spec_helper:require"./app"require"sinatra"require"rspec"require"rack/test"require"database_cleaner"require"factory_girl"set:environment,:testFactoryGirl.definition_file_paths=%w{./factories./test/
我遵循MichaelHartl的“RubyonRails教程:学习Web开发”,并创建了检查用户名和电子邮件长度有效性的测试(名称最多50个字符,电子邮件最多255个字符)。test/helpers/application_helper_test.rb的内容是:require'test_helper'classApplicationHelperTest在运行bundleexecraketest时,所有测试都通过了,但我看到以下消息在最后被标记为错误:ERROR["test_full_title_helper",ApplicationHelperTest,1.820016791]test
我已经构建了一些serverspec代码来在多个主机上运行一组测试。问题是当任何测试失败时,测试会在当前主机停止。即使测试失败,我也希望它继续在所有主机上运行。Rakefile:namespace:specdotask:all=>hosts.map{|h|'spec:'+h.split('.')[0]}hosts.eachdo|host|begindesc"Runserverspecto#{host}"RSpec::Core::RakeTask.new(host)do|t|ENV['TARGET_HOST']=hostt.pattern="spec/cfengine3/*_spec.r
我在app/helpers/sessions_helper.rb中有一个帮助程序文件,其中包含一个方法my_preference,它返回当前登录用户的首选项。我想在集成测试中访问该方法。例如,这样我就可以在测试中使用getuser_path(my_preference)。在其他帖子中,我读到这可以通过在测试文件中包含requiresessions_helper来实现,但我仍然收到错误NameError:undefinedlocalvariableormethod'my_preference'.我做错了什么?require'test_helper'require'sessions_hel
只是想确保我理解了事情。据我目前收集到的信息,Cucumber只是一个“包装器”,或者是一种通过将事物分类为功能和步骤来组织测试的好方法,其中实际的单元测试处于步骤阶段。它允许您根据事物的工作方式组织您的测试。对吗? 最佳答案 有点。它是一种组织测试的方式,但不仅如此。它的行为就像最初的Rails集成测试一样,但更易于使用。这里最大的好处是您的session在整个Scenario中保持透明。关于Cucumber的另一件事是您(应该)从使用您的代码的浏览器或客户端的角度进行测试。如果您愿意,您可以使用步骤来构建对象和设置状态,但通常您
我有:When/^(?:|I)follow"([^"]*)"(?:within"([^"]*)")?$/do|link,selector|with_scope(selector)doclick_link(link)endend我打电话的地方:Background:GivenIamanexistingadminuserWhenIfollow"CLIENTS"我的HTML是这样的:CLIENTS我一直收到这个错误:.F-.F--U-----U(::)failedsteps(::)nolinkwithtitle,idortext'CLIENTS'found(Capybara::Element