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