整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

网络安全之逻辑漏洞(越权)

网络安全之逻辑漏洞(越权)

录一些平时常用的方法,每次检测的时候按照不同的业务类型一个一个地去测试

注册功能
可能存在漏洞:

1.任意用户注册

2.短信轰炸/验证码安全问题/密码爆破

3.批量注册用户

4.枚举用户名/进行爆破

5.SQL注入/存储型XSS

登陆功能

1.短信轰炸/验证码安全问题/密码爆破

2.SQL注入

3.可被撞库

4.空密码绕过/抓包把PW字段修改成空值发送

5.认证凭证替换/比如返回的数据包中包含账号,修改成其他的账号就能登陆其他账号

6.权限绕过/Cookie伪造

7.第三方登陆,可以修改返回包的相关数据,可能会登陆到其他的用户
密码找回功能

1.短信邮箱轰炸/短信邮箱劫持

2.重置任意用户密码/验证码手机用户未统一验证

3.批量重置用户密码

4.新密码劫持/直接跳过验证步骤

5.本地验证,修改返回值
购买支付/充值

1.交易金额/数量修改,交易金额不一定非要0.01,有时候1.00也行

2.交易信息订单编码/导致信息泄露

3.整数溢出,int最大值为2147483647,超过最大值

4.修改充值账户

5.请求重放多次下单,高并发操作

6.如果返回当参数中有一些奇怪的参数,可以把这个而参数添加到请求包中然后重发
抽奖活动

1.抽奖作弊

2.刷奖品/积分

3.高并发点击,在签到,转账,兑换,购买业务可以试一试
优惠券/代金券

1.刷优惠券/代金券

2.修改优惠券金额/数量
运费

1.修改运费金额
订单信息

1.订单信息遍历/泄露

2.订单信息泄露导致用户信息泄露

3.删除他人订单
会员系统

1.修改个人信息上传文件,上传带弹窗的html

2.如遇上上传xlsx/docx,可能存在xxe,上传恶意的文档盲测

3.图片上传也可能遇到imagereagick命令执行,上传恶意图片

4.视频上传如果使用ffmpeg<3.2.4(视频按帧分割成图片),上传恶意avi盲测ssrf

5.用户横向越权访问/遍历/导致用户信息泄露

6.SQL注入/个人简介处存储XSS
传输过程:

1.明文传输账号密码

2.修改信息处无session/token导致csrf

3.POST/COOKIE注入
评论功能:

1.POST注入/存储XSS

2.无session/token导致CSRF
验证码问题:

1.万能验证码0000,8888,1234

2.返回包中存在验证码

3.删除验证码或者cookie中的值可以爆破账号密码
短信轰炸:

1.重放数据包

2.删除修改cookie,或者检测数据包是否有相关参数,直接删除或者修改,然后重放数据包

3.手机号前面加 +86,或者手机号后面加空格之类的,然后重发数据包

4.请求参数修改大小写,或者添加请求参数比如&id=1

5.一个站的登陆处可能做了防护,但是在找回密码处可能没有安全防护,或者在注册流程中没有安全防护,所以说多测试接口

6.如果存在批量注册用户的话,每个用户可以发送短信5次,也能实现批量轰炸
水平越权和垂直越权

1.主要登陆后还是修改参数,主要找到 多个接口不断测试

2.关注网页源代码,有时候会有表单,但是被隐藏起来了,可以修改返回包然后尝试获取数据检测

3.多个账号,主要分析请求参数
数据泄露

1.在找回密码处,填写数据后抓包查看返回信息,有可能存在敏感数据返回
任意用户密码重置

1.目前大部分都是在修改密码处修改参数,将用户名的参数修改成其他用户名

2.有些是通过前端验证,使用bp修改返回数据包

译:三思之旅

预估稿费:200RMB(不服你也来投稿啊!)

投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿

前言

最近在帮合作单位做渗透测试,这是我入行以来第一次参与正式项目。怀着激动而忐忑的心情测了两周,我一共发现了十几个漏洞,其中大部分还都是高危漏洞。终于没有交白卷,忐忑的心情终于放下,现在心里只剩一点小激动,一点成就感。

渗透测试是一个既需要技术,又需要经验的活儿。思来想去,趁现在兴奋劲儿还没过,赶紧做一下总结,毕竟经验是通过实战积累的,而实战之后的总结则是最好的方式。由于在测试中发现的漏洞以“越权”类居多,而且本人的人生中提交的第一个漏洞也是越权,所以这里就先聊聊越权的那些事儿。

什么是越权

越权(或者说权限提升,Privilege Escalation)是指攻击者能够执行他本身没有资格执行的一些操作,属于“访问控制”的问题。用大白话讲,越权就是“超越了你你拥有的权限,干了你本来不可能干的事儿”。先来几个越权的例子:

Winmail普通用户可直接进入后台取得域名管理、用户管理等所有权限

大华DSS平台低权限账户越权直接修改system密码

前程无忧越权访问个人简历(简单测试上万份简历可查看)

易企秀越权修改信息致任意用户登入

一般情况下,常见的访问控制方式有三种:垂直访问控制、水平访问控制和上下文相关的访问控制。垂直访问控制允许不同类型的用户(常见的有基于角色划分用户类型)访问应用程序的不同功能,例如在某系统中普通用户只能执行有限的操作,管理员则拥有最高权限。水平访问控制允许用户访问一组相同类型的资源,如在一个网银系统中,每个用户只能看到他自己的账户信息,只能操作自己的账户进行转账。而上下文相关的访问控制可确保基于应用程序当前的状态,限制用户仅能访问所允许的内容,如在常见的找回/修改密码功能中,必须通过身份验证才能重新设置密码。许多情况下,垂直访问控制与水平访问控制会相交交叠,配合使用。

如果在一个应用中,用户能够访问他本身无权访问的功能或者资源,就说明该应用存在访问控制缺陷,也就是说存在越权漏洞。与访问控制相对应的,将越权分为垂直越权、水平越权和上下文相关的越权。

垂直越权:如果攻击者能够执行某项功能,而他所属的角色并不具备该权限,这就存在垂直越权漏洞,如上述示例中前两个例子。

水平越权:如果攻击者能够执行与自己同级别的其他用户能够执行的操作,这就存在水平越权漏洞,如上述示例中的后两个例子。

上下文相关的越权:如果攻击者能够利用应用程序状态机中的漏洞获得关键资源的访问权限,这就存在上下文相关的越权。如在找回密码过程中,攻击者使用自己的账户信息通过验证,但最终却通过某种手段(例如使用BurpSuite改数据包)将他人的密码进行了修改。上下文相关的越权漏洞一般属于业务逻辑漏洞。

为什么会出现越权

通常情况下,我们使用一个web应用程序提供的功能时,流程是:登录—>提交请求—>验证权限—>数据库查询—>返回结果。如果在“验证权限”环节存在缺陷,那么便会导致越权。一种常见的存在越权的情形是:Web应用程序的开发者安全意识不足,认为通过登录即可验证用户的身份,而对用户登录之后的操作不做进一步的权限验证,进而导致越权问题。

1. 通过隐藏URL实现访问控制

有些应用程序仅通过URL实现访问控制。例如:使用管理员身份登录后可以看到后台管理页面的链接,但是以普通用户登录则看不到该链接。在这种情况下,开发者认为普通用户不知道或者很难猜到后台管理页面的URL,因此实现对管理功能的保护。这其实是一种错误观点,因为攻击者完全有可能通过其他方式(如Google Hacking、HTML/js源码分析、暴力猜解URL、利用其他漏洞等)得到后台管理URL。

2. 直接对象引用(Direct Object reference)

用户提交HTTP请求访问某资源时,被请求资源的标识符常常以GET或者POST请求参数的形式出现在URL查询字符串或者POST请求主体中提交给服务器。例如,在一个网银系统中,用户可以使用以下URL查询账户信息:

1https://www.onlinebank.com/viewInfo.php?accountId=12345678

其中accountId是用户自己的账户ID。用户登录自己的账户后,该URL的链接会出现在用户账户页面中,用户点击即可跳转到账户信息页面。虽然其他用户无法看到这个链接,但是如果该网银系统的访问控制不完善,攻击者完全可以通过枚举accountId进而构造出URL,然后越权查看他人的账户信息。

3. 多阶段功能

应用程序的一些功能通过几个阶段执行,并且在执行过程中向服务器依次提交多个请求。这种情况很常见,比如转账功能、找回密码功能等,需要先验证用户的身份,验证通过后才允许用户执行后续动作。多阶段功能本身并没有问题,但是如果开发者认为到达验证过程后续阶段的用户一定已经拥有了相关的权限,并在后续阶段执行操作时不再对用户提交的请求进行验证,那么就很有可能存在越权漏洞。攻击者完全有可能绕过前几阶段的验证阶段,直接执行后续的动作。讲一个我在测试中遇到的真实的案例。

某网站在找回密码时做了很严格的验证,需要验证姓名、手机号、身份证号等信息,验证通过了才能修改密码。那么问题来了,既然做了这么严格的验证,怎么还会存在越权?该网站的“找回密码”功能被设计成了两步(提交了两个请求报文):第一步验证用户身份,这时提交第一个请求报文,验证成功之后,进入第二步;第二步才是真正的修改密码的动作,而修改密码的POST数据包有3个请求参数,分别是新密码、确认新密码以及账号值。问题就出在第二步,在执行修改密码的动作时,服务器并未验证被修改密码的账户是否是第一步中通过身份验证的账户,因此攻击者可以很容易的以自己的身份通过认证,然后修改第二步提交的报文,实现对任意账户的密码修改!

4. 静态文件

有些Web应用程序在用户访问动态页面时会执行相应的访问控制检查,以确定用户是否拥有执行相关操作所需的权限。但是,用户仍然会提交对静态资源的访问请求,如下载网站中的word、excel、pdf文档等。这些文档都是完全静态的资源,其内容直接由Web服务器返回,它并不在服务器上运行。因此,静态资源自身并不能执行任何检查以确认用户的访问权限。如果这些静态资源没有得到有效的保护,那么任何知晓URL命名规则的人都可以越权访问这些静态资源。这种情况的越权也很常见,而且即使不知道URL命名规则,完全有可能通过Google hacking搜索到敏感文件。

5. 平台配置错误

一些应用程序通过在Web服务器或应用程序平台层使用控件来控制对特定URL路径的访问。例如,有些应用程序会根据用户角色来限制对管理后台路径(如/admin)的访问,如果用户不属于“管理员”组,则拒绝其访问后台管理页面的请求。但是,如果在配置平台及控件时出现错误,就可能导致越权访问。

越权漏洞怎么挖

首先,找出疑似存在越权漏洞的请求。存在越权漏洞的请求有一定的特点,可以从两个方面下手。

从HTTP请求上来说,就是通过BurpSuite抓取在目标站点正常操作所产生的请求数据包,然后找出可能产生越权的请求。一般情况下,类似上文所述URL的GET或者POST请求都要列为重点怀疑对象:

1https://www.onlinebank.com/viewInfo.php?accountId=12345678

从业务功能上来说,找到容易产生越权的功能点。常见的越权高发功能点有:根据订单号查订单、根据用户ID查看帐户信息、修改/找回密码等。

确定了怀疑对象之后,还需要进一步的分析,以确定是否真的存在越权。这时,需要两个不同的账号(下文分别称为账号A和账号B),以便测试登录账号A后进行操作能否影响到账号B。注意在浏览器中测试时,需要使用两个浏览器分别登录不同的账号,或者使用浏览器的隐私浏览功能登录其中一个账号。

以上文提到的URL为例进行说明。假设账号A的id为1234,账号B的id为5678,BurpSuite中抓取的数据包都是在账号A的。我的习惯做法是:在BurpSuite中将该请求发送到Repeater,然后将参数id的值修改为5678,最后提交修改后的请求包;服务器返回响应后,可以看一下BurpSuite中收到的响应报文。如果响应报文直接提示错误之类的,基本上可以确定此处不存在越权;如果响应报文提示操作成功,此时应该使用浏览器登录账号B进行二次确认,如果数据确实有相应的改动,那么则说明这里存在越权漏洞。这里需要注意:BurpSuite中报文提示操作成功有可能是误报,必须在浏览器中进行再次确认。而对于查询订单这类的请求来说,情况更简单了,修改参数id提交请求,如果返回了账号B的数据,那么就可以确定存在越权。

当然,越权漏洞的攻击点不仅仅存在于请求参数中,还有可能在Cookie中。因此,需要具体情况具体分析,复杂一点的可能还需要Cookie值配合请求参数值以实现越权攻击。

总结

实现应用程序的完善的访问控制不是件容易的事,因此越权漏洞防不胜防。对于开发者而言,一定要有安全意识,时刻保持警惕。以下是几点建议:

永远不要相信来自客户端(用户)的输入!

执行关键操作前必须验证用户身份,多阶段功能的每一步都要验证用户身份。

对于直接对象引用,加密资源ID,以防止攻击者对ID进行枚举。

在前端实现的验证并不可靠,前端可以验证用户的输入是否合规,在服务器端验证用户权限。

参考文献

黑客攻防技术宝典:Web实战篇(第2版)

我的越权之道

What is privilege escalation

Direct Object References and Horizontal Privilege Escalation

述:

由于没有对用户权限进行严格的判断

导致低权限的账号(比如普通用户)可以去完成高权限账号(比如超管)范围内的操作

分为水平越权垂直越权

水平越权:A用户和B用户属于同一级别用户,但各自不能操作对方个人信息。A用户如果越权操作B用户个人信息的情况称为水行越权操作。

垂直越权:A用户权限高于B用户,B用户越权操作A用户的权限的情况称为垂直越权。



越权漏洞属于逻辑漏洞,是由于权限校验的逻辑不够严谨导致的

每个应用系统其用户对应的权限是根据其业务功能划分的,而每个企业的业务又都是不一样的

因此越权漏洞很难通过扫描工具发现,往往需要通过手动进行测试


水平越权:

我们登录一下,右上角有提示账号密码。我还是用lili的了,登录之后我们点击 “点击查看个人信息” 就能查看个人信息。


在这里实际上是通过一个 GET 请求,将要查询的用户信息传递到了后台,


我们把 lili 修改为 lucy,提交请求后我们就能查看 lucy 的信息,说明是存在水平越权的漏洞



这样,没有经过密码验证就查看了其他平级用户的信息,这是水平越权。

垂直越权:

我们先登录超级管理员的账号,这里有两个用户admin/123456,pikachu/000000。admin是超级管理员


我们现在添加一个用户:

然后抓包,这是他新建的用户的数据包,并且有登录状态的cookie,把这个请求发送到 Repeater 中

然后退出管理员账号,重放这个数据包,这时候用户是会添加失败的,因为没有登录状态。登录普通用户账号,取出当前账号的Cookie

用上图中的Cookie修改我们刚刚发送到 Repeater 中那个数据包的 Cookie,再重放这个数据包。


这时候就添加了另一个用户,第一个是超级管理员添加的;另一个是普通用户重放超级管理员的数据包添加的。


普通管理员去做超级管理员的操作就是垂直越权,但是比较鸡肋 因为现实很难抓到超级管理员的包。


原文转自:https://www.cnblogs.com/qi-yuan/p/12554630.html