前段時間在zone里看到有人問4A的滲透測試,本人正好接觸過幾款4A和堡壘機產品,今天抽空就總結下個人在滲透中遇到的4A問題。
4A是指:認證Authentication、賬號Account、授權Authorization、審計Audit,中文名稱為統一安全管理平臺解決方案。即將身份認證、授權、審計和賬號(即不可否認性及數據完整性)定義為網絡安全的四大組成部分,從而確立了身份認證在整個網絡安全系統中的地位與作用。(百度百科)。
認證的方式一般有以下幾種:
靜態口令
動態口令令牌
USB令牌
存在的問題有:
這里的賬號枚舉并不是僅僅知道哪個賬號存在,哪個賬號不存在。
#!php
$mobile = $_GET["mobile"];
......
if(empty($errMsg)){
$errMsg = "認證失敗"
}
$oper = "主賬號:".$username."登錄失敗,原因:".$errMgs;
......
從上面賬號可以看到,登錄時,如果你輸入的是手機號,那么登錄失敗的時候,就會將手機號對應的username返回,那么我們就可以拿手機號和用戶名到密碼找回頁面等地方做進一步的測試。
很多寫的不嚴謹的程序,在判斷用戶是否處于登錄狀態時,都是根據cookie判斷,如下面代碼,直接根據cookie中的userid和username,如果存在,就判斷用戶已經登錄。由此就可以修改cookie,登錄任意用戶的賬號。
#!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';
} }
4A中賬號分為主賬號和從賬號,一個用戶只會有一個主賬號,唯一標識了他的身份。這個主賬號還會有N個從賬號,對不同的系統會有不同的從賬號,方便用戶訪問其可以訪問的系統。如下圖
在這個bug中,可以通過修改密碼的功能,重置其他用戶的密碼。典型的賬號管理問題。
token在4A中可謂是到處都是,那么如果token驗證不嚴謹,很可能出現戲劇性的結果。接下來這個漏洞給大家展示token失效的時候。
這個頁面不是通過4A登錄過來的,而是直接訪問網站的登錄界面,登錄后的頁面。
上面的圖是通過4A登錄后,訪問系統時,將URL和username修改為管理員的頁面和用戶名,然后可以看到,頁面顯示的就是管理員的頁面了。
授權一般分為:
1.基于用戶的授權UBAC
2.基于用戶角色的授權RBAC
3.基于資源的授權ABAC
存在的問題有:
4A權限分配中有個很重要的功能就是基于資源的授權,比如給主賬號A分配一個securecrt,讓其可以使用SSH,給主賬號B分配一個notepad,讓其可以使用記事本。但是大家都知道通過瀏覽器、記事本等“查找文件”的功能可以調出cmd等功能。
如下圖,是通過分配的IE瀏覽器,直接調用出cmd窗口,接下來,你想干什么,都OK。
無可厚非,越權問題在現在的程序中,幾乎都存在,這個問題,并沒有得到太大的重視。
#!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之類的權限管理,導致存在越權問題。這種屬于水平越權,還有一種垂直越權,這里不列舉了。
同樣是個人文件夾(或者其他提供下載的地方)的問題,可以下載指定的文件,但是沒有對文件做限制,可以下載任意文件。
#!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等參數,然后直接就下載文件了。。
一些堡壘機具有前置機,意思是某些在堡壘機中實現不了的功能(比如內置pcanywhere,只是比如),那么就需要把pcanywhere放到前置機中,當需要使用pcanywhere時,就會遠程登錄到前置機上,調用pcanywhere的頁面。
問題是什么呢,既然是遠程登錄調用pcanywhere的頁面,那么我們只要使用windows鍵或者使用alt+tab就可以切換到其他程序上,進而就控制了前置機。
WooYun: AuditSec運維操作審計-堡壘機密碼的利用
大家可以看看這個密鑰問題。。
審計主要是對登錄、訪問等所有的動作記錄日志,查看是否有不合規的事件。
WooYun: 帕拉迪/華為/江南天安堡壘機偽造WEB登錄來源IP漏洞
在這個bug中通過x-forwarded-for偽造了登錄的IP,這就對日志造成了影響,如果以后需要整理日志,或者根據日志找出不合規事件,那就會存在很大的影響。
以上只是列舉了我在測試4A或堡壘機時遇到過的問題,肯定還有許多猥瑣的方式我沒有觀察到,歡迎大家補充。
元旦在家碼字不容易。