-
Hack the Box - Updown 문제 풀이(write-up)OSCP/Hack The Box 2024. 8. 27. 09:23
이번 포스팅은 Updown이라는 박스의 문제를 풀어볼 것이다.
이 박스의 난이도는 medium으로 easy와는 난이도 차이가 한 단계 난다. 그러나 체감 난이도는 2단계 정도 up 된 느낌...
user 플래그를 찾는데에 시간이 대부분 소요됐고 root 플래그는 금방 찾을 수 있게 설계되었다.
Updown 문제 요약
-> 디렉터리 및 파일 브루트 포싱으로 숨겨진 dev 서브도메인 및 dev/.git 디렉터리 발견
-> .git 디렉터리에서 LFI 취약점, 파일 업로드 시 확장자 검증 취약점, Request Header replace 조작 취약점 발견
-> dev.siteisup.htb 에서 리버스 쉘 업로드
-> /home/developer/.ssh 접근하여 개인키 복사 후 로컬 PC에서 일반계정으로 ssh 접근
-> sudo -l 하여 루트 권한 실행 가능한 파일 발견
-> 권한 상승 가능한 python 파일 업로드 후 인스톨 하기
-> 루트 권한 획득
1. target ip : 10.10.11.177이며, 스캐닝 및 앞 선 포스팅의 간단한 작업은 생략하겠다. 디렉터리 및 파일 브루트 포싱 결과 /dev라는 디렉터리를 발견할 수 있다. 그러나 접근 시 하얀 화면만 뜨는 것을 볼 수 있다.

2. 그래서 /dev 라는 디렉터리를 다시 브루트포싱하여 다른 파일이나 디렉터리를 찾아보면 .git라는 저장소를 찾을 수 있을 것이다. .git를 웹 사이트에서 직접 접근하여 찾다 보면 나오는 정보가 없으므로 git_dumper.py를 이용하여 따로 디렉터리를 만들어 로컬 PC에서 확인해 보자.

3. "python3 git_dumper.py http://siteisup.htb/dev/.git/ ./website" 결과 ./website 폴더에 php파일들이 존재했던 것을 볼 수 있고 .htaccess 파일 내용까지 볼 수 있다. (github에서 git_dumper.py 다운로드하기)

4. .htaccess의 파일 내용은 Special-Dev라는 요청 헤더에 "only4dev" 값이 포함된 경우 접근을 할 수 있다는 뜻이다. 현재 접근이 되는 것으로 보아 서브도메인에서 적용되는 것으로 추측된다.

5. index.php 파일은 page라는 파라미터 값으로 get method를 통해 php파일 페이지를 불러오는 것을 볼 수 있는데 LFI 취약점을 이용한 공격에 취약해 보인다. (웹 쉘이나 리버스 쉘을 올리고 그걸 ?page를 통해 불러온다는 시나리오 적용)

6. checker.php 파일에는 제외되는 확장자 리스트들과 업로드되었을 때 md5(time())을 통해 디렉터리가 생성되고 tmp파일에 저장되며 5분 뒤에 cron으로 업로드된 파일이 자동 삭제되는 프로세스를 가지고 있다.

7. 서브도메인 브루트포싱을 한 결과 dev라는 값이 나왔고 dev.siteisup.htb에 접근하면 접근 권한 없음으로 뜬다. 이때 아까 찾은 request header 값으로 변경해 보자 (burpsuite 브라우저로 접근해야 됨)

8. 서브도메인을 통해 재접속 시도하면 파일 업로드 기능이 있는 개발자(?) 페이지가 접속된다.

9. 그냥 php과 같은 허용 금지된 확장자 파일을 올리게 되면 /uploads 에는 아무것도 올라오지 않게 된다. 그래서 zip으로 압축하고 압축파일 확장자를 다른 것으로 바꾸고 올리면 파일이 올라가는 것을 확인할 수 있다. (이 서버의 php 버전 및 정보를 알기 위해 php info 파일을 생성)


10. 하지만 압축이 된 파일은 웹 브라우저 상에서는 그냥 열 수가 없으므로 phar(php archive)로 압축 파일 안의 php를 실행할 수 있는 phar:// (stream wrapper) + get 방식으로 받고 있는 page 파라미터를 사용해 info.php를 실행시켜 보자. 그럼 php info가 뜨게 된다.
"dev.siteisup.htb/?page=phar://uploads/디렉터리이름(md5(time()))/info.0xdf/info"

11. burpsuite의 응답값을 파일로 복사하기를 누르면 phpinfo 파일을 다운로드할 수 있는데 이걸 bypasser.py를 이용하여 분석해 보면 proc_open이라고 결과가 나온다. proc는 php에서 외부 프로그램을 실행하기 위해 사용되는 함수인데 이걸 이용하여 리버스 쉘을 올릴 수 있을 것으로 확인된다.

12. 아래와 같이 리버스 쉘 파일을 만들고 똑같이 zip압축 및 파일이름 변경을 해주자. (ip는 자기 로컬 pc에 맞게 변경이 필요하다. 포트는 변경해도 무관)

13. 로컬 pc에서는 443 포트를 열고 대기를 하고 있고 파일을 올리고 아까와 같이 웹 애플리케이션에서 접근을 하면 www-data로 접속 성공을 한다.

14. 여기서 /home/developer/user.txt를 출력해 보면 접근 권한이 없어 거부된다. ls -al로 자세히 보니 root 소유에 group은 developer로 나온다.

15. setuid 설정이 된 파일이 있나 검색해 본다. "find / -perm /4000 -type f -exec ls -lda {} \; 2>dev>null" 그러면 siteisup이라는 파일이 나오게 된다.

16. siteisup의 파일 내용을 보면 깨져서 잘 보이지 않는다. 이때 "strings siteisup"으로 글자를 도출해 보면 같은 폴더에 있는 siteisup_test.py 도 나오게 된다.

17. siteisup_test.py를 출력해 보면 입력 값 검증 없이 결과를 출력해 주는 것을 볼 수 있다.

18. siteisup을 실행 후 Python의 __import__ 함수와 os 모듈을 사용하여 시스템 명령어를 실행할 수 있는 코드를 삽입한다. 그럼 사용자 계정이 developer로 바뀐 것을 볼 수 있다. 그러나 gid는 그대로 www-data 이므로 무엇인가 더 작업이 필요하다.

19. developer의 홈 디렉터리로 다시 돌아가서 .ssh 디렉터리를 보게 되면 ssh 접근을 위한 개인키가 rsa로 암호화되어있는 것을 확인할 수 있다. 이것을 base64 인코딩 후 출력 그리고 복사하여 로컬 pc에서 디코딩하여 ssh 접근을 시도해 보자.

20. base64 인코딩 후 한 줄 출력한 것을 복사하여 로컬 pc에 붙여 넣고 파일 만들기 및 디코딩하여 다시 저장 그리고 권한을 600으로 변경한다.


21. "ssh developer@siteisup.htb -i id_rsa"로 ssh 접근을 시도하면 드디어 완전한 developer 계정으로 접근을 하게 된다.

22. "sudo -l"로 루트 권한으로 실행 가능한 파일을 찾아보면 install 파일 하나를 찾을 수 있다. 패스워드 없이 사용할 수 있다고 나와있다. (gtfobins” (https://gtfobins.github.io/)를 통해 우회 데이터베이스에서 권한상승 자료 찾기 가능) 이 파일의 코드를 읽어보고 취약점을 찾아보자.

23. 아래 명령어를 통해 작업을 하게 되면 root 권한으로 접근이 가능하게 될 것이다.
"TF=$(mktemp -d)" // 임시 디렉터리 생성을 TF라는 변수에 넣음
"echo "import os; os.execl('/bin/sh', 'sh', '-c', 'sh <$(tty) >$(tty) 2>$(tty)')" > $TF/setup.py" // 쉘 코드 setup.py로 저장
"sudo easy_install $TF" // root 권한으로 TF 설치

'OSCP > Hack The Box' 카테고리의 다른 글
Hack the Box - Busqueda 문제 풀이(write-up) (0) 2024.08.22 Hack The Box 시작하기 (0) 2024.08.20