Web渗透之身份认证与访问控制缺陷(越权(水平垂直),访问控制(没有验证),脆弱验证(Cookie,JWT,Session等))

Web渗透之身份认证与访问控制缺陷(越权(水平垂直),访问控制(没有验证),脆弱验证(Cookie,JWT,Session))

1)身份认证与访问控制缺陷

身份认证与访问控制缺陷是Web应用安全中高发且危害严重的漏洞类型,核心源于应用对"用户身份合法性""操作权限边界"的校验缺失或失效。本文将围绕越权(水平/垂直)、访问控制缺陷、脆弱验证三大维度,从定义、测试方法、工具、靶场实践四个层面展开系统性解析,帮助理解漏洞原理与渗透思路。

水平越权

水平越权用户信息获取是没有对用户请求ID或者其他参数进行比较直接查询等操作,如A用户可以访问B,C等用户信息。

垂直越权

垂直越权就是低权限用户(如普通用户)突破权限等级,访问/操作高权限用户(如管理员)的资源

访问控制

访问控制缺陷是"更基础的权限校验缺失",比越权漏洞更直接,核心是应用未建立有效的"访问准入机制",允许未授权用户直接访问受保护资源。

空口令/默认口令:后台登录允许空密码登录,或保留默认账号(如admin/admin)未强制修改。

匿名访问:受保护资源(如/backup/database.sql、/admin/logs.php)无需登录即可直接访问。

白名单失效:IP白名单配置错误(如白名单包含0.0.0.0/0)、referer白名单可伪造,导致未授权IP访问。

默认安装残留:应用默认安装后未删除安装目录(如/install.php)、未清理安装日志,攻击者可重新安装覆盖管理员账号。

脆弱验证

脆弱验证指身份验证载体(Cookie/Token/JWT/Session)因设计或实现缺陷,导致攻击者可伪造、篡改或窃取身份标识,突破访问控制。

Cookie脆弱性:敏感信息明文存储(如user_id=1&is_admin=0)可直接修改;未设置HttpOnly、Secure、SameSite属性,存在被窃取、拦截或跨站利用风险;Cookie值规则简单可预测,易被伪造。

JWT脆弱性:后端未校验签名,可直接修改Payload;使用none算法或弱对称加密算法且密钥泄露;Payload仅Base64编码无加密,敏感信息可解码;exp过期时间设置过长或未设置,令牌长期有效。

Session脆弱性:SessionID生成规则简单(自增、固定前缀)可预测;用户退出后未销毁Session,残留ID可复用;存在Session固定攻击,诱导用户使用攻击者控制的SessionID登录。

黑盒查看漏洞:

尝试修改用户ID,用户名,对其他用户进行操作

越权测试:登录A用户,修改URL/表单中的user_id、order_id为B用户标识,访问B用户个人信息、订单数据;普通用户修改Cookie/JWT中的is_admin、role字段为管理员标识,尝试访问/admin后台。

访问控制测试:直接访问/admin、/backup等受保护路径,检查是否无需登录即可进入;使用默认账号(admin/admin)、空口令尝试登录后台;伪造白名单IP/referer,测试是否绕过访问限制。

脆弱验证测试:修改Cookie中的用户ID、权限字段后刷新页面;解码JWT并篡改Payload(如改role为admin)后重放请求;观察SessionID是否规律,尝试用旧SessionID重新访问。

白盒代码审计:

关键词搜索:

越权相关:搜索user_id、order_id、role、is_admin等参数,查看是否直接用用户可控参数查询(如SELECT*FROMuserWHEREid=$_GET'user_id'),未与session中的当前用户ID对比;搜索/admin、/manager等路径对应的代码文件,检查是否调用权限校验函数。

访问控制相关:搜索login、auth、check等关键词,查看后台页面是否统一引入登录验证逻辑;搜索install、backup、log等关键词,检查是否残留默认安装文件或敏感资源文件,未做访问限制;搜索whitelist、ip_allow、referer_check等关键词,查看白名单配置是否存在逻辑错误。

脆弱验证相关:

Cookie:搜索$_COOKIE、setcookie、HttpOnly、Secure,检查是否加密存储敏感信息、是否设置安全属性;

JWT:搜索JWT、parse、verify、SignatureAlgorithm、secretKey,检查是否关闭签名验证、是否使用弱算法或密钥硬编码;

Session:搜索session_start、$_SESSION、session_destroy、session_regenerate_id,检查SessionID生成是否随机、退出后是否销毁Session。

固定死需要查询值,如session或者缓存对比

检查用户资源查询逻辑,是否强制使用session中的当前用户ID(如SELECT*FROMuserWHEREid=$_SESSION'user_id'),而非用户传入的参数;

查看权限校验逻辑,是否从缓存/数据库中获取用户真实权限(如从user表查询is_admin字段),而非直接信任前端传入的role、is_admin参数。

查看其他后台文件是否有登录验证检测的代码函数

检查/admin目录下所有文件,是否在文件开头调用统一的登录验证函数(如checkLogin()、isAdmin());

查看包含敏感操作的文件(如delete_user.php、update_config.php),是否单独添加权限校验逻辑,避免因全局过滤器遗漏导致未验证;

检查是否存在"例外文件",如admin/logs.php未调用验证函数,可直接访问。

2)身份认证与访问控制缺陷方法

黑盒测试:(无源码,基于功能交互与请求篡改)

黑盒测试核心是"模拟攻击者视角,通过篡改请求、尝试未授权操作,验证身份认证与访问控制逻辑是否存在漏洞",按缺陷类型分场景执行:

(1)身份认证缺陷测试(Cookie/JWT/Session/口令相关)

口令类缺陷测试:

默认/空口令测试:收集目标系统常见默认账号(如admin/admin、root/root)、厂商公开默认口令,尝试登录后台;输入账号后不填密码直接提交,验证是否允许空口令登录。

弱口令爆破:用BurpSuiteIntruder模块,加载弱口令字典(如123456、password),对目标登录接口进行账号+口令组合爆破,观察是否能成功登录。

验证码绕过:尝试不输入验证码直接提交登录请求;多次提交相同验证码,验证是否未刷新验证码;用Burp拦截验证码请求,观察是否返回验证码明文或可预测的验证码值。

Cookie/JWT/Session缺陷测试:

Cookie篡改测试:登录账号后,通过浏览器F12或Burp修改Cookie中敏感字段(如uid=1改为uid=2、is_admin=0改为is_admin=1),刷新受保护页面(如个人中心、管理员后台),验证是否切换身份或获取高权限。

JWT篡改测试:提取JWT令牌(如Header.Payload.Signature),用JWT.io解码Payload,修改user_id/role等字段(如"role":"user"改为"role":"admin");删除签名部分(仅保留Header.Payload.)或使用none算法,重放请求验证是否绕过签名校验。

Session缺陷测试:登录后记录SessionID(如Cookie中PHPSESSID=abc123),退出登录后重新使用该SessionID访问,验证是否仍能进入系统;观察多次登录的SessionID是否规律(如自增、固定前缀),判断是否可预测。

(2)访问控制缺陷测试(越权/匿名访问/白名单失效相关)

水平越权测试:

资源参数篡改:登录用户A,获取访问个人资源的请求(如个人信息URL:/user/info?user_id=100、订单URL:/order/detail?order_id=200);将user_id=100改为用户B的user_id=101、order_id=200改为用户B的order_id=201,重放请求;若返回用户B的资源信息,或能修改/删除用户B的资源,说明存在水平越权。

批量探测:用BurpIntruder遍历user_id/order_id(如1-1000),通过响应长度/内容差异(如包含"手机号""余额"字段)定位可越权访问的资源。

垂直越权测试:

直接访问高权限路径:登录普通用户,在地址栏输入管理员后台路径(如/admin/index.php、/manager/dashboard),验证是否能直接进入;若被拦截,尝试删除请求中的

Cookie/JWT,或修改权限标识(如role=user改为role=admin)后重放。

高权限操作测试:普通用户发起高权限请求(如/api/admin/delete_user?user_id=100),观察是否能执行删除操作;若返回"无权限",尝试伪造管理员Referer(如Referer:http://target.com/admin)或IP(如X-Forwarded-For:127.0.0.1)后重新请求。

匿名访问与白名单失效测试:

匿名访问测试:退出所有账号,直接访问受保护资源(如/backup/database.sql、/admin/logs.php、/api/user/list),验证是否无需登录即可访问;用Burp清除请求中的

Cookie/JWT,重放受保护请求,观察响应是否正常返回数据。

白名单绕过测试:若系统基于IP白名单限制访问,尝试在请求头添加X-Forwarded-For:白名单IP(如X-Forwarded-For:192.168.1.100);若基于Referer白名单,伪造Referer为白名单域名(如Referer:http://target.com),验证是否能绕过限制。

白盒测试:(有源码,聚焦逻辑缺陷与代码实现)

白盒测试核心是"通过代码审计,定位身份认证与访问控制的逻辑漏洞、校验缺失、参数信任等问题",按缺陷类型拆解审计重点:

(1)身份认证缺陷审计(Cookie/JWT/Session/口令相关)

口令与登录逻辑审计:

关键词搜索:搜索login、auth、password、verify等关键词,定位登录校验代码;查看是否对密码进行哈希存储(如未哈希直接存明文,存在泄露风险),是否限制登录失败次数(如无限制,易被爆破)。

逻辑漏洞检查:查看登录代码是否存在"条件绕过"(如if(username=="admin"||password=="123456"),满足任一条件即可登录);是否信任前端传参(如前端隐藏is_admin字段,后端直接接收并生效)。

Cookie/JWT/Session逻辑审计:

Cookie相关审计:

搜索setcookie、$_COOKIE、HttpOnly、Secure,检查是否将user_id、is_admin等敏感信息明文存储(如setcookie("is_admin",0));是否设置HttpOnly(防XSS窃取)、Secure(仅HTTPS传输)、SameSite(防CSRF)属性。

查看后端是否对Cookie值进行合法性校验(如仅信任Cookie中的is_admin=1,未从数据库二次查询用户真实权限)。

JWT相关审计:

搜索JWT、parse、verify、SignatureAlgorithm、secretKey,检查是否关闭签名验证(如jwt.decode(token,options={"verify_signature":False}));是否使用none算法(无签名)或弱对称算法(如HS256)且密钥硬编码(如secretKey="123456")。

查看Payload是否包含敏感信息(如密码哈希),是否仅Base64编码(可解码)而未加密。

Session相关审计:

搜索session_start、$_SESSION、session_destroy、session_regenerate_id,检查SessionID生成是否随机(如未使用session_regenerate_id(),登录后SessionID不变,易被固定攻击);用户退出后是否调用session_destroy()销毁Session。

查看是否仅依赖SessionID验证身份,未对Session中的user_id与数据库用户信息进行一致性校验(如Session被篡改后无法发现)。

(2)访问控制缺陷审计(越权/匿名访问/白名单相关)

越权逻辑审计:

水平越权审计:

搜索user_id、order_id、select*fromuser、select*fromorder,查看资源查询代码是否使用用户可控参数(如_GET\['user_id'\])作为查询条件,且未与当前登录用户ID(_SESSION'user_id')对比(如漏洞代码:sql="SELECT\*FROMuserWHEREid={_GET'user_id'}")。

检查用户操作逻辑(如修改资料、删除订单),是否未校验"操作资源的所属用户"与"当前登录用户"是否一致。

垂直越权审计:

搜索is_admin、role、admin、manager、checkAdmin,查看高权限功能(如/admin目录下文件)是否调用权限校验函数(如checkAdmin());若存在未调用函数的文件(如admin/logs.php无校验),则存在垂直越权风险。

查看权限校验函数实现逻辑,是否存在逻辑错误(如if($role!=0){管理员权限},普通用户role=1也能满足条件)。

匿名访问与白名单审计:

匿名访问审计:

搜索login_check、auth_required,查看受保护资源(如/backup、/admin、/api)是否在代码开头调用登录验证函数;若存在"直接执行业务逻辑,无验证"的文件(如backup.php无任何登录校验),则存在匿名访问漏洞。

检查默认安装残留文件(如install.php、setup.php),是否未在安装完成后删除或禁用,导致攻击者可重新安装覆盖账号。

白名单审计:

搜索whitelist、ip_allow、referer_check,查看IP白名单是否配置错误(如包含0.0.0.0/0,允许所有IP访问);Referer校验是否仅简单匹配字符串(如if(strpos($_SERVER'HTTP_REFERER',"target.com")!==false),可通过http://attacker.com?target.com绕过)。

3)身份认证与访问控制缺陷检测工具

BurpSuite:1.抓包篡改:修改Cookie/JWT/Session、URL参数(如user_id),重放请求验证漏洞;2.爆破测试:Intruder模块批量爆破弱口令、user_id/order_id;3.插件扩展:AuthMatrix(模拟多角色权限矩阵)、JWTEditor(编辑JWT令牌)

Nuclei:1.基于模板自动化扫描:内置大量身份认证/访问控制漏洞模板(如未授权访问/admin、JWT签名绕过、Cookie未设HttpOnly);2.多协议支持:覆盖HTTP/HTTPS、DNS等,可批量检测目标;3.自定义模板:支持根据需求编写YAML模板,精准检测特定漏洞

Wfuzz:1.参数爆破:批量篡改URL参数(如user_id/order_id)、Cookie参数(如uid/is_admin),通过响应码/内容匹配定位越权资源;2.弱口令爆破:针对登录接口,用字典爆破账号密码(脆弱验证-口令缺陷);3.路径探测:辅助Dirsearch,扫描隐藏的高权限路径(如/admin_v3)

4)靶场

DVWA:经典漏洞靶场,覆盖多类访问权限漏洞。

自定义靶场:可模拟电商场景,建用户/订单表,植入漏洞(如订单查询不校验user_id归属、管理员页无登录验证)。测试时用普通账号查他人订单(水平越权)、直接访问/admin(访问控制缺陷),贴合真实业务,强化漏洞利用思维。

------------------------------------------无情的分割线--------------------------------------------------------

咱们使用之前的帮客户修改功能的一个汽车管理系统来看看是否存储上述所说的那些漏洞,之前客户自己写的查询个人信息这个是不是就一个很典型的水平越权漏洞了。因为她是以id的形式去获取用户信息,垂直越权也有,咱们登录qqq用户,然后试着用目录扫描器获取后台的路径。至于剩下的访问控制(没有验证),脆弱验证它们都没有验证码或者手机短信,我们直接暴力破解就行。验证码漏洞有那些等下次咱们单独说明它。

相关推荐
叠叠乐3 小时前
中国移动家庭云电脑window关闭所有安全脚本
安全
Jmyd01233 小时前
实训室的 3D 模型涉及肖像文物,数据安全与合规怎么做?
安全·3d·数据安全·虚拟实训
芯盾时代3 小时前
《金融业网络安全管理办法(征求意见稿)》全条款深度拆解(三)
网络·安全·网络安全
敢敢是只喵i4 小时前
一个本地 AI Agent 要操作多个门店或 SaaS 账号,应该怎样安全切换身份?
人工智能·安全·ai·系统架构·业界资讯
Acrel12344 小时前
DC800V 大规模落地,算力机房安全该如何保障
安全
其实防守也摸鱼5 小时前
权限提升与横向移动:从内网渗透到域控的完整技术图谱
运维·服务器·数据库·安全·github·copilot·渗透
深圳海导科技5 小时前
资产防盗追踪系统:物联网高价值资产安全管理|海导科技navynav
科技·物联网·安全
波多利希最高礼仪的握力器6 小时前
安全复制SCP
linux·服务器·安全
其实防守也摸鱼6 小时前
免杀与持久化入门:从载荷免杀到隐蔽通道的完整指南
运维·服务器·数据库·安全·github·copilot·渗透
小五传输6 小时前
杀毒引擎有哪些软件好用?机器人企业文件威胁防护选型指南
大数据·运维·安全