@@ -26,6 +26,7 @@ var endpointWordlist string
2626var 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" }
2727var 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" }
2828var 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
3031var 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 ("\n No 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
0 commit comments