Web漏洞靶场搭建(OWASP Benchmark)

【摘要】 漏洞靶场,不仅可以帮助我们锻炼渗透测试能力、可以帮助我们分析漏洞形成机理、更可以学习如何修复提高代码能力,同时也可以帮助我们检测各种各样漏洞扫描器的效果。

# []()Web漏洞靶场搭建(OWASP Benchmark)

渗透测试切记纸上谈兵,学习渗透测试知识的过程中,我们通常需要一个包含漏洞的测试环境来进行训练。而在非授权情况下,对于网站进行渗透测试攻击,是触及法律法规的,所以我们常常需要自己搭建一个漏洞靶场,避免直接对公网非授权目标进行测试。\
漏洞靶场,不仅可以帮助我们锻炼渗透测试能力、可以帮助我们分析漏洞形成机理、更可以学习如何修复提高代码能力,同时也可以帮助我们检测各种各样漏洞扫描器的效果。

***

本次靶场选择 [OWASP Benchmark | OWASP Foundation]() 靶场。Owasp benchmark 旨在评估安全测试工具的能力(准确率、覆盖度、扫描速度等等),量化安全测试工具的扫描能力,从而更好得比较各个安全工具优缺点。

## []()测试用例

目前 v1.2 版本包含了近3000个漏洞,覆盖常见的SQL注入、命令注入、路径遍历、XSS,以及众多安全编码类的问题

![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/3b1c9f4426dd485683aecce1766b33b9~tplv-k3u1fbpfcp-zoom-1.image)

每个漏洞包含多种漏洞场景,对于命令注入来说,可以校验测试工具在:

-   多种注入位置:`param/data/form-data/json/mut/header/cookie/`
-   多种调用场景:`ProcessBuilder/RuntimeExec`
-   不同拼接方式:可控变量作为独立的命令拼接、仅作为`ls/echo` 的参数
-   复杂业务流程: `if/else/switch` 导致无法进入漏洞位置(假漏洞场景)\
    等等场景下的表现。

## []()评分标准

Benchmark 可以根据测试工具的扫描报告为测试工具进行评分。Benchmark靶场的所有漏洞信息储存在[BenchmarkJava/expectedresults-1.2.csv at master · OWASP-Benchmark/BenchmarkJava](https://github.com/OWASP-Benchmark/BenchmarkJava/blob/master/expectedresults-1.2.csv) ,此文件用于标识每个场景下的漏洞信息。Benchmark解析测试工具的扫描报告再与预期结果进行对比,从而为每个工具进行打分。\
对于测试工具来说,我们期望他能够

-   发现所有的真正是问题的漏洞 即 True Positive,TP指数,检出率尽可能高
-   能够忽略所有非问题的漏洞 即False Positive,FP指数,误报率尽可能低

Benchmark 将以TP,FP为坐标轴绘制一张图,当点越靠近左上方时,认为测试功能能力更优。

![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/3e73494194684f8da88a8cc41f6c4452~tplv-k3u1fbpfcp-zoom-1.image)

Benchmark最后得分参考约登指数给出,用以下公式计算分值,得分越靠近 11 表明测试工具能力越强。

Sensitivity+Specificity-1=TP+(1-FP)-1=TP-FPSensitivity+Specificity−1=TP+(1−FP)−1=TP−FP

## []()扫描报告解析

Benchmark目前支持大部分主流测试工具,详见 [OWASP Benchmark | OWASP Foundation]() 页面。\
当评估测试工具时,可以自行扩展 [OWASP-Benchmark/BenchmarkUtils: OWASP Benchmark Project Utilities - Provides scorecard generation and crawling tools for Benchmark style test suites.](https://github.com/OWASP-Benchmark/BenchmarkUtils) 中的 `org.owasp.benchmarkutils.score.parsers.Reader` 类

-   重写 `parse`方法:用于解析报告内容
-   重写`canRead` 方法:用于判断解析哪种报告文件

解析报告中的 `url/cwe` 等关键信息,实现自动打分。

### []()Demo

```
package org.owasp.benchmark.score.parsers;  
  
import org.dom4j.Document;  
import org.dom4j.Element;  
import org.dom4j.io.SAXReader;  
  
import java.io.File;  
import java.util.List;  
import java.util.regex.Matcher;  
import java.util.regex.Pattern;  
  
public class SecScanReader extends Reader {  
    private static final String NUMBER_PATTERN = "BenchmarkTest(\d+)";  
    private static Pattern pattern;  
  
    public SecScanReader() {  
        pattern = Pattern.compile(NUMBER_PATTERN);  
    }  

    public boolean canRead(ResultFile resultFile) {
        return resultFile.filename().endsWith(".xml") && resultFile.xmlRootNodeName().equals("XXXXXX");
    }

    public TestResults parse(File file) throws Exception {  
        TestResults tr = new TestResults("XXXXXX", true, TestResults.ToolType.DAST);  
        for (Object obj : issues) {  
            // .....
            TestCaseResult tcr = new TestCaseResult();  
            tcr.setCategory("XSS");  
            tcr.setCWE(cweLookup(13));
            tcr.setNumber(0001);
            tr.put(tcr);  
        }  
        return tr;  
    }  
  
    public static int cweLookup(String pluginId) {  
        switch (pluginId) {  
            default: return 0;  
        }  
    }  

}
```

### []()生成评分报告

```
$  mvn validate -Pbenchmarkscore -Dexec.args="expectedresults-1.2.csv results"
```

## []()部署运行

```
$ git clone https://github.com/OWASP-Benchmark/BenchmarkJava
$ cd benchmark
$ mvn compile   (This compiles it)
$ runRemoteAccessibleBenchmark.sh/.bat - This compiles and runs it.
```

`runRemoteAccessibleBenchmark` 脚本用于开启可被远程访问的Benchmark Web应用。

***

**Refernece**

-   [OWASP Benchmark | OWASP Foundation]()

你可能感兴趣的:(前端)