본문 바로가기
레드라쿤(유튜브)/따라하는 모의해킹

해킹 실습 SUID Bit, Reverse Shell, LinEnum.sh

by Libera 2023. 12. 24.

BHBT 오픈 기념 할인 이벤트 참여

hiwate16@gmail.com

본 블로그의 내용만으로는 실습을 진행하기 어려우니 위 출처에 들어가 영상을 보며 실습해 보기 바랍니다.

 

 

라쿤 City 워게임

"라쿤시티"는 레드라쿤에서 제공하는 해킹에 필요한 기초 리눅스 커맨드 및 시스템 해킹을 연습할 수 있는 워게임입니다. 이 워게임을 통해 다양한 테마 챌린지를 수행하며 해킹에 필요한 기초 커맨드와 기술을 익혀보세요!

https://ctf.redraccoon.kr/

레드라쿤 TryHackMe 참여 링크

모의해킹 기초: https://tryhackme.com/jr/grootsecurity

레드팀 인프라 구축: https://tryhackme.com/room/grootredteamlab

1. nmap으로 정보 수집하기

더보기

 nmap 옵션

-p- : 모든 포트를 검색한다.

--max-retries : 재시도 회수를 지정한다.

--min-rate : 최소 초당 패킷 전송 비율을 지정한다.

--open : 열려있는 포트만 확인한다.

 

-Pn : 핑 테스트없이 모든 대상을 스캔한다.

-n : nmap이 역방향 DNS 확인을 하지 않도록 하는 명령

-sS : syn연결을 스캔한다

-oA : 스캔결과를 다양한 형식으로 저장한다.

nmap -p- --max-retries 2 -Pn -n --open -sS --min-rate 2000 -oA tcpFull

어떤 포트가 열려 있는지 모르니

모든 포트를 스캔하고 재시도 횟수는 2회로 지정한다.

열려있는 포트들만 핑테스트 없이 스캔하며 역방향 dns 확인을 하지 않고 syn연결도 스캔한다.

스캔 결과는 tcpFull이름으로 저장한다.

 

2. 열려있는 포트들을 알았으니 해당 포트의 자세한 정보를 스캔한다.

더보기

nmap 옵션

-sV : 타깃 머신에서 서비스 중인 서비스를 버전 정보 등을 스캔

-sC : 기본 스크립트를 이용한다.

SSH와 Apache가 있는걸 확인했고

cookie-flags를 보면 PHPSESSID: 가 있으니 PHP를 사용하는 Apache 서버라고 가정할 수 있다.

 

3. 서버의 사이트에 접속해보자

 

서버에 접속하니 아무것도 없다.

robot.txt 파일에 취약한 정보가 있나 확인해 보니 해당 파일이 존재하지 않고

Not Found 창에서 서버의 정보를 보여주는 정도이다.

 

4. gobuster을 이용해 디렉토리 Brute Forcing을 해보자

더보기

gobuster 옵션

-f : 디렉토리 발견시 해당 디렉토리 내 파일 목록 출력

-x : 검사에 포함할 파일 확장자를 지정한다.

타깃 도메인에 common.txt라는  wordlist를 기반으로 디렉토리 BruteForce를 진행하는데

부합하는 디렉토리를 발견할 때 디렉토리 내 파일 중 php확장자인 파일만 목록을 출력해라

 

nmap으로 Apache 서버에서 php를 사용하는 것을 확인했으니 php확장자를 가진 파일 목록만 확인을 했다.

 

여러 파일들이 나왔지만 이중 이중 200인 파일들이 더 볼만하고

이중에서도 무언가 파일의 업로드와 관련된 /uploads/와 기본 파일 같지 않은 /panel/을 확인해 보자.

 

5. uploads, panel 사이트 확인

uploads 사이트에 와보니 이미 upload 되어 있는 파일은 없다.

panel 사이트에 들어와 보니 이 사이트는 파일을 upload 할 수 있게 되어있다.

 

panel 사이트에서 파일을 업로드하면 uploads 사이트에서 확인할 수 있을 것이다.

 

6. panel 사이트에 업로드할 PHP reverse shell을 찾자

칼리에 기본적으로 있는 php로 만든 reverse shell 파일을 찾아서 복사한다.

reverse shell의 돌아올 IP를 내 IP로 변경해 준 후 파일을 업로드하자.

 

7. panel 사이트에 reverse shell php파일을 업로드하자

업로드를 했더니 거부당했다.

파일 확장자가 php라서 거부당했을 수 있으니 확장자 명을 변경해서 업로드해보자.

 

 

확장자 명을 php5로 변경하니 업로드가 된다.

 

8. Reverse shell을 연결하자

 

netcat으로 reverse shell 코드에 입력했던 포트 1234를 열고 uploads페이지에서 php파일을 열어

shell을 연결했다.

그 후 python pty 모듈을 통해 가짜 터미널을 생성해 쉘을 좀 더 효율적으로 사용한다.

 

9. 권한 상승을 시도해 보자

 

권한 상승을 위해 LinEnum.sh 파일을 사용하자

LinEnum.sh 파일을 실행하면 타깃 머신에서 권한상승을 할 수 있도록 많은 정보들을 보여준다.

 

먼저 kali에서 LinEnum.sh파일을 다운받고

타깃 머신에서 내 kali에 있는 LinEnum.sh 파일을 다운 받을 수 있도록 하기 위해 웹서버를 하나 열어주자

 

python으로 웹서버를 한 개 열었고

GET /LinEnum.sh 부분은 타깃 머신에서 파일을 가져갔을 때 확인 할 수 있는 로그이다.

 

 

/dev/shm 폴더는 Ram에 있는 폴더이기 때문에 타깃머신이 종료되면 자동으로 꺼져서 작전보안에 유용하다고 한다.

따라서 /dev/shm 디렉토리에 LinEnum.sh 파일을 공격자 머신에서 다운받고 이를 확인한다.

 

10.LinEnum.sh 파일을 실행하기 위해 실행 권한을 주자

 

chmod 명령어를 통해 LinEnum.sh 파일에 실행 권한을 준 후 실행 시킨 화면이다.

 

LinEnum.sh 파일의 실행 결과

SUID bit이 걸려있는 폴더를 찾을 수 있었다.

 

11.  SUID Bit이 걸려있는 python폴더를 사용해 root행세를 해 보자

 

SUID Bit이 걸려있다면 해당 폴더의 원래 User와 Group의 권한으로 특정 파일을 실행할 수 있게 된다.

여기서는 /usr/bin/python의 원래 User가 root이기에 root 권한을 가장해 파일을 실행 할 수 있다.

 

위 명령은 gtfobin에서 가지고 온 명령어이다.

 

python으로 os 모듈을 호출하고 os 모듈에 Python이 가지고 있는 가장 높은 권한을 새로운 프로세스(쉘)에 적용해 생성한다.

 

따라서 id 부분을 보면 내 실제 User와 Group은 www-data이지만 실질적인 User와 Group은 root로 되어 있다.

이제 root권한을 사용해 파일을 열람할 수 있으니 Flag를 찾으면 된다.

 

더보기

execl = 새로운 프로세스 생성

-p : 내가 가지고 있는 가장 높은 권한을 의미

 

euid : 유효 사용자 ID (실질적인 유저를 보여준다.)

egid : 유효 그룹 ID (실질적인 그룹을 보여준다.)