forked from Trietptm-on-Security/WooYun-2
-
Notifications
You must be signed in to change notification settings - Fork 7
/
4A安全性分析.html
193 lines (124 loc) · 118 KB
/
4A安全性分析.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
<html>
<head>
<title>4A安全性分析 - 路人甲</title>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
</head>
<body>
<h1>原文地址:<a href="http://drops.wooyun.org/tips/4484">http://drops.wooyun.org/tips/4484</a></h1>
<p>
<h1>0x00.概述</h1>
<hr />
<h3>0.1 起因</h3>
<p>前段时间在zone里看到有人问4A的渗透测试,本人正好接触过几款4A和堡垒机产品,今天抽空就总结下个人在渗透中遇到的4A问题。</p>
<h3>0.2 4A</h3>
<p>4A是指:认证Authentication、账号Account、授权Authorization、审计Audit,中文名称为统一安全管理平台解决方案。即将身份认证、授权、审计和账号(即不可否认性及数据完整性)定义为网络安全的四大组成部分,从而确立了身份认证在整个网络安全系统中的地位与作用。(百度百科)。</p>
<!--more-->
<h1>0x01.认证Authentication</h1>
<hr />
<p>认证的方式一般有以下几种:</p>
<ol>
<li><p>静态口令</p></li>
<li><p>动态口令令牌</p></li>
<li><p>USB令牌</p></li>
</ol>
<p>存在的问题有:</p>
<h3>1.1 账号枚举</h3>
<p>这里的账号枚举并不是仅仅知道哪个账号存在,哪个账号不存在。</p>
<pre><code>#!php
$mobile = $_GET["mobile"];
......
if(empty($errMsg)){
$errMsg = "认证失败"
}
$oper = "主账号:".$username."登录失败,原因:".$errMgs;
......
</code></pre>
<p>从上面账号可以看到,登录时,如果你输入的是手机号,那么登录失败的时候,就会将手机号对应的username返回,那么我们就可以拿手机号和用户名到密码找回页面等地方做进一步的测试。</p>
<h3>1.2 认证绕过</h3>
<p>很多写的不严谨的程序,在判断用户是否处于登录状态时,都是根据cookie判断,如下面代码,直接根据cookie中的userid和username,如果存在,就判断用户已经登录。由此就可以修改cookie,登录任意用户的账号。</p>
<pre><code>#!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';
} }
</code></pre>
<h1>0x02.账号Account</h1>
<hr />
<p>4A中账号分为主账号和从账号,一个用户只会有一个主账号,唯一标识了他的身份。这个主账号还会有N个从账号,对不同的系统会有不同的从账号,方便用户访问其可以访问的系统。如下图</p>
<p><img src="http://static.wooyun.org/drops/20150104/20150104092808535462_user.jpg" alt="enter image description here" /></p>
<h3>2.1 重置用户密码</h3>
<p> <a target="_blank" href="http://www.wooyun.org/bugs/wooyun-2014-072644">WooYun: 帕拉迪堡垒机任意用户密码重置</a> </p>
<p>在这个bug中,可以通过修改密码的功能,重置其他用户的密码。典型的账号管理问题。</p>
<h3>2.2 token</h3>
<p>token在4A中可谓是到处都是,那么如果token验证不严谨,很可能出现戏剧性的结果。接下来这个漏洞给大家展示token失效的时候。</p>
<p><img src="http://static.wooyun.org/drops/20150331/201503310303291499111.jpg" alt="enter image description here" /></p>
<p>这个页面不是通过4A登录过来的,而是直接访问网站的登录界面,登录后的页面。</p>
<p><img src="http://static.wooyun.org/drops/20150331/201503310303276203921.jpg" alt="enter image description here" /></p>
<p>上面的图是通过4A登录后,访问系统时,将URL和username修改为管理员的页面和用户名,然后可以看到,页面显示的就是管理员的页面了。</p>
<h1>0x03.授权Authorization</h1>
<hr />
<p>授权一般分为:</p>
<p>1.基于用户的授权UBAC</p>
<p>2.基于用户角色的授权RBAC</p>
<p>3.基于资源的授权ABAC</p>
<p>存在的问题有:</p>
<h3>3.1 调用cmd</h3>
<p>4A权限分配中有个很重要的功能就是基于资源的授权,比如给主账号A分配一个securecrt,让其可以使用SSH,给主账号B分配一个notepad,让其可以使用记事本。但是大家都知道通过浏览器、记事本等“查找文件”的功能可以调出cmd等功能。</p>
<p>如下图,是通过分配的IE浏览器,直接调用出cmd窗口,接下来,你想干什么,都OK。</p>
<p><img src="http://static.wooyun.org/drops/20150331/20150331030325373533.jpg" alt="enter image description here" /></p>
<h3>3.2 越权问题</h3>
<p>无可厚非,越权问题在现在的程序中,几乎都存在,这个问题,并没有得到太大的重视。</p>
<pre><code>#!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"
);
}
}
}
</code></pre>
<p>看上面代码,代码获取到ordersn后,直接执行了删除的动作,而代码本身并没有使用RBAC之类的权限管理,导致存在越权问题。这种属于水平越权,还有一种垂直越权,这里不列举了。</p>
<h3>3.3 下载文件</h3>
<p>同样是个人文件夹(或者其他提供下载的地方)的问题,可以下载指定的文件,但是没有对文件做限制,可以下载任意文件。</p>
<pre><code>#!php
public function download(){
$filename = $_SERVER[DOCUMENT_ROOT].__ROOT__.'/Public/'.(C('UPLOAD_DIR')?C('UPLOAD_DIR'):'Upload').'/download/'.$_GET['filename']; header("Contenttype: application/octetstream");
header("ContentLength: ".filesize($filename));
header("ContentDisposition: attachment; filename={$_GET['filename']}");
$fp = fopen($filename, 'rb');
fpassthru($fp);
fclose($fp);
}
</code></pre>
<p>从代码中可以看到,通过获取filename等参数,然后直接就下载文件了。。</p>
<h3>3.4 前置机</h3>
<p>一些堡垒机具有前置机,意思是某些在堡垒机中实现不了的功能(比如内置pcanywhere,只是比如),那么就需要把pcanywhere放到前置机中,当需要使用pcanywhere时,就会远程登录到前置机上,调用pcanywhere的页面。</p>
<p>问题是什么呢,既然是远程登录调用pcanywhere的页面,那么我们只要使用windows键或者使用alt+tab就可以切换到其他程序上,进而就控制了前置机。</p>
<h3>3.5 奇葩问题</h3>
<p> <a target="_blank" href="http://www.wooyun.org/bugs/wooyun-2014-048368">WooYun: AuditSec运维操作审计-堡垒机密码的利用</a> </p>
<p>大家可以看看这个密钥问题。。</p>
<h1>0x04.审计Audit</h1>
<hr />
<p>审计主要是对登录、访问等所有的动作记录日志,查看是否有不合规的事件。</p>
<h3>4.1 伪造登录IP</h3>
<p> <a target="_blank" href="http://www.wooyun.org/bugs/wooyun-2014-074369">WooYun: 帕拉迪/华为/江南天安堡垒机伪造WEB登录来源IP漏洞</a> </p>
<p>在这个bug中通过x-forwarded-for伪造了登录的IP,这就对日志造成了影响,如果以后需要整理日志,或者根据日志找出不合规事件,那就会存在很大的影响。</p>
<h1>0x05. 总结</h1>
<hr />
<p>以上只是列举了我在测试4A或堡垒机时遇到过的问题,肯定还有许多猥琐的方式我没有观察到,欢迎大家补充。<br />
元旦在家码字不容易。</p> </p>
</body>
</html>