1

我目前正在对一个 Web 应用程序进行渗透测试,并遇到了一个有趣的现象。在我的测试过程中,我使用代理收集了 URL。现在我想测试我的 URL 列表是否可以匿名访问,所以我写了这个小工具

    public static void main(String[] args) {
    try {
        TrustAllCerts.disableCertChecks();
        FileReader fr = new FileReader(new File("urls.txt"));
        BufferedReader br = new BufferedReader(fr);

        String urlStr = br.readLine();
        while (urlStr != null) {
            if (urlStr.trim().length() > 0) {
                URL url = new URL(urlStr);

                HttpsURLConnection urlc = (HttpsURLConnection) url.openConnection();
                urlc.connect();
                if (urlc.getResponseCode() == HttpURLConnection.HTTP_OK) {
                    System.out.println(urlStr);

                } else {
                    System.out.println("["+urlc.getResponseCode()+"] "+urlStr);
                }
                urlc.disconnect();
            }
            urlStr = br.readLine();
        }
        br.close();

    } catch (Exception e) {
        e.printStackTrace();
    }
}

它基本上什么都不做,只是在给定的 URL 上打开一个 URL 连接并测试 HTTP 响应代码(实际上我实现了更多测试,如果我被重定向到登录页面)。然而,问题是,这个特定的应用程序(一些自定义的 MS SQL Server 报告服务)被配置为使用 NTLM WWW 身份验证。如果我尝试使用 Firefox 访问某些 URL,我会得到 401 Unauthorized + login dlg。Internet Exploder 在后台执行 NTLM 身份验证并授予访问权限。似乎 Java URLConnection(或 URL)类也是如此,因为我没有收到 401。有没有办法在 Java 中禁用隐式 NTLM 身份验证?这对我来说是一个糟糕的陷阱。

4

2 回答 2

1

我认为Java 网络文档是最好的资源。设置http.auth.preference="basic"应该得到你想要的。假设您不需要摘要或其他东西。我不确定您是否可以超越这一点来禁用 NTLM。

要考虑的另一件事是其他 Java HTTP 客户端实现,例如 Apache 或 Google 的。

于 2012-05-25T08:11:34.400 回答
0

我不确定这会有所帮助,但我被相反的情况难住了。

希望进行 NTLM 身份验证,所以在我的本地机器上我使用了一个名为 CNTLM 的免费应用程序。它是一个本地代理服务器,将转发(和 NT 身份验证)传入请求。适用于不能使用 NTLM 代理的应用程序。

对不起,我知道这不能回答你的问题,但也许它对那里的人有帮助!:)

于 2012-05-25T08:15:06.970 回答