java - CSRFTester 不生成 html 文件

标签 java security web-applications csrf csrf-protection

我目前正处于第一个带薪实习期,我的任务之一是检查我们的部分 Web 应用程序是否存在 CSRF 漏洞。

我使用过 OWASP 和许多其他安全站点推荐的 CSRFTester。 我已经能够捕获数据并使用我们的 Web 应用程序之一的脚本“生成 HTML”文件。

但是,当对我们拥有的其他 Web 应用程序(已实现防伪 token )执行相同测试时,CSRFTester 不会生成 html 文件。

控制台输出是我在下面发布的内容。

我的问题是我是否无法生成 html,因为防伪 token 正在工作?或者是因为我遗漏了其他东西?

Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException:
 1
        at org.owasp.csrftester.report.ReportAdapter.getParametersAsHtmlInput(Re
portAdapter.java:74)
        at org.owasp.csrftester.report.ReportAdapter.getParametersAsHtmlInput(Re
portAdapter.java:41)
        at org.owasp.csrftester.report.FormsReport.getFormHtml(FormsReport.java:
55)
        at org.owasp.csrftester.report.FormsReport.generateHtml(FormsReport.java
:31)
        at org.owasp.csrftester.CSRFTesterUI.testButtonActionPerformed(CSRFTeste
rUI.java:772)
        at org.owasp.csrftester.CSRFTesterUI.access$14(CSRFTesterUI.java:751)
        at org.owasp.csrftester.CSRFTesterUI$15.actionPerformed(CSRFTesterUI.jav
a:319)
        at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
        at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
        at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
        at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
        at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
        at java.awt.Component.processMouseEvent(Unknown Source)
        at javax.swing.JComponent.processMouseEvent(Unknown Source)
        at java.awt.Component.processEvent(Unknown Source)
        at java.awt.Container.processEvent(Unknown Source)
        at java.awt.Component.dispatchEventImpl(Unknown Source)
        at java.awt.Container.dispatchEventImpl(Unknown Source)
        at java.awt.Component.dispatchEvent(Unknown Source)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
        at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
        at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
        at java.awt.Container.dispatchEventImpl(Unknown Source)
        at java.awt.Window.dispatchEventImpl(Unknown Source)
        at java.awt.Component.dispatchEvent(Unknown Source)
        at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
        at java.awt.EventQueue.access$500(Unknown Source)
        at java.awt.EventQueue$3.run(Unknown Source)

最佳答案

在我看来,这就像 CSRFTester 中的一个错误。

我找不到源 .java 文件,但我们可以从该项目的 Google Code Archive JD 反编译 .class 文件(例如使用 here) 。

不幸的是,行号不匹配,但它可能在 pair[0] 之一中失败,parts[i].split("=")[1 ],或类似的未经检查的数组索引调用:

protected String getParametersAsHtmlInput(CSRFTesterModel model, int row,
  boolean isString) {
  String s = model.getParameters(row);
  String[] parts = s.split("&");
  StringBuffer sb = new StringBuffer();
  if ((s == null) || (s.length() == 0)) {
    if (isString) {
      sb.append("'<input type=\"hidden\" name=\"name\" value=\"value\"/>' \r\n");
    } else {
      sb.append("<input type=\"hidden\" name=\"name\" value=\"value\"/> \r\n");
    }
  }
  else if (parts.length == 1) {
    String[] pair = parts[0].split("=");
    if (isString) {
      sb.append("'<input type=\"hidden\" name=\"" + pair[0] 
        + "\" value=\"" + pair[1] + "\"/>' \r\n");
    } else {
      sb.append("<input type=\"hidden\" name=\"" + pair[0] 
        + "\" value=\"" + pair[1] + "\"/> \r\n");
    }
  }
  else {
    for (int i = 0; i < parts.length; i++) {
      String name = parts[i].split("=")[0];
      String value = parts[i].split("=").length == 1 ? "" : parts[i].split("=")[1];
      if (isString) {
        sb.append("'<input type=\"hidden\" name=\"" + name 
          + "\" value=\"" + value + "\"/>'");
      } else {
        sb.append("<input type=\"hidden\" name=\"" + name 
          + "\" value=\"" + value + "\"/>");
      }
      if ((i + 1 < parts.length) && (isString)) {
        sb.append(" + \r\n");
      } else {
        sb.append("\r\n");
      }
    }
  }
  return sb.toString();
}

老实说,考虑到该项目页面的 wiki history,这个 OWASP 工具看起来有点被遗弃了。显示最后一次更新是在 2014 年 7 月,Google 代码是 on its way out 2015 年 3 月。

我希望能推荐一个更好的 CSRF 工具,但我从未使用过 CSRFTester 或任何其他 CSRF 测试应用程序。

关于java - CSRFTester 不生成 html 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35471397/

相关文章:

windows - 如何从客户端确定联合名称和 AD FS 颁发者 url 端点?

c# - 使用证书保护 IIS 中的 WCF 服务

php - 如何缓存动态 iPhone Web 应用程序以便离线工作?

java - RESTful MySQL/术语/传递参数/返回整数和 double

java - 为什么我的按钮没有出现在我的 JPanel 上 - Java

java - 更改 JFrame 的外观和感觉?

java - ShapeRenderer 不绘制在运行时添加的新线

PHP对GET参数的保护

perl - 我应该使用什么标准来评估 Perl "app server"(mod_perl 替换)?

php - 如何在浏览器窗口关闭时使 session 过期