掌控安全学院,让学习网络安全成为一件简单的事。官方公众号【掌控安全EDU】
早期的互联网非常的单调,一般只有静态页面,现在,随着技术的发展,web上大多数站点实际上是web应用程序,在服务器和浏览器之间进行双向的信息传递。他们支持注册登录,金融交易,搜索及用户创作的内容。用户只需要拥有一个浏览器,就能实现各种功能。
Web 是指一个网站的前端页面到后端服务,比如我们常见的 Javascript、PHP、Python、Mysql、jQuery、Docker 等,包括开发、运维这些服务。
所以在我看来 Web 安全也就是从安全的角度探索 Web 的一种方式。
为了能够更简单的理解一些常见漏洞,我们首先来看一下这份试卷:
试卷考生姓名:__________
考生学号:__________
一、诗歌补写
床前没月光,___________。
春眠不觉晓,___________。
二、数学运算(在括号内填入数字)
3 500 +400 * 3 / 2 + 1 = ( )
4 ( 1 + 2) / 3 * 400 +500 = ( )
考生姓名:__________
考生学号:__________
首先我们来看这个,试卷的名字和编号填写,这个部分有“漏洞”吗?有
学生的姓名和编号都写在这儿,没有做任何保护措施,因此,你只要偷看了某人的试卷上的这部分内容,然后把你的试卷的上的姓名和考生编码写成和他一样的即可伪装出他的身份。
漏洞攻击成功
一、诗歌补写
床前没月光,___________。
春眠不觉晓,___________。
这道题有漏洞吗?有
这道题的答案本来应该是“疑似地上霜”和“处处闻啼鸟”
But,问题中,并没有规定答案里不能添加标点符号,所以,我完全可以把“疑是地上霜,举头望明月,低头思故乡”以及“处处闻啼鸟,夜来风雨声,花落知多少”当做答案写进去。
漏洞再次进攻成功:P
二、数学运算(在括号内填入数字)
3 500 +400 * 3 / 2 + 1 = ( )
4 ( 1 + 2) / 3 * 400 +500 = ( )
这个问题有漏洞吗?有
出题者规定了只能填入数字,但却没有说是什么数字,也没有规定多少位,那么我的答案可以是
中文数字「壹佰壹拾圆」、罗马数字「MCI」或「0000000000001101」。
漏洞第三次进攻成功 XXD
这份试卷简单的模拟了Web漏洞的攻击思想,在实际中,我们打开一个网页提交登录或者是搜索都会经过服务器做的一系列处理又回到浏览器,在这个过程中我们提交的数据会被带入到一系列的填空题中,有的是我们能猜到的,有的则是意想不到的,有的会经过SQL查询进行填空,有的会被带入到命令行中进行执行,最后又把结果返回给浏览器进行填空,也就是最后我们看到的结果。
在数据的传输中,我们可以把 web 简单的分为几个层次:
浏览器:浏览器即客户端,提供客户端和服务器端的数据信息交互。
http:客户端与web服务器进行交互时就存在web请求,这种请求都基于统一的应用层协议——HTTP协议来交互数据。http属于轻量级协议,无需连接,提供了对通信错误的容错性。
中间件:中间件是位于平台(硬件和操作系统)和应用之间的通用服务
Server容器:Server容器负责解析用户请求和脚本语言,类似的有Tomcat,JBoss等。我们访问网页看到是web容器处理后的内容。
数据库:动态页面可提供交互式的信息查询服务,主要依赖于web数据库的实现,对外提供包含 表单的Web页面作为访问接口,查询结果也以包含数据列表的Web页面形式返回给用户。
当然除了这些数据也有可能流向不些不可见的第三方服务商。
下图就展示了数据的传输流程,以及不同阶段经常出现的漏洞及其原因:
我们常见的Web漏洞类型主要有SQL注入、XSS、远程命令执行以及越权等。以下我们分别用举例的形式为大家介绍这几种漏洞。
(SQL注入)
所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。
select * from username = ____ and password=_____
select * from username "test" or ""="" and password="123456"
(XSS)
XSS则是攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。
你好啊,尊敬的______
你好啊,尊敬的 xxx
(远程命令执行)
而远程命令执行,是用户通过浏览器提交执行命令,由于服务器端没有针对执行函数做过滤,导致执行命令。
ping _______
ping www.baidu.com & wget xxxxxxxxxxx
(越权)
越权漏洞是比较常见的漏洞类型,越权漏洞可以理解为,一个正常的用户A通常只能够对自己的一些信息进行增删改查,但是由于程序员的一时疏忽 ,对信息进行增删改查的时候没有进行一个判断,判断所需要操作的信息是否属于对应的用户,可以导致用户A可以操作其他人的信息。
Cookie: uid=11426;
Cookie: uid=1;
关于越权,就像我们刚刚试卷体中的姓名部分。
再展示一个数据的传输流程图,以便直观清晰的看到,数据在各层中是怎样运作的,以及可能发生的漏洞:
了解了这几个漏洞之后我们可以看到原理都有些类似,也很简单,当然我们只要不再局限于概念名词就会发现 web 安全的大部分漏洞都很简单。更多时候,发现一个复杂的漏洞需要是只是耐心。
概念,不是一个神圣的东西,概念很多时候只是bullshit。很多概念的产生是因为需要认识和概括某种存在着的现象而不得已产生的,概念也许是必须的但并不是必然如此的。
换句话说,概念仅可以被看成是一种努力尝试描述后的结果之一。或者也可以说概念是提出这个概念的人自嗨的产物,跟其他人关系不大。甚至,有些概念是‘别有用心’的发明来合理化某种其实不必合理化但是存在的现象。
所以不要把自己拘泥于一个这样的概念中来思考所面临问题的实质。把概念忘了,你才可能看清楚你和事物本身的关系。
三:完全没有基础我该从哪下手?
完全没有基础学习 Web 安全是件比较难的事情,所以我给出的最小的方案和最少的建议。
工具
先用 AWVS 扫几个测试网站大体了解一下
http://testphp.vulnweb.com/
http://testhtml5.vulnweb.com
http://testasp.vulnweb.com
http://testaspnet.vulnweb.com
把扫到的漏洞复现,了解怎么利用,主要了解:
XSS
SQL 注入
远程代码执行
在这里给大家准备了一套完整的教学视频,零基础的小白们可以直接学习:https://ke.qq.com/course/275794?flowToken=1004603
最后,我想说的是挖漏洞应该是一件快乐的事情,当你把挖漏洞的目的从单纯的挣钱和声望再丰富一些,你会发现收益的重要性可能远小于心情愉快。慢慢的变成一种良性循环,让你走的更远。
记得关注【掌控安全EDU】,免费领取体系化安全课程,助你成为一名优秀白帽。
领取专属 10元无门槛券
私享最新 技术干货