文件上传 .htaccess 与.user.ini
创始人
2024-06-02 15:36:18
0

1、.htaccess

1使用方法,上传.htaccess文件内容如下


SetHandler application/x-httpd-php

​
匹配文件名为“shell”的文件,该文件作为可执行程序解析

或者

AddType application/x-httpd-php .jpg
​
​
jpg文件作为可执行程序执行

2再上传shell.jpg

GIF89a

3访问shell.jpg文件

2、.user.ini

方式使用限制,在上传的目录中必须包含php文件,例如index.php

1上传.user.ini文件,内容为:

GIF89a                  
auto_prepend_file=1.gif

加载1.gif文件

2上传1.gif文件

GIF89a

3 访问同目录中的php文件,例如index.php ,先通过本目录中的配置文件.user.ini进行加载1.gif文件从而达到加载后门的目的

3、00截断

00截断有限制,php版本得低于5.3,并且GPC得关闭,一般在url上。 两种,%00和0x00,后台读取是遇到%00就会停止。 举个例子,url中输入的是upload/post.php%00.jpg,那么后台读取到是upload/post.php,就实现了绕后目的。

POST /?road=/var/www/html/upload/1.php%00 HTTP/1.1
Host: challenge-57c0e3e249fc35a4.sandbox.ctfhub.com:10080
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:84.0) Gecko/20100101 Firefox/84.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Content-Type: multipart/form-data; boundary=---------------------------47182109526658916741339492122
Content-Length: 369
Origin: http://challenge-57c0e3e249fc35a4.sandbox.ctfhub.com:10080
Connection: close
Referer: http://challenge-57c0e3e249fc35a4.sandbox.ctfhub.com:10080/
Upgrade-Insecure-Requests: 1
​
-----------------------------47182109526658916741339492122
Content-Disposition: form-data; name="file"; filename="shell.php.jpg"
Content-Type: image/jpeg
​

-----------------------------47182109526658916741339492122
Content-Disposition: form-data; name="submit"
​
Submit
-----------------------------47182109526658916741339492122--

4、.htaccess

.htaccess是什么

.htaccess文件(或者”分布式配置文件”)提供了针对目录改变配置的方法, 即,在一个特定的文档目录中放置一个包含一个或多个指令的文件, 以作用于此目录及其所有子目录。作为用户,所能使用的命令受到限制。管理员可以通过Apache的AllowOverride指令来设置。

概述来说,htaccess文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置。通过htaccess文件,可以帮我们实现:网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能。 ​ 启用.htaccess,需要修改httpd.conf,启用AllowOverride,并可以用AllowOverride限制特定命令的使用。如果需要使用.htaccess以外的其他文件名,可以用AccessFileName指令来改变。例如,需要使用.config ,则可以在服务器配置文件中按以下方法配置:AccessFileName .config 。 ​ 笼统地说,.htaccess可以帮我们实现包括:文件夹密码保护、用户自动重定向、自定义错误页面、改变你的文件扩展名、封禁特定IP地址的用户、只允许特定IP地址的用户、禁止目录列表,以及使用其他文件作为index文件等一些功能。 .htaccess文件可以在网站目录树的任何一个目录中,只对该文件所在目录中的文件和子目录有效。

注意:

1、子目录中的指令会笼盖更高级目录或者主器配置中的指令。 如果 .htaccess 文件保存在 /apache/home/www/Gunjit/ 目录,那么它会向该目录中的所有文件和子目录提供命令,但如果该目录包含一个名为 /Gunjit/images/ 子目录,且该子目录中也有一个 .htaccess 文件,那么这个子目录中的命令会覆盖父目录中 .htaccess 文件(或者目录层次结构中更上层的文件)提供的命令。

.htaccess文件中的配置指令作用于.htaccess文件所在的目录及其所有子目录,但是很重要的、需要注意的是,其上级目录也可能会有.htaccess文件,而指令是按查找顺序依次生效的,所以一个特定目录下的.htaccess文件中的指令可能会覆盖其上级目录中的.htaccess文件中的指令,即子目录中的指令会覆盖父目录或者主配置文件中的指令。

2、.htaccess必需以ASCII模式上传,最好将其权限设置为644。 3、使用.htaccess文件,会降低httpd服务器的一点性能

为什么要使用.htaccess

很多网站都是租用服务器和虚拟主机的,其服务器的配置我们并不能改。当我们有特殊要求时,比如定义最简单的404(页面未找到)的错误页面,我们就只能通过apache配置的扩展配置(或者说是子配置)来更改扩展原服务器的配置。这个配置就是.htaccess文件,他是apache下的http.conf文件的延续。

如何启用.htaccess

要在服务器上使用.htaccess文件配置,必须要求服务器开通对于的支持。两个条件:1.mod_rewrite模块开启;2. AllowOverride All, 如何配置:

  1. 启用AllowOverride。打开httpd.conf, 将工作目录下的AllowOverride None 改为AllowOverride All。

ServerName www.nhs.comServerAlias nhs.comDocumentRoot D:/projects/htdocs/nhs/nfs_cmsOptions +Indexes +Includes +FollowSymLinks +MultiViewsAllowOverride AllRequire local

2.. 开启.mod_rewrite模块。将#LoadModule rewrite_module modules/mod_rewrite.so前的#去掉即可。

  1. 重启apache

一般情况下,不应该使用.htaccess文件

一般情况下,不应该使用.htaccess文件,除非你对主配置文件没有访问权限。建议把用户认证写在主配置文件中,而且是一种很好的方法。

.htaccess文件应该被用在内容提供者需要针对特定目录改变服务器的配置而又没有root权限的情况下。如果服务器管理员不愿意频繁修改配置,则可以允许用户通过.htaccess文件自己修改配置,尤其是ISP在同一个机器上运行了多个用户站点,而又希望用户可以自己改变配置的情况下。

虽然如此,一般都应该尽可能地避免使用.htaccess文件。任何希望放在.htaccess文件中的配置,都可以放在主配置文件的段中,而且更高效。

避免使用.htaccess文件有两个主要原因

1、首先是性能。 如果AllowOverride启用了.htaccess文件,则Apache需要在每个目录中查找.htaccess文件,因此,无论是否真正用到,启用.htaccess都会导致性能的下降。另外,对每一个请求,都需要读取一次.htaccess文件。还有,Apache必须在所有上级的目录中查找.htaccess文件,以使所有有效的指令都起作用, 所以,如果请求/ctusky/ctu/sky中的页面,Apache必须查找以下文件:

/.htaccess
/ctusky/.htaccess
/ctusky/ctu/.htaccess
/ctusky/ctu/sky/.htaccess  一共就要访问4个额外的文件,就算这些文件都不存在,这也是本文开始说会影响服务器的一点性能的原因

2、其次是安全。这样会允许用户自己修改服务器的配置,这可能会导致某些意想不到的修改,所以请认真考虑是否应当给予用户这样的特权。

注意,在/www/htdocs/example目录下的.htaccess文件中放置指令,与在主配置文件中段中放置相同指令,是完全等效的。
​
/www/htdocs/example目录下的.htaccess文件的内容:
AddType text/example .exm
httpd.conf文件中摘录的内容:   
   
AddType text/example .exm   
但是,把配置放在主配置文件中更加高效,因为只需要在Apache启动时读取一次,而不是在每次文件被请求时都读取。 将AllowOverride设置为none可以完全禁止使用.htaccess文件:   
AllowOverride None

参考文献:

Apache服务器中的.htaccess文件的配置_www.test.cn_kakuma_chen的博客-CSDN博客

5、.user.ini

那么什么是.user.ini?

这得从php.ini说起了。php.ini是php默认的配置文件,其中包括了很多php的配置,这些配置中,又分为几种:PHP_INI_SYSTEMPHP_INI_PERDIRPHP_INI_ALLPHP_INI_USER。 在此可以查看:PHP: php.ini 配置选项列表 - Manual 这几种模式有什么区别?看看官方的解释:

 

其中就提到了,模式为PHP_INI_USER的配置项,可以在ini_set()函数中设置、注册表中设置,再就是.user.ini中设置。 这里就提到了.user.ini,那么这是个什么配置文件?那么官方文档在这里又解释了:

除了主 php.ini 之外,PHP 还会在每个目录下扫描 INI 文件,从被执行的 PHP 文件所在目录开始一直上升到 web 根目录($_SERVER['DOCUMENT_ROOT'] 所指定的)。如果被执行的 PHP 文件在 web 根目录之外,则只扫描该目录。

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

这里就很清楚了,.user.ini实际上就是一个可以由用户“自定义”的php.ini,我们能够自定义的设置是模式为“PHP_INI_PERDIR 、 PHP_INI_USER”的设置。(上面表格中没有提到的PHP_INI_PERDIR也可以在.user.ini中设置)

实际上,除了PHP_INI_SYSTEM以外的模式(包括PHP_INI_ALL)都是可以通过.user.ini来设置的。

而且,和php.ini不同的是,.user.ini是一个能被动态加载的ini文件。也就是说我修改了.user.ini后,不需要重启服务器中间件,只需要等待user_ini.cache_ttl所设置的时间(默认为300秒),即可被重新加载。

然后我们看到php.ini中的配置项,可惜我沮丧地发现,只要稍微敏感的配置项,都是PHP_INI_SYSTEM模式的(甚至是php.ini only的),包括disable_functionsextension_direnable_dl等。 不过,我们可以很容易地借助.user.ini文件来构造一个“后门”。

Php配置项中有两个比较有意思的项(下图第一、四个):

 

auto_append_fileauto_prepend_file,点开看看什么意思:

 

指定一个文件,自动包含在要执行的文件前,类似于在文件前调用了require()函数。而auto_append_file类似,只是在文件后面包含。 使用方法很简单,直接写在.user.ini中:

auto_prepend_file=01.gif

01.gif是要包含的文件。

所以,我们可以借助.user.ini轻松让所有php文件都“自动”包含某个文件,而这个文件可以是一个正常php文件,也可以是一个包含一句话的webshell。

测试一下,我分别在IIS6.0+Fastcgi+PHP5.3和nginx+fpm+php5.3上测试。 目录下有.user.ini,和包含webshell的01.gif,和正常php文件echo.php:

 

 

访问echo.php即可看到后门:

 

Nginx下同样:

 

 

那么,我们可以猥琐地想一下,在哪些情况下可以用到这个姿势? 比如,某网站限制不允许上传.php文件,你便可以上传一个.user.ini,再上传一个图片马,包含起来进行getshell。不过前提是含有.user.ini的文件夹下需要有正常的php文件,否则也不能包含了。 再比如,你只是想隐藏个后门,这个方式是最方便的。

参考文献

.user.ini文件构成的PHP后门 - phith0n

相关内容

热门资讯

surface2 接口-Sur... 嘿,大家好!今天我要聊聊我最近超级迷恋的一个小玩意儿——Surface2接口!这东西,简直是我的数字...
wmiprvse.exe sy... 大家好,今天我要和大家聊聊一个听起来有点高大上,但实际上我们每天都在和它打交道的东西——wmiprv...
卢瓦loic下载-卢瓦 Loi... 嘿,朋友们,今天咱们来聊聊那个让人心跳加速的话题——卢瓦Loic下载!这可不是普通的下载,这是一场关...
双专线叠加千兆路由器:解决网速... 哎呀,说到这个双专线叠加千兆路由器,我这心里就激动得不行!你知道吗,这玩意儿简直就是网络世界的超级英...
探险队长带你揭开名字查询身份证... 大家好,我是你们的探险队长,今天我们要一起潜入一个神秘的世界——名字查询身份证号码查询系统。这听起来...
绿云系统下载:一场没有硝烟的战... 嘿,大家好,我今天真是有一肚子话要说!绿云系统下载,这个名字听起来就像是从天而降的神秘礼物,对吧?我...
winebottler怎么使用... 大家好,我是那个总是对新鲜玩意儿充满好奇的小王。今天要跟大家聊的,是那个让我的Mac变得超级全能的神...
家庭省电宝怎安装-家庭省电宝安... 哎呀,说到家庭省电,我可是有好多小窍门呢!今天就来聊聊我家那个小宝贝——家庭省电宝的安装,简直是太简...
ecshop模板堂去除方法-去... 嘿,大家好,我今天真是气不打一处来!你们有没有试过折腾那个ECShop模板堂?我告诉你,简直是噩梦一...
共享总线技术:电子设备间的高速... 嘿朋友们,今天咱们聊聊这个“共享总线”技术,这可不是什么高深莫测的东西,其实它就是一条电子设备之间相...
呼吸道合胞病毒 用文明-呼吸道... 哎呀,说到这个呼吸道合胞病毒,真是让人头疼不已!这小东西,看不见摸不着的,却能在我们不经意间悄悄地侵...
surface1和2的区别-S... 哟,大家好呀!今天咱们就来聊聊那些让人又爱又恨的Surface1和Surface2。这两个小家伙,虽...
foobar2000 wasa... 嘿,大家好!今天我得说说我和Foobar2000还有WASAPI的那点事儿。你们知道吗,每次我打开这...
findata破解版-Find... 嘿,大家好!今天咱们聊点刺激的,说说那个最近在圈子里火得不行的Findata破解版。你们是不是也听说...
initization fai... 哎,你知道吗?今天我真是倒了八辈子霉了!就在我以为一切都要开始的时候,砰!一切都崩了!对,就是那个该...
华硕e403n 改win7-华... 哎呀,说到这事儿我就激动得不行!你敢信?我那台老古董华硕e403n,本以为它只能乖乖地用着那个什么w...
0x0000000050电脑蓝... 哎呀,我的天啊!刚刚还在激情四射地玩游戏,电脑突然就蓝屏了,屏幕上那个恐怖的0x0000000050...
肛瘘手术 多长时间不疼-肛瘘手... 哎呀,说到肛瘘手术,真是让人头疼又屁股疼!手术后那疼痛,简直让人怀疑人生。但是,亲们,别急,疼痛总会...
windows bluetoo... 嘿,大家好!今天我想聊聊我生活中的一个小英雄——Windows蓝牙。你知道吗,这个小东西真的是我的生...
阿西吧韩国什么意思-阿西吧韩国... 哎呀呀,说到“阿西吧韩国”,你是不是也和我一样,心里有点小激动?这可不是什么正式的词汇,但它在年轻人...