WEB应用常见漏洞介绍(下)
点击“合天智汇”关注,学习网安干货
昨天我们介绍了OWASP Top 10—6 ,今天我们接着介绍OWASP Top 5—1
Top 5 安全配置错误
通常情况下,网站的管理人员如果没有足够的安全意识也可使web应用置于非常危险的地步。比如说web应用上存在默认的账户,存在不在业务范围内的网页(测试页面),网站漏洞没有及时打上补丁,该收到保护的文件没有做权限的控制等等错误的安全配置。
安全配置错误可以发生在应用的任何层面,包括平台web服务器、应用服务器、数据库、框架和自定义的代码。
为了有效防范安全配置错误导致遭到入侵的风险,开发人员应该和系统的管理员共同努力,以确保整个系统的正确配置。同时建议企业安全人员需要定期对企业资产进行收集与扫描,检测补丁是否完全、错误的配置、默认账户的使用和启动了不必要的服务等等
实际案例
1. 中国人寿某处配置错误导致通过保单号获取保险信息(WooYun-2015-112711)
2.人人网应用配置错误大量信息泄露,包括后台地址(WooYun-2012-15977 )
Top 4 不安全的直接对象引用
关于官方的介绍:
当生成web页面时,应用程序经常使用对象的实名或关键字。而应用程序并不会每次都验证用户是否有权访问该目标对象,这就导致了不安全的直接对象引用漏洞。
作为授权的系统用户,攻击者只需要修改指向一个系统对象的直接引用参数值,让其指向另
一个无权访问的对象。
听起来很不好理解,换种通熟易懂的说法。比如说有这么一个网址:
http://www.example.com/file.jsp?file=report.txt
访问了这个网址之后,网页上就会输出report.txt内的内容。
如果网站的开发人员没有对用户能访问的页面进行限制的话,攻击者就可以修改文件参数使用目录遍历攻击。他修改的 URL为:
http://www.example.com/file.jsp?file=../../../etc/shadow
../../../etc/shadow这个文件里面存放的是linux的密码。一旦该网站存在不安全的对象引用,攻击者就可以直接看到服务器上的密码。
再比如,有这个一个购物网站。小明在网站上下了一个订单,单号为123456,小明只要访问一下网址就可以看到自己的订单信息:
http://www.gouwu.com/usr/order.php?id=123456
如果网站的开发人员没有对用户能访问的页面进行限制的话,小明把后面的id值改成别人的订单号,那么他就可以看到别人的订单信息。大量的个人隐私就会遭到泄露。
实际案例
1. 114票务网某站逻辑漏洞利用支付超时导致上万用户敏感信息泄漏(订单号/姓名/身份证/火车出发路线)(WooYun-2016-213011 )
2. 上海公交集团从目录遍历到控制4个内部系统35822员工信息(WooYun-2015-135251 )
Top 3 跨站脚本攻击
XSS(跨站脚本)是最普遍的web应用安全漏洞。当应用程序发送给浏览器的页面中包含用户提供的数据,而这些数据没有经过适当的验证或转义(escape),就会导致跨站脚本漏洞。
其实大家应该都知道,我们看到的网页无论多么绚丽多彩都是html呈现出来的。如果说网站上有一个输入点可以让用户输入,并且这个网站还会很友好的将用户输入的内容输出到屏幕上。一看看过去似乎没有什么问题,当然,如果网站将用户的输入进行html编码了,确实没什么问题。如果说网站没有对用户的输入进行编码和过滤再显示到页面上,就有很大的概率造成严重的风险。
一般来说这种风险的高发地在论坛居多。用户在留言框中输入一串恶意的html代码。网站将这段恶意的代码显示在论坛上。这时候浏览器看到了这串代码,它认为这是正常的html代码呀,于是正常的执行了。于是乎,只要是浏览过带有这个恶意代码的页面的用户,他们的浏览器就会执行恶意代码,造成严重的后果。比如说这串代码是用来获取用户的cookie的,并将cookie发送给写恶意代码的人。那么写恶意代码的人就可以以你的身份登陆论坛,最终导致你的论坛账号不在属于你。
实际案例
1. 新浪微博存在跨站漏洞可获取Cookie(WooYun-2016-197245)
2. 搜狐视频存在XSS漏洞造成全球最大跨站DDoS攻击事件
Top 2 失效的身份认证和会话管理
失效的身份认证和会话管理漏洞一般出现在退出、密码管理、超时、记住我、秘密问题、帐户更新等等。
举个例子,一般我们登陆一个网站之后,网站会发给我们一串cookie值,这串cookie相当于是我们在这个网站上的通行证。一般正确的做法是我们一旦退出我们的账号或者一段时间没有访问这个网站时,这个cookie就会失效,再次访问时就会要求我们重新输入账号密码。
而失效的身份认证和会话管理漏洞就是指cookie并没有随着我们的不访问而失效。这样,我们的账号就很有很大的风险。尤其是在公共场所的时候,大部分人并没有随手退出账号的习惯,而是直接关闭浏览器。导致接下来的人很容易就接管了我们的账号,并对账号做一些恶意的操作。
这个网址并没有做权限的控制,导致只要知道了url,就能够下载它的数据库。这个数据库中存了敏感的后台管理员账号信息。一旦被攻击者获取,该网站所在的服务器很有可能就因此直接沦陷。
实际案例
1. 校园网cmcc-edu漏洞之会话嗅探免验证上网 (WooYun-2013-21749)
Top 1 注入
注入漏洞有很多种方式,如SQL,OS以及LDAP注入等等,小白这里就先只介绍sql注入漏洞。
Sql注入官方介绍:
所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。具体来说,它是利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。
举个例子,一般来说的,我们要登陆一个网站的时候,第一步我们得输入正确的账号密码。
那么网站是如何判断我们账号输入的正确与否呢?账号密码肯定是存在网站的数据库中的,当我们点击登陆的时候(假设账号密码为xiaobaike/123456),网站的后台就会执行一条sql查询语句,如:
select * from Users where UserName=’xiaobaike’ and password=‘123456’
如果正确了,就能够登陆,错误了就返回登陆失败。
如果网站没有对用户的输入进行过滤的话,就很容易产生严重的风险。
比如我输入用户名为:
Xiaobaike’ or 1=1 #
密码随意,如1
这个时候后台的查询语句就会变成:
select * from Users where UserName=’xiaobaike’ or 1=1 # and password=‘1’
如果说网站采用的数据库管理软件是最常用的mysql,#在mysql数据库软件中的意思是注释,也就是说#后面相当于没有了。这时候网站后台的查询语句就会变成:
select * from Users where UserName=’xiaobaike’ or 1=1
语句的意思变成了,当条件1=1的时候,验证通过。大家都知道1=1一定是成立的,于是,就可以不需要正确的账号密码也能登陆成功。通过这种方式登陆也叫做万能密码登陆。
实际案例
1. 盛大游戏某APP存在SQL注入(涉及78W+用户数据)(WooYun-2016-204475)
2.中国平安某重要站点存在SQL注入涉及200多万用户信息(WooYun-2016-200768)
本文转自简书作者:小白客
点击下面标题可查看近期相关热门文章
回顾热门