0x00.概述
0.1 起因
前段時間在zone裡看到有人問4A的滲透測試,本人正好接觸過幾款4A和堡壘機產品,今天抽空就總結下個人在滲透中遇到的4A問題。
0.2 4A
4A是指:認證Authentication、賬號Account、授權Authorization、審計Audit,中文名稱為統一安全管理平台解決方案。即將身份認證、授權、審計和賬號(即不可否認性及數據完整性)定義為網絡安全的四大組成部分,從而確立了身份認證在整個網絡安全系統中的地位與作用。(百度百科)。
0x01.認證Authentication
認證的方式一般有以下幾種:
靜態口令
動態口令令牌
USB令牌
存在的問題有:
1.1 賬號枚舉
這裡的賬號枚舉並不是僅僅知道哪個賬號存在,哪個賬號不存在。
String mobileNumber = request.getParameter("mobile");
if(StringUtiles.isNotEmpty(mobileNumber)){
PrimaryAccount primaryAccount = new PrimaryAccount();
primaryAccount.setMobile(mobileNumber);
List paList = accountService.getPraccList(PrimaryAccount);
if(CollectionUtils.isNotEmpty(paList)){
username = paList.get(0).getPracctName();
}
}
......
if(StringUtiles.isBlank(errMsg)){
errMsg = "認證失敗"
}
String oper = "主賬號:" + username + "登錄4A認證不成功,原因:" + errMgs;
......
從上面賬號可以看到,登錄時,如果你輸入的是手機號,那麼登錄失敗的時候,就會將手機號對應的username返回,那麼我們就可以拿手機號和用戶名到密碼找回頁面等地方做進一步的測試。
1.2 鎖屏繞過
在某廠商的4A平台上有個鎖屏的功能,即點擊鎖屏時,4A管理界面就會被鎖定,重新輸入密碼後,就可以進入管理平台。
Ext.Ajax.request({
url : '../platform/login!lockLogin.do',
params : {
name : name,
lockPwd : lockPwd
},
success : function(rsp,opt){
var responseArray = Ext.util.JSON.decode(rsp.responseText);
var result = responseArray.resultStr;
var desc = responseArray.descStr;
if(result == true){
$.unblockUI();
$("#lockPwd").val("");
times=0;
}else if......
}
})
從代碼可以看到,只要result == 0,就可以解鎖,那麼我們可以用burp攔截response,也可以修改JS等。
0x02.賬號Account
4A中賬號分為主賬號和從賬號,一個用戶只會有一個主賬號,唯一標識了他的身份。這個主賬號還會有N個從賬號,對不同的系統會有不同的從賬號,方便用戶訪問其可以訪問的系統。如下圖
2.1 重置用戶密碼
http://wooyun.org/bugs/wooyun-2010-072644
在這個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 訪問他人資源
一般的4A中都集成了“個人文件夾”功能,這個文件夾就是可以上傳文件到自己的文件夾裡面,但是點擊個人文件夾時,可以修改username,然後就看到了其他人的文件。
3.3 下載文件
同樣是個人文件夾(或者其他提供下載的地方)的問題,可以下載指定的文件,但是沒有對文件做限制,可以下載任意文件。
public String execute() throws FAException{
......
String file = request.getParameter("file");
String place = request.getParameter("place");
String fileName = request.getParameter("filename");
download(file,fileName,request,response,place);
}
private void download(String file,String fileName,HttpServletRequest request,HttpServletResponse response,String place) throws FAException{
......
path = (request.getSession().getServletContext().getRealPath("/") + file).replace("/",File.separator).replace("",File.separator);
}
FileInputStream fis = new FileInputStream(path);
......
response.setHeader("Content-Disposition","attachment:filename="" + fileName_zh + """);
從代碼中可以看到,通過獲取file等參數,然後直接就下載文件了。。
3.4 前置機
一些堡壘機具有前置機,意思是某些在堡壘機中實現不了的功能(比如內置pcanywhere,只是比如),那麼就需要把pcanywhere放到前置機中,當需要使用pcanywhere時,就會遠程登錄到前置機上,調用pcanywhere的頁面。
問題是什麼呢,既然是遠程登錄調用pcanywhere的頁面,那麼我們只要使用windows鍵或者使用alt+tab就可以切換到其他程序上,進而就控制了前置機。
大家可以看看這個密鑰問題。。
0x04.審計Audit
審計主要是對登錄、訪問等所有的動作記錄日志,查看是否有不合規的事件。
4.1 偽造登錄IP
帕拉迪/華為/江南天安堡壘機偽造WEB登錄來源IP漏洞
在這個bug中通過x-forwarded-for偽造了登錄的IP,這就對日志造成了影響,如果以後需要整理日志,或者根據日志找出不合規事件,那就會存在很大的影響。
0x05. 總結
以上只是列舉了我在測試4A或堡壘機時遇到過的問題,肯定還有許多猥瑣的方式我沒有觀察到,歡迎大家補充。
元旦在家碼字不容易。