CTF-Web培训章节-Web应用权限安全

目录

1、Web应用信息泄露

2、Web应用权限安全

3、社会工程学

4、总结

Web 应用权限安全

权限问题是Web应用程序中一种常见的安全漏洞。黑客可利用一个账户甚至无账户即可控制全站用户数据。该漏洞产生的原因主要是因为在对数据进行增、删、改、查询的时候,对客户端的请求过分相信而遗漏了权限的判定,从而导致应用程序和系统数据未授权泄露、修改、删除等等。

权限漏洞常见的分类为未授权访问、越权访问、用户验证缺陷。
CTF中考察:Json Web Token。

Web 应用权限安全-未授权访问

未授权访问:
未授权访问是指用户在未经过授权过程时,能直接获取原本需要经过授权才能获取的文本内容或页面等信息。其实质是由于在进行部分功能开发时,未添加用户身份校验步骤,导致在未授权用户访问相应功能时,没有进行有效的身份校验,从而浏览了他原有权限不支持查看的内容,也就是导致了未授权访问。

 

本工具支持自动模糊提取对应目标站点的API以及API对应的参数内容,并支持对:未授权访问、敏感信息泄露、CORS、SQL注入、水平越权、弱口令、任意文件上传七大漏洞进行模糊高效的快速检测。在扫描结束之后,本工具还支持自动生成扫描报告,您可以选择便于分析的HTML版本以及较为正规的doc、pdf、txt版本。

 

 Web 应用权限安全-越权访问

水平越权

水平权限漏洞简单来说就是即基于角色认证的系统对进入系统的不同用户分配权限,相同角色的用户具有相同的权限,而相同角色的用户资源的互相访问就导致了安全问题。例如用户A和用户B同属在一个角色RoleX下,但用户A和用户B都各自拥有自己的一些私有数据,正常情况下,应该只有用户自己才能访问自己的私有数据,但是系统只验证了用户A在角色RoleX下,而未验证用户B的数据是否属于用户A,导致用户A可以访问用户B的数据。

 水平越权举例

以lucy的账户登陆页面后,点击查看个人信息,修改username字段为其他用户名,即可查看到其他用户的信息。

 

垂直越权

垂直越权简单来说就是即基于角色认证的系统定义了不同的角色,不同的角色具有不同的权限,在系统验证用户的权限时,只验证用户所属的角色,然后就根据角色所具有的的权限进行授权,随之而产生的不同角色用户之间资源的互相访问。权限具有高低之分,高权限的用户往往具有访问低权限用户的资源,低权限的用户是被限制访问高权限用户资源的,但当低权限用户通过一些手段达到访问高权限用户的资源时,就发生了所谓的垂直越权。

垂直越权举例

使用pikachu登陆访问后,发现用户只有查看权限,而后直接访问admin的账户的添加功能菜单,发现可以访问并添加账户,从而实现了越权。

 

 Web 应用权限安全-用户验证缺陷

用户验证缺陷:
用户验证缺陷通常会涉及多个部分,包括登陆体系安全、密码找回体系、用户身份认证体系等。常见的比如登陆逻辑,采用用户名及密码验证一个用户的权限,但只判断了前端的响应状态导致被绕过密码的校验过程,比如输入正确的用户名密码的响应为1,输入了错误的用户名密码的响应为0,使用漏洞利用工具将0改为1后,成功绕过了密码的验证逻辑。

用户验证缺陷举例

某OAlogincheck_code.php存在登陆绕过漏洞,通过漏洞攻击者可以登陆系统管理员后台

 

 

 

 

 

CTF举例

直接购买Flag会提示Money Not Enough,另两个商品购买会显示各自对应的内容,并在多次购买后也会提示Money Not Enough结合对应的金额不难发现存在初始金额,并且金额有限。

 

在进行购买时,url形如:buy.php?cost=200&goods=2,其中便有消费金额的参数,后端根据消费金额直接对余额进行增减将消费金额修改为负数时,便能够使余额增长:buy.php?cost=-200&goods=2将数字调大便可使余额能购买Flag:buy.php?cost=-20000&goods=2。

 

 

 

 Josn Web Token

Json Web Token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准。
JWT 的结构分为:
    Header(头部)

    Payload(负载)

  Signature(签名)

 

 

Header(头部)
Header 部分是一个 JSON 对象,使用 base64decode 之后传递的。header部分最常用的两个字段是alg和typ:
alg属性表示token签名的算法(algorithm),最常用的为HMAC和RSA算法
typ属性表示这个token的类型(type),JWT 令牌统一写为JWT。

Payload(负载)
Payload 部分也是一个 JSON 对象,用来存放实际需要传递的数据,一般常见为认证信息:{“username”:“admin”,“password”:“admin“,”xxxx”:”xxxx”}

Signature(签名)
Signature 部分是对前两部分的签名,防止数据篡改,使用一下算法
HMACSHA256(base64UrlEncode(header) + "." +base64UrlEncode(payload),secret)进行签名,密钥(secret)只有服务端知道。

Josn Web Token举例

某登陆题目,登陆过程中Cookie的构造类似Json Web Token的格式

 

提示当前登陆用户为guest

而后对Cookie字段的内容进行解密,发现存在role字段,并且为guest,随后
将其修改为admin,并将alg值为空值(一些JWT库当alg字段为空时,后端将不执行签名验证)。

 

 

 修改完成后,将相应字段base64encode还原后,删除签名字段位,发送请求包,即可获取flag

 

 

posted @   Cysec  阅读(13)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
点击右上角即可分享
微信分享提示