MCPcopy
hub / github.com/pingc0y/URLFinder / PathExtract

Function PathExtract

util/utils.go:283–348  ·  view source on GitHub ↗

提取fuzz的目录结构

(urls []string)

Source from the content-addressed store, hash-verified

281
282// 提取fuzz的目录结构
283func 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 {

Callers 1

fuzz2Function · 0.92

Calls 1

UniqueArrFunction · 0.85

Tested by

no test coverage detected