【漏洞复现】doctron path traversal

2022年7月11日 245点热度 0人点赞 0条评论

前提


声明:本文内容仅供学习交流,所有因传播利用文章内相关技术造成的不良后果均由使用者本人负责,与本公众号和文章作者无关。如需转载,请注明出处,未经作者允许不得随意删改本文内容。




漏洞信息

  • 漏洞类型:目录遍历

  • 漏洞版本:gitea prior to 0.2.0

  • 漏洞简介:未过滤的网络请求



repo介绍

doctron是一个提供html转pdf功能的服务器,目前已经有266个star



漏洞分析

doctron调用chromedp.Navigate发起url请求,没有对file://协议进行过滤,导致任意本地文件的读取

func (ins *html2pdf) Convert() ([]byte, error) {  start := time.Now()  defer func() {   ins.convertElapsed = time.Since(start)  }()  var params PDFParams  params, ok := ins.cc.Params.(PDFParams)  if !ok {   return nil, errors.New("wrong pdf params given")  }  ctx, cancel := chromedp.NewContext(ins.ctx)  defer cancel()   if err := chromedp.Run(ctx,   chromedp.Navigate(ins.cc.Url),   chromedp.Sleep(time.Duration(params.WaitingTime)*time.Millisecond),   chromedp.ActionFunc(func(ctx context.Context) error {    var err error    ins.buf, _, err = params.Do(ctx)    return err   }),  ); err != nil {   return nil, err  }   return ins.buf, nil }

修复方式

添加了一个CheckParams方法来验证url

图片

方法内容如下,对url的协议类型进行判断和过滤

func CheckParams(ctx iris.Context) {  webUrl := ctx.URLParam("url")          ...       u, err := url.Parse(webUrl)      ...   if u.Scheme != "http" && u.Scheme != "https" {   outputDTO := common.NewDefaultOutputDTO(nil)   outputDTO.Code = common.InvalidUrlScheme   _, _ = common.NewJsonOutput(ctx, outputDTO)   return  }   ctx.Next() }

图片

图片

参考链接

  • https://huntr.dev/bounties/c1952c59-c196-440d-b41f-ce137fb183a1/

END

图片
扫码关注我们
御 梦 而 生   如 鹿 归 林

29400【漏洞复现】doctron path traversal

这个人很懒,什么都没留下

文章评论