从事网络安全这么多年,总是会被问到很多奇奇怪怪的问题:
「叔叔,我Steam账号被盗了,能帮忙找回吗?我给你发红包」
「我的手机被监控了,生活和工作受到了严重影响,该怎么解决?」
「小H书账号被盗了找不回来,他一直诈pian我的粉丝怎么办?」
「能查得到手机定位吗」
其实我也能理解,毕竟「网络安全」的概念对大家来说是既神秘又遥远,谁知道究竟是个什么玩意儿?!
但我最不能理解的是还有人问我:网络安全是不是门槛特别高、自学根本学不了、普通人没办法入行?
一时间我都不知道是在夸我还是在贬低他自己了~
你说在互联网如此发达的今天,只要你动动手,网上随便一搜教程一大把,公开透明想怎么学就怎么学,怎么还会觉得网安很难入门呢!
千万别被「网络安全」这个词给唬住了呀,也不要觉得自学网络安全很难入门!!
一、自学网络安全的误区和陷阱
1.1、不要试图以编程为基础开始学习
在之前的文章中,我都一再强调不要以编程为基础再开始学习网络安全,一般来说,学习编程不但学习周期长,而且实际向安全过渡后可用到的关键知识并不多
一般人如果想要把编程学好再开始学习网络安全往往需要花费很长时间,容易半途而废。而且学习编程只是工具不是目的,我们的目标不是成为程序员。建议在学习网络安全的过程中,哪里不会补哪里,这样更有目的性且耗时更少
1.2、不要把深度学习作为入门第一课
很多人都是冲着要把网络安全学好学扎实来的,于是就很容易用力过猛,陷入一个误区:就是把所有的内容都要进行深度学习,但是把深度学习作为网络安全第一课不是个好主意。原因如下:
【1】深度学习的黑箱性更加明显,很容易学的囫囵吞枣
【2】深度学习对自身要求高,不适合自学,很容易走进死胡同
1.3、不要收集过多的资料
网上有很多关于网络安全的学习资料,动辄就有几个G的材料可以下载或者观看。而很多朋友都有“收集癖”,一下子购买十几本书,或者收藏几十个视频
网上的学习资料很多重复性都极高而且大多数的内容都还是几年前没有更新。在入门期间建议“小而精”的选择材料,下面我会推荐一些自认为对小白还不错的学习资源,耐心往下看
二、学习网络安全的一些前期准备
2.1、硬件选择
经常会问我“学习网络安全需要配置很高的电脑吗?”答案是否定的,黑客用的电脑,不需要什么高的配置,只要稳定就行.因为黑客所使用的一些程序,低端CPU也可以很好的运行,而且不占什么内存.还有一个,黑客是在DOS命令下对进行的,所以电脑能使用到最佳状态!
因此,不要打着学习的名义重新购买机器...
学渗透的电脑配置:
1、硬盘:最低1T的硬盘,推荐256G固态硬盘+1T机械硬盘(双硬盘插槽)。
2、内存:最低16G,因为可能要运行多个虚拟机。
3、CPU:最低i5,推荐i7
4、如果只在一个地方使用,可以买台式机,否则买笔记本更方便。
2.2、软件选择
很多人会纠结学习黑客到底是用Linux还是Windows或者是Mac系统,Linux虽然看着很酷炫,但是对于新人入门并不友好。Windows系统一样可以用虚拟机装靶机来进行学习,如果你的是Mac系统,可以装双系统进行学习
至于编程语言,首推Python,因为其良好的拓展支持性。当然现在市面上很多网站都是PHP的开发的,所以选择PHP也是可以的。其他语言还包括C++、Java...
很多朋友会问是不是要学习所有的语言呢?答案是否定的!引用我上面的一句话:学习编程只是工具不是目的,我们的目标不是成为程序员
(这里额外提一句,学习编程虽然不能带你入门,但是却能决定你能在网络安全这条路上到底能走多远,所以推荐大家自学一些基础编程的知识)
2.3、语言能力
我们知道计算机最早是在西方发明出来的,很多名词或者代码都是英文的,甚至现有的一些教程最初也是英文原版翻译过来的,而且一个漏洞被发现到翻译成中文一般需要一个星期的时间,在这个时间差上漏洞可能都修补了。而且如果不理解一些专业名词,在与其他黑客交流技术或者经验时也会有障碍,所以需要一定量的英文和黑客专业名词(不需要特别精通,但是要能看懂基础的)
比如说:肉鸡、挂马、shell、WebShell等等
三、自学网络安全学习路线
3.1、基础操作入门,学习基础知识
入门的第一步是学习一些当下主流的安全工具课程并配套基础原理的书籍,一般来说这个过程在1个月左右比较合适。
在这个阶段,你已经对网络安全有了基本的了解。如果你学完了第一步,相信你已经在理论上明白了上面是sql注入,什么是xss攻击,对burp、msf、cs等安全工具也掌握了基础操作。这个时候最重要的就是开始打地基!
所谓的“打地基”其实就是系统化的学习计算机基础知识。而想要学习好网络安全,首先要具备5个基础知识模块:
1.操作系统
2.计算机协议/网络
3.数据库
4.开发语言
5.常见漏洞原理
学习这些基础知识有什么用呢?
计算机各领域的知识水平决定你渗透水平的上限。
【1】比如:你编程水平高,那你在代码审计的时候就会比别人强,写出的漏洞利用工具就会比别人的好用;
【2】比如:你数据库知识水平高,那你在进行SQL注入攻击的时候,你就可以写出更多更好的SQL注入语句,能绕过别人绕不过的WAF;
【3】比如:你网络水平高,那你在内网渗透的时候就可以比别人更容易了解目标的网络架构,拿到一张网络拓扑就能自己在哪个部位,拿到以一个路由器的配置文件,就知道人家做了哪些路由;
【4】再比如你操作系统玩的好,你提权就更加强,你的信息收集效率就会更加高,你就可以高效筛选出想要得到的信息
3.2、网络安全实战操作
1.挖SRC
挖SRC的目的主要是讲技能落在实处,学习网络安全最大的幻觉就是觉得自己什么都懂了,但是到了真的挖漏洞的时候却一筹莫展,而SRC是一个非常好的技能应用机会。
2.从技术分享帖(漏洞挖掘类型)学习
观看学习近十年所有0day挖掘的帖,然后搭建环境,去复现漏洞,去思考学习笔者的挖洞思维,培养自己的渗透思维
3.靶场练习
自己搭建靶场或者去免费的靶场网站练习,有条件的话可以去购买或者报靠谱的培训机构,一般就有配套的靶场练习
3.3、参加CTF比赛或者HVV行动
推荐:CTF比赛
CTF有三点:
【1】接近实战的机会。现在网络安全法很严格,不像之前大家能瞎搞
【2】题目紧跟技术前沿,而书籍很多落后了
【3】如果是大学生的话,以后对找工作也很有帮助
如果你想打CTF比赛,直接去看赛题,赛题看不懂,根据不懂的地方接着去看资料
CTF赛题复现平台
- BUUCTF
- 拥有大量比赛的复现环境
- 国内较早使用动态靶机的CTF复现平台·定期举办各类公开赛
- 提供平台开源环境·较全的比赛Writeup
- CTFHub
- 各类比赛历年真题
- 较为体系化的技能树
- 较全的CTF工具集
- 较全的赛事日历
- 较全的比赛WriteUp
- BugKu
- 国内较早的CTF复现平台(在buu和ctfhub还没火的时候bugku很有名)·较为基础的题目
- 较全的WriteUp
- Pwnable
- 适合Pwn新手入门题目较为友好
推荐:HVV(护网)
HVV有四点:
【1】也能极大的锻炼你,提高自身的技术,最好是参加每年举行的HVV行动
【2】能认识许多圈内的大佬,扩大你的人脉
【3】HVV的工资也很高,所以参加的话也能让你赚到不少钱
【4】和CTF比赛一样如果是大学生的话,以后对找工作也很有帮助
四、网络安全资料推荐
4.1、书单推荐
计算机操作系统:
【1】编码:隐藏在计算机软硬件背后的语言
【2】深入理解操作系统
【3】深入理解windows操作系统
【4】Linux内核与实现
编程开发类:
【1】 windows程序设计
【2】windwos核心变成
【3】Linux程序设计
【4】unix环境高级变成
【5】IOS变成
【6】第一行代码Android
【7】C程序语言设计
【8】C primer plus
【9】C和指针
【10】C专家编程
【11】C陷阱与缺陷
【12】汇编语言(王爽)
【13】java核心技术
【14】java编程思想
【15】Python核心编程
【16】Linuxshell脚本攻略
【17】算法导论
【18】编译原理
【19】编译与反编译技术实战
【20】代码整洁之道
【21】代码大全
【22】TCP/IP详解
【23】Rootkit : 系统灰色地带的潜伏者
【24】黑客攻防技术宝典
【25】加密与解密
【26】C++ 反汇编与逆向分析技术揭秘
【27】web安全测试
【28】白帽子讲web安全
【29】精通脚本黑客
【30】web 前端黑客技术揭秘
【31】程序员的应用
【32】英语写作手册:风格的要素
4.2、常见的网络安全及论坛
- 看雪论坛
- 安全课
- 安全牛
- 安全内参
- 绿盟
- 先知社区
- XCTF联盟
五、网络安全面试题整理
1、SQL注入的原理是什么?
SQL注入攻击是通过将恶意构造的SQL语句插入到应用的输入参数中,再到后台SQL服务器上解析执行的一种攻击方式。
2、SQL注入产生的原因是什么?
程序开发过程中未注意规范书写SQL语句,并且未对输入参数进行过滤。
3、MySQL注入,写入一句话木马需要什么条件?
使用into outfile把木马写入web目录拿到webshell需要以下几个条件:
1.拿到的mysql用户拥有file_priv权限(show global variables like '%secure%'查看)
2.对web目录有写权限
3.知道系统物理路径(需要into outfile (‘路径’))
4、SQL注入的流程是什么?
1.判断注入点(通过扫描器,单引号,特殊符号等)
2.确定注入方式(字符型,数字型,报错注入等)
3.确定数据库类型
4.依次爆出库名–>表名–>列名–>数据
5.得到有用的数据进行利用
5、常见的web中间件有哪些?
1.IIS
2.Apache
3.Nginx
4.Tomcat
5.Jboss
6、MySQL注入,5.0以上和5.0以下有什么区别?
Mysql5.0以后默认添加了一个information_schema的数据库,该数据库中的表都是只读的,不能进行删除,更新,插入等操作。但它记录了数据库中所有的库名、表名、列名等重要信息。
information_schema.schemata:存储了数据库中所有数据库的库名
information_schema.tables:存储了数据库中所有表的表名
information_schema.colums:存储了数据库中所有列的列名
7、SQL注入的种类都有哪些?
1.按照注入点数据类型分:
- 数字型
- 字符型
2.按照数据传参方式分:
- get型
- post型
- header头部注入(UA、COOKIE等)
3.按照注入方法分:
- union注入
- 布尔盲注
- 时间盲注
- 报错注入
- 二次注入
- 宽字节注入
8、什么是宽字节注入?
主要利用mysql在使用GBK编码时,会人为两个字符是一个汉字的特性,在转义单引号(0x27)的时候,如果加了过滤转义符号/(0x5c),我们可以利用GBK编码在/前加0xdf或者其他可以组成汉字的十六进制字符组成一个汉字(df5c)从而将单引号逃逸出来的注入方式。
9、宽子节注入如何防御?
1.数据库使用utf-8编码
2.使用gbk编码的修补方案:
- 使用mysql_set_charset(GBK)指定字符集
- 使用mysql_real_escape_string进行转义
原理:mysqlmysql_real_escape_string与addslashes的不同之处在于其会考虑当前设置的字符集,不会出现前面df与5c拼接为一个宽字节问题。当前字符集需要使用mysql_set_charset进行指定。这两个添加缺一不可。
10、什么是二次注入?
在存入数据库的时候做了过滤,但是在取数据的时候没有做过滤,从而产生的注入方式。
11、SQL注入如何写入shell?
1.利用mysql的into outfile写入webshell
2.利用sqlmap的–os-shell方式写入webshell
12、SQL注入如何防御?
1.SQL预编译
2.严格限制参数类型,只能为数字
3.加入黑白名单
4.转义特殊字符
5.使用WAF
13、SQL注入如何绕过WAF?
1.大小写、双写绕过
2.替换关键字
3.使用编码
4.使用注释
5.使用等价函数与命令
6.使用特殊符号
7.填充垃圾数据
14、XSS原理是什么?
攻击者通过在web界面中嵌入恶意脚本(通常为js代码),造成用户在浏览网页时,控制用户浏览器进行操作的攻击方式
15、XSS都有什么分类?分别介绍一下
1.反射型
一般是在url构造恶意js,将链接发给目标用户,当用户访问该链接的时候,会向服务器发起一个GET请求来提交一个带有恶意代码的链接
2.DOM型
脚本程序可以通过DOM来动态修改页面内容。
3.持久型
常见的就是在博客留言板,反馈投诉,论坛评论等将恶意代码和正文都存入服务器的数据库,每次用户访问都会触发恶意代码。
16、XSS注入语句如何写?
17、什么是XSS盲打,如何利用?
18、XSS如何防御?
19、CSRF漏洞原理是什么?
20、CSRF如何防御(说三种方法)?
21、CSRF与XSS的区别是什么?
22、SSRF漏洞有什么危害?
23、SSRF漏洞可以用哪些协议来利用?
24、SSRF都涉及哪些危险函数?
25、SSRF届洞有防御的情况下可以怎么绕过?
26、如何判断是否存在SSRF漏洞?
27、SSRF漏洞如何防御?
28、SSRF漏洞可能存在在哪些功能中?
29、XML注入的原理是什么?
30、XML注入漏洞如何修复?
31、文件上传漏洞的原理是什么?
32、文件上传漏洞有哪些危害?
33、文件上传漏洞常见的绕过方法有哪些?
34、描述Nginx解析漏洞原理
35、描述Apache解析漏洞原理
36、描述lIS解析漏洞的原理
37、文件上传漏洞如何防御?
38、文件包含漏洞的原理是什么?
39、文件包含可以使用哪些函数?
40、文件包含怎么利用?
41、常见的命令执行函数有哪些?
42、命令执行在有黑名单的情况下可以使用哪些方式进行绕过?
43、命令执行如何防御?
44、什么是越权漏洞?
45、越权漏洞如何修复?
46、发送验证码时通常会有什么漏洞,以及如何防御?
47、支付时会涉及哪些漏洞?
48、登陆功能会有哪些漏洞,如何防御?
49、描述—下反序列化漏洞的原理
50、说出五种Google Hack语法
51、什么是同源第略?
52、分别介绍一下session和cookie,以及二者的关系
53、如何绕过CND获取网站的真实IP?
54、可以使用什么工具来收集子域名?
55、简述—下Burpsuite lntrude模块的四种模式
56、获取webshell的方式都有哪些?
57、你是如何做代码审计的?如何保证代码审计的全面性?
我把文章中提到的学习路线、学习书籍、HW/SRC挖洞笔记、面试题都给大家做了一个汇总,大家有需要的话,可以参考一下哈
网络安全文档笔记
网络安全视频教程
需要定制学习路线学习资料的评论区留言