提取fuzz的目录结构
(urls []string)
| 281 | |
| 282 | // 提取fuzz的目录结构 |
| 283 | func PathExtract(urls []string) ([]string, []string) { |
| 284 | var catalogues []string |
| 285 | var targets []string |
| 286 | if len(urls) == 0 { |
| 287 | return nil, nil |
| 288 | } |
| 289 | par, _ := url.Parse(urls[0]) |
| 290 | host := par.Scheme + "://" + par.Host |
| 291 | for _, v := range urls { |
| 292 | parse, _ := url.Parse(v) |
| 293 | catalogue := regexp.MustCompile("([^/]+?)/").FindAllStringSubmatch(parse.Path, -1) |
| 294 | if !strings.HasSuffix(parse.Path, "/") { |
| 295 | target := regexp.MustCompile(".*/([^/]+)").FindAllStringSubmatch(parse.Path, -1) |
| 296 | if len(target) > 0 { |
| 297 | targets = append(targets, target[0][1]) |
| 298 | } |
| 299 | } |
| 300 | for _, v := range catalogue { |
| 301 | if !strings.Contains(v[1], "..") { |
| 302 | catalogues = append(catalogues, v[1]) |
| 303 | } |
| 304 | } |
| 305 | |
| 306 | } |
| 307 | targets = append(targets, "upload") |
| 308 | catalogues = UniqueArr(catalogues) |
| 309 | targets = UniqueArr(targets) |
| 310 | url1 := catalogues |
| 311 | url2 := []string{} |
| 312 | url3 := []string{} |
| 313 | var path []string |
| 314 | for _, v1 := range url1 { |
| 315 | for _, v2 := range url1 { |
| 316 | if !strings.Contains(v2, v1) { |
| 317 | url2 = append(url2, "/"+v2+"/"+v1) |
| 318 | } |
| 319 | } |
| 320 | } |
| 321 | if cmd.Z == 3 { |
| 322 | for _, v1 := range url1 { |
| 323 | for _, v3 := range url2 { |
| 324 | if !strings.Contains(v3, v1) { |
| 325 | url3 = append(url3, v3+"/"+v1) |
| 326 | } |
| 327 | } |
| 328 | } |
| 329 | } |
| 330 | for i := range url1 { |
| 331 | url1[i] = "/" + url1[i] |
| 332 | } |
| 333 | if cmd.Z == 3 { |
| 334 | path = make([]string, len(url1)+len(url2)+len(url3)) |
| 335 | } else { |
| 336 | path = make([]string, len(url1)+len(url2)) |
| 337 | } |
| 338 | copy(path, url1) |
| 339 | copy(path[len(url1):], url2) |
| 340 | if cmd.Z == 3 { |