你是否只知道htaccess但是不知道.user.ini

作者:feifeihai | 发布时间:

Snipaste_2022-06-07_12-31-20

 

 

你是否只知道htaccess但是不知道.user.ini

 

回到家,iPad开机,打开大佬的文章,开卷。每当触碰到我的知识盲区,我就想研究一番

 

 

相信很多人都知道.htaccess,简单理解就是它能影响当前目录以及子目录的配置,它存放着Apache服务器配置相关的一些指令,我们经常利用它令Apache将图片格式的webshell当做脚本文件解析,达到绕过文件上传限制的目的。

 

微信公众号:小惜渗透,欢迎大佬一起交流进步

 

1. .user.ini简介

 

接下来我们来了解一下.user.ini.user.ini是php的一种配置文件,众所周知php.ini是php的配置文件,它可以做到显示报错,导入扩展,文件解析,web站点路径等等设置

 

去官方看一下简介https://www.php.net/manual/zh/configuration.file.per-user.php

image-20220713105324039

 

 

从官方的简介中提取以下内容:

  • 首先此类文件必须在CGI或者FastCGI模式下才有效

 

 

还有一句话是在.user.ini风格的INI文件中只有具有PHP_INI_PERDIR和PHP_INI_USER模式的INI设置可被识别。

  • 这句话的意思就是你不能利用.user.ini来更改所有php.ini里面的配置只能更改具有PHP_INI_PERDIR和PHP_INI_USER模式的配置

 

什么是PHP_INI_PERDIR和PHP_INI_USER呢?

  • PHP_INI_USER:可在用户脚本(例如 ini_set())或 Windows 注册表(自 PHP 5.3 起)以及 .user.ini 中设定

  • PHP_INI_PERDIR:可在 php.ini,.htaccess 或 httpd.conf中设定

 

 

具体它们能修改什么配置看官方的这个表一目了然

https://www.php.net/manual/zh/ini.list.php

 

image-20220713110748995

 

 

遍历相关配置,发现有两个我们可以利用,并且还符合模式条件,auto_prepend_fileauto_append_file

 

它们的功能就是说白了就是文件包含,不过一个插入到文件最前,一个是插入到最后,这样的话如果我们准备一png格式的webshell,利用这种方式就可以将文件包含到一个php脚本文件里,目的就达到了。

 

 


 

 

2. 利用演示

 

这里用一到ctf举例[SUCTF 2019]CheckIn1

 

image-20220713113922966

 

上来一个文件上传,尝试传文件

image-20220713114115324

 

后缀名不行,先改成jpg试试

image-20220713114140034

 

不让包含<?,这个没关系可以用<script language='php'></scirpt>来绕过

image-20220713115123095

 

成功绕过,但是出现exif_imagetype,看来后端用了这exif_imagetype,这个我们可以加上图片内容头绕过

image-20220713122308885

 

可以看到文件里面存在一个index.php,摆明了让我们利用文件包含呢,紧接着我们上传.user.ini文件, 用auto_prepend_file指明包含文件shell.jpg,由于exif_imagetype函数的限制,所以再上传.user.ini的时候也得加上图片内容头

 

image-20220713121705678

上传成功后访问/uploads/c47b21fcf8f0bc8b3920541abd8024fd路径下的index.php,就获取到了flag

image-20220713132657565

 

总结一下,这个在实战中遇到的也少,但是还是有几率碰到的,所以当扩充知识面了。