给HTTPX增加url输入参数

  • A+
所属分类:安全文章
许多问题没有直接的答案,只有弯弯绕绕的方案


△△△点击上方“蓝字”关注我们了解更多精彩




0x00 Preface [前言/简介]

    httpx 是一个快速多线程、多用途的 HTTP 工具包,支持使用多种方式来探测http请求,最简单的使用是用来做url访问测试。


项目地址:
https://github.com/projectdiscovery/httpx
  
  很多大佬推荐过httpx,我用的时候发现httpx的开发者更喜欢linux哲学,所以没有给httpx添加一个-u参数用来指定输入url,而是使用了系统的stdin流来传递url参数,这样就很不好将httpx工具嵌入到其他的脚本中。也让我这个强迫症一直记着它。。。
  今天,就让我们来盘它


0x01 分析httpx.go
  根据httpx编译时候的主入口:cmdhttpx.go。发现其调用的是internalrunner文件夹下的配置用来进行参数解析,因此只要找到参数解析的函数,并增加一个url参数,再将传递的url参数数据转发给扫描函数即可。
给HTTPX增加url输入参数




0x02 分析参数输入
  简单查看发现internalrunner下options.go是提供参数解析的前置部分,只需要在其中type Options struct 中添加一个InputURI参数,func ParseOptions() 中添加一个对应的解析函数即可实现对应参数的增加。

给HTTPX增加url输入参数

参数的增加比较简单,复杂一点的在于如何将这个参数传递给函数。
查看runner.go,其func (runner *Runner) prepareInput() 函数是进行输入数据预处理,

给HTTPX增加url输入参数

这里首先判断是否输入一个存在的目标文件,否则就将读取系统输入os.Stdin作为参数进行输入。

所以,我们只需要在判断系统输入为空时,增加一个url参数的判断,当文件和系统输入都不存在时,读取url参数,并将这个参数转为一个类似os.Stdin系统输入对象,传递给已有分scanner(转为os.Stdin对象后不用修改后续任意代码,而是直接复用对os.Stdin的操作)
这里的难点在于如何将string字符串转换为一个能够被bufio.NewScanner用于输入的io.Reader对象。
经过百度发现可以使用 strings.NewReader函数实现该功能。
给HTTPX增加url输入参数





0x03 最终修改代码
internalrunnerrunner.go中的prepareInput函数(180行+)
func (runner *Runner) prepareInput() {  var (    finput  *os.File    scanner *bufio.Scanner    err     error  )  // check if file has been provided  if fileutil.FileExists(runner.options.InputFile) {    finput, err = os.Open(runner.options.InputFile)    if err != nil {      gologger.Fatalf("Could read input file '%s': %sn", runner.options.InputFile, err)    }    scanner = bufio.NewScanner(finput)  } else if fileutil.HasStdin() {    scanner = bufio.NewScanner(os.Stdin)  } else if runner.options.InputURI !="" {    //判断是否输入了-u参数     s := runner.options.InputURI    p := make([]byte, len(s))    url, err := strings.NewReader(s), p    if err != nil {      fmt.Println(err)    }    scanner = bufio.NewScanner(url)  }else {    gologger.Fatalf("No input provided")  }

internalrunneroptions.go中的Options结构体定义(52行+)
type Options struct {  CustomHeaders             customheader.CustomHeaders  CustomPorts               customport.CustomPorts  matchStatusCode           []int  matchContentLength        []int (省略一点点...)  InputURI                  string}

internalrunneroptions.go的ParseOptions函数(120行+)
func ParseOptions() *Options {  options := &Options{}    flag.IntVar(&options.Threads, "threads", 50, "Number of threads")  flag.IntVar(&options.Retries, "retries", 0, "Number of retries")  flag.IntVar(&options.Timeout, "timeout"5"Timeout in seconds")     (省略一点点...)  flag.StringVar(&options.InputURI, "u", "", "url containing domains")
  flag.Parse()  (省略一点点...)   return options}




0x0N 总结
明明只需要五分钟的事情,而我需要十分钟。
专业的事情果然还是需要专业的明明去做,大家平常要多认识一些明明呀。

NOVASEC公众号后台回复[酒零]获取修改后的项目地址,感谢大家的支持!
其他编译和使用和原项目完全相同。

END



如您有任何问题、建议、需求请后台留言NOVASEC公众号!


感谢大哥们的对NOVASEC的支持点赞和关注

加入我们与萌新一起成长吧!


给HTTPX增加url输入参数


如有任何问题、建议、合作、投稿请加NOVASEC-MOYU,以方便及时回复。



本文始发于微信公众号(NOVASEC):给HTTPX增加url输入参数

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: