본문 바로가기

보안지식/pentest

pentest 실습 (LazyAdmin) - Exploit 까지

안녕하세요! 제가 이태까지 pentest 실습을 ignite으로 했는데 지금 무슨 이유인지 몰라도 오류가 계속 나네요.

 

다른 사람 분들은 되시는지 모르겠지만.. 확실한 건 저는 안되네요! start machine 버튼이 있어야만 하는데 없어서

이런 문제점이 발생하는 것 같습니다.

 

그럼 다른 문제 풀면 되겠죠!

 

이걸 풀겁니다.

 

 

join room 하고 밑에 start machine을 합니다.

 

 

이게 있어야 되는데 없길래 당황했었어요

 

어쨌든 다시 정보 수집이랑 서비스 분석을 하고 Exploit 까지 해보겠습니다.

 

 

POST-Exploit은 다음 포스트에 올릴게요

 

start Machine 누르고 조금 기다리면 IP가 나올겁니다.

 

 

이 창은 무시해도 되요 X 눌러서 닫아요

 

IP주소 등장 저는 넉넉하게 1시간 추가했습니다.

 

 

1) 정보 수집

nmap -sV [IP주소]

 

오호..

 

22번 포트에 우분투의 OpenSSH 서비스를 이용하고 있네요.

그리고 80번 포트에 Apache httpd 2.4.18 버전을 이용하고 있네요! (이 아파치 버전은 오래된 거예요)

 

80번 포트는 웹 서버 포트 번호이니 한 번 들어가 보겠습니다.

 

 

음.. 아무 것도 개발 안된ㄷ 기본 페이지네요

 

 

그럼 그냥 넘어가진 말고요. 이 사이트에 어느 디렉터리가 있고 어느 파일이 있는지 찾아보겠습니다.

 

명령어 gobuster을 이용하겠습니다. 만약 없으시면 apt-get install gouster 하시면 돼요

 

 

gobuster dir -u http://10.10.231.48/ -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt

 

이 명령어는 특정 사이트에 txt 파일에 있는 단어들을 넣어봐서 디렉터리 또는 파일이 있나 없나 확인을 해줍니다.

 

-u 는 url을 뜻합니다. -u [찾을 IP또는 사이트명] 이렇게 쓰시면 되고요

-w 는 디렉터리와 파일 목록 찾을 때 단어들 혹은 참고할 파일입니다. -w [파일 위치] 이렇게 쓰시면 돼요

보통 파일 위치는 저기 적혀 있는 대로 /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt 이거 쓰시면 돼요.

 

등등 gobuster에는 많은 옵션들이 있어요. 따로 제가 정리하고 일단 여기까지만 알고 넘어갈게요.

 

 

 

찾다 보니 밑에 content라는 디렉터리가 있어요라고 알려 줬네요.

 

한 번 들어가 볼게요

 

오호,,

 

SweetRice라는 서비스가 있네요. 한 번 자세하게 코드를 봐보겠습니다.

 

뭔가.. 없네요

 

그저 글씨만 있지 버전 정보라던가 서비스의 버전이 없네요.

그럼 그냥 넘어가야 되겠죠..

 

이렇게 정보 수집으로 content에 SweetRice라는 서비스가 있다는 것을 알 수 있었습니다.

 

 

2. 서비스 분석

 

이제 취약점을 찾을 겁니다.

 

웹 사이트나 exploit db 들어가서 해도 되지만 저는 그냥 searchsploit을 이용하겠습니다.

 

searchsploit sweetrice

 

오.. 꽤나 많은 버젼이 있네요

 

이래서 버전 정보를 알면 좋은 점이 0.5.3 이면 맨 처음의 코드을 이용하면 되는데

버젼 정보를 모르니 최악인 경우 될 때까지 전부 사용을 해야 합니다.

 

 

각 취약점 이름이 있는데 정리해드리겠습니다.

 

Remote File Inclusion : 클라이언트가 악성 파일을 포함해 애플리케이션을 실행할 수 있습니다. 이를 이용해 다른 서버의 악성 코드를 서버에 넣어서 실행시켜 서버를 마비 혹은 정보를 빼올 수 있습니다.

 

Multiple Vulnerabilities : 취약점이 하나가 아닌 여러 취약점들이 있는 경우입니다. XSS부터 시작해 SQLi, RCE, 등이 있는 경우입니다.

 

Arbitrary File Download : 다운로드를 아무거나 가능한 경우입니다. 경로를 통해 다운로드가 가능해서 ../../ 처럼 상위 폴더의 파일들을 가져올 수 있습니다.

 

Arbitrary File Upload : 악의적인 php코드 혹은 코드를 서버에 올릴 수 있는 취약점입니다. 이를 통해 웹 쉘을 이용해 해킹이 가능합니다

 

Backup Disclosure : 서버의 백업 파일을 볼 수 있는 취약점입니다. 이 백업 파일을 이용해 쉽게 코드을 가져와 볼 수 있습니다.

 

Cross-site Request Forge : CSRF 공격으로 사용자의 의도와는 상관없이 공격자의 의도대로 특정 동작이 실행되는 취약점입니다.

 

'FCKeditor' Arbitrary : 웹 기반 텍스트 편집기로 임의의 파일 업로드 취약점을 말합니다. FCKeditor이 파일 업로드 하는 과정에서 발생하는 취약점입니다.

 

 

 

일단 저는 1.5.1 버전이라 믿고 Backup Disclosure 취약점을 실행하겠습니다.

 

우선 Path에 있는 경로에 txt 파일이 뭘 말하는지 봐보겠습니다.

 

Path 경로는 거의 정해져 있습니다.

 

/usr/share/exploitdb/exploits/[방금 본 path]  이러합니다.

한 번 봐볼게요

 

cat /usr/share/exploitdb/exploits/php/webapps/40718.txt

 

오..

 

저기 보시면 You can access to all ~~ 에 inc 라는 디렉터리가 있다고 알려주네요.

 

와!

 

이렇게 모든 파일을 볼 수 있네요. php 파일은 웹 상에서 보기 힘들다는 건 아실 거예요.

php 코드가 바깥으로 안 보이게 했으니깐요.

 

근데 저기 아래에 lastest.txt을 눌러볼게요

 

아하..

 

1.5.1 버전이라는 것을 알려주네요.

 

sweetrice 1.5.1이라는 것을 알 수 있네요.

 

그리고 방금 보신 Arbitrary File Upload 취약점을 이용해 보겠습니다. 파일 업로드 공격만 하면 바로 끝나지는 겁니다.

 

 

파일 업로드

 

파이썬 코드 실행하면 파일 업로드 공격이 가능한 코드가 실행되겠죠.

 

python /usr/share/exploitdb/exploits/php/webapps/40716.py

 

url 작성하라니 작성하고.. 보니..

 

 

id?

 

계정이 필요하네요..! 저희는 계정을 모르고 가입도 안되니깐 공격이 안 통하겠네요.

다시 말하면 계정을 알면 이 공격이 통하겠죠?

 

일단 이 코드 실행 중지 (ctrl + c) 하고 다시 inc 파일에 뭐가 있나 찾아보겠습니다

 

! mysql?

 

mysql은 db인데 backup 파일이 있네요? 안에 계정 정보가 있을 확률이 크겠죠!

들어가 보겠습니다.

 

오호

 

sql 파일을 다운하고 봐보겠습니다.

 

꽤나 많지만..

 

ctrl+f 눌러서 pass 입력해 찾아보겠습니다.

 

passwd 이 있네요

 

옆에 42f74... 이게 비밀번호겠네요  그리고 오른쪽을 보면 

 

manager

 

admin의 ID가 manager 이라는 것을 알 수 있습니다.

 

일단 정리하겠습니다.

 

ID : manager

PW : 42f749ade7f9e195bf475f37a44cafcb

 

따로 파일에 저장을 하겠습니다. vi info 해서 작성 후 저장 그리고 언제든지 cat 문으로 확인 가능하게

하겠습니다.

 

이렇게요

 

정말로 비밀번호가 저거 일 수도 있으니 한 번 실행해보겠습니다.

 

리버스 쉘을 올리겠습니다.

 

리버스 쉘은 서버에 코드를 넣어서 공격자가 원격으로 조종 가능하게 해주는 쉘입니다.

 

일단 대충 hello 적어서 넣어 볼게요.

 

hello?

 

이렇게 vi로 작성 후 올리겠습니다.

 

fileName에 친절하게 어느 파일 형식을 써야만 하는지 알려줘요 그러니 그중 하나 골라서 하시면 됩니다.

php5을 추천드려요!

 

아..

 

패스워드가 틀리다고 안된다네요...

 

하긴.. 누가 저렇게 패스워드를 적겠어요. 아마 해시된 패스원드 일 겁니다.

hash된 패스워드를 원래 데이터로 복구시키는 명령어가 있습니다.

 

존더리퍼을 이용하겠습니다.

 

일단 어느 해쉬 알고리즘을 이용했는지 알아내겠습니다.

 

hashid [해쉬된 비밀번호]

 

이런 해쉬 id 일 겁니다!

 

가능성이 많은 비밀번호가 많네요. 근데 시중에 가장 많이 이용되는 해쉬id는 MD5입니다.

 

MD5을 이용해 한 번 해쉬 된 비밀번호를 찾아보겠습니다.

 

일단 제가 저장한 ID와 PW을 이렇게 수정하겠습니다.

 

vi info

 

왜냐하면 존더리퍼가 파악할 수 있는 ID와 PW 형식이 저렇게 ID:PW 작성해야만 인식을 합니다.

 

 

그리고 실행하겠습니다.

john --wordlist=/usr/share/wordlists/rockyou.txt --format=Raw-MD5 [방금 저장한 ID랑 PW 파일 위치]

 

아하!

 

Password123 이라고 알려주네요.

 

한 번 되나 해보겠습니다.

 

되네요!

 

이렇게 서비스 분석을 해 취약점 통하게 했습니다.

 

 

 

3. Exploit (공격)

 

이제 본격적으로 공격을 하겠습니다. 파일업로드가 아무거나 된다고 하니 리버스 쉘을 올리면 시스템을 장악할 수 있겠죠?

구글에 리버스 쉘 검색해서 유명한걸 가져오겠습니다.

 

 

 

 

 

 

Raw 클릭하시면 다운 가능한 링크 생성할 수 있습니다.

 

 

https://raw.githubusercontent.com/pentestmonkey/php-reverse-shell/master/php-reverse-shell.php

 

이게 그 raw 눌러서 생긴 링크에요. 행여나 말씀드리자면 Raw 누르시고 위에 URL 링크가 다운로드 링크입니다.

 

 

이제 wget 이용해 다운로드 하겠습니다.

 

 

좋아요!

 

 

그리고 이 파일 이름 좀 길어서 바꾸겠습니다.

 

저는 이렇게 revers.php5로 바꿨습니다.

 

그리고 안에 코드를 약간 수정을 해야합니다. IP가 공격자의 IP로 바꿔야 되니깐요

vi revers.php5

 

 

바꾸라고 말하네요 이 문은 중간쯤에 있어요

 

 

ip에 제 vpn IP인 10.18.18.145 넣고 포트 번호는 7777로 하겠습니다.

 

 

이렇게요

 

그럼 이 파일을 가지고 있는 컴퓨터가 실행하면 제 ip로 포트번호 7777번으로 가만히 있기만 하면 연결이 되겠네요!

 

그리고 다시 파일을 업로드 해보겠습니다.

 

올라갔네요!

 

그리고 웹 사이트로 확인해보곘습니다. 저 링크을 복사해서 봐보겠습니다.

 

저장은 잘 되어 있네요!

 

 

이제 포트 번호 7777을 열고 기다려 보겠습니다.

 

nc -nlvp 7777 작성하고 기다리면 됩니다.

 

 

닫으시면 안되요!

 

그리고 웹 사이트에 있는 revers.php5을 클릭해 실행해 보겠습니다.

 

그럼?

 

쨘!

 

저희는 쉘을 받아올 수 있다는 것을 알 수 있습니다.

 

이렇게 해서 exploit을 성공했습니다!

끝은 아니죠. 아직 저희는 관리자 권한을 탈취하지 못했습니다.

.

.

.

.

.

너무 포스트가 길어서 다음 포스팅에 Post-Exploit을 하겠습니다.