문제에서 생성된 IP 주소에 어떤 포트가 열려있는지 확인80번 포트가 열려있고 Apache httpd 2.4.18 버전을 사용하고 있다.
# searchsploit Apache httpd 2.4.18
아무런 정보가 뜨지 않는다.
웹 사이트에 접속하니 Fuel CMS 1.4 버전을 사용하고 있다.
# searchsploit Fuel CMS 1.4
원격에서 명령을 실행할 수 있는 RCE 취약점과 SQL Injection이 보인다. RCE 취약점들을 하나씩 exploit 해보았다.
참고로 출력된 path는 앞부분 경로 /usr/share/exploitdb/exploits/ 가 생략되어 있는 것이다.
각 파일을 실행하기 위해 복사하여 저장하였다.
Exploit
[exploit1]
python2는 print문을 사용할 때 괄호를 사용하지 않지만 python3의 경우 괄호가 필수이기 때문에 버전 차이로 인해 오류가 생겼다.
# python2 exploit1.py 으로 다시 실행
14번 줄의 url을 IP주소를 변경, 프록시는 따로 설정 X, 25번 줄을 주석처리하고 26번줄의 파라미터 값도 지웠다.
저장 후 실행하면 cmd 창을 통해 정상적으로 명령어가 정상적으로 작동한다.
이후의 exploit 과정은 exploit2, exploit3과 동일하고 일단 다른 파일도 실행해보았다.
[exploit2]
파일 실행 후 설명에 따라 url과 명령어를 함께 입력하니 exploit2 보다 쉽게 작동된다.
[exploit3]
exploit3도 OK
하지만 쉘이 한줄씩만 실행된다. 현재 경로를 바꾼 뒤 pwd 명령어를 사용해도 그대로 system/var/www/html 에 위치한다.
이전 두개의 exploit도 동일한데, reverse shell을 통해 조금 더 사용하기 편한 쉘을 획득해보겠다.
[ Reverse Shell ]
간단하게 말해서 공격자가 특정 포트를 열어놓고 공격대상 서버를 공격자의 포트에 연결하도록 하는 것
# nc -nlvp 9999
먼저 내 컴퓨터에서 9999번 포트를 열고
공격대상 서버와 9999번 포트를 연결시키면 되는데
구글에 reverse shell generator 혹은 reverse cheat sheet를 검색하면 코드를 쉽게 작성할 수 있다.
해당 사이트에 들어가서 IP와 port번호를 설정하고 OS는 linux, 그리고 nc mkfifo를 사용하였다.
여기서 IP는 당연히 내컴퓨터(공격자의) IP 주소이다.
위에서 만든 코드를 복사하여 exploit을 통해 얻었던 쉘에 입력한다.
아까 포트를 열어놨던 터미널으로 다시 돌아오면 쉘이 연결된 것을 확인할 수 있다.한줄한줄 실행되어 현재경로가 바뀌지 않았던 이전 쉘과 다르게 잘 작동한다.
# cat /etc/passwd | grep sh
다른 사용자 계정이 있나 찾아보니 root 계정을 제외하고는 없는 것 같다.
아쉽지만 root 계정의 비밀번호가 담긴 DB가 있는지 현재경로부터 파일을 쭉 훑어봤다.
database.php 파일을 읽어보니 배열하나가 보이는데
username root에 password 값으로 'mememe'가 저장되어 있다.
su 명령어로 root 계정으로 로그인을 하려고 했으나 오류 메세지가 출력된다.
$ python -c "import pty;pty.spawn('/bin/bash')"
python의 pty 모듈을 임포트하고 새로운 bash 쉘을 실행할 수 있도록 하는 코드를 실행
(공격자가 접근한 원격 시스템에서의 권한 상승을 도와준다.)로그인이 정상적으로 되었으며 홈 dir의 root.txt에서 첫 번째 flag를 찾을 수 있다.루트로 이동해 몇 가지 다른 파일을 찾아보니 /home/www-data에서 두번째 flag가 있었다.