深入浅出.user.ini
深入浅出.user.ini
一、介绍
(1)服务器脚本语言为PHP
(2)对应目录下面有可执行的php文件
(3)服务器使用CGI/FastCGI模式
.user.ini.它比.htaccess用的更广,不管是nginx/apache/IIS,只要是以fastcgi运行的php都可以用这个方法。
.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秒),即可被重新加载。
二、用法
php配置项中有两个重要的
auto_prepend_file = <filename> //包含在文件头 |
我们可以简单理解为,因为.user.ini
配置文件的存在,在当前目录下每个php文件的首/尾加了一行包含代码。如:
includ('xx.txt'); |
所以从本质上来说,.user.ini
配置文件把文件上传转换成了文件包含
三、奇技淫巧
.user.ini
配置文件 配合伪协议\日志包含来绕过。
伪协议:
php://input
:
php://input可以读取没有处理过的POST数据。
auto_append_file=php://input //自动包含POST提交的数据 |
<?php phpinfo();?> |
日志包含:
nginx下的日志文件路径:
/var/log/nginx/access.log |
auto_append_file=/var/log/nginx/access.log |
极端过滤如过滤<
时候,或者能上传但是不能解析,原封不动的输出。那就不能使用.user.ini配置文件配合一句话木马的.txt文件了。
这种情况就需要配合伪协议来绕过。
四、实战
ctfshow-web153
先上传一个.user.ini
然后在上传一个图片马
发现成功执行命令
ctfshow-web169
前端要求zip。后端要求png,但是还是可以修改后缀。
过滤了<
,考虑包含文件了,包含日志。
先上传一个php文件,进行日志包含
接着上传.user.ini
,直接在.user.ini
里包含日志路径。auto_prepend_file=/var/log/nginx/access.log
并且在UA处写木马<?=system('ls ..')?>
然后访问url/upload/
发现文件,进行读取得到flag即可
武功山杯web
开题就是一个文件上传的按钮
得到路径
然后访问http://59.62.61.30:45163/upload/f929a61f39a47d7c0a32c26078cc9b1a/index.php#/
看到phpinfo 证明可以执行命令
将其改成一句话木马,拿到flag