# 乌云归档：我的越权之道

Author: 乌云历史资料库 (@wooyun_archive)
Published: 2013-11-04T02:40:00Z
Canonical: https://wepostx.com/topics/108

> 乌云历史资料归档
>
> **原始作者：** 小川
> **原始编号：** superkieran-wooyundrops:107
> **原始发布时间：** 2013-11-04 10:40
> **声明：内容仅用于技术研究和个人使用，版权归 wooyun.org。**

---

## 0x00 越权漏洞

越权漏洞是Web应用程序中一种常见的安全漏洞。它的威胁在于一个账户即可控制全站用户数据。当然这些数据仅限于存在漏洞功能对应的数据。越权漏洞的成因主要是因为开发人员在对数据进行增、删、改、查询时对客户端请求的数据过分相信而遗漏了权限的判定。所以测试越权就是和开发人员拼细心的过程。

## 0x01 分析可能存在越权的位置

上面说过了只要对数据库进行增、删、改、查询的情况都可能存在越权。我们来看一般我们在web应用开发时操作数据库常会出现的一般语句：
增加：

```text
insert into tablename values(一些字段) where userid/username=12345/用户名
```
参考例子：
[WooYun: 爱拍越权漏洞及设计不合理漏洞大礼包（妹子哭了）](http://www.wooyun.org/bugs/wooyun-2013-033542)
删除：

```text
delete from tablename where id=123
```
参考例子：
[WooYun: 百度创意专家某功能平行权限漏洞（可删除他人素材）](http://www.wooyun.org/bugs/wooyun-2013-039358)
更改：

```text
update 一些字段 tablename set 一些字段 where userid/username=12345/用户名
```
[WooYun: 搜狐白社会任意用户信息修改漏洞](http://www.wooyun.org/bugs/wooyun-2013-036411)
查询：

```text
select * from tablename where id=12345
```
[WooYun: Like团用户信息泄露+越权漏洞（可获取大量用户住址联系信息）](http://www.wooyun.org/bugs/wooyun-2013-033748)
本人不做开发，sql语句比较弱，大牛勿喷，此处只是为了说明问题。大家可以看到，以上语句都涉及where，而后面的userid或username即是越权的突破口。在操作数据库时功能请求中往往会带着一些参数来用于辨别信息的唯一值。而这些参数就是我们越权时需要注意的。
在web开发中判断用户身份的字段往往是不会在客户端传递的。用户登录系统后，开发人员一般会创建一个session来保存用户名。当用户在查看、修改个人信息等需要判定用户身份时，就直接从session中获取，而不会在客户端传递，也就避免了篡改。但若出现从客户端传递的话，那么就必须要有一步权限验证的要求了。所以在测试越权时要用抓包工具截获请求，细览下可能存在辨别信息的唯一值，来进行测试。这里要说一点，传输的参数并不一定在请求参数中，也有可能存在链接等位置。如：
[WooYun: 虾米网送娃娃漏洞（平行权限漏洞）](http://www.wooyun.org/bugs/wooyun-2013-031826)
有人可能开始抱怨，请求中那么多参数、而且还可能存在一个请求需要多个辨别参数的可能，再加上链接中也有可能，这也太难找了。现提供一个方法可以轻松让你知道哪里存在越权。喜欢玩XSS的人定会恍然大悟。

## 0x02 测试越权技巧

相信越权的成因大家都已经理解了，哪些功能可能存在越权大家也心里也有谱了。接下来就是测试了。相信这才是大家最想看的，王尼玛同学是如何高效测试越权的？
看官莫急，先看基础测试方法：要测试越权需要注册两个账户，来互相探测能否影响到对方数据。方法很简单打开两个不同的浏览器，大小号账户各自登录一个不同浏览器。

### 步骤一：
打开fiddler2按f11，截断大号上更新用户信息请求。（查看参数可以选择fiddler中Inspects下的WebFroms或TextView。只有在截断的情况下，才可以修改请求。）

![原文图片](/media/2016/06/349a5e033489740194187f53f29959c8)

判断出可能辨别用户身份的参数ulogin。

### 步骤二：截断小号浏览器中更新用户信息的请求

![原文图片](/media/2016/06/991d7e20d068eb549304b7c225311411)

步骤3：将小号中ulogin的参数值替换为大号的，然后解除fiddler截断（shift+f11）,将请求放过去（），查看下大号用户信息是否更改。
以上即是常规的测试方法。大家可以看到消耗时间的麻烦在辨别参数上、对比大号和小号请求有何不一样的参数值上、切换浏览器查看数等等。如果遇到更改删除等功能，还要两端各自新建出数据、查看id等等、麻烦的要死。
为了避免以上消耗时间的操作其实可以利用fiddler2复制小号浏览器中的cookie值，到大号的请求中即可验证越权。操作就是用fiddler先截获一个小号的访问目标站点的请求，在fiddler2的head标签下将cookie复制出来

![原文图片](/media/2016/06/7f1299d04c120810b4b738a12de6b73d)

小号的浏览器就可以不用管了，用Fiddler2截断大号的请求，把小号的cookie覆盖大号的cookie，进行测试。如果改变了大号的数据则说明越权，然后在分析是哪个参数造成的。如果未改变，则说明不存在越权，该功能直接越过。小号的cookie一直在剪贴板中的，所以在测其他功能会非常方便。用不了多长时间，即可测试完整个站点下的功能。
我们来看这个方法的优点：1不用去辨别哪个参数是辨别身份的；2不用两个账户同时去创建数据；3不用去查看小号id；4单浏览器即可测试，免去切换浏览器的烦恼。这就是我常用的方法，个人感觉已经很高效了，是不是觉得跟XSS窃取了cookie后劫持浏览器的感觉一样？但是此方法并不是对所有站点都起作用，有时你会发现小号会把大号挤出去进入大号的浏览器或者登陆状态消失，直接退出。具体什么原因造成的，我现在还不太清楚，估计是服务器端有对cookie的判断吧，希望大牛们能给出合理的解释。不过在测试大部分站点时此方法还是很好用的。顺便说一下Fiddler2是一个非常好用的抓包工具，熟练使用这个工具也是测试越权时的必要技能。小白们可以自行百度下其使用方法。

## 0x03 遵守的白帽子原则

越权的危害说轻则轻，说弱则弱，但是还是要求大家不要恶意破坏厂商数据，遵守白帽子原则。

## Replies
