Q. DB의 segfault 계정 비밀번호를 알아내보자!
먼저 tryhackme에서 제공한 vm머신이 어떤 서비스를 하는지 알기 위해 nmap을 통해 열려있는 포트를 확인했다.
nmap 결과 80번 포트가 열려 있는 것을 확인할 수 있고
웹사이트가 열려있음을 확인했기에 해당 사이트에 접속을 해보았다.
처음 웹사이트에 접속을 하면 이러한 인덱스 페이지를 볼 수 있다.
회원가입과 로그인을 끝내면 해당 페이지를 볼 수 있는데
게시판에 들어가 보면
글쓰기가 가능한 게시판이 보인다.
글쓰기 버튼을 눌러보면
제목과 내용 그리고 파일을 업로드할 수 있는 칸이 보인다.
우리는 Reverse Shell이 가능한 악성코드가 첨부된 파일을 올려 해킹을 해보려 한다.
먼저 Reverse Shell 악성코드가 필요한데 구글에 해당 서버언어의 Reverse Shell을 검색하면 바로 찾을 수 있다.
이 서버는 php로 작성되어 있는 것을 URL을 통해 확인할 수 있으니 php reverse shell을 검색하면 되는 것이다.
그럼 누군가 만들어둔 악성코드를 찾을 수 있고 해당 파일을 다운로드 후 약간의 수정 후 올리기만 하면 된다.
wget 명령어를 사용해 다운로드를 하면 쉽게 할 수 있다.
wget [경로] -O [저장할 이름]
이름은 webshell.php로 저장했다.
저장한 webshell.php를 수정하기 위해 vi 에디터로 열어주면
이러한 많은 코드들이 보이는데 우리가 찾아서 수정해줘야 하는 곳은 리스닝 ip와 포트번호이다.
ip와 port를 내 ip와 임의의 포트번호로 바꿔주면 된다.
포트번호는 웹사이트이기에 443으로 지정해 줬다.
수정이 된 파일을 첨부하여 글을 올려보자
create 버튼을 누르면 글이 성공적으로 올라간 것을 확인할 수 있다.
하지만 글을 올리기만 해서는 reverse shell이 작동되지 않는다
우리 글의 파일이 어느 디렉터리에 위치해 있는지 확인한 후 실행을 해줘야 reverse shell이 작동이 될 것이다
먼저 나의 글에 들어가 보자
들어가 보면 Download 버튼이 보이는데 해당 버튼을 오른쪽 클릭 후 경로를 복사하면
파일의 경로를 확인할 수 있다.
http://10.10.231.213/files/user1/webshell.php
해당 파일 경로를 URL 주소창에 입력해 주면 Shell이 성공적으로 연결된다.
Tip. 쉘이 성공적으로 연결이 된다면 먼저 쉘을 좀 더 보기 편하게 만들어 주는 게 좋다.
python3 -c "import pty;pty.spawn('/bin/bash')"
이제 쉘을 획득했으니 처음 목표인 DB의 비밀번호를 알아내야 한다.
대부분의 웹서버는 웹과 DB를 연결하는 과정을 한다.
우리는 DB를 연결하는 코드를 찾으면 비밀번호를 함께 알 수 있을 것이다.
먼저 그럼 리눅스에서 웹에 대한 정보를 저장하는 /var/www/html 경로에 가보자
상당히 많은 php 파일들을 볼 수 있는데 모든 파일들을 열어보며 DB와 연동하는 코드를 찾기에는 어려움이 많을 것이다.
이때 방법은 2가지 정도인 것 같다.
1. DB가 사용될법한 페이지의 코드를 열어보기
2. grep 명령어를 통해 segfault가 들어간 모든 명령줄 확인하기
1번 방법
사용자의 ID와 PW를 사용하거나 조회해야 하는 경우는 언제 생길까?
아마 로그인이나 회원가입할 때 자주 사용이 될 것이다.
그럼 우리는 위의 추측에 의해 login.php나 signup.php를 먼저 확인해 보면 된다.
login.php
signup.php
두 php 파일 모두 mysqli_connect() 함수를 사용하는 것을 확인할 수 있는데
해당 함수는 php파일에서 mysql 데이터베이스로 연결을 하기 위해 사용되는 함수이다들어가는 매개변수의 값은
mysqli_connect(호스트, 사용자명, 비밀번호, 데이터베이스명);
으로 지정되어 있다.
그러므로 우리는
$conn = mysqli_connect('localhost', 'segfault', 'youGotThis?', 'segFault_sqli');
해당 한 줄을 보고 segfault 계정의 비밀번호가 youGotThis? 인 것을 알 수 있다.
2번 방법
grep을 사용하기 위해선 패턴과 경로설정이 중요한데
패턴은 segfault로 정하였고 경로는 /var/www/html 디렉터리 안에 있는 모든 파일들로 정하였다.
grep -r segfault /var/www/html 2>/dev/null
*부가 설명
-r 옵션은 디렉터리 안에 있는 파일들까지 확인하기 위해 사용했다
2> /dev/null : 오류 문구들은 출력을 하지 않기 위해 사용했다
해당 명령어를 입력하게 되면
많은 명령줄들을 확인할 수 있다.
하지만 모든 명령어들이 다 mysqli_connect 함수를 사용하는 문장들이기에
위와 동일한 방법으로 비밀번호를 알아낼 수 있다.
'Hacking > Hacking Beginner Class (normaltic)' 카테고리의 다른 글
[해킹 비기너 클래스] 6주차 정리 (익스플로잇) (0) | 2023.08.23 |
---|---|
[해킹 비기너 클래스] 5주차 정리 (정보수집) (0) | 2023.08.17 |
[해킹 비기너 클래스] 4주차 정리 (웹서버와 웹쉘) (0) | 2023.08.11 |
[해킹 비기너 클래스] 3주차 Practice (0) | 2023.08.09 |
[해킹 비기너 클래스] 3주차 정리 (Shell, Shell 획득법) (0) | 2023.08.08 |