이제 내가 실습했던 기술들을 토대로 가상머신에서 침투테스트를 할 것이다!
https://pentesterlab.com/exercises/from_sqli_to_shell/attachments
PentesterLab: File Downloads for the lab From SQL Injection to Shell
This page contains the file downloads section for our exercise From SQL Injection to Shell, this allows people to download files for labs on code review and android reversing
pentesterlab.com
필자는 이곳에서 ISO 파일을 다운로드 받았다.
(가상머신 설정과 네트워크 설정은 생략)
가상 머신 다운로드랑 설정이 끝났다면 ip addr 명령어를 입력해서 최종 실습 웹 서버의 IP주소를 확인하자.
그 후에 칼리 리눅스에 저 IP 주소를 입력해서 접속이 되는지 확인해 보자.
이러면 성공적으로 환경구성이 끝났다.
이제 최종 실습을 해보자.
최종 실습
-최종 실습 목표-
웹 애플리케이션을 정보수집 단계부터 시작해서 여러 가지 배운 공격 단계 과정을 거친 후 최종적으로 쉘을 얻어내어 호스트로 침투해 보자.
우선 nikto를 이용하여 이 웹사이트에 대한 여러 정보를 확인해 보자.
nikto를 통해서 directory indexing이 가능하다는 것과 관리자로 로그인할 수 있는 페이지 정보 등을 확인하였다.
이제 burp suite를 켜고 웹 여려 곳을 둘러보면서 웹 매핑을 해보자.
이 과정을 통해서 관리자 페이지가 존재한다는 것을 확인했고 각각의 버튼을 눌렀을 때 웹 페이지의 내용이 바뀌지만 cat.php는 그대로이고 id 파라미터의 값이 1, 2, 3으로 다르게 변한다는 것을 확인하였다.
파라미터의 값이 변경되는 것을 파악했기에 SQL injection을 시도해 볼 것이다.
SQL Injection 시도
SQL injection 취약점이 있는지 확인하기 위해서 ' 를 추가해서 오류가 발생하는지 확인해 보자.
에러가 발생했다. 우린 여기서 SQL injection이 있을 가능성이 높다고 생각할 수 있다.
이제 sqlmap 도구를 사용해서 자세하게 분석해 보자.
sqlmap을 사용해 본 결과 id파라미터가 SQL injection 취약할 가능성이 있다고 알려주고 XSS 공격도 가능하다는 정보가 출력된다.
백엔드 DBMS는 MySQL이라는 정보까지 출력이 됐다.
그렇다면 웹에 스크립트를 삽입해서 출력되는지 확인해 보자.
스크립트를 삽입해 보니 SQL injection 취약점이 있다는 것을 발견했다.
이제 데이터베이스의 정보를 얻기 위해서 --current-db 옵션을 사용해서 데이터베이스 이름을 얻어보자.
현재 데이터베이스의 이름이 photoblog라는 것을 확인했다.
이제 photoblog라는 데이터베이스의 내용을 출력하기 위해서 dump옵션을 사용해 보자.
현재 데이터베이스인 photoblog를 dump 해보니 아래와 같은 데이터베이스 정보가 출력이 되었다.
이렇게 users 테이블과 관리자 계정 정보를 얻었다.
이제 획득한 아이디와 패스워드를 입력해서 접속해 보자.
관리자 페이지에 접속을 해보니 이미지를 지우거나 새로운 이미지를 올릴 수 있는 화면이 나온다.
이제 여기서 file upload attack을 시도해 볼 수 있다!
File upload Attack 시도
파일 업로드 공격이 가능한지 테스트를 해보자.
new picture 버튼을 눌러서 위와 같이 파일을 업로드 해보자.
그랬더니 NO PHP!! 라는 메시지가 뜨고 업로드되지 않는다.
업로드하려는 파일이 PHP파일인데 이 웹사이트에서는 PHP 파일을 업로드하지 못하게 막아둔 것 같다.
그럼 파일의 확장자를 다르게 바꿔보자.
만약 블랙리스트로 파일 확장자를 차단하도록 구현된 사이트라면 대문자로 변경해서 업로드할 경우에 성공적으로 업로드가 될 것이다.(실제로 이런 경우가 종종 발생한다.)
이렇게 파일의 확장자를 바꾼 다음 업로드를 한번 해보자.
이렇게 성공적으로 업로드가 되었다!
이제 webshell을 업로드하였으니 이것을 실행하기 위해서 업로드된 파일의 경로를 찾아가야 한다.
그렇다면 HOME 메뉴로 들어가서 오른쪽 마우스를 클릭한 뒤에 소스코드를 분석해서 경로를 찾아보자.
소스코드를 분석해 보니 admin/uploads/webshell.PHP 경로에 업로드가 된 것을 확인할 수 있다.
이 경로에 접속을 해보자.
webshell이 성공적으로 실행되는 것을 확인할 수 있다. 이제 우린 여러 명령어를 사용할 수 있다!
Reverse shell 침투 시도
우리는 위에 여러 가지 시도들을 통해서 webshell이 실행되는 것을 파악했다.
이제는 reverse shell 기법을 이용해서 터미널로 명령을 내려보자.
nc 명령어로 listening 포트를 열고 webshell 폼에서 nc 명령문을 입력해서 포트에 접속을 해보자.
성공적으로 접속이 되었다. 이로써 쉘을 획득하고 침투에 성공하였다!!
이로써 권한을 획득하고 시스템 정보와 passwd까지 모두 얻어 내었다.
정리
이렇게 지금까지 배운 웹 해킹 기술들을 통해서 호스트로 침투하는 것을 완료하였다.
위와 같이 침투에 성공한 공격자는 다음 단계로 호스트의 루트권한을 획득하기 위해서 권한 상승 공격이나 post exploit 공격을 통해서 다음 단계로 넘어갈 것이다.