7주 차에서는 post-exploit에 대해 알아보았다
post-exploit 이란 쉘을 획득한 후 일어나는 모든 일들을 뜻한다. 즉 쉘을 통해 정보를 얻고 얻은 정보들을 통해 권한 상승 후 시스템 장악까지의 단계를 뜻한다고 볼 수 있다.
post-exploit 단계에서는 쉘을 이용한 여러 정보들을 수집하는 것이 중요한데
DB와 사용자의 홈 디렉터리, 그리고 /etc/passwd 등 을 위주로 찾아 보는 것이 좋다
Task1
이전의 exploit을 했던 머신을 사용하여 post-exploit 단계만 실습을 해보았다.
사용한 머신의 exploit 단계는 다음 링크에서 확인할 수 있다.
https://st-together.tistory.com/40 #Task 3번 문제
현재 웹쉘을 획득한 상태이지만 해당 웹쉘은 1회용 쉘로서 제대로 된 명령을 내리는 데에 어려움이 있다.
그러니 reverse shell을 다시 연결시켜 제대로 된 쉘을 사용해 보자
revshell.com에 접속하여 reverse shell을 사용해 보았다
revshell.com에 있는 여러 쉘코드를 넣어본 결과 socat 쉘코드를 통해 reverse shell이 성공한 것을 확인할 수 있다.
쉘을 원래의 모양대로 보이게 하기 위해 해당 명령어를 입력해 준다
python -c "import pty;pty.spawn('/bin/bash')"
기존의 쉘과 같은 모양이 된 것을 확인할 수 있다.
현재 계정의 이름은 www-data임을 알 수 있다.
www-data란 웹 서버 사용을 위한 최소한의 권한만 가진 계정이다
해당 계정일 경우 가장 우선시해야 하는 목표는 웹사이트의 db를 찾아 정보를 수집하는 것이다.
그 후 db를 통해 얻은 정보를 가지고 다른 사용자의 계정으로 옮겨 가며 root로 가는 방법을 찾아가야 한다.
먼저 db가 있을 만한 디렉터리를 찾아보자
많은 디렉터리를 다 들어가서 파일들을 전부 확인할 수도 있겠지만
우리는 find 명령에 db와 관련된 키워드를 넣어 해당되는 파일들만 확인해 보자
find . -name "*키워드*"
db와 관련된 키워드
1. db
2. database
3. sql
4. 등등...
키워드 : db
너무나 많은 파일들이 나와서 확인이 어렵기 때문에 다른 키워드들을 사용해 보고 안되면 다시 돌아와서 확인해 보자
키워드 : database
대부분의 파일들이 png로 끝나는 이미지 파일들이지만 마지막 한 줄에 database_settings 파일이 보인다
설정과 관련된 파일들은 대부분 중요할 확률이 높기에 해당 경로의 파일을 확인해 보자
db에 관련된 정보들을 찾았다
db의 id와 pw를 찾았으니 바로 접속을 해보자
성공적으로 접속을 하였다.
이제 사용 중인 db인 ona_onadb에 들어가 정보를 확인해 보자
ona_onadb 에는 많은 테이블이 있는 것을 확인할 수 있는데
우리는 다른 사용자의 계정으로 이동하는 것이 목적이니 계정에 관련된 테이블을 찾으면 된다
users 테이블을 확인해 보자
guest와 admin 유저가 있고 password 가 해시되어 저장되어 있는 것을 확인할 수 있다.
해당 비밀번호가 어떤 방법으로 해시되어 있는지 알고 있다면 다시 복호화가 가능할 것이다.
이때 사용하는 툴이 hash-identifier이다
해당 툴을 실행시키면 이러한 화면이 출력이 되는데
HASH : 부분에 db의 password를 입력해 주면
해당 해시는 MD5로 됐을 가능성이 높다고 알려준다
복호화를 위해 MD5 Decrpt 온라인 사이트에 접속하여 복호화를 해보았다.
admin이라는 password를 찾아내는 데 성공했다.
id와 pw를 알아냈으니 로그인을 해보자
로그인 성공 후 admin 계정으로 얻을 수 있는 다른 정보들을 찾아보자
해당 웹사이트에서 admin 계정을 이용하여 얻을 수 있는 유용한 정보는 없어 보였다
그럼 이제 www-data의 홈 디렉터리를 확인해 보자
여기서 .htpasswd 라는 파일을 확인할 수 있는데
.htpasswd 파일이란 일반적으로 Apache 웹 서버에서 사용되며 웹 리소스에 접근하려는 사용자의 이름과 암호가 저장되는 파일이다.
.htpasswd 파일을 확인해 보자
douglas라는 사용자와 그 사용자의 해시된 password를 확인할 수 있다
그리고 그 밑에 aefhrt 문자를 사용하여 10자리의 비밀번호로 만들었다는 설명을 확인할 수 있다.
먼저 해당 password가 어떤 방법으로 해시되었는지 hash-identifier를 사용하여 확인해 보자
해당 문자는 MD5로 해시되어 있는 것을 확인할 수 있다.
다시 MD5 Decrpt 온라인 사이트에 접속하여 복호화를 해보자
이번엔 복호화가 되지 않는다
그 이유는 온라인 사이트는 데이터베이스에 문자열들을 저장해 놓고 대조만 해보기 때문에
데이터베이스에 없는 문자열을 복호화에 시도하면 답을 찾을 수 없다
이때 사용할 수 있는 툴이 john the ripper라는 툴이다
john the ripper는 나올 수 있는 모든 값들을 대입해 보는 공격 (브루트 포스)을 통해 password를 찾아내는 도구이다.
우리는 password가 aefhrt 문자를 조합한 10자리인 문자열인 것을 알고 있으니 나올 수 있는 모든 문자열을 만든 다음
john the ripper를 사용해 password와 같은 문자열을 찾아내면 되는 것이다.
그럼 먼저 john the ripper를 사용하기 전 나올 수 있는 모든 문자열을 만들어 파일로 만들어 보자
crunch라는 도구를 사용하면 쉽게 많들 수 있다
crunch 사용법
crunch 10 10 aefhrt -o wordlist.txt
#crunch [최소 문자열 수] [최대 문자열 수] [나올 수 있는 문자] -o [저장될 파일 이름]
wordlist가 완성 됐으면 john을 사용하기 위한 아이디: 패스워드를 지정하는 파일을 하나 만들어 줘야 한다
아까 얻었던 정보인 douglas:$apr1$9fgG/hiM$BtsL9qpNHUlylaLxk81qY1 를 hash.txt 파일로 만들어 주었다
준비가 끝났으니 john the ripper를 사용해 보자
john the ripper 사용법
john --wordlist=wordlist.txt hash.txt
#john --wordlist=[wordlist 이름] [id:pw 파일 명]
실행이 끝나면 douglas의 password는 fatherrrrr 임을 알려준다
해당 아이디와 passwd로 ssh 로그인을 해보자
성공적으로 douglas 계정으로 들어왔다.
새로운 사용자의 계정으로 들어왔을 때 제일 먼저 확인해야 할 것은 sudo -l을 통해 다른 권한으로 가능한 명령어의 리스트
를 확인해야 한다
이 계정은 jen의 계정으로 cp명령어를 할 수 있다고 알려준다
또 다른 정보를 수집해 보자
홈 디렉터리에서 ls -al을 해보니 ssh에 대한 정보를 찾을 수 있었다.
해당 디렉터리에 들어가 보니 rsa 공개키와 비밀키를 확인할 수 있었는데
여기서 rsa란
비대칭키 암호화 방식으로서 공개 키와 개인 키라는 두 개의 키를 사용하여 데이터를 암, 복호화를 하는
알고리즘이다. 공개키는 누구나 알 수 있게 하며 개인 키를 이용해 인증을 하게 된다.
우리는 ssh 접속을 할 때 비밀번호 인증을 통해 접속을 하기도 하지만 ssh 개인키를 통해서 연결도 가능하다
ssh를 연결하려는 유저의 ~/.ssh/ 경로에 authorized_keys라는 이름으로 공개키가 저장되어 있다면
비밀키를 가지고 ssh 연결이 가능하다
우리는 비밀키를 가졌으니 공개키를 연결하고픈 유저의 홈 디렉터리에 전송만 한다면 ssh로 연결이 가능할 것이다
아까 sudo -l 명령어를 통해 jen 계정으로 cp가 가능하다 했으니 jen 유저의 홈 디렉터리에 공개키를 cp 해보자
/etc/passwd를 확인해 본 결과 jen의 홈 디렉터리는 /home/jen이다
sudo -u jen /bin/cp authorized_keys /home/jen/.ssh/
해당 명령어를 통해 jen의 홈 디렉터리에 공개키가 저장이 되었다
이제 비밀키를 사용해 ssh 접속을 해보자
ssh jen@[ip주소] -i [비밀키]
jen 계정에 로그인하는 데 성공했다.
로그인 후 pwd 명령을 하게 되면
mail이 왔다고 알리며 해당 경로를 알려준다.
해당 파일을 확인해 보자
되게 긴 메일을 확인할 수 있는데 여기서 중요한 부분은 이곳이다
moss의 passwd 가 Fire!Fire! 라는것을 알 수 있다.
moss의 계정으로 ssh 연결을 해보자
성공적으로 로그인하였다.
그 후 정보 수집을 위해 여러 파일들을 확인해 본 결과 ~/.games/ 경로에 root로 setuid가 걸린 upyourgame이라는 것을
찾을 수 있었다.
setuid 가 root로 지정이 되었다는 것은 root의 권한으로 사용한다는 뜻이기에 유용하게 사용이 가능할 수도 있다.
해당 게임을 실행해 보자
여러 질문에 대해 대답을 하고 나면 root권한을 얻을 수 있는 게임이었나 보다
이렇게 root 권한을 얻을 수 있게 되었다.
'Hacking > Hacking Beginner Class (normaltic)' 카테고리의 다른 글
[해킹 비기너 클래스] 8주차 정리 (metasploit) (0) | 2023.09.13 |
---|---|
[해킹 비기너 클래스] 7주차 Practice (Post-exploit Task 2) (0) | 2023.09.06 |
[해킹 비기너 클래스] 6주차 Practice (Task 5) (0) | 2023.08.30 |
[해킹 비기너 클래스] 6주차 Practice (Task 4) (0) | 2023.08.29 |
[해킹 비기너 클래스] 6주차 정리 (익스플로잇) (0) | 2023.08.23 |