Skip to content

Commit baf4ef6

Browse files
committed
Added prioritized list of endpoints for the brute command and fixed base path handling for v2
1 parent 8e2e5fb commit baf4ef6

File tree

3 files changed

+26
-12
lines changed

3 files changed

+26
-12
lines changed

cmd/brute.go

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ var endpointWordlist string
2626
var prefixDirs []string = []string{"", "/swagger", "/swagger/docs", "/swagger/latest", "/swagger/v1", "/swagger/v2", "/swagger/v3", "/swagger/static", "/swagger/ui", "/swagger-ui", "/api-docs", "/api-docs/v1", "/api-docs/v2", "/apidocs", "/api", "/api/v1", "/api/v2", "/api/v3", "/v1", "/v2", "/v3", "/doc", "/docs", "/docs/swagger", "/docs/swagger/v1", "/docs/swagger/v2", "/docs/swagger-ui", "/docs/swagger-ui/v1", "/docs/swagger-ui/v2", "/docs/v1", "/docs/v2", "/docs/v3", "/public", "/redoc"}
2727
var jsonEndpoints []string = []string{"", "/index", "/swagger", "/swagger-ui", "/swagger-resources", "/swagger-config", "/openapi", "/api", "/api-docs", "/apidocs", "/v1", "/v2", "/v3", "/doc", "/docs", "/apispec", "/apispec_1", "/api-merged"}
2828
var javascriptEndpoints []string = []string{"/swagger-ui-init", "/swagger-ui-bundle", "/swagger-ui-standalone-preset", "/swagger-ui", "/swagger-ui.min", "/swagger-ui-es-bundle-core", "/swagger-ui-es-bundle", "/swagger-ui-standalone-preset", "/swagger-ui-layout", "/swagger-ui-plugins"}
29+
var priorityURLs []string = []string{"/swagger.json", "/openapi.json", "/api-docs", "/swagger", "/docs", "/api/swagger.json", "/api/openapi.json", "/api-docs/swagger.json", "/api/schema/", "/webjars/swagger-ui/index.html", "/API/swagger/ui/index", "/swagger/ui/index", "/v2/swagger.json", "/v2/openapi.json", "/v2/api-docs", "/v3/api-docs", "/v3/openapi.json", "/public/api-merged.json", "/analytics/v1/swagger", "/api.json", "/api/4.0/swagger.json", "/api/api-doc/openapi.json", "/api/api-doc/openapi.yaml", "/api/doc.json", "/api/docs.json", "/api/swagger", "/api/swagger/ui/index", "/api/v1/swagger", "/api/v2/api-docs", "/api/v2/openapi.json", "/api/v2/swagger.json", "/api/v3/api-docs", "/api/v3/apispec", "/api/workorder/openapi.json", "/apidocs", "/audiences/v1/swagger", "/audittrail/v1/swagger", "/certification/v1/swagger", "/citrixapi/store/swagger.json", "/conferencetool/v1/swagger", "/course/v1/swagger", "/dcl_swagger.yaml", "/doc/doc.json", "/doc/swagger.json", "/docs/swagger.json", "/docs/v1/swagger.json", "/ecommerce/v1/swagger", "/enrollment/v1/swagger", "/externalids/v1/swagger", "/impact/v1/swagger", "/learn/v1/swagger", "/learningplan/v1/swagger", "/manage/v1/swagger", "/management/info", "/marketplace/v1/swagger", "/messenger/v1/swagger", "/notifications/v1/swagger", "/openapi", "/openapi/spec.json", "/otj/v1/swagger", "/pages/v1/swagger", "/poweruser/v1/swagger", "/proctoring/v1/swagger", "/report/v1/swagger", "/swagger-ui/index.html", "/swagger-ui/openapi.json", "/swagger.yaml", "/swagger/0.1.0/swagger.json", "/swagger/doc.json", "/swagger/latest/swagger.json", "/swagger/swagger.json", "/swagger/test/swagger.json", "/swagger/ui/index.html", "/swagger/v1/openapiv2.json", "/swagger/v1/swagger.json", "/swagger/v2/swagger.json", "/swagger/v4/swagger.json", "/v1/openapi.json", "/v1/swagger", "/v1/swagger.json", "/swagger/docs/v1", "/swagger/docs/v1.json", "/Api/swagger/docs/v1", "/swagger/v1/swagger.json", "/api/api-docs/swagger.json", "/api/docs/", "/api/docs", "/swagger-ui"}
2930

3031
var bruteCmd = &cobra.Command{
3132
Use: "brute",
@@ -54,10 +55,11 @@ var bruteCmd = &cobra.Command{
5455
}
5556
target := u.Scheme + "://" + u.Host
5657
if endpointWordlist == "" {
57-
allURLs = append(allURLs, makeURLs(target, jsonEndpoints, "")...)
58-
allURLs = append(allURLs, makeURLs(target, javascriptEndpoints, ".js")...)
59-
allURLs = append(allURLs, makeURLs(target, jsonEndpoints, ".json")...)
60-
allURLs = append(allURLs, makeURLs(target, jsonEndpoints, "/")...)
58+
allURLs = append(allURLs, makeURLs(target, priorityURLs, "", true)...)
59+
allURLs = append(allURLs, makeURLs(target, jsonEndpoints, "", false)...)
60+
allURLs = append(allURLs, makeURLs(target, javascriptEndpoints, ".js", false)...)
61+
allURLs = append(allURLs, makeURLs(target, jsonEndpoints, ".json", false)...)
62+
allURLs = append(allURLs, makeURLs(target, jsonEndpoints, "/", false)...)
6163
} else {
6264
endpointList, err := os.Open(endpointWordlist)
6365
if err != nil {
@@ -114,21 +116,31 @@ var bruteCmd = &cobra.Command{
114116
}
115117
// TODO: Check if (future implementation) automate flag is true and if so than call the 'sj automate' command with the discovered definition file.
116118
} else {
117-
log.Errorf("No definition file found for:\t%s\n", swaggerURL)
119+
log.Errorf("\nNo definition file found for:\t%s\n", swaggerURL)
118120
}
119121
},
120122
}
121123

122-
func makeURLs(target string, endpoints []string, fileExtension string) []string {
124+
func makeURLs(target string, endpoints []string, fileExtension string, skipPrefix bool) []string {
123125
urls := []string{}
124-
for _, dir := range prefixDirs {
126+
if !skipPrefix {
127+
for _, dir := range prefixDirs {
128+
for _, endpoint := range endpoints {
129+
if dir == "" && endpoint == "" {
130+
continue
131+
}
132+
targetURL := target + dir + endpoint + fileExtension
133+
urls = append(urls, targetURL)
134+
135+
}
136+
}
137+
} else {
125138
for _, endpoint := range endpoints {
126-
if dir == "" && endpoint == "" {
139+
if endpoint == "" {
127140
continue
128141
}
129-
targetURL := target + dir + endpoint + fileExtension
142+
targetURL := target + endpoint + fileExtension
130143
urls = append(urls, targetURL)
131-
132144
}
133145
}
134146
return urls

cmd/root.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ $ sj convert -u https://petstore.swagger.io/v2/swagger.json -o openapi.json`,
4949
log.Error("Command not specified. See the --help flag for usage.")
5050
}
5151
},
52-
Version: "2.0.4",
52+
Version: "2.1.0",
5353
}
5454

5555
func Execute() {

cmd/utils.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,9 @@ func GenerateRequests(bodyBytes []byte, client http.Client) {
6262
// Swagger (v2)
6363
host, _ := spec["host"].(string)
6464
bp, _ := spec["basePath"].(string)
65-
if bp != "" {
65+
if bp == "/" {
66+
basePath = ""
67+
} else if bp != "" {
6668
basePath = bp
6769
}
6870

0 commit comments

Comments
 (0)