如何获取网站的“真实”网址(在重写之前)

信息安全 阿帕奇
2021-08-29 18:34:59

如果一个站点使用 .htaccess 文件来重写 URL,例如更好的 SEO。是否有可能找出什么是“真实”的 URL?

2个回答

我不确定你的问题是什么。假设您有一个简单的重写规则,例如将内容重定向到http://www.example.com/old.html以下内容http://www.example.com/descriptive-directory/new.html

RewriteRule ^old.html$ http://www.example.com/descriptive-directory/new.html [R=301,L]

http://www.example.com然后用户的网络浏览器向fetch发送一个 GET http 请求old.html

GET /old.html HTTP/1.1
Host: www.example.com

Web 服务器在重写规则中捕捉到这一点,并从服务器发回一个 http 响应,如:

HTTP/1.1 301 Moved Permanently
Location: http://www.example.com/descriptive-directory/new.html

然后您的浏览器会获取任何内容,http://www.example.com/descriptive-directory/new.html就好像您最初输入了重写的 url。

那么你的问题是什么?您大概知道(并且可以轻松记录)您的浏览器在重写之前一直在请求的网址。至少您可以通过使用诸如wireshark 之类的工具跟踪TCP 流来捕获GET 请求。

您知道重定向规则最终将您发送到何处;例如,该位置现在显示在您的网络浏览器中。如果您可以从网络服务器端访问 apache 日志,您将看到如下内容:

127.0.0.1 - - [2/Feb/2012:12:36:17 -0400] "GET /old.html HTTP/1.0" 301 315 "-" "Mozilla/5.0"
127.0.0.1 - - [2/Feb/2012:12:36:17 -0400] "GET /descriptive-directory/new.html HTTP/1.0" 200 1702 "-" "Mozilla/5.0"

尽管您可以轻松地查看 apache 配置以找到实际的重写规则。


注意:这些都与内容在 Web 服务器上的存储位置无关。Web 服务器上可能没有调用的目录descriptive-directory调用的文件。Web 服务器可以获取来自请求的整个 http 响应,然后返回一个动态编写的 html 页面。例如,可以执行以下简单的webpy代码来充当 web 服务器,而无需任何 html 文件存在。new.htmlold.htmlhttp://www.example.com/descriptive-directory/new.html

# call this file silly_website.py
import web
urls = (
    '/descriptive-directory/new.html', 'new',
    )
class new(object):
    def GET(self):
        return "<html><head><title>Hello</title></head><body>World! from new</body></html>"

app = web.application(urls, globals())
if __name__ == '__main__': 
    app.run()

然后可以运行,python silly_website.py [your_ip]并且您有一个正在运行的网络服务器,它将返回一个非常简单的网页以请求/descriptive-directory/new.html. 因此,没有通用的方法可以找出从 Web 服务器返回的内容实际存储在 Web 服务器上的位置(即使与 Web 服务器的根目录相关)。

除非您知道重写规则,否则这是不可能的。在某些情况下,完全禁止直接访问“真实”文件。

除此之外,您可以尝试将DirBuster与自定义目录列表一起使用,例如从 seo 友好的 url 创建的列表。作为黑客,我们都知道如何编写代码,所以这很简单。