Archive for Dev. (junyup2)

์ง€์‹์„ ์ฑ„์›Œ๊ฐ€๋Š” ใ€Ž๊ฐœ๋ฐœ์ž/ํ™”์ดํŠธํ•ด์ปคใ€๋ฅผ ๋ชฉํ‘œ๋กœ ์ •๋ฆฌํ•˜๋Š” ๋ธ”๋กœ๊ทธ

Practice/DVWA

[DVWA] Command Injection

Gearvirus(junyup2) 2024. 4. 7. 22:59

Vulnerability: Command Injection

์ปค๋งจ๋“œ ์ธ์ ์…˜ (Command Injection)์— ๋Œ€ํ•œ Prcatice ์ด๋‹ค.

Command Injection์€ ์›น ์š”์ฒญ ๋ฉ”์‹œ์ง€์— ์ž„์˜์˜ ์‹œ์Šคํ…œ ๋ช…๋ น์–ด๋ฅผ ์‚ฝ์ž…ํ•˜๊ณ  ์ „์†ก, ์›น ์„œ๋ฒ„์—์„œ ํ•ด๋‹น ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๋„๋ก ํ•˜๋Š” ๊ณต๊ฒฉ์ด๋‹ค.

(์›น์—์„œ ์‹œ์Šคํ…œ ๋ช…๋ น์–ด(command)๋ฅผ ์ž…๋ ฅํ•˜๋Š” ๋ถ€๋ถ„์—์„œ ์ถ”๊ฐ€์ ์ธ ๋ช…๋ น์–ด์˜ ์‹คํ–‰์„ ํ†ตํ•ด ๊ณต๊ฒฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค.)

Vuln Point

์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋‚ด๋ถ€์—์„œ ์‹œ์Šคํ…œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์ƒํ™ฉ์—์„œ ์ž…๋ ฅ๊ฐ’์— ๋Œ€ํ•œ ์ ์ ˆํ•œ ๊ฒ€์‚ฌ ์—†์ด ์‹œ์Šคํ…œ ๋ช…๋ น์–ด์˜ ์ผ๋ถ€๋ถ„์œผ๋กœ ์ „๋‹ฌํ•˜๋Š” ๊ฒฝ์šฐ, ๊ณต๊ฒฉ์ž๊ฐ€ ์ž…๋ ฅ๊ฐ’์„ ์กฐ์ž‘ํ•˜์—ฌ ์ž„์˜์˜ ์‹œ์Šคํ…œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

Vuln Example

DVWA์˜ ์˜ˆ์‹œ์™€ ๊ฐ™์ด ์‚ฌ์šฉ์ž๊ฐ€ IP ์ฃผ์†Œ๋ฅผ ์ž…๋ ฅํ–ˆ์„ ๋•Œ ์›น ์„œ๋ฒ„์—์„œ ping ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ์›น ํŽ˜์ด์ง€๊ฐ€ ์žˆ๋‹ค๊ณ  ํ•ด๋ณด์ž.

ping: ์ž…๋ ฅ๋œ IP ์ฃผ์†Œ์˜ ์‹œ์Šคํ…œ์ด ํ˜„์žฌ ๋™์ž‘ ์ค‘์ธ์ง€ ํ™•์ธํ•˜๋Š” ๋ช…๋ น์–ด

ping ๋ช…๋ น์–ด๊ฐ€ ์‹คํ–‰๋˜๋Š” ๊ณผ์ •์„ ํ™•์ธํ•ด๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

์œ„์˜ ๊ณผ์ •์—์„œ ์›นํŽ˜์ด์ง€๊ฐ€ ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ๊ฐ’์— ๋Œ€ํ•˜์—ฌ ์ œ๋Œ€๋กœ ๊ฒ€์‚ฌ๋ฅผ ํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด, ๊ณต๊ฒฉ์ž๋Š” IP์ฃผ์†Œ ๋’ค์— ๋‹ค๋ฅธ ์‹œ์Šคํ…œ ๋ช…๋ น์–ด๋ฅผ ์ถ”๊ฐ€๋กœ ์ž…๋ ฅํ•˜์—ฌ ์›น ์„œ๋ฒ„์—์„œ ์›ํ•˜๋Š” ์‹œ์Šคํ…œ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ๋œ๋‹ค.

ํ•ด๋‹น ๊ณผ์ •์„ ์‚ดํŽด๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

IP ์ฃผ์†Œ ์ž…๋ ฅ์‹œ ์›๋ž˜ ์‹คํ–‰๋˜์–ด์•ผ ํ•˜๋Š” ping ๋ช…๋ น์–ด์™€, ๊ณต๊ฒฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ๋ช…๋ น์–ด(command)๊ฐ€ ๊ฐ™์ด ์‹คํ–‰๋˜๋Š” ๊ฒƒ์ด๋‹ค.

(์œ„์˜ ๊ณผ์ •์ด ์ปค๋งจ๋“œ ์ธ์ ์…˜(Command Injection) ์ทจ์•ฝ์ ์„ ์ด์šฉํ•˜์—ฌ ์‹œ์Šคํ…œ ๋ช…๋ น์–ด๋ฅผ ์ถ”๊ฐ€์ ์œผ๋กœ ์ž…๋ ฅํ–ˆ์„ ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์ด๋‹ค.)

๋งŒ์•ฝ ๊ณต๊ฒฉ์ž๊ฐ€ ip ์ฃผ์†Œ ๋’ค์—, cat ../../../../../../etc/passwd ์™€ ๊ฐ™์€ ๋ช…๋ น์–ด๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒฝ์šฐ, ์›น ์„œ๋ฒ„๋Š” ping ๋ช…๋ น์–ด์™€ cat ๋ช…๋ น์–ด๋ฅผ ๋ชจ๋‘ ์‹คํ–‰ํ•œ ๊ฒฐ๊ณผ๋ฅผ ๊ณต๊ฒฉ์ž์—๊ฒŒ ์ „๋‹ฌ(return)ํ•˜๊ฒŒ ๋œ๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ ๊ณต๊ฒฉ์ž๋Š” ์›ํ•˜๋Š” ๋ช…๋ น์–ด๋ฅผ ์ถ”๊ฐ€์ ์œผ๋กœ ์ž…๋ ฅํ•จ์œผ๋กœ์จ ํ•ด๋‹น ์ •๋ณด๋ฅผ ๋นผ์˜ฌ ์ˆ˜ ์žˆ๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

 

๋ช…๋ น์–ด ์—ฐ๊ฒฐ - ํŠน์ˆ˜๋ฌธ์ž

๊ณต๊ฒฉ์ž๊ฐ€ ์ž…๋ ฅ๊ฐ’์„ ํ†ตํ•ด ์›ํ•˜๋Š” ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ณต์ˆ˜์˜ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๋Š” ํŠน์ˆ˜๋ฌธ์ž๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค.

&๋Š” ์œ ๋‹‰์Šค ๊ณ„์—ด์—์„œ๋Š” ๋’ท๋ฉด ์ž‘์—…(background job)์ด๋‹ค. ์œˆ๋„์šฐ์—์„œ๋Š” ๋ช…๋ น์–ด๊ฐ€ ํ•˜๋‚˜์”ฉ ์‹คํ–‰๋˜๋Š” ์ˆœ์ฐจ์  ์—ฐ๊ฒฐํ˜•์œผ๋กœ ํ•ด์„ํ•œ๋‹ค. #์˜ ๋’ท๋ถ€๋ถ„์€ ๋Œ€๋ถ€๋ถ„์˜ ์‰˜์—์„œ ์ฃผ์„์œผ๋กœ ์ฒ˜๋ฆฌํ•œ๋‹ค.

๋ช…๋ น์–ด ๊ตฌ๋ถ„์„ ์œ„ํ•œ ํŠน์ˆ˜๋ฌธ์ž

๋ช…๋ น์–ด ์‚ฝ์ž…์€ ์‰˜(shell)์—์„œ ์šด์˜์ฒด์ œ ๋ช…๋ น์–ด๋ฅผ ์—ฐ์ด์–ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํŠน์ง•์„ ์ด์šฉํ•œ๋‹ค. ์œ ๋‹‰์Šค(Unix) ๊ณ„์—ด์˜ ์šด์˜์ฒด์ œ(Linux)์—์„œ ๋ช…๋ น์–ด ์—ฐ๊ฒฐ ํ˜•์‹์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒƒ๋“ค์ด ์žˆ๋‹ค.

์ˆœ์ฐจ์  ์—ฐ๊ฒฐ( ; ),
๋’ท๋ฉด ์‹คํ–‰( & ),
ํŒŒ์ดํ”„ ์—ฐ๊ฒฐ( | ),
์ฐธ ์กฐ๊ฑดํ˜• ์—ฐ๊ฒฐ( && ),
๊ฑฐ์ง“ ์กฐ๊ฑดํ˜• ์—ฐ๊ฒฐ( || ),
์ค„๋ฐ”๊พธ๊ธฐํ˜• ์—ฐ๊ฒฐ( \n )

MS ์œˆ๋„์šฐ ๊ณ„์—ด๋„ ์œ ์‚ฌํ•œ ๋ฐ ์œ ๋‹‰์Šค์˜ ๋’ท๋ฉด ์‹คํ–‰ ์—ฐ๊ฒฐ(&)์ด ์ˆœ์ฐจ์  ์—ฐ๊ฒฐ๋กœ ํ•ด์„๋˜๋Š” ๊ฒƒ์—์„œ ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค.

๋ช…๋ น์–ด ์‚ฝ์ž… ์ทจ์•ฝ์ ์„ ์ ๊ฒ€ํ•  ๋•Œ๋Š” ๋Œ€๋ถ€๋ถ„์˜ ์šด์˜์ฒด์ œ์—์„œ ๊ณตํ†ต์ ์œผ๋กœ ์ง€์›ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ผ๋ฐ˜์ ์œผ๋กœ &๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

DVWA Command Injection ์‹ค์Šต

์‹ค์Šต ํ™˜๊ฒฝ
- Windows Docker๋ฅผ ์ด์šฉํ•œ DVWA
- Windows ํ™˜๊ฒฝ์˜ Burp Suite

Command Injection์— ๋“ค์–ด๊ฐ€๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฐฝ์ด ๋‚˜์˜จ๋‹ค.

์ž…๋ ฅ ๋ถ€๋ถ„์— ip ์ฃผ์†Œ๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ํ•ด๋‹น ์ฃผ์†Œ์— ๋Œ€ํ•œ ping ๋ช…๋ น์–ด๊ฐ€ ์‹คํ–‰๋œ๋‹ค.

์œ„์™€ ๊ฐ™์ด ์ž…๋ ฅํ•œ ip์ฃผ์†Œ 127.0.0.1์— ๋Œ€ํ•œ 4๋ฒˆ์˜ ping ๊ฒฐ๊ณผ๊ฐ€ ์ถœ๋ ฅ๋œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

Security Level: Low

Low ๋ ˆ๋ฒจ์˜ ๊ฒฝ์šฐ, ๋ช…๋ น์–ด๋ฅผ ์ถ”๊ฐ€์ ์œผ๋กœ ์ž…๋ ฅํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ๋ช…๋ น์–ด ๊ตฌ๋ถ„์„ ์œ„ํ•œ ํŠน์ˆ˜๋ฌธ์ž๊ฐ€ ๋ชจ๋‘ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

127.0.0.1; cat ../../../../../../etc/passwd

์œ„์™€ ๊ฐ™์ด ip ์ฃผ์†Œ ๋’ค์— ; ๋ฅผ ์ž…๋ ฅํ•˜๊ณ  ์›ํ•˜๋Š” ๋ช…๋ น์–ด(etc/passwd)๋ฅผ ์ถ”๊ฐ€์ ์œผ๋กœ ์ž…๋ ฅํ•˜์—ฌ ๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

์ด๊ฒƒ์„ Burp Suite์„ ํ†ตํ•ด ์š”์ฒญ(Request)์™€ ์‘๋‹ต(Response)๋ฅผ ํ™•์ธํ•ด๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

์œ„์™€ ๊ฐ™์ด 127.0.0.1; cat ../../../../../../etc/passwd ๋ฅผ ์ž…๋ ฅํ•˜๋Š” ๊ฒฝ์šฐ, ping ๋ช…๋ น์–ด์˜ ๊ฒฐ๊ณผ ๋’ค์— cat ๋ช…๋ น์–ด๊ฐ€ ์‹คํ–‰๋˜์–ด ๋‚ด๋ถ€์˜ ์ •๋ณด๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.


Security Level: Medium

Medium ๋ ˆ๋ฒจ์˜ ๊ฒฝ์šฐ, ๋ช…๋ น์–ด ์—ฐ๊ฒฐ์„ ์œ„ํ•œ ํŠน์ˆ˜๋ฌธ์ž๋“ค ์ค‘ ์ผ๋ถ€๋ถ„์„ ํ•„ํ„ฐ๋ง ํ•˜๊ณ  ์žˆ๋‹ค.

&&, ; ์˜ ๋‘๊ฐ€์ง€๋งŒ ํ•„ํ„ฐ๋งํ•˜๊ณ  ์žˆ์–ด์„œ ์ด์™ธ์˜ ํŠน์ˆ˜๋ฌธ์ž๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ์ทจ์•ฝํ•œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

127.0.0.1& cat ../../../../../../etc/passwd

์œ„์™€ ๊ฐ™์ด ์ž…๋ ฅ ๊ฐ’์— ๋Œ€ํ•˜์—ฌ &&, ; ์˜ ๊ฒฝ์šฐ์— ๋Œ€ํ•˜์—ฌ ๋ธ”๋ž™๋ฆฌ์ŠคํŠธ ํ•„ํ„ฐ๋ง์„ ํ•˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.


Security Level: High

High ๋ ˆ๋ฒจ์˜ ๊ฒฝ์šฐ, ๋ช…๋ น์–ด ์—ฐ๊ฒฐ์„ ์œ„ํ•œ ํŠน์ˆ˜๋ฌธ์ž์„ ๋Œ€๋ถ€๋ถ„ ํ•„ํ„ฐ๋ง ํ•˜๊ณ  ์žˆ๋‹ค.

ํ•˜์ง€๋งŒ | ์˜ ๊ฒฝ์šฐ '|' ๊ฐ€ ์•„๋‹Œ '| ' ์™€ ๊ฐ™์ด ๊ณต๋ฐฑ์ด ํ•˜๋‚˜ ๋“ค์–ด๊ฐ„ ๊ฒƒ์„ ํ•„ํ„ฐ๋ง ํ•˜๊ณ  ์žˆ์–ด์„œ, | ๋ฅผ ๋ถ™์—ฌ ์“ฐ๋Š” ๊ฒฝ์šฐ์—๋Š” ํ•„ํ„ฐ๋ง ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. (๊ฐœ๋ฐœ์ž์˜ ์‹ค์ˆ˜๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.)

127.0.0.1|cat ../../../../../../etc/passwd

์œ„์™€ ๊ฐ™์ด ์ž…๋ ฅ ๊ฐ’์— ๋Œ€ํ•˜์—ฌ ๋Œ€๋ถ€๋ถ„์˜ ๋ฌธ์ž์—ด์— ๋Œ€ํ•˜์—ฌ ๋ธ”๋ž™๋ฆฌ์ŠคํŠธ ํ•„ํ„ฐ๋ง์„ ํ•˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

ํ•˜์ง€๋งŒ ๊ณต๋ฐฑ ๋ฌธ์ž๊ฐ€ ํฌํ•จ๋œ ๊ฒƒ์„ ํ™•์ธํ•˜๋Š” ๊ฒฝ์šฐ ๊ณต๋ฐฑ์ด ํฌํ•จ๋˜์–ด์•ผ๋งŒ ํ•ด๋‹น ๋ฌธ์ž์—ด๋กœ ์ธ์‹ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์šฐํšŒ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.


Security Level: Impossible

Impossible ๋ ˆ๋ฒจ์˜ ๊ฒฝ์šฐ, ํ•ด๋‹น ๋ณด์•ˆ ์ˆ˜์ค€์—์„œ๋Š” ping ๋ช…๋ น์–ด์˜ ์ž…๋ ฅ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ip ๋ณ€์ˆ˜๋ฅผ ์˜จ์ „ํ•˜๊ฒŒ ๊ฒ€์ฆํ•œ๋‹ค.

ping ๋ช…๋ น์–ด๋ฅผ ์œ„ํ•ด ip ์ฃผ์†Œ๋ฅผ ์ž…๋ ฅ์œผ๋กœ์„œ ๋ฐ›๋Š” ๊ณผ์ •์—์„œ ๋‹ค๋ฅธ ๋ช…๋ น์–ด๋“ค์„ ์ถ”๊ฐ€์ ์œผ๋กœ ์‹คํ–‰ํ• ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด ๋ฌธ์ œ์˜€๋Š”๋ฐ, ์ž…๋ ฅ ๊ฐ’์— ๋Œ€ํ•˜์—ฌ ip ์ฃผ์†Œ ์™ธ์— ๋‹ค๋ฅธ ๊ฐ’์ด ๋“ค์–ด์˜ค๋”๋ผ๋„ ip ์ฃผ์†Œ๋ฅผ ๊ฒ€์ฆํ•˜๋Š” ๋กœ์ง์„ ์ด์šฉํ•˜์—ฌ ip ์ฃผ์†Œ๋งŒ์„ ์ธ์‹ํ•˜๋„๋ก ํ•œ๋‹ค.

 // Split the IP into 4 octects
    $octet = explode( ".", $target );

    // Check IF each octet is an integer
    if( ( is_numeric( $octet[0] ) ) && ( is_numeric( $octet[1] ) ) && ( is_numeric( $octet[2] ) ) && ( is_numeric( $octet[3] ) ) && ( sizeof( $octet ) == 4 ) ) {
        // If all 4 octets are int's put the IP back together.
        $target = $octet[0] . '.' . $octet[1] . '.' . $octet[2] . '.' . $octet[3];

์œ„์˜ ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด ip ๋ณ€์ˆ˜๋ฅผ ์˜จ์ „ํ•˜๊ฒŒ ๊ฒ€์ฆํ•˜๊ธฐ ์œ„ํ•ด, ์ˆซ์ž ๋„ค๊ฐœ๋ฅผ ๋งˆ์นจํ‘œ๋กœ ์—ฐ๊ฒฐํ•˜๋Š” ๋ฐฉ์‹์„ ์ด์šฉํ•˜์—ฌ ๋‹ค๋ฅธ ์ž…๋ ฅ์ด ๋“ค์–ด์˜ฌ ์ˆ˜ ์žˆ๋Š” ์—ฌ์ง€๋ฅผ ์ฐจ๋‹จํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.


Command Injection ๋Œ€์‘

์„œ๋ฒ„์Šคํฌ๋ฆฝํŠธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ์‹œ์Šคํ…œ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ๊ฐ€๋Šฅํ•œ ํ”ผํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.
ํ•˜์ง€๋งŒ ๋ฐ˜๋“œ์‹œ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๋ผ๋ฉด ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ์ด ์ „๋‹ฌ๋˜๋Š” ๊ฒƒ์„ ์ฐจ๋‹จํ•ด์•ผ ํ•œ๋‹ค.

์งˆ๋ฌธ ํ™˜์˜, ์ˆ˜์ • ๋ฐ ๋ณด์™„์— ๋Œ€ํ•œ ์ง€์  ํ™˜์˜