越权漏洞实战挖掘与总结:10个案例成为越权高手
文章探讨了水平和垂直越权漏洞及其测试方法。水平越权指同一权限级别用户间数据操控,案例包括修改帖子、地址等;垂直越权指低权限用户访问高权限接口或功能。通过抓包、篡改ID、时间戳生成ID等方式测试水平越权;提取前端接口、猜测参数等方式挖掘垂直越权。总结指出水平越权常见于用户绑定数据,垂直越权有三种场景:GET型接口直接测试、前端触发无需构造参数、猜测参数构造请求。 2025-10-23 02:36:29 Author: www.freebuf.com(查看原文) 阅读量:9 收藏

越权

注:越权不要影响其他用户的数据,本文章仅供技术研究,任何非法行为与本文无关。

水平越权

账号 a 能操控账号 b 的数据。账号 a 和账号 b 平级。
水平越权最好有两个账号,什么覆盖、删除功能的越权,不要尝试在其他用户的账号上。

垂直越权

账号 a 能使用账号 b 的接口,账号 b 是管理员或 vip,开发者认定账号 b 能独享一些特殊接口。
或者说账号能不按规定访问功能。

水平越权案例

水平越权需要两个账户进行测试,因为一些删改的功能点会影响其他用户的数据,另外有时候返回包是没有办法提现是否越权成功的,需要在第二个账号上查看效果。

案例1

越权修改和删除全站帖子,修改自己的帖子并抓包,然后遍历帖子id即可越权:

POST /api/shop_transfer/edit HTTP/2
Host: xxx.com
Content-Length: 434
Xweb_xhr: 1
Content-Type: application/x-www-form-urlencoded
Accept: */*
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Priority: u=1, i

id=215635&title=1234&area=123&rent=123.00&rent_id=0&transfer_fee=123.00&industry_id=9&industry_type_id=18&shop_type_id=1&city_id=182&county_id=1025&village_id=1646&address=11111111111111&content=sssssssssssssssssss&contacts=如果你看到这个,说明存在越quan&longitude=0.000000&latitude=0.000000

image.png

案例2

越权修改地址,通过篡改地址id,达到越权的目的:
image.png
登录第二个账号,发现成功修改:
image.png

案例3

越权查看,点击编辑地址,抓包:
image.png
点击后抓包:

GET /app/index.php?i=5&c=entry&do=shop&m=sz_yi&p=address&op=get&id=227622 HTTP/1.1
Host: xxx.com
Accept: application/json, text/javascript, */*; q=0.01
Accept-Language: zh-CN,zh;q=0.9
Priority: u=1, i
Connection: keep-alive

遍历地址id即可:
image.png

案例4

uuid场景下,id不可遍历,但是可以尝试在系统中其他位置或接口中找到他人的uuid来进行越权。
某系统,在如下场景获得他人uuid:
image.png
抓包如下:
image.png
通过上述方法获取他人uuid后,将此数据url编码后作为sender参数内容。

{"departmentCode":"2627e74b6aff40fb8da660fd9552f8c5-dept","organizationNames":"0xxxx","userId":"xxxx","userName":"xxx","uuid":"e832ca35-cd81-435a-a513-f0f5c51a38c9"}

越权伪造他人身份发送信息:

POST /EIP////sendMessage HTTP/2
Host: xxx.cn
Content-Length: 644
Sec-Ch-Ua-Platform: "Windows"
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Sec-Ch-Ua-Mobile: ?0
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7
Priority: u=1, i

receiverId=xxxx&content=你好啊!!!&sender={"departmentCode":"2627e74b6aff40fb8da660fd9552f8c5-dept","organizationNames":"0xxxx","userId":"xxxx","userName":"xxx","uuid":"e832ca35-cd81-435a-a513-f0f5c51a38c9"}

案例5

id仍然不可遍历,但是id通过时间戳构成,如何变废为宝?
大多数情况下,时间戳类型的id虽然可遍历,但是爆破所有的id几乎不可能,一天一共有86400秒,也就是说,你跑86400次才能跑完一天时间之内创建的id,效率极低。
但是不可遍历就无法利用吗,看如下案例:
image.png
上图中id存在越权,其构成为:

EA251016-150741-1111
EA年月日-时分秒-id号

可以通过插入探测标记,来帮助我们越权测试,比如说我们创建了如下id的身份信息:

EA251017-143551-1119 # 这表明在14点35创建了一个身份信息,id号为1119。
EA251017-152317-1122 # 这表明在15点23创建了另一个身份信息,id号为1122。

在1119和1122之间,发现1120和1121被他人占用了,这说明在14点35到15点23之间,其他人创建了两个身份信息,那么我们就生成14点35到15点23的时间,依次遍历即可。
成功遍历到1121的id:
image.png
那么问题来了,如果id是纯时间戳,没有这种1119和1122帮助我们探测该怎么办?
这种情况下,只能找一个用户最有可能活跃的时间段来进行爆破,比如说下午2点到6点。

案例6

越权+xss组合拳。而越权能把self-xss提升为存储xss,甚至危害更高。
这只是一个简单的提交数据的功能,提交后发现self-xss,因为大多数情况这种私密的东西只能自己和管理员(或权限更高的用户)查看。(只是一个简单的self-xss)
image.png
但是账号2能越权修改账号1提交的数据:
image.png
越权修改成功:
image.png
那么在越权修改的时候插一个xss标签,直接能精准打击所有用户。

垂直越权案例

垂直越权如果有两个账号(一个低权限,一个高权限)的情况下,测试非常简单,将低权限账户cookie替换到高权限的账户进行测试即可。
但大多数情况下,无法同时获取到高低权限账户,只能获取低权限账户。这时,只能通过findsometing或者jsfinder等js提取工具来提取js接口,或者说手动审计并提取前端js接口。
无高低权限账户情况下挖掘垂直越权非常苛刻,因为不仅需要提取js中的接口,还要猜测此接口的参数。通过js接口fuzz挖掘的垂直越权全都是get型(无参数)的,也有另一种情况就是垂直越权功能点直接暴露在前端界面上,这时候的垂直越权不需要构造参数,最后一种情况就是垂直越权的功能点没有显示在前端页面上,只能提取接口然后猜参数。

案例1

提取接口,get型直接梭哈,这个案例是小程序的漏洞,小程序接口需要解包后提取js接口:
image.png

案例2

findsomething提取接口,get型直接梭哈:
image.png

案例3

就是刚才说的第二种情况,垂直越权接口能通过前端页面触发,不需要构造参数:
image.png
这种虽然是post型的,但是参数不需要构造,就是通过js代码访问接口而已:
image.png

案例4

第三种情况,越权接口暴露在前端页面上,但前端直接阻拦不让访问,这时通过提取接口通过猜测参数构造数据包。
image.png
点击立即咨询后,会直接弹出如下提示:
image.png
这时常规思路就是提取接口猜测参数,但是这个案例下有更简单的办法,就是在规定时间内(9点到12点,14点半到17点)访问此服务,不就不需要构造参数了吗?然后在规定时间外再访问此接口,发现规定时间外能成功发起咨询:
参数如下,硬猜很难猜:

{
	"title":"校园跑",
	"lbfl":"非艺术类",
	"zxnr":"每个学期都要进行校园跑吗?"
}

image.png

当然这个洞是没啥危害的,但是思路还是好的。

总结

水平越权大多出现在与用户绑定的间接数据上,如:地址、帖子、评论、订单等。
垂直越权有三种挖掘场景:

  • get型梭哈。

  • 直接通过前端点点点,不需要猜参数。

  • 前端不让点点点,只能猜测参数。


文章来源: https://www.freebuf.com/articles/vuls/453769.html
如有侵权请联系:admin#unsafe.sh