# 乌云归档：4A安全性分析

Author: 乌云历史资料库 (@wooyun_archive)
Published: 2015-01-05T01:03:00Z
Canonical: https://wepostx.com/topics/677

> 乌云历史资料归档
>
> **原始作者：** 路人甲
> **原始编号：** superkieran-wooyundrops:439
> **原始发布时间：** 2015-01-05 09:03
> **声明：内容仅用于技术研究和个人使用，版权归 wooyun.org。**

---

# 0x00.概述

### 0.1 起因
前段时间在zone里看到有人问4A的渗透测试，本人正好接触过几款4A和堡垒机产品，今天抽空就总结下个人在渗透中遇到的4A问题。

### 0.2 4A
4A是指：认证Authentication、账号Account、授权Authorization、审计Audit，中文名称为统一安全管理平台解决方案。即将身份认证、授权、审计和账号（即不可否认性及数据完整性）定义为网络安全的四大组成部分，从而确立了身份认证在整个网络安全系统中的地位与作用。（百度百科）。

# 0x01.认证Authentication

认证的方式一般有以下几种：

- 静态口令

- 动态口令令牌

- USB令牌

存在的问题有：

### 1.1 账号枚举
这里的账号枚举并不是仅仅知道哪个账号存在，哪个账号不存在。

```text
#!php $mobile = $_GET["mobile"]; ...... if(empty($errMsg)){ $errMsg = "认证失败" } $oper = "主账号:".$username."登录失败，原因:".$errMgs; ......
```
从上面账号可以看到，登录时，如果你输入的是手机号，那么登录失败的时候，就会将手机号对应的username返回，那么我们就可以拿手机号和用户名到密码找回页面等地方做进一步的测试。

### 1.2 认证绕过
很多写的不严谨的程序，在判断用户是否处于登录状态时，都是根据cookie判断，如下面代码，直接根据cookie中的userid和username，如果存在，就判断用户已经登录。由此就可以修改cookie，登录任意用户的账号。

```text
#!php public function index(){ $userid = intval($_COOKIE['userid']); $username = $_COOKIE['username']; if($userid){ echo '<a href="'.C('web_path').'index.php?s=user/show" target="_blank" class="username">'.htmlspecialchars($username).'</a> | <a href="'.C('web_path').'index.php?s=user/logout/re/true">退出</a>'; }else{ echo 'false'; } }
```

# 0x02.账号Account

4A中账号分为主账号和从账号，一个用户只会有一个主账号，唯一标识了他的身份。这个主账号还会有N个从账号，对不同的系统会有不同的从账号，方便用户访问其可以访问的系统。如下图

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

### 2.1 重置用户密码
[WooYun: 帕拉迪堡垒机任意用户密码重置](http://www.wooyun.org/bugs/wooyun-2014-072644)
在这个bug中，可以通过修改密码的功能，重置其他用户的密码。典型的账号管理问题。

### 2.2 token
token在4A中可谓是到处都是，那么如果token验证不严谨，很可能出现戏剧性的结果。接下来这个漏洞给大家展示token失效的时候。

![原文图片](/media/2016/06/6540c829cde951be47afa88fcb173871)

这个页面不是通过4A登录过来的，而是直接访问网站的登录界面，登录后的页面。

![原文图片](/media/2016/06/5a525b59beff1083cfe021f69e6f818c)

上面的图是通过4A登录后，访问系统时，将URL和username修改为管理员的页面和用户名，然后可以看到，页面显示的就是管理员的页面了。

# 0x03.授权Authorization

授权一般分为：
1.基于用户的授权UBAC
2.基于用户角色的授权RBAC
3.基于资源的授权ABAC
存在的问题有：

### 3.1 调用cmd
4A权限分配中有个很重要的功能就是基于资源的授权，比如给主账号A分配一个securecrt，让其可以使用SSH，给主账号B分配一个notepad，让其可以使用记事本。但是大家都知道通过浏览器、记事本等“查找文件”的功能可以调出cmd等功能。
如下图，是通过分配的IE浏览器，直接调用出cmd窗口，接下来，你想干什么，都OK。

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

### 3.2 越权问题
无可厚非，越权问题在现在的程序中，几乎都存在，这个问题，并没有得到太大的重视。

```text
#!php public function payfor() { $subaction = $this­>ev­>url(3); switch($subaction) { case 'remove': $oid = $this­>ev­>get('ordersn'); $order = $this­>order­>getOrderById($oid); if($order['orderstatus'] == 1) { $this­>order­>delOrder($oid); $message = array( 'statusCode' => 200, "message" => "订单信息成功", "callbackType" => 'forward', "forwardUrl" => "reload" ); } } }
```
看上面代码，代码获取到ordersn后，直接执行了删除的动作，而代码本身并没有使用RBAC之类的权限管理，导致存在越权问题。这种属于水平越权，还有一种垂直越权，这里不列举了。

### 3.3 下载文件
同样是个人文件夹(或者其他提供下载的地方)的问题，可以下载指定的文件，但是没有对文件做限制，可以下载任意文件。

```text
#!php public function download(){ $filename = $_SERVER[DOCUMENT_ROOT].__ROOT__.'/Public/'.(C('UPLOAD_DIR')?C('UPLOAD_DIR'):'Upload').'/download/'.$_GET['filename']; header("Content­type: application/octet­stream"); header("Content­Length: ".filesize($filename)); header("Content­Disposition: attachment; filename={$_GET['filename']}"); $fp = fopen($filename, 'rb'); fpassthru($fp); fclose($fp); }
```
从代码中可以看到，通过获取filename等参数，然后直接就下载文件了。。

### 3.4 前置机
一些堡垒机具有前置机，意思是某些在堡垒机中实现不了的功能(比如内置pcanywhere，只是比如)，那么就需要把pcanywhere放到前置机中，当需要使用pcanywhere时，就会远程登录到前置机上，调用pcanywhere的页面。
问题是什么呢，既然是远程登录调用pcanywhere的页面，那么我们只要使用windows键或者使用alt+tab就可以切换到其他程序上，进而就控制了前置机。

### 3.5 奇葩问题
[WooYun: AuditSec运维操作审计-堡垒机密码的利用](http://www.wooyun.org/bugs/wooyun-2014-048368)
大家可以看看这个密钥问题。。

# 0x04.审计Audit

审计主要是对登录、访问等所有的动作记录日志，查看是否有不合规的事件。

### 4.1 伪造登录IP
[WooYun: 帕拉迪/华为/江南天安堡垒机伪造WEB登录来源IP漏洞](http://www.wooyun.org/bugs/wooyun-2014-074369)
在这个bug中通过x-forwarded-for伪造了登录的IP，这就对日志造成了影响，如果以后需要整理日志，或者根据日志找出不合规事件，那就会存在很大的影响。

# 0x05. 总结

以上只是列举了我在测试4A或堡垒机时遇到过的问题，肯定还有许多猥琐的方式我没有观察到，欢迎大家补充。
元旦在家码字不容易。

## Replies
