0x00.概述
0.1 起因
前段時(shí)間在zone里看到有人問4A的滲透測試,本人正好接觸過幾款4A和堡壘機(jī)產(chǎn)品,今天抽空就總結(jié)下個(gè)人在滲透中遇到的4A問題。
0.2 4A
4A是指:認(rèn)證Authentication、賬號(hào)Account、授權(quán)Authorization、審計(jì)Audit,中文名稱為統(tǒng)一安全管理平臺(tái)解決方案。即將身份認(rèn)證、授權(quán)、審計(jì)和賬號(hào)(即不可否認(rèn)性及數(shù)據(jù)完整性)定義為網(wǎng)絡(luò)安全的四大組成部分,從而確立了身份認(rèn)證在整個(gè)網(wǎng)絡(luò)安全系統(tǒng)中的地位與作用。(百度百科)。
0x01.認(rèn)證Authentication
認(rèn)證的方式一般有以下幾種:
靜態(tài)口令
動(dòng)態(tài)口令令牌
USB令牌
存在的問題有:
1.1 賬號(hào)枚舉
這里的賬號(hào)枚舉并不是僅僅知道哪個(gè)賬號(hào)存在,哪個(gè)賬號(hào)不存在。
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 = "認(rèn)證失敗"
}
String oper = "主賬號(hào):" + username + "登錄4A認(rèn)證不成功,原因:" + errMgs;
......
從上面賬號(hào)可以看到,登錄時(shí),如果你輸入的是手機(jī)號(hào),那么登錄失敗的時(shí)候,就會(huì)將手機(jī)號(hào)對(duì)應(yīng)的username返回,那么我們就可以拿手機(jī)號(hào)和用戶名到密碼找回頁面等地方做進(jìn)一步的測試。
1.2 鎖屏繞過
在某廠商的4A平臺(tái)上有個(gè)鎖屏的功能,即點(diǎn)擊鎖屏?xí)r,4A管理界面就會(huì)被鎖定,重新輸入密碼后,就可以進(jìn)入管理平臺(tái)。
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.賬號(hào)Account
4A中賬號(hào)分為主賬號(hào)和從賬號(hào),一個(gè)用戶只會(huì)有一個(gè)主賬號(hào),唯一標(biāo)識(shí)了他的身份。這個(gè)主賬號(hào)還會(huì)有N個(gè)從賬號(hào),對(duì)不同的系統(tǒng)會(huì)有不同的從賬號(hào),方便用戶訪問其可以訪問的系統(tǒng)。如下圖
2.1 重置用戶密碼
http://wooyun.org/bugs/wooyun-2010-072644
在這個(gè)bug中,可以通過修改密碼的功能,重置其他用戶的密碼。典型的賬號(hào)管理問題。
2.2 token
token在4A中可謂是到處都是,那么如果token驗(yàn)證不嚴(yán)謹(jǐn),很可能出現(xiàn)戲劇性的結(jié)果。接下來這個(gè)漏洞給大家展示token失效的時(shí)候。
這個(gè)頁面不是通過4A登錄過來的,而是直接訪問網(wǎng)站的登錄界面,登錄后的頁面。
上面的圖是通過4A登錄后,訪問系統(tǒng)時(shí),將URL和username修改為管理員的頁面和用戶名,然后可以看到,頁面顯示的就是管理員的頁面了。
0x03.授權(quán)Authorization
授權(quán)一般分為:
1.基于用戶的授權(quán)UBAC
2.基于用戶角色的授權(quán)RBAC
3.基于資源的授權(quán)ABAC
存在的問題有:
3.1 調(diào)用cmd
4A權(quán)限分配中有個(gè)很重要的功能就是基于資源的授權(quán),比如給主賬號(hào)A分配一個(gè)securecrt,讓其可以使用SSH,給主賬號(hào)B分配一個(gè)notepad,讓其可以使用記事本。但是大家都知道通過瀏覽器、記事本等“查找文件”的功能可以調(diào)出cmd等功能。
如下圖,是通過分配的IE瀏覽器,直接調(diào)用出cmd窗口,接下來,你想干什么,都OK。
3.2 訪問他人資源
一般的4A中都集成了“個(gè)人文件夾”功能,這個(gè)文件夾就是可以上傳文件到自己的文件夾里面,但是點(diǎn)擊個(gè)人文件夾時(shí),可以修改username,然后就看到了其他人的文件。
3.3 下載文件
同樣是個(gè)人文件夾(或者其他提供下載的地方)的問題,可以下載指定的文件,但是沒有對(duì)文件做限制,可以下載任意文件。
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等參數(shù),然后直接就下載文件了。。
3.4 前置機(jī)
一些堡壘機(jī)具有前置機(jī),意思是某些在堡壘機(jī)中實(shí)現(xiàn)不了的功能(比如內(nèi)置pcanywhere,只是比如),那么就需要把pcanywhere放到前置機(jī)中,當(dāng)需要使用pcanywhere時(shí),就會(huì)遠(yuǎn)程登錄到前置機(jī)上,調(diào)用pcanywhere的頁面。
問題是什么呢,既然是遠(yuǎn)程登錄調(diào)用pcanywhere的頁面,那么我們只要使用windows鍵或者使用alt+tab就可以切換到其他程序上,進(jìn)而就控制了前置機(jī)。
大家可以看看這個(gè)密鑰問題。。
0x04.審計(jì)Audit
審計(jì)主要是對(duì)登錄、訪問等所有的動(dòng)作記錄日志,查看是否有不合規(guī)的事件。
4.1 偽造登錄IP
帕拉迪/華為/江南天安堡壘機(jī)偽造WEB登錄來源IP漏洞
在這個(gè)bug中通過x-forwarded-for偽造了登錄的IP,這就對(duì)日志造成了影響,如果以后需要整理日志,或者根據(jù)日志找出不合規(guī)事件,那就會(huì)存在很大的影響。
0x05. 總結(jié)
以上只是列舉了我在測試4A或堡壘機(jī)時(shí)遇到過的問題,肯定還有許多猥瑣的方式我沒有觀察到,歡迎大家補(bǔ)充。
元旦在家碼字不容易。
新聞熱點(diǎn)
疑難解答