一些特殊文件

整理一些特殊文件导致的利用方式:

  • robots.txt
  • .swp
  • .DS_Store
  • .user.ini
  • .htaccess
  • .git
  • phps

robots.txt #

robots.txt 是一个放置在网站根目录下的文本文件,它用于告诉搜索引爬虫哪些页面可以抓取,哪些不可以。限制不是强制的,一些爬虫可能会忽视这些规则。

User-agent: Googlebot
Disallow: /private/
Allow: /public/

User-agent: Baiduspider
Disallow: 

User-agent: *
Disallow: /

Disallow 规则的优先级高于 Allow,以上例子指示:

  • Googlebot 不允许抓取 /private/ 目录下的任何内容,允许抓取 /public/ 目录下的所有内容
  • Baiduspider 可以抓取网站上的所有内容
  • 对于不是 GooglebotBaiduspider 的所有其他爬虫,禁止它们访问网站的任何部分
robots.txt 在 ctf web题目中的作用是提供目录扫描工具扫描不到的网站路径

.swp #

.swp 文件是 Vim 在编辑时自动生成的临时交换文件

主要用途如下:

  • 防止文件冲突:如果尝试打开一个已经在编辑中的文件,Vim 会警告该文件已经被打开,并显示 .swp 文件的存在,用于提示可能的文件冲突
  • 数据恢复:当编辑一个文件时,如果 Vim 意外关闭(比如电脑突然断电或关掉terminal),.swp 文件可以用来恢复之前的更改

.swp 文件在 ctf web题目中的作用是提供swp文件,使用vi -r xxx ,从 .xxx.swp 还原出 xxx 文件内容

.DS_Store #

.DS_Store macOS 的桌面服务(Desktop Services)创建,用于保存关于文件夹的视图设置和其他元数据,使得 Finder(类似windows文件管理器) 可以记住不同文件夹的显示属性,例如窗口位置、图标视图或列表视图等。

Python-dsstore,是一款Python语言写的 .DS_Store 文件解析器,从 .DS_Store 文件可以获取目录下涉及的文件的清单

如,当给一个文件添加备注时,会触发当前目录下.DS_Store的修改,并不是目录下所有文件都会反映在.DS_Store文件中

.DS_Store 文件在 ctf web题目中的作用是提供当前目录下的文件名信息,进而通过文件名作为url进行访问

.user.ini #

.user.ini.htaccess用的更广,不管是nginx/apache/IIS,只要是Server API 为CGI/FastCGI运行的php都可以用这个方法。

.user.ini 文件提供了一种便捷的方法来调整特定目录下的 PHP 行为,如下指定脚本最大可使用的内存量和脚本执行的最大时间(秒):

memory_limit = 256M
max_execution_time = 180

但其作用范围限制在包含该文件的目录及其子目录中,且文件创建后立即生效。这使得用户能够对执行环境进行细粒度的控制,而不会影响到主机上的其他用户或应用。

.user.ini 文件在 ctf web题目中的作用是搭配文件上传:

  • 上传.user.ini文件
auto_prepend_file = "a.jpg"
  • 上传a.jpg为一句话木马

这样设置后,每次执行当前目录及其子目录下的任何 PHP 脚本前,都会自动加载a.jpg一句话木马,使得木马生效。

当然大部分文件会上传到特定的upload目录之内,还需要有一个利用条件:upload目录存在类似index.php脚本,且在web服务器的纳官范围之内

.htaccess #

.htaccess(Hypertext Access)文件是一个非常强大的配置文件,用于管理 Apache Web 服务器上的目录级别设置。 通常在 Apache 的主配置文件 httpd.conf 或目录级的配置文件如 apache2.conf 中设置:

<Directory /var/www/html>
    AllowOverride All
    # 或者更具体地:
    AllowOverride FileInfo Options # 允许使用文件相关的指令如重写规则(mod_rewrite)和一些选项设置
</Directory>

确保 Apache 已经加载了 URL 重写模块 mod_rewrite

LoadModule rewrite_module modules/mod_rewrite.so

一些例子如下:

  • 重写规则:这条规则将所有访问 oldpage.html 的请求永久重定向到 newpage.html
RewriteEngine On
RewriteRule ^oldpage\.html$ newpage.html [R=301,L]
  • 密码保护目录:设置了对目录的基本认证,密码存储在服务器上的 .htpasswd 文件中
AuthType Basic
AuthName "Restricted Access"
AuthUserFile /path/to/.htpasswd
Require valid-user
  • 自定义错误页面:尝试访问不存在的页面时,将显示 notfound.html
ErrorDocument 404 /notfound.html
  • 防止特定文件类型被访问:阻止用户直接通过浏览器访问 .env.config 文件
<Files ~ "\.(env|config)$">
Order allow,deny
Deny from all
</Files>

.htaccess 在 ctf web 题中搭配文件上传的利用方式有以下几种:

  • 如上传.jpg内容为一句话木马,将 .jpg 后缀的文件当作 php 文件执行(默认情况下.jpg不会被视为代码执行)
<FilesMatch "jpg">
 SetHandler application/x-httpd-php
</FilesMatch>

# 或者
AddType application/x-httpd-php .jpg
  • 文件包含:使作用范围内的php文件在文件尾include指定文件
php_value auto_append_file /etc/passwd

php_value auto_append_file master://search/path=%2fhome%2f&name=flag

php_value auto_append_file "php://filter/convert.base64-decode/resource=mn.ppt"

.git #

git仓库目录,用于git记录代码改动等

dvcs-ripper,是一款Perl语言写的,可以对Git、Subversion (SVN) 和 Mercurial (Hg)等常⻅版本控制系统进行信息泄漏利用的工具

rip-git.pl -v -u http://www.example.com/.git/

上述命令会自动还原git工作目录,即显示源代码内容,进而对代码进行审计,SVN/Hg同理

ctf web 题目一般在目录扫描扫描出.git后使用

phps #

.phps 扩展名通常用来指示 PHP 源代码文件,这种文件被用于在浏览器中直接显示其内容的源代码,而不是像php展示执行代码后的输出 以下httpd.conf配置说明.phps 文件应当被当作 PHP 源代码文件处理,使用 PHP 的语法高亮功能

AddType application/x-httpd-php-source .phps
ctf web 题目一般在有特定提示或者无其他任何其他提示下访问xxx.phps,尝试获取源码后进行代码审计