从接触安全以来,感觉学的东西都很杂乱,参考西电信安协会和Secwiki的技能时间表总结了一下比较好的方案,希望自己在这条路上稳扎稳打,从基础开始,永远不要急着想出成绩,快出成绩,随时跟进自己的进度并调整。
并不是一定要走向底层,你在学习过程到达中期,基础都学习过后,你可以学习适合自己的方向,就比如sql注入,欸,我就学sql注入,如果精通了,还有什么站能拦住你吗。当然,这也是你有了综合能力很强的时候,不能基础都不打就直接开整sql注入。
如果你真的想学好sql注入,好吧~
送你一本秘籍,希望你学成归来已是数据库管理员见了都跑路的sql注射之王。—— 《SQLinject Cheats》
1、计算机基本常识
January 1, 2013— January 15, 2013
设:你现在是0基础。
设:你现在想学信息安全。
解:你现在需要忘记一切。
解:你需要学习如何使用电脑。
下面开始0基础教学:
如何开机?
轻按电源键,然后松开。
如何安装游戏?
双击打开浏览器(就是叫edge的那个),在地址栏输入www.baidu.com回车(Enter键),然后搜索你想玩的游戏名,打开相应的网址下载,有些有广告和病毒,不要点大按钮的立即下载,点最下面那个小字的普通下载,你会看到有很多区的下载,都可以。
不至于不至于,哈哈,这个我相信大家还是很熟悉了,我们言归正传,开始基础的学习。
了解计算机基本常识,常用软件使用。
需要学会基本使用的软件或技术有:Word、VMware、VPN、Visual Studio、FireFox及其插件、一款编辑器,学会如何截图、
编译运行程序、使用Google查询资料、邮件列表加入与收发。
a 学会搭建自己的博客
搭建一个个人博客能提升自己解决问题的能力,在遇到很多问题后解决错误的那种感觉能让你有解决问题的冲动,我在搭建本博客时,不知通宵了多少个夜晚,就是一定要把问题解决才肯罢休。
团队协作与个人博客
学会git实现团协作,并通过github建立自己的博客。
- 学习团队协作的重要性和Git的安装;
- Git相关教程:猴子都能懂的GIT入门、Pro Git book V2、SecWiki-Git;
- 了解Github Pages或者gitcafe Pages;
- 了解Octopress或者hexo的机制,并选择其中一个研究,具体方法可以Google;
- 通过以上软件建立自己的博客,可以参考简明Github Pages与Hexo教程 ,hexo搭建博客(这个是我写的教程,对小白非常友好)。
b 学会底层思考和独立思考能力
思考
什么是底层思考呢,就比如电脑为什么会蓝屏,一般人就感觉是运气不好,重启一下,而蓝屏是计算机为了保护系统而产生的机制,你可能就要想到是不是缺少了什么系统的必要组件或是安装了什么软件导致系统的崩溃,如果软件没毛病,再看看硬件,通过蓝屏的序列查询具体的问题。
提问
在这里,一定要告诉大家,不管你是大佬还是萌新,就算你是大佬你在别的领域仍然是萌新,你如果想要向该领域的巨佬或专家提问解决你的问题的话,你必须描述清楚你的问题,并遵守礼仪。参考阅读:提问的智慧
而不是开头就问一些模糊的问题,比如:这个怎么弄?我这个怎么运行不了了?我的那个不行了?你知道我这个为什么不行吗?我在安装Linux或X是遇到困难,你能帮个忙吗?帮你个头啊,你倒是把问题说出来啊。这不是还没问就把人急死了吗。
就单问题而言,没有任何价值,反而会让别人感觉到疑惑,到底是什么。
在回答问题时,尽量简洁描述清楚自己问题的具体环境是什么,出现了怎样的问题,比如报错,提出是在什么时候什么软件上出现的什么错误,如果是代码,可以贴上代码截图,收到回答后不管有没有解决,都需要感谢。
寻找
学会自己去搜索,利用不同的搜索引擎,搜索自己的问题,如果搜索无果,可以尝试换关键词或到相关论坛网站看看,实在不行再找大佬问问。
换句话说,在互联网上没有你找不到的信息。
c 网络环境的配置与分析
网络配置与分析
熟悉掌握各类网络环境配置,并知道遇到网络问题如何解决。
- Windows/Linux环境下动态IP获取与静态IP配置,DNS配置;
- 利用wireshark分析系统网络问题,参见wireshark 实用技巧;
- 路由器上网拨号,路由器无线安全配置;
- 浏览器网络问题分析,利用Wireshark/Fiddler/Burp工具进行分析。
如果有时间你可以体系化的学习网络技术,从OSI七层参考模型学起,各种协议要了解。
d 浏览器插件
浏览器插件与技巧
高效与舒适的上网环境需要优秀的浏览器和众多插件支持。
- Chrome/Firefox两者选其一,并研究其开发者工具的功能,参见Chrome 浏览器开发者工具;
- Chrome/Firefox快捷键和代理设置;
- 插件的使用:Firebug、Hackbar、Tamper Data、Adblock、SwitchySharp;
- 从输入 URL 到页面加载完成的过程中都发生了什么事情;
- 网页编码就是那点事。
e 基础工作环境
科学的工作环境
打造适合自己的工作环境,主要包含:电脑,操作系统,科学网络,常用工具,虚拟机。
- 学习安装操作系统(Windows、Vmware/VirtualBox、Ubuntu/Kali),学习方法Google/SecWiki搜索;
- 学习自身安全意识:个人电脑安装杀毒软件、网站安全密码安全,可以参照这里,你得学几招保护自己;
- 科学上网环境(goagent、shadowsocks、vpn),学习方法Google/SecWiki搜索;
- Google搜索技巧;
f 文档编写能力
这是非常重要的能力,在工作中文档是必不可少的日常工作,写博客可以得到充分的锻炼,怎样的格式好看,怎样排版好看。
文档编辑技巧
Word文档编写,PPT/Prize基本操纵,Markdown书写;
- 培养感觉,多逛v2ex,知乎,stackoverflow,twitter;
- Office和Prize视频教程,在网易云课堂和多贝网搜索;
- Markdown 语法说明;
- Sublime相关技巧
2、C语言基础
February 1, 2013 — June 1, 2013
学习基础的C语言,不管是否是编程方向,我觉得都有必要了解一些C语言,会编写简单的C程序代码。
推荐的入门书籍有:谭浩强《C程序设计》、《C和指针》
C语言对于初入门的同学来说是一座大山,但一旦翻过了这座大山,前面将会是一马平川。如果想深入研究C语言,《C和指针》
这本书将是你最好的选择。
3、数据结构
April 1, 2013 — June 1, 2013
开发方向的同学必学,其他方向的同学也可以适当了解。
在C语言学习到一定阶段后,可以开始了解数据结构,它和C语言相辅相成,可以说在我们学习C语言的后期,很好的对我们C语
言知识进行了整理。当学习完成数据结构后就可以写一些ACM的竞赛题目了。
推荐郝斌老师的数据结构教学视频。
4、Web安全基础
March 1, 2013 — May 1, 2013
了解web应用的各种常见漏洞(知道是什么,如何形成):SQL注入、XSS、CSRF、上传漏洞、解析漏洞、任意文件包含漏洞、
点击劫持、弱口令、cookie欺骗等,
会使用一些常用入侵检测工具和辅助工具,并入侵一些安全系数较低的web应用。
了解关于web安全的周边知识,如:能判断某密码的hash类型、能识别一些常用的web指纹、能在互联网上搜索目标相关信息、
了解一句话木马并会利用等等。
a 相关概念和基础的学习
Web安全相关概念
熟悉基本概念(SQL注入、上传、XSS、CSRF、一句话木马等)。
- 通过关键字(SQL注入、上传、XSS、CSRF、一句话木马等)进行Google/SecWiki;
- 阅读《精通脚本黑客》,虽然很旧也有错误,但是入门还是可以的;
- 看一些渗透笔记/视频,了解渗透实战的整个过程,可以Google(渗透笔记、渗透过程、入侵过程等);
b 工具的熟悉
注意,这里让你玩工具是让你熟悉在渗透测试中是如果利用工具协助完成工作,而不是完全依赖工具,甚至工具越多越好,越玩越addict了,那就成script kid了。
熟悉渗透相关工具
熟悉AWVS、sqlmap、Burp、nessus、chopper、nmap、Appscan等相关工具的使用。
- 了解该类工具的用途和使用场景,先用软件名字Google/SecWiki;
- 下载无后门版的这些软件进行安装;
- 学习并进行使用,具体教材可以在SecWiki上搜索,例如:Brup的教程、sqlmap;
- 待常用的这几个软件都学会了可以安装音速启动做一个渗透工具箱;
c 实战
这里让你实战不是让你去找网站打,是搭建本地环境。
掌握渗透的整个阶段并能够独立渗透小型站点。
- 网上找渗透视频看并思考其中的思路和原理,关键字(渗透、SQL注入视频、文件上传入侵、数据库备份、dedecms漏洞利用等等);
- 自己找站点/搭建测试环境进行测试,记住请隐藏好你自己;
- 思考渗透主要分为几个阶段,每个阶段需要做那些工作,例如这个:PTES渗透测试执行标准;
- 研究SQL注入的种类、注入原理、手动注入技巧;
- 研究文件上传的原理,如何进行截断、双重后缀欺骗(IIS、PHP)、解析漏洞利用(IIS、Nignix、Apache)等,参照:上传攻击框架;
- 研究XSS形成的原理和种类,具体学习方法可以Google/SecWiki,可以参考:XSS;
- 研究Windows/Linux提权的方法和具体使用,可以参考:提权;
- 可以参考: 开源渗透测试脆弱系统;
d 关注安全圈动态
安全圈,说大也不大,说小也不小,你我都认识,都是一家人,什么都可以分享,唯独0day不可以。
关注安全圈的最新漏洞、安全事件与技术文章。
- 通过SecWiki浏览每日的安全技术文章/事件;
- 通过Weibo/twitter关注安全圈的从业人员(遇到大牛的关注或者好友果断关注),天天抽时间刷一下;
- 通过feedly/鲜果订阅国内外安全技术博客(不要仅限于国内,平时多注意积累),没有订阅源的可以看一下SecWiki的聚合栏目;
- 养成习惯,每天主动提交安全技术文章链接到SecWiki进行积淀;
- 多关注下最新漏洞列表,推荐几个:exploit-db、CVE中文库、Wooyun等,遇到公开的漏洞都去实践下。
- 关注国内国际上的安全会议的议题或者录像,推荐SecWiki-Conference。
e 熟悉Windows/Kali Linux
学习Windows/Kali Linux基本命令、常用工具;
- 熟悉Windows下的常用的cmd命令,例如:ipconfig,nslookup,tracert,net,tasklist,taskkill等;
- 熟悉Linux下的常用命令,例如:ifconfig,ls,cp,mv,vi,wget,service,sudo等;
- 熟悉Kali Linux系统下的常用工具,可以参考SecWiki,《Web Penetration Testing with Kali Linux》、《Hacking with Kali》等;
- 熟悉metasploit工具,可以参考SecWiki、《Metasploit渗透测试指南》。
f 服务器安全配置
学习服务器环境配置,并能通过思考发现配置存在的安全问题。
- Windows2003/2008环境下的IIS配置,特别注意配置安全和运行权限,可以参考:SecWiki-配置;
- Linux环境下的LAMP的安全配置,主要考虑运行权限、跨目录、文件夹权限等,可以参考:SecWiki-配置;
- 远程系统加固,限制用户名和口令登陆,通过iptables限制端口;
- 配置软件Waf加强系统安全,在服务器配置mod_security等系统,参见SecWiki-ModSecurity;
- 通过Nessus软件对配置环境进行安全检测,发现未知安全威胁。
g 脚本编程学习
选择脚本语言Perl/Python/PHP/Go/Java中的一种,对常用库进行编程学习。
- 搭建开发环境和选择IDE,PHP环境推荐Wamp和XAMPP,IDE强烈推荐Sublime,一些Sublime的技巧:SecWiki-Sublime;
- Python编程学习,学习内容包含:语法、正则、文件、网络、多线程等常用库,推荐《Python核心编程》,不要看完;
- 用Python编写漏洞的exp,然后写一个简单的网络爬虫,可参见SecWiki-爬虫、视频;
- PHP基本语法学习并书写一个简单的博客系统,参见《PHP与MySQL程序设计(第4版)》、视频;
- 熟悉MVC架构,并试着学习一个PHP框架或者Python框架(可选);
- 了解Bootstrap的布局或者CSS,可以参考:SecWiki-Bootstrap;
h 源码审计与漏洞分析
能独立分析脚本源码程序并发现安全问题。
- 熟悉源码审计的动态和静态方法,并知道如何去分析程序,参见SecWiki-审计;
- 从Wooyun上寻找开源程序的漏洞进行分析并试着自己分析;
- 了解Web漏洞的形成原因,然后通过关键字进行查找分析,参见SecWiki-代码审计、高级PHP应用程序漏洞审核技术;
- 研究Web漏洞形成原理和如何从源码层面避免该类漏洞,并整理成checklist。
i 安全体系设计与开发
能建立自己的安全体系,并能提出一些安全建议或者系统架构。
- 开发一些实用的安全小工具并开源,体现个人实力;
- 建立自己的安全体系,对公司安全有自己的一些认识和见解;
- 提出或者加入大型安全系统的架构或者开发;
- 看自己发展咯~
5、常用Windows命令
March 20, 2013 — March 31, 2013
做渗透的同学,尤其需要首先学习一些常用的windows命令(最好在实战中边运用边练习),特别是入侵检测是常用命令,如net
user、net localgroup、net use、net share、net start、arp、whoami、regedit、tasklist、find、cp、mkdir、del、dir、print……
提高:能写一些批处理脚本,完成一些重复性任务
6、一门脚本语言
July 15, 2013 — October 1, 2013
对于做渗透测试方向的同学尤为重要,对于做开发的同学也可以学习一门脚本语言。
我推荐的是python或php,学习python可以快速开发出一些有针对性的脚本,而学习php可以尝试进行web漏洞的挖掘。
7、Linux使用
August 1, 2013 — December 1, 2013
学习渗透的同学在这段时间又能分为两条路,一是web安全,二是内网渗透。web安全偏重于web应用漏洞挖掘和利用,内网渗
透偏重于网络环境的分析、内网计算机的漏洞利用。
内网中大部分重要计算机属于Linux,所以学会Linux基础的使用,Linux各种服务的搭建、维护、漏洞利用修补是必须的。
推荐图书:《鸟哥的Linux私房菜》
8、Windows编程
April 15, 2013 — December 31, 2013
在数据结构学习完成之后,我觉得就是一个分水岭了。做渗透方向的就不必继续深入Windows编程,大可继续积累网络安全经
验,但开发、逆向的同学就需要学习windows编程了。
Windows编程无非就是阅读MSDN,熟悉每个windowsAPI的用法,平时想到的好点子可以尝试写成程序,增加自己的代码量积
累。
windows编程也是一个积累的过程,需要慢慢了解每个API,所以学习起来并不紧张。
9、Web安全积累期
May 1, 2013 — December 31, 2014
其实积累是一个长期的过程,所以也不分期限的。平时可以在如90、法客、土司、乌云、习科之类的安全社区和大家一起讨论,
多关注最新的技术、漏洞,平时注意搜集每个漏洞的成因、利用方法、修补方法,并尝试在网上寻找实战的机会。
这段时间还可以学点脚本语言,当掌握了一门顺手的脚本语言后就能更快速、更便捷地做很多针对性的攻击。
10、汇编语言
June 1, 2013 — September 1, 2013
汇编也是一门基础课程,对以后的逆向破解、漏洞挖掘、木马免杀的学习都有直接影响,在windows编程的学习期间可以开始学
习汇编。
大概了解16位的汇编语言,知道基本语法,重点在32位汇编的学习上。学习汇编语言可以结合自己写的C程序,将自己写好的程
序调试,单步调试每一句汇编语言,不懂就查。
11、逆向破解
July 1, 2013 — October 1, 2013
在汇编基本语法学习完毕后,可以选择性地开始学习逆向、破解相关操作。
在学习逆向的过程中就可以熟悉之前学习的汇编指令的使用
推荐图书:《加密与解密》
12、木马免杀
September 20, 2013 — March 1, 2014
在逆向学习完成后,又可以分为几个小方向:深入破解、exploit、木马免杀。
能够自己编写木马后,最需要的就是免杀。如果编写的病毒木马不能运行,也无济于事。免杀成功与否是运气、经验、灵感、技
术、耐心的集合体,缺一不可。所以虽然很多人尝试学习,但最后真正能做到完美的人并不多
推荐图书:《黑客免杀攻防》
13、网络环境利用与Win服务器
October 15, 2013 — February 1, 2014
在Linux基础学习到一定程度后,可以开始学习网络,如何利用内网内各种计算机开启的各种服务,来达到渗透进目标机器的目
的。
当然,同时也要学习Windows服务器的使用,了解什么是域,如何在windows环境下使用各种服务。因为一个大内网下一般个人
机、目标机是windows系统。
14、Exploit二进制漏洞
October 5, 2013 — April 1, 2014
在逆向学习完成后,又可以分为几个小方向:深入破解、exploit、木马免杀。
其中Exploit对技术要求较高,回报也最丰厚,所以是很多大牛集结之地。学习exp需要对C、C++有牢固的基础,并有一双发现问
题的眼睛。在他人眼中可能只是一个软件崩溃或错误信息,在exper眼里就可以是无穷无尽的财富。
15、Windows核心编程
November 1, 2013 — May 1, 2014
在Windows编程学习到一定程度后就可以开始核心编程,其实二者并无太大区别,只是核心编程更加偏重windows内核的一些机
制。当你的技术不仅限于开发桌面应用以后,木马、病毒这些更接近系统底层的东西既可以满足要求。
这本书对于以后做开发的同学必看不可:《Windows核心编程》、《天方夜谭》、《寒江独钓》