공격 대상의 IP는 10.10.98.43이다.
ping 명령어를 이용하여 공격 대상의 서버와 통신이 잘되는지 확인을 하였다.
-p- : 모든 포트
--max-retries 2 : 2번 시도
-Pn : 모든 타겟 호스트를 온라인으로 가정(호스트 탐색하지 않음)
-n : DNS 탐색 사용 안함
--open : 열린 포트만 출력
-sS : TCP SYN 스캔 진행
--min-rate 2000: 최소 초당 패킷 전송 비율 2000으로 설정
-oA : 3가지 주요 포멧을 한번에 출력
위 플래그들을 설정하여 포트스캐닝을 진행하였다.
https://www.solanara.net/solanara/nmap
위 사이트에서 nmap의 옵션들을 확인할 수 있다.
포트 스캐닝 결과로 22번 포트와 80번 포트가 열려있음을 확인할 수 있으면 해당 서비스에 대해서도 확인이 가능하다.
-p 22,80 : 22, 80 포트만 스캔
-sV : 서비스 버전 정보 감지
-sC : 기본 스크립트 사용
-Pn : 모든 타겟 호스트를 온라인으로 가정(호스트 탐색하지 않음)
-n : DNS 탐색 사용 안함
--open : 열린 포트만 출력
-oA : 3가지 주요 포멧을 한번에 출력
위 플래그들을 설정하여 자세하게 포트스캐닝을 진행하였다.
결과를 확인해보면 OpenSSH 버전과 Apache 버전 정보들을 알 수 있으며 PHPSESSID가 있는것을 보아 백엔드가 PHP로 이루어져 있음을 추측할 수 있다.
일단 http(80) 서비스가 작동중이므로 해당 사이트에 접근해보도록 진행한다.
웹 사이트에 방문을 해보니 딱히 중요한 정보들이 없는것 같다.
페이지 소스 보기를 통하여 중요한 정보들이 있는지 확인해본다.
페이지 소스보기를 통해서 소스코드들을 확인해봐도 중요한 정보가 없는것 같다.
이번에는 robots.txt를 확인해서 어떤 디렉터리들이 노출되어 있는지 확인해본다.
robots.txt를 확인해보니 페이지가 없으며 아파지 서버 정보와 OS들을 알 수 있다.
아직까지 얻은 정보들이 부족하기 때문에 디렉토리 스캔을 통해서 정보를 수집하도록 한다.
gobuster를 이용하여 해당 웹 페이지의 디렉토리 스캔을 진행 하였다.
wordlist로 dirb/common.txt를 사용하였다.
결과를 확인해보면 panel과 uploads 디렉토리가 약간 흥미가 있어 보이므로 해당 경로를 확인해보도록 한다.
panel에는 파일을 업로드 하는 기능을 가지고 있는 웹사이트 인것 같다.
이번에는 uploads 디렉토리를 확인해보도록 하겠다.
uploads 디렉토리를 확인해보니 지금은 아무것도 없지만 업로드한 파일이 저장되는 디렉토리 인것같다.
panel에서 파일을 올리면 uploads 디렉토리에 저장된다고 예상할 수 있다.
일단 테스트를 통하여 확인을 하도록 하겠다.
test를 하기위한 파일을 생성한다.
test 파일을 업로드한후 uploads 디렉토리를 확인해보니 업로드가 성공적으로 되었다.
해당 서버는 php로 이루어져 있기 때문에 php reverse shell을 이용하여 해당 서버에 쉘을 획득하도록 진행하겠다.
칼리리눅스에 있는 php reverse shell을 이용한다.
해당 경로에서 현재 경로로 복사를 한후 ip와 port 주소를 설정해주어야 한다.
ip를 공격자의 ip로 설정을 하고 port 번호는 열고싶은 port로 지정을 한다.
리버스쉘을 이용하는 이유는 상대방 서버에서 클라이언트로 접속을 하기 때문에 방화벽을 우회하는데 많이 사용한다.
리버스쉘 파일을 수정을 한 후 업로드를 진행한다.
php로 업로드를 진행을 하니 필터링이 되어 막혔다.
해당 필터링을 우회하기 위해서는 여러가지 기법이 있지만 확장자 우회를 통해서 문제를 해결해보겠다.
php인 확장자를 php5로 변경을 하였다.
php3,4,5,7 등 다양한 확장자가 php 코드들을 작동하기 때문에 우회가 가능하다.
php5로 확장자 변경을 통하여 파일 업로드 우회에 성공을 하였다.
공격자 서버에서 포트를 열고 리버스쉘을 실행하여 쉘을 탈취하도록 한다.
해당 서버의 www-data의 권한으로 쉘을 획득하였다.
pty를 불러와서 인터렉티브 쉘로 변경하였다.
권한 상승을 할때 많이 사용하는 LinEnum 스크립트를 다운 받는다.
https://github.com/rebootuser/LinEnum/blob/master/LinEnum.sh
wget으로 LinEnum 스크립트를 다운로드 받았다.
공격자 서버에서 웹 서버를 연 후 피해자 서버에서 공격자 서버에 있는 스크립트를 다운받도록 한다.
/dev/shm 디렉토리 사용시 읽기/쓰기 권한이 777이며 서버가 종료되면 저장된 데이터가 사라지기 때문에 해당 디렉토리로 이동을 한 후 스크립트를 다운받도록 한다.
공격자 서버에서 LinEnum 스크립트를 다운로드 하였고 실행권한을 부여한 뒤 실행을 진행한다.
setUID가 걸려있는 python이 있는것을 확인하였다.
python에 setUID가 걸려있으면 python을 이용하여 권한상승을 진행할 수 있으므로 취약하다.
위 사이트를 이용하여 특정한 바이너리나 파일을 어떻게 악용할 수 있는지 확인할 수있다.
공격 코드 : ./python -c 'import os; os.execl("/bin/sh", "sh", "-p")'
해당 코드를 해석하면 os를 불러오고 execl로 /bin/sh이라는 쉘을 실행시킨다.
-p 옵션은 쉘을 실행시킬때 가장 높은 권한으로 실행 시킨다.
따라서 root로 쉘을 실행시킬 수 있다.
EUID는 SetUID 권한이 설정된 실행 파일에 의해 변경되며, 일시적으로 다른 계정의 UID를 저장해서 사용할 수 있도록 해준다. 즉 일시적으로 파일 소유자의 권한을 얻게 되는 것이다.
해당 코드를 통하여 root 권한으로 상승을 하였다.
'Pentesting CTF > tryhackme GROOT' 카테고리의 다른 글
그루트 OSINT - Active OSINT (0) | 2023.05.28 |
---|---|
그루트 OSINT - Passive OSINT (0) | 2023.05.26 |
그루트 시큐리티 - CatchMeIfYouCan (0) | 2023.04.16 |
그루트 시큐리티 - RemoteWebAdm (0) | 2023.04.16 |
그루트 시큐리티 - 해킹 시연 실습 데모 (0) | 2023.04.16 |