Gogs는 GitHub와 유사한 오픈 소스 파일/코드 관리 시스템(Git 기반)입니다. Gogs의 목표는 셀프 서비스 Git 서비스를 구축하는 가장 간단하고 빠르며 쉬운 방법을 만드는 것입니다. Go 언어로 개발된 Gogs는 독립 실행형 바이너리로 배포될 수 있으며 Linux, Mac OS X, Windows 및 ARM 플랫폼을 포함하여 Go 언어가 지원하는 모든 플랫폼을 지원합니다.
gogs는 구축하기 쉬운 셀프 서비스 Git 서비스 플랫폼으로, 설치가 쉽고, 크로스 플랫폼이 가능하며, 사용자가 많습니다. 0.11.66 및 이전 버전(go-macaron/session 라이브러리)에서는 세션 ID를 확인하지 않습니다. 공격자는 악의적인 세션 ID를 사용하여 모든 파일을 읽고 파일 내용을 제어하여 세션 내용을 제어한 다음 로그인할 수 있습니다. 어떤 계정.
영향을 받는 버전은 다음과 같습니다:
Gogs 0.11.66 및 이전 버전
(1) ubuntu 가상 머신 docker를 사용하여 vulhub에서 gogs 환경 복제
(2 ) 다음 명령으로 Start gogs를 실행합니다. docker-compose up -d
(3) 환경이 시작된 후 http://192.168.49.103:3000/install을 방문하여 설치 페이지를 확인하세요. 설치 중에 sqlite 데이터베이스를 선택하고 등록 기능을 활성화합니다.
(4) Gob 직렬화를 사용하여 세션 파일 데이터를 생성합니다.
(5) 그런 다음 일반 사용자 계정을 등록하고 프로젝트를 생성한 후 새로 생성된 세션 파일을 "버전 릴리스" 페이지에 업로드합니다.
(6) 이 첨부 파일의 URL을 통해 이 파일의 파일 이름을 알 수 있습니다: ./attachments/2eb7f1a2-b5ec-482e-a297-15b625d24a10. 그런 다음 쿠키를 구성합니다: i_like_gogits=../attachments/2/e/2eb7f1a2-b5ec-482e-a297-15b625d24a10. 액세스한 후 id=1로 성공적으로 로그인한 사용자(예: 루트 관리자)를 찾을 수 있습니다
우선 각 사용자별로 웨어하우스를 생성하고, 릴리스 기능을 통해 제어 가능한 내용이 포함된 파일을 업로드하여 세션 파일을 위조할 수 있는 조건을 제공합니다.
를 통해 탐색 기능을 사용하면 많은 사용자의 창고를 찾을 수 있습니다. 사용자의 사용자 정보 페이지를 입력하면 사용자의 세션을 구성하는 데 필요한 모든 정보(uid, 사용자 이름)를 얻을 수 있습니다.
file.go를 통해. 위의 코드에서 우리는 세션 파일 콘텐츠가 P Niu가 작성한 세션 페이로드를 기반으로 Gob 인코딩이라는 것을 발견했습니다.
이로부터 세션을 생성할 수 있으며, 모든 사용자가 사용할 수 있는 릴리스 업로드 기능을 통해 위조된 세션을 서버에 업로드합니다.
gogs 및 release의 파일이 기본적으로 저장되는 디렉터리 구조는 attachments/fid[0]/fid[1]/fid입니다. 세션이 저장되는 디렉터리 구조는 session/sid[0]/sid[1]/sid입니다. 또한 세션 및 첨부 파일 폴더는 동일한 데이터 폴더에 저장됩니다.
gogs는 세션을 읽기 전에 세션을 분할하여 최종 경로로 구성하기 때문에 첨부 파일과 세션이 동일한 폴더에 있으므로 방금 업로드한 파일의 경로로 세션을 수정합니다. attachments /1/7/17f4120b-1a0d-416a-b0b0-def4342ded5b, 세션을 읽는 함수는 session/././../attachments/1/7/17f4120b-1a0d-416a-b0b0-def4342ded5b에 대한 경로를 구문 분석합니다. , 이는 우리가 업로드한 파일이 결국 모든 사용자의 로그인을 완료하게 됩니다.
Gogs는 개발 브랜치의 Github에서 다운로드하여 컴파일할 수 있습니다. 이 브랜치에서는 이 취약점이 수정되었거나 최신 버전의 Gogs로 업그레이드할 수 있습니다.
위 내용은 Gogs 임의 사용자 로그인 취약점 사례 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!