天天看點

archpr說檔案不是rar檔案_【表哥有話說 第52期】.htaccess檔案使用

什麼是 .htaccess 檔案?

全稱是Hypertext Access(超文本入口)。提供了針對目錄改變配置的方法,在一個特定的文檔目錄中放置一個包含一個或多個指令的檔案, 以作用于此目錄及其所有子目錄,概述來說,htaccess檔案是Apache伺服器中的一個配置檔案,它負責相關目錄下的網頁配置。

工作機制

Apache在所有上級的目錄中查找.htaccess檔案,以使所有有效的指令都起作用。是以,如果請求/www/htdocs/example中的頁面,Apache必須查找以下檔案:

/.htaccess

/www/.htaccess

/www/htdocs/.htaccess

/www/htdocs/example/.htaccess

總共要通路4個額外的檔案,即使這些檔案都不存在。

用途

通過htaccess檔案,可以幫我們實作:網頁301重定向、自定義404錯誤頁面、改變檔案擴充名、允許/阻止特定的使用者或者目錄的通路、禁止目錄清單、配置預設文檔、防盜鍊等功能。

優缺點

  • 優點:利用目前目錄的.htaccess檔案可以允許管理者靈活的随時按需改變目錄通路政策。
  • 缺點:Apache必須在所有上級的目錄中查找.htaccess檔案,對每一個請求都需要讀取一次.htaccess檔案,降低伺服器性能,其次是安全。這樣會允許使用者自己修改伺服器的配置,這可能會導緻某些意想不到的修改。

基本文法

這裡整理了一下 .htaccess中經常出現的指令即字元含義

常用指令

指令 功能 示例
AddType 添加類型 AddType application/x-httpd-php .php
RewriteEngine 用于開啟或停用rewrite功能。 RewriteEngine On|Off
RewriteBase 用于設定重寫的基準URL RewriteBase /
RewriteCond 定義了一個規則的條件 RewriteCond %{HTTP_HOST} ^(www.)?xxx.com$ // %{伺服器變量名稱} 常用變量可參考表三
RewriteRule 重寫規則 RewriteRule /sss /ttt 将使用者的/sss目錄請求轉到/ttt目錄
ErrorDocument 設定錯誤頁面 ErrorDocument 400 /error_pages/400.html
DirectoryIndex 設定檔案夾首頁 DirectoryIndex test.php
Redirect 設定重定向 Redirect /old/  /new/

RewriteCond文法中字元含義

字元 含義
-d 視為一個路徑名并測試它是否為一個存在的目錄
-f 視為一個路徑名并測試它是否為一個存在的正常檔案
-s 視為一個路徑名并測試它是否為一個存在的、尺寸大于0的正常檔案
-l 視為一個路徑名并測試它是否為一個存在的符号連接配接
-x 視為一個路徑名并測試它是否為一個存在的、具有可執行權限的檔案。該權限由作業系統檢測
-F 是否為一個有效的檔案,而且可以在伺服器目前的通路控制配置下被通路
-U 是否為一個有效的URL,而且可以在伺服器目前的通路控制配置下被通路

RewriteRule文法中部分字元含義

一般使用方法為 RewriteRule + 規則 + [字元]

字元 含義
E 設定環境變量
L 結尾規則
N 從頭再來
NC 比對忽略大小寫
NE 在輸出中不對URI進行轉義
R 強制重定向
F 強制禁止URL

常用的伺服器和執行環境資訊

參數名稱 樣例參考值 說明
HTTP_USER_AGENT - 目前請求頭中 User-Agent: 項的内容,如果存在的話。
HTTP_REFERER http://www.test.cn/test.php 引導使用者代理到目前頁的前一頁的位址
HTTP_FORWARDED 如果使用代理伺服器的話會是代理伺服器的IP位址, 本地不容易搭環境測試出值來. 相當于PHP中的伺服器參數: $_SERVER["HTTP_FORWARDED"]
HTTP_HOST www.test.com 相當于PHP中的伺服器參數: $_SERVER["HTTP_HOST"]
REQUEST_URI /test.html 浏覽器請求的資源資訊.
REQUEST_FILENAME C:/webRoot/t/test.html 被請求的資源的在磁盤的實體位址.
SERVER_ADDR 127.0.0.1 目前運作腳本所在的伺服器的 IP 位址。
SERVER_PORT 80 Web 伺服器使用的端口。
REMOTE_ADDR 127.0.0.1 正在浏覽目前頁面使用者的 IP 位址。 浏覽目前頁面的使用者的 IP 位址。
REMOTE_HOST 127.0.0.1 正在浏覽目前頁面使用者的主機名。反向域名解析基于該使用者的 REMOTE_ADDR 相當于PHP中的伺服器參數: $_SERVER["REMOTE_HOST"]
REMOTE_PORT 2356 使用者連接配接到伺服器時所使用的端口
REQUEST_METHOD GET 請求方式
SCRIPT_FILENAME /var/www/html/index.php 相目前執行腳本的絕對路徑。
QUERY_STRING a=b&c=d&e=f query string(查詢字元串),如果有的話,通過它進行頁面通路。

更多值可以參考PHP手冊的 PHP Manual›預定義變量›伺服器和執行環境資訊 即$_SERVER 部分

.htaccess 常見用法

實作網站的重定向

RewriteEngine On  #重寫引擎開啟RewriteBase /   #設定重寫基準目錄為網站根目錄 預設為http://www.xxx.com/這種形式RewriteCond %{REQUEST_FILENAME} !-f #被請求的資源位址不是檔案RewriteCond %{REQUEST_FILENAME} !-d #被請求的資源位址不是目錄RewriteRule .  /index.php [L]  #滿足上述兩個條件,就将滿足的請求跳轉到index.php  ,[L] 為last最後一條#-f -d含義參考表二
           

檔案防盜鍊

RewriteEngine onRewriteCond %{HTTP_REFERER} !^$ # 判斷HTTP_REFERER不空RewriteCond %{HTTP_REFERER} !^http://(www\.)?yourdomain.com/.*$ [NC] # 判斷來源是否來自自己的域RewriteRule \.(gif|jpg|png)$ http://****//error.png [R,L]# 如果上面兩個條件,将滿足連結尾部為gif、jpg、png的定向到 http://****//error.png ,此處的R為redirect 意義為強制重定向 [NC]為忽略大小寫
           

限定IP位址通路

order allow,denydeny from 33.33.33.33 # 禁止指定IP 通路deny from 12.12.12. # 禁止12.12.12.0/24 的位址通路allow from all # 除禁止部分都可通路,不加都不能通路
           

檔案保護

order allow,denydeny from all
           

其他用法

ErrorDocument 404 /templates/404.html #将錯誤頁面定向到404.htmlAddType application/x-httpd-php .test #将字尾為test的檔案當做php腳本運作DirectoryIndex test.php # 設定首頁為test.phpOptions All -Indexes  # 禁止目錄浏覽Options All +Indexes  # 開放目錄浏覽
           

https://htaccess.iapolo.com/ 線上生成各種功能的htaccess檔案

.htaccess 在CTF中的作用

最開始接觸.htaccess檔案就是在CTF中接觸到的,而後用到的次數也逐漸增多。

最常用的就是檔案上傳.htaccess,繞過字尾限制(在.htaccess有執行權限時)使用方法:

1、.htaccess檔案内容為

AddType application/x-httpd-php .jpg
           

然後再上傳字尾為jpg的一句話即可。

2、 或者可以使用如下語句

php_value auto_prepend_file  ".htaccess"# <?php phpinfo(); ?>
           

本地測試發現,會爆500錯誤

archpr說檔案不是rar檔案_【表哥有話說 第52期】.htaccess檔案使用

phpstudy_pro中php版本 測試無一成功,用phpstudy2018版本中,僅非nts版本測試成功,

archpr說檔案不是rar檔案_【表哥有話說 第52期】.htaccess檔案使用
archpr說檔案不是rar檔案_【表哥有話說 第52期】.htaccess檔案使用

成功結果如下

archpr說檔案不是rar檔案_【表哥有話說 第52期】.htaccess檔案使用

也就是說利用php_value時,存在失敗的可能,原因通過日志來看

Invalid command 'php_value', perhaps misspelled or defined by a module not included in the server configuration
           

nts含義就不在這裡說了。可能是PHP處理程式不同的原因,原因可以參考一下

https://forums.cpanel.net/threads/invalid-command-php_value-perhaps-mis-spelled-or-defined-by-a-module-not-included.184931/  

PHP處理程式:http://www.voidcn.com/article/p-qfxtodcn-btz.html

3、如果檢測字尾的正規表達式,且php同上為非nts,則可以上傳.htaccess,内容如下

php_value pcre.backtrack_limit 0php_value pcre.jit 0
           

示範代碼

<?php $filename = "1.php";if (preg_match("/\.php/",$filename)) {echo "true";}else{echo "false";}?>
           

在不存在.htaccess時運作

archpr說檔案不是rar檔案_【表哥有話說 第52期】.htaccess檔案使用

存在時,且内容與上相符時

archpr說檔案不是rar檔案_【表哥有話說 第52期】.htaccess檔案使用

pcre.backtrack_limit 與 pcre.jit的解釋在PHP手冊的PHP Manual›php.ini 配置›php.ini 配置選項清單

archpr說檔案不是rar檔案_【表哥有話說 第52期】.htaccess檔案使用

目的是讓正則的回溯設定為0,進而讓比對失效

也就是說第一步先上傳.htaccess,然後再上傳php檔案。

4、更多用法可以參考php手冊的php.ini 配置選項清單

archpr說檔案不是rar檔案_【表哥有話說 第52期】.htaccess檔案使用

在這裡說一下 這裡的可修改範圍

archpr說檔案不是rar檔案_【表哥有話說 第52期】.htaccess檔案使用

一般尋找可利用點就從 PHP_INI_ALL、PHP_INI_PERDIR中查找

參考資料

.htaccess 檔案使用手冊

https://c7sky.com/htaccess-guide.html

.htaccess詳解及.htaccess參數說明

https://blog.csdn.net/cmzhuang/article/details/53537591

最完的htaccess檔案用法收集整理

https://www.jb51.net/article/30445.htm

.htaccess rewrite 規則詳細說明

https://www.jb51.net/article/82158.htm

.htaccess檔案說明大全

https://htaccess.iapolo.com/htaccess-daquan.php

Apache中.htaccess檔案功能

https://www.jb51.net/article/27304.htm

htaccess百度百科

https://baike.baidu.com/item/htaccess/1645473?fr=aladdin#2

php.ini配置選項可修改範圍

http://blog.itpub.net/29753604/viewspace-134041

- END -

archpr說檔案不是rar檔案_【表哥有話說 第52期】.htaccess檔案使用

SKSEC掃碼關注,學習更多