零基础如何学习 Web 安全?

想学习Web安全,完全出于兴趣。 如何入门?
关注者
13,177
被浏览
1,217,126

143 个回答

这是个好问题,我强迫症犯了,本来你写的是“web”,我改为了“Web”。

因为正好Web安全是我擅长的,你说的是0基础,我总结下我的一些看法吧,针对0基础的。

一. 首先你得了解Web

Web分为好几层,一图胜千言:

事实是这样的:如果你不了解这些研究对象是不可能搞好安全研究的。

这样看来,Web有八层(如果把浏览器也算进去,就九层啦,九阳神功……)!!!每层都有几十种主流组件!!!这该怎么办?

别急,一法通则万法通,这是横向的层,纵向就是数据流啦!搞定好数据流:从横向的层,从上到下→从下到上,认真看看这些数据在每个层是怎么个处理的。

数据流中,有个关键的是HTTP协议,从上到下→从下到上的头尾两端(即请求响应),搞通!难吗?《HTTP权威指南》720页!!!坑爹,好难!!!

怎么办?

横向那么复杂、纵向数据流的HTTP协议就720页的书!!!放弃好了……

不,千万别这样。

给你点信心是:《HTTP权威指南》这本书我压根没看过。但是通过百度/Google一些入门的HTTP协议,我做了大概了解,然后Chrome浏览器F12实际看看“Network”标签里的HTTP请求响应,不出几小时,就大概知道HTTP协议这玩意了。(这是快速研究的精髓啊)

搞明白HTTP协议后,你就会明白安全术语的“输入输出”。

黑客通过输入提交“特殊数据”,特殊数据在数据流的每个层处理,如果某个层没处理好,在输出的时候,就会出现相应层的安全问题。

精彩举例:

1. 如果在操作系统层上没处理好,比如Linux的Bash环境把“特殊数据”当做指令执行时,就产生了OS命令执行的安全问题,这段“特殊数据”可能长得如下这般:
; rm -rf /;

2. 如果在存储层的数据库中没处理好,数据库的SQL解析引擎把这个“特殊数据”当做指令执行时,就产生SQL注入这样的安全问题,这段“特殊数据”可能长得如下这般:
' union select user, pwd, 1, 2, 3, 4 from users--

3. 如果在Web容器层如nginx中没处理好,nginx把“特殊数据”当做指令执行时,可能会产生远程溢出、DoS等各种安全问题,这段“特殊数据”可能长得如下这般:
%c0.%c0./%c0.%c0./%c0.%c0./%c0.%c0./%20

4. 如果在Web开发框架或Web应用层中没处理好,把“特殊数据”当做指令执行时,可能会产生远程命令执行的安全问题,这段“特殊数据”可能长得如下这般:
eval($_REQUEST['x']);

5. 如果在Web前端层中没处理好,浏览器的JS引擎把“特殊数据”当做指令执行时,可能会产生XSS跨站脚本的安全问题,这段“特殊数据”可能长得如下这般:
'"><script>alert(/cos is my hero./)</script>

...

怎样,刺激吧?搞懂这些,就算入门啦。

  • 记好:一切的安全问题都体现在“输入输出”上,一切的安全问题都存在于“数据流”的整个过程中。
  • 记好:“数据流”、“输入输出”这两个关键点。

你好像悟到了点什么,咱们继续……

前面说了:如果你不了解这些研究对象是不可能搞好安全研究的。

拿我XSS来说,曾经有人问我,我回答的一个:

在学习XSS前我应该学习什么?

你可与参考下。

假如我曾经要不是比较熟JavaScript、ActionScript、HTML/CSS的话,我估计我要研究好XSS是很困难的,我熟悉这些语言刚开始的出发点是想“创造”,我做了好些Flash动画、做了好些网站、包括自己从后端到前端独立实现过一个博客系统,为了解决好前端在各浏览器的兼容问题(当时是IE6如日中天的时候),我啃了好几本书,如《CSS网站布局实录》、《JavaScript DOM编程艺术》、《AJAX Hacks》、Flash从6版本以来到CS2的各类书籍我都多少看过,也实战过,这一切都是在大学前三年搞定的。

大学第四年冲刺Web安全(长期以来有黑客情怀),大四下学期进入知道创宇(刚创业起步),然后到了现在,一晃在知道创宇六年。

说到这,很清晰啦:如果你不了解这些研究对象是不可能搞好安全研究的。

咱们继续:)

二. 黑客兵器谱

新人入门总在寻找好工具来提高效率,Web安全这块我之前放出了我的“兵器谱”,在这:

我的渗透利器

(会不断抽时间更新)。

工欲善其事必先利其器嘛,而且新人用了好兵器会更有成就感的。

切记:这些兵器,你不仅要知其然还得知其所以然,别堕落了哦。

三. 明白“精于一而悟道”的道理

不多说,请看这我的回答:

对于立志在网络安全领域发展,应该如何系统学习安全知识?

四. 融入圈子

多结交些靠谱的黑客,搞搞基啦(不过别来真的,还有我好讨厌扯淡/水得不得了的人),微博(含:Twitter)、QQ、微信、知乎、博客等善于跟进,不仅学,也要分享,让大家知道你的存在,更有利于交流与成长。

如果你对我有兴趣,可以看我的介绍:

关于余弦

,我自认为我自己靠谱(不,这不是浮夸,这是自信)。

关于“圈子”,我想说:别把自己局限住。

最后,再次引用黑哥的一句话:“整就牛!”

“安全帮”专注于信息安全教育 “www.secbang.com”


一.开始前的思考

1.我真的喜欢搞安全吗?
2.我只是想通过安全赚钱钱吗?
3.我不知道做什么就是随便。
4.一辈子做信息安全吗

      这些不想清楚会对你以后的发展很不利,与其盲目的学习web安全,不如先做一个长远的计划。否则在我看来都是浪费时间。如果你考虑好了参照我的计划进行学习,我不敢保证你实践完多牛逼,但是找5k-8k的工作绝对不成问题。

1.目的

   本问目的是带大家快速入门web安全,不会搞些虚张声势的东西都是我的学习经验.   不会涉及到特别详细的技术,而是指导你去如何系统的学习少走弯路,节约时间。要有自信。不要觉得任何人和任何事有多牛逼,不低估自己,不高估别人。认真学习。


2.经验

   我们在学习web安全或者任何东西时都需要分阶段专注学习,比如研究XSS那么这段时间大部分精力只研究XSS。XSS通常结合CSRF来达到更好的利用效果,但是不要把太多时间放到csrf上,研究透彻xss后在研究下一个漏洞类型,要有重点的研究东西。

3.多看书和分析文章

     学习代码审计时我认为最有效的方法,先去阅读相关的书籍然后找两篇分析0day的文章,照葫芦画瓢分析文章中一样版本的代码,这对你成长很有帮助,进步也非常快。


4.整理笔记

    这个我觉得最重要,这是一个好习惯 可以让我们重新把学习的技术做一个总结和巩固。在总结的过程形成自己对技术的理解与创新。从而让书本上的知识变成自己的东西。


二,零基础web安全学习计划

2.1 HTTP协议请求 (TIME: 一周)

对以下下知识点做了解学习
 http协议请求 
 http状态码              
 post / get 区别       
    可以使用Chrome浏览器中F12查看“Network”标签中的HTTP请求响应,来了解HTTP协议请求.

2.2.危险的HTTP头参数 (TIME: 一周)

HTTP请求时需对一些必要的参数做一些了解,这些参数也会造成很严重的安全安全问题如下:
user_agent 
X-Forwarded-For
Referer
clien_ip
Cookie      

2.3 专业术语天 (TIME: 一天)

了解如下专业术语的意思

webshell 
菜刀
0day 
SQL注入
上传漏洞
XSS
CSRF
一句话木马

2.4 专业黑客工具使用 (TIME: 10天)

熟悉如何渗透测试安全工具,掌握这些工具能大大提高你在工作的中的效率。

sqlmap     学习地址: http://secbang.com/schoollist/burpsql/kclist.html
Burpsuite  学习地址: http://secbang.com/schoollist/burpuse/kclist.html
nmap       学习地址: http://secbang.com/schoollist/nmap/kclist.html
w3af       学习地址: http://secbang.com/schoollist/sectools/kclist.html
nessus  
Appscan 
AWVS


4.脚本语言+代码审计入门 (TIME: 10天)

    推荐php不用学的太灵通,我们又不是搞开发,了解基本语法和一些危险函数即可如:open exec 等函数会造成什么漏洞,了解了php中的危险函数会造成那些漏洞可举一反三套用到别的脚本当中 asp aspx java这些语言的危险函数可能只是写法不一样功能是相同的,了解这些后就可以来做一些web漏洞的代码审计了。
php入门学习  学习地址: https://www.w3cschool.cn/php/
php代码审计  学习地址: http://secbang.com/webtype.html 


5.Sql注射 (TIME: 3天)

      零基础就先用最有效的办法注入推荐注入工具 sqlmap如何使用? 如果你不想只停留在使用工具的层面,那么你需要学习一下数据库,mysql sqlserver 随便先学一个前期学会 selsct 就行,php尝试自己写一个查询数据库的脚本来了解手工sql注入的原理,这样进步会很快,如果想深入可以把各种数据库注入都温习一边。关于需要掌握的技术点:

1. 数字型注入 2.字符型注入 3.搜索注入 4.盲注(sleep注入) 5.sqlmap使用 6.宽字节注入
mysql入门  学习地址: https://www.w3cschool.cn/mysql/
Sqlmap      学习地址: http://secbang.com/schoollist/burpsql/kclist.html
sleep原理   学习地址: 盲注sleep函数执行sql注入攻击

6.CSRF 跨站点请求 (TIME: 3天)

为什么会造成csrf,GET型与POST型CSRF 的区别, 如何防御使用 token防止 csrf?
csrf 详细学习笔记 

7.XSS (TIME: 7天)

    要研究xss首先了解同源策略 ,Javascript 也要好好学习一下 ,以及html实体 html实体的10 或16进制还有javascript 的8进制和16进制编码,

xss     学习地址 :在学习 XSS 前应该学习什么?
进制编码  学习地址:http://su.xmd5.org/static/drops/tips-689.html
同源策略  学习地址:Browser Security-同源策略、



8.文件上传漏洞 (TIME: 7天)

  了解下开源编辑器上传都有那些漏洞,如何绕过系统检测上传一句话木马
上传绕过学习: https://wenku.baidu.com/view/867ad233dc36a32d7375a417866fb84ae45cc386.html

9 php-远程/本地 文件包含 (TIME: 10天)

   去学习下 include() include_once() require() require_once() fopen() readfile() 这些php函数是如何产生文件包含漏洞, 本地包含与远程包含的区别。
以及利用文件包含时的一些技巧如:截断 /伪url/超长字符截断 等 。

10 php-命令执行 (TIME: 3天)

PHP代码中常见的代码执行函数有:
eval(), assert(), preg_replace(), call_user_func(), call_user_func_array(),create_function(), array_map()等。
了解这些函数的作用然后些搞清楚如何造成的代码执行漏洞。

12 ssrf (TIME: 3天)

了解ssrf的原理,以及ssrf的危害。
ssrf能做什么。当我们在进行web渗透的时候是无法访问目标的内部网络的,那么这个时候就用到了ssrf漏洞,利用外网存在ssrf的web站点可以获取如下信息。
1.可以对外网、服务器所在内网、本地进行端口扫描,获取一些服务的banner信息;
2.攻击运行在内网或本地的应用程序(比如溢出);
3.对内网web应用进行指纹识别,通过访问默认文件实现;
4.攻击内外网的web应用,主要是使用get参数就可以实现的攻击(比如struts2,sqli等);
5.利用file协议读取本地文件等。

13 逻辑漏洞 (TIME: 7天)

常见的逻辑漏洞一般都会在如下地方出现
1.订金额任意修改--购物站经常出现
2.验证码回传 
3.越权操作,其主要原因是没对ID参数做cookie验证导致。
4.找回密码存在设计缺陷
5.接口无限制枚举
http://www.freebuf.com/vuls/112339.html

14 xee(XML外部实体注入) (TIME: 5天)

当允许xml引入外部实体时,通过构造恶意内容,可以导致文件读取、命令执行、内网探测等危害
http://blog.sina.com.cn/s/blog_8194b04f0102wsoe.html

15 XPath注入 (TIME: 5天)

path注入攻击本质上和SQL注入攻击是类似的,都是输入一些恶意的查询等代码字符串,从而对网站进行攻击
https://blog.csdn.net/quiet_girl/article/details/50588130

16 服务器解析漏洞

Iis 解析漏洞  
nginx 解析漏洞 
tomcat 后台上传漏洞
jboss 上传漏洞

如果上述漏洞原理掌握的都差不多那么你就可以去找个工作实践一下了.


# 加分项目-渗透信息搜集 (TIME: 15天)#

子域名搜集 利用DNS域名传送漏洞搜集二级域名

Liunx测试命令如下:

Dns服务器 1.1.1.1  测试域名http://wooyun.org
dig @1.1.1.1 http://sechook.org axfr
nmap --script dns-zone-transfer --script-args dns-zone-transfer.domain=http://wooyun.org -p 53 -Pn 1.1.1

实例查询苏宁DNS服务器

D:\deep>nslookup
默认服务器:  localhost
Address:  10.11.0.1
> set type=ns
> http://suning.com
服务器:  localhost
Address:  10.11.0.1
非权威应答:
http://suning.com      nameserver = http://lns1.zdnscloud.info
http://suning.com      nameserver = http://gns2.zdnscloud.net.cn
http://suning.com      nameserver = lns2.zdnscloud.biz
http://suning.com      nameserver = http://gns1.zdnscloud.net
>

查询苏宁suning.com IP

C:\Users\jack>nslookup http://suning.com
服务器:  localhost
Address:  10.11.0.1
非权威应答:
名称:    http://suning.xdwscache.ourwebcdn.com
Addresses: 203.130.60.48   //对应ip
         203.130.60.49  //对应ip
         203.130.60.50  //对应ip
Aliases:  http://suning.com
http://Suning.com.wscdns.com //别名

在线二级域名爆破网站

https://dnsdumpster.com/
Netcraft - Search Web by Domain

工具获取二级域名

渗透测试中常用的在线工具--SecWiki 专题  参考链接
subDomainsBrute
wydomain 
theHarvester.py 
Fierce
Dig
knock
dnsspider
SubDomainscollect
SubBrute
dirfuzz

使用格式:

     fierce  -dns http://baidu.com -threads 3
     subDomainsBrute.py http://suning.com
     python theHarvester.py -d http://suning.com -l 500 -b baidu -v 国内百度找的多
     python theHarvester.py -d 公司名 -l 500 -b baidu -v 
     python theHarvester.py -d http://suning.com -l 500 -b google -v国外站google多
     python theHarvester.py -d school -l 1000 -b all   all使用所有的搜索引擎进行搜索

subDomainsBrute使用需要安装依赖支持

     报错信息:ImportError: No module named dns.resolver
     需要安装的库是 dnspython
      pip install dnspython
      没有pip的话, 可以用
     到https://github.com/rthalley/dnspython.git 下载
      cd dnspython
      python setup.py install

搜索引擎 Google新经验:

+ 把google可能忽略的字列如查询范围 
- 把某个字忽略
~ 同意词
. 单一的通配符
* 通配符,可代表多个字母
"" 精确查询 

代码托管泄漏信息搜索

Google:

http://andy-game.googlecode.com/svn-history/
Gitbub:   https://github.com/search?utf8=%E2%9C%93&amp;q=%E5%A4%96%E7%BD%91+%E8%B1%86%E7%93%A3&amp;type=Code&amp;ref=searchresults

邮箱搜集

Metasploit邮箱搜集链接
http://xiao106347.blog.163.com/blog/static/215992078201311300162776/

ip反查域名

http://dns.aizhan.com/58.240.86.229/

二级兄弟域名搜集

查询邮件服务器信息
目标IP地址范围搜集
利用代码托管网站搜集目标信息

确定ip 地址范围

扫描c段
获取cdn真实ip地址
社会工程学


如果觉得对你有用可以关注下安全帮公众号 "安全帮Live" secbang.com