我目前正处于第一个带薪实习期,我的任务之一是检查我们的部分 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/