
Exploitation of CVE-2018-18925 a Remote Code Execution against the Git self hosted tool: Gogs.
CVE-2018-18925 악용: Git 자체 호스팅 도구 Gogs에 대한 원격 코드 실행.
Gogs는 Macaron 프레임워크를 기반으로 합니다. 세션 관리를 위해 사용되는 시스템은 PHP가 하는 방식과 매우 유사합니다. 쿠키의 세션 식별자는 파일 시스템의 파일에 매핑됩니다. 웹 서버가 (쿠키로) 세션 식별자가 포함된 요청을 받으면 파일 시스템에서 해당 파일을 찾습니다.
이 취약점은 파일 시스템에서 세션에 사용되는 파일을 검색할 때 발생하는 간단한 디렉토리 트래버설입니다. 예를 들어, i_like_gogits 쿠키를 ../../../../../../etc/passwd로 설정하면 서버에서 오류가 발생합니다.

세션 우회를 악용하려면 특별히 조작된 파일을 업로드할 방법이 필요하며, 그런 다음 이 파일을 세션 ID로 사용합니다. https://github.com/RyouYoo/CVE-2018-18925/blob/main/main.go를 사용하여 직접 조작된 세션 ID 파일을 생성할 수 있습니다.
go run main.go
로컬에서 리포지토리 복사본을 생성할 때 Gogs는 파일을 /data/gogs/data/tmp/local-repo/[REPO_ID]/[FILENAME]에 저장합니다 (이 리포지토리는 "파일 업로드" 기능을 사용할 때만 생성됩니다).

여기서 [FILENAME]은 업로드하는 파일의 이름이고, [REPO_ID]는 Fork 링크를 통해 찾을 수 있는 리포지토리 식별자입니다:

여기서 5는 리포지토리 ID입니다.
기본적으로 세션은 /data/gogs/data/sessions/에 저장됩니다. 따라서 세션 ID에 다음과 같은 상대 경로를 사용할 수 있습니다: ../tmp/local-repo/[REPO_ID]/[FILENAME]. i_like_gogits 쿠키에 이 경로를 사용하면 administrator로 로그인되어야 합니다.

RCE를 얻으려면 주어진 리포지토리에서 git 훅 기능을 사용하여 셸 스크립트를 실행할 수 있습니다.

pre-receive에 코드를 주입하세요:

그런 다음 git 또는 파일 생성 기능을 사용하여 푸시 요청을 보내 훅이 실행되도록 하세요.