零基础如何学习 Web 安全?
2014-08-13 08:26
363 查看
一. 首先你得了解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、微信、知乎、博客等善于跟进,不仅学,也要分享,让大家知道你的存在,更有利于交流与成长。
如果你对我有兴趣,可以看我的介绍:关于 | EVILCOS,我自认为我自己靠谱(不,这不是浮夸,这是自信)。
关于“圈子”,我想说:别把自己局限住。
最后,再次引用黑哥的一句话:“整就牛!”
################################################################################################
#####################
学习防御最好的方式,就是先学习如何进攻
既然楼主说了是零基础,那么我就当你是个完全没有技术基础的文科生,来解释一下这个命题。
余弦的回答列出了一个很完善的框架,但是,假设题主是个文科生,他能看懂这个框架的意思吗?
我认为,对新人来说,学习的第一步,最重要的,不是框架,而是“概念”。很多的漏洞挖掘与利用并不需要较高的技术能力,只需要你拥有一定的好奇心与动手能力即可触发。
什么是web安全?
懂得了概念之后,再去看第一名的框架,学习效率将会高很多,那么接下来,由我以一个小学生做试卷的例子,来向诸君演示何谓“web安全”?
所谓的安全,就是防御,即“堵住漏洞”的意思,为了学习堵住漏洞,我们必须先知道什么叫做“漏洞”,如何找出“漏洞”,只要你能够找到漏洞,自然便能堵住它。
------------------------------------------
姓名:______ 考生编号:_______________
首先我们来看这个,试卷的名字和编号填写,这个部分有“漏洞”吗?
有
学生的姓名和编号都写在这儿,没有做任何保护措施,因此,你只要偷看了某人的试卷上的这部分内容,然后把你的试卷的上的姓名和考生编码写成和他一样的即可伪装出他的身份。
漏洞攻击成功
-------------------------------------------------------------------------------------------------------------------------------
一、诗歌补写
-------------------------------------------------------------------------------------------------------------------------------
1 床前明月光,___________。
2 春眠不觉晓,___________。
这道题有漏洞吗?
有
这道题的答案本来应该是“疑似地上霜”和“处处闻啼鸟”
But,问题中,并没有规定答案里不能添加标点符号,所以,我完全可以把“疑是地上霜,举头望明月,低头思故乡”以及“处处闻啼鸟,夜来风雨声,花落知多少”当做答案写进去。
漏洞再次进攻成功 :P
-------------------------------------------------------------------------------------------------------------------------------
二、数学运算(在括号内填入数字)
-------------------------------------------------------------------------------------------------------------------------------
3 500 + 400 * 3 / 2 + 1 = ( )
4 ( 1 + 2 ) / 3 * 400 +500 = ( )
这个问题有漏洞吗?
有
出题者规定了只能填入数字,但却没有说是什么数字,也没有规定多少位,那么我的答案可以是 中文数字「壹佰壹拾圆」、罗马数字「MCI」或「0000000000001101」。
漏洞第三次进攻成功 XXD
------------------------------------------
有人会疑惑上面的例子并没有达到什么目的,其实我是想告诉大家,所谓的 hack,是一种发现问题的方法,而不是发现漏洞。漏洞本身也应该先是一个问题 ,这个问题产生安全隐患,然后我们通过堵上这个漏洞来消解隐患,是为“web security”。
举个实操的例子来吧
我们设定一个进攻目标
盗取「知乎」账户
第一阶段:什么技术都不懂
hack 账户名,注册一个名字叫「知乎」的账户,然后发送私信,要求回复账户/密码。
第二阶段:懂点 HTML 了
hack 登录页,写个 HTML 页面伪装成知乎登录页发送给目标。
第三阶段:学会了 Javascript
hack 登录页,通过在问题中插入攻击页面,在攻击页面中通过 JS 反向修改问题页到钓鱼页面。
这里举的例子并非意淫流,都是有非常大的成功机率的,涉及到技术点越少越难防御。
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、微信、知乎、博客等善于跟进,不仅学,也要分享,让大家知道你的存在,更有利于交流与成长。
如果你对我有兴趣,可以看我的介绍:关于 | EVILCOS,我自认为我自己靠谱(不,这不是浮夸,这是自信)。
关于“圈子”,我想说:别把自己局限住。
最后,再次引用黑哥的一句话:“整就牛!”
################################################################################################
#####################
学习防御最好的方式,就是先学习如何进攻
既然楼主说了是零基础,那么我就当你是个完全没有技术基础的文科生,来解释一下这个命题。
余弦的回答列出了一个很完善的框架,但是,假设题主是个文科生,他能看懂这个框架的意思吗?
我认为,对新人来说,学习的第一步,最重要的,不是框架,而是“概念”。很多的漏洞挖掘与利用并不需要较高的技术能力,只需要你拥有一定的好奇心与动手能力即可触发。
什么是web安全?
懂得了概念之后,再去看第一名的框架,学习效率将会高很多,那么接下来,由我以一个小学生做试卷的例子,来向诸君演示何谓“web安全”?
所谓的安全,就是防御,即“堵住漏洞”的意思,为了学习堵住漏洞,我们必须先知道什么叫做“漏洞”,如何找出“漏洞”,只要你能够找到漏洞,自然便能堵住它。
------------------------------------------
姓名:______ 考生编号:_______________
首先我们来看这个,试卷的名字和编号填写,这个部分有“漏洞”吗?
有
学生的姓名和编号都写在这儿,没有做任何保护措施,因此,你只要偷看了某人的试卷上的这部分内容,然后把你的试卷的上的姓名和考生编码写成和他一样的即可伪装出他的身份。
漏洞攻击成功
-------------------------------------------------------------------------------------------------------------------------------
一、诗歌补写
-------------------------------------------------------------------------------------------------------------------------------
1 床前明月光,___________。
2 春眠不觉晓,___________。
这道题有漏洞吗?
有
这道题的答案本来应该是“疑似地上霜”和“处处闻啼鸟”
But,问题中,并没有规定答案里不能添加标点符号,所以,我完全可以把“疑是地上霜,举头望明月,低头思故乡”以及“处处闻啼鸟,夜来风雨声,花落知多少”当做答案写进去。
漏洞再次进攻成功 :P
-------------------------------------------------------------------------------------------------------------------------------
二、数学运算(在括号内填入数字)
-------------------------------------------------------------------------------------------------------------------------------
3 500 + 400 * 3 / 2 + 1 = ( )
4 ( 1 + 2 ) / 3 * 400 +500 = ( )
这个问题有漏洞吗?
有
出题者规定了只能填入数字,但却没有说是什么数字,也没有规定多少位,那么我的答案可以是 中文数字「壹佰壹拾圆」、罗马数字「MCI」或「0000000000001101」。
漏洞第三次进攻成功 XXD
------------------------------------------
有人会疑惑上面的例子并没有达到什么目的,其实我是想告诉大家,所谓的 hack,是一种发现问题的方法,而不是发现漏洞。漏洞本身也应该先是一个问题 ,这个问题产生安全隐患,然后我们通过堵上这个漏洞来消解隐患,是为“web security”。
举个实操的例子来吧
我们设定一个进攻目标
盗取「知乎」账户
第一阶段:什么技术都不懂
hack 账户名,注册一个名字叫「知乎」的账户,然后发送私信,要求回复账户/密码。
第二阶段:懂点 HTML 了
hack 登录页,写个 HTML 页面伪装成知乎登录页发送给目标。
第三阶段:学会了 Javascript
hack 登录页,通过在问题中插入攻击页面,在攻击页面中通过 JS 反向修改问题页到钓鱼页面。
这里举的例子并非意淫流,都是有非常大的成功机率的,涉及到技术点越少越难防御。
相关文章推荐
- 零基础如何学习 Web 安全?
- 零基础如何学习 Web 安全?
- 零基础如何学习 Web 安全?
- 零基础如何学习 Web 安全?(转)
- 【Android基础学习】webview加载网页,tel协议不会调出拨号盘?该如何处理
- 20145308 《网络对抗》Web安全基础实践 学习总结
- 零基础如何系统学习Java Web
- 零基础如何学习网络安全
- linux学习笔记-工程师技术:HTTP服务基础(Web服务基本搭建)、网页内容访问、安全Web服务、动态网站的部署
- web服务器脚本安全 基础学习 总结【对应php 脚本】
- 阿里巴巴前端开发经验者告诉你如何零基础学习web前端
- 零基础如何学习Web前端技术免费分享
- web基础系列(五)---https是如何实现安全通信的
- Web 应用程序安全威胁--学习笔记
- JSP设计模式基础:View Helper模式——学习如何使用View Helper模式使得Model数据适应表现层的需要(1)
- JSP设计模式基础:View Helper模式——学习如何使用View Helper模式使得Model数据适应表现层的需要(2)
- WEB程序员学习JS快速指南--基础一
- JSP设计模式基础:View Helper模式——学习如何使用View Helper模式使得Model数据适应表现层的需要(2)
- JSP设计模式基础:View Helper模式——学习如何使用View Helper模式使得Model数据适应表现层的需要(1)
- Java Web应用中如何实现任务有效调度-Java基础-Java-编程开发