Jastes 2022. 11. 20. 23:18

loveletter_WriteUp

๋ณด์‹œ๋ฉด.. ๋งˆ์ง€๋ง‰.. ์ค‘์š”ํ•œ๊ฑด ์‚ฌ๋ž‘..์ด์•ผ? -์ตœ์ง€์›
์‹œ๋ จ ๋‹นํ•˜์…จ์„๊นŒ์š”? ๋ณด๋‹ˆ๊นŒ ๋ฌธ์ œ ์ด๋ฆ„์ด๋ž‘ ๊ฒฐ๊ณผ๋ž‘ ์œ ์‚ฌํ•˜๋˜๋ฐ ์ƒ๊ฐํ•˜๋ฉด์„œ ํ•ฉ์‹œ๋‹ค.

์•„.. ์™œ 32bit์ธ๋ฐ ใ… 

ํŒŒ์ผ์„ ๋ฐ›์•„์„œ ์—ด์–ด๋ณด๋‹ˆ๊นŒ.. ์‹คํ–‰ํŒŒ์ผ์ด๊ณ  ๋ฆฌ๋ฒ„์‹ฑ ํ•  ๋ถ€๋ถ„์ด ๋„ˆ๋ฌด ๋งŽ์•„์„œ IDA ์‚ฌ์šฉ!

๋ณด์‹œ๋ฉด.. 256(0x100)์˜ memset๋„ ํ•˜์˜€๊ณ (UAF X).. s ๋ณ€์ˆ˜์— 0x100๋งŒํผ
fgets๋กœ ์ž…๋ ฅ์„ ๋ฐ›๊ธฐ์— bof๊ฐ€ ์•ˆ๋˜๊ฒ ๋„ค์š” ๊ทธ ์ดํ›„ 18๋ฒˆ์งธ protect์— ์ธ์ž๋ฅผ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ 21๋ฒˆ๋ถ€ํ„ฐ 25๋ฒˆ๊นŒ์ง€ ๊ฐ ์ธ์ž๋ฅผ ์ง€๋‹Œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ ์žฌํ•˜์—ฌ idx์— ์ ์žฌํ•ฉ๋‹ˆ๋‹ค

๊ทธ๋ฆฌ๊ณ  memcpy์—์„œ prolog์™€ epilog๋Š” ๊ฐ๊ฐ ํ™•์ธํ•ด๋ด…์‹œ๋‹ค.

ํ•ด๋‹น ๋ฌธ์ž์—ด์„ ๋ฐ˜ํ™˜ํ•˜๋Š”๊ตฐ์š”!
๋˜ํ•œ ๋งˆ์ง€๋ง‰์œผ๋กœ prolog์™€ protect ๊ทธ๋ฆฌ๊ณ  epilog๋ฅผ ์ „๋ถ€ puts๋กœ ์น˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
๊ณ ๋กœ ๋์— null๋ฐ”์ดํŠธ๊ฐ€ ์˜ค๋ฉด ์ข…๋ฃŒ๋œ๋‹ค๋Š” ์ ! ์ถ”ํ›„์— ๋กœ์ง์—์„œ ์„ค๋ช…๋˜๊ฒ ์ง€๋งŒ..

puts๋กœ ๋ฌธ์ž์—ด์„ ์ถœ๋ ฅํ•˜๊ณ  system์—์„œ loveletter๋ฅผ return system(loveletter)๋กœ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋กœ์ง์ž„
๊ทธ๋ฆฌ๊ณ  ๋งจ๋ฐ‘์— system ํ•จ์ˆ˜๋กœ loveletter๋ฅผ ๋ฐ›์Šต๋‹ˆ๋‹ค.
์ด ๋ถ€๋ถ„์ด bof๊ฐ€ ๋ฐœ์ƒํ•ด์•ผํ•˜๋Š”์ง€ ์•Œ์•„๋ด…์‹œ๋‹ค.

v8์˜ ํ•จ์ˆ˜์— readgsdword๋ผ๊ณ  ํŠน์ˆ˜๋ฌธ์ž๋ฅผ ์ฝ์–ด๋“œ๋ ค์„œ.. ๋ฌธ์ž๋ฅผ ๋ฐ”๊พธ๋Š” ๊ตฌ๋ฌธ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค.
๋Œ€์ถฉ ๋ณด์ด๋‹ˆ๊นŒ ๋ณ€์ˆ˜์™€ ์ธ์ž๋“ค์€ ๋ถ„์„ํ•  ํ•„์š”๊ฐ€ ์—†๊ฒ ์ฃ ?
0xa599e2๋กœ ๋ฐ”๊พธ๋Š” ๊ฑฐ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒŒ ๋ญ์ธ์ง€ ๋ชจ๋ฅด๊ธฐ์— ์‹คํ–‰์‹œ์ผœ๋ด…์‹œ๋‹ค.

์œผ์Œ.. ํ™”์ดํŠธํ•„ํ„ฐ์— ์žˆ๋Š” ํŠน์ˆ˜๋ฌธ์ž๋“ค์ด ํ•˜ํŠธ๋กœ ๋ณ€ํ•˜๋Š”๊ตฐ์š”.
์ด๋ ‡๊ฒŒ ๋ณด๋ฉด ์–ด๋–ป๊ฒŒ ํ• ์ง€๋ฅผ ๋ชจ๋ฅด๊ฒ ์œผ๋‹ˆ๊นŒ ์œ„์˜ ํ•ต์‹ฌ ๋กœ์ง์„ ๋‹ค์‹œ ์‚ดํŽด๋ด…์‹œ๋‹ค.

์น˜ํ™˜ ๊ฐ’์€ 213์—์„œ ์น˜ํ™˜๋˜๋Š” ๊ฐ’์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ค‘๊ฐ„๋งˆ๋‹ค ๊ณ„์† strlen์„ ํ†ตํ•ด ๊ธฐ์กด ๋ฌธ์ž์—ด ๊ธธ์ด๋ฅผ ํŠน์ˆ˜๋ฌธ์ž์™€ ๊ธฐ์กด ๋ฌธ์ž์—ด์„ ๊ณ„์† ๋น„๊ต ์ฒดํฌํ•ฉ๋‹ˆ๋‹ค.
๊ทธ๋Ÿผ ๋ถ„๋ช…ํžˆ ๋ฌธ์ž์—ด์˜ ๊ธธ์ด์˜ ๋ณ€ํ™”๊ฐ€ ์ƒ๊ฒผ๋‹ค๋Š” ์˜๋ฏธ๊ฒ ์ฃ ?

์˜ค๋ฅธ์ชฝ์˜ strlen์„ ๋‘๊ฐœ ๋ถˆ๋Ÿฌ์šฐ๋Š” ๋ถ€๋ถ„์—์„œ ์ฒซ๋ฒˆ์งธ๋Š” DWORD PTR์— ๊ทธ๋ƒฅ ์ ์šฉ๋˜๋‚˜ [ebp-0x13]
๋‘๋ฒˆ์งธ๋Š” eax์— ebp-0x10์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ ์ด๋™ ์ด๊ฒƒ์„ DWORD PTR์— ์ ์žฌํ•ฉ๋‹ˆ๋‹ค.
๊ทธ๋Ÿผ DWORD๋Š” 4byte์ด๊ณ  ๋ฌธ์ž์—ด์€ ๊ธฐ๋ณธ 1byte ์œ„ ๋ฉ”๋ชจ๋ฆฌ ํฌ๊ธฐ์˜ ์ฐจ๋Š” 3byte..

๊ทธ๋Ÿผ 1์—์„œ 4byte๋งŒํผ ์น˜ํ™˜ ๊ณผ์ •์—์„œ ๋ณ€ํ•˜๊ณ  4byte์˜ ptr์— ์ €์žฅํ•˜๊ธฐ์—
๊ฒฐ๊ณผ์ ์œผ๋ก  ์ฐจ์ด๊ฐ€ 3byte๋กœ์จ ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค.

์œ„ ์‹คํ–‰ํ™”๋ฉด์„ ๋ณธ๋‹ค๋ฉด 'I love '์™€ ' very much!'๋ผ๋Š” ๋‘ ๋ฌธ์ž์—ด ์‚ฌ์ด์— ์šฐ๋ฆฌ๊ฐ€ ์ž…๋ ฅํ• 
๋ถ€๋ถ„์ด ์ƒ๊ธฐ๋Š”๊ตฐ์š” ๊ทธ๋Ÿผ payload๊ฐ€ ์–ด๋–ป๊ฒŒ ์„ค๊ณ„ํ• ์ง€ ๊ฐ์ด ์˜ค๋Š”๋ฐ ๋ณดํ˜ธ๊ธฐ๋ฒ•์„ ์‚ดํŽด๋ด…์‹œ๋‹ค.

์œ„์— ๋ณด์‹œ๋ฉด ์™ธ๋ถ€ ๋ช…๋ น์–ด ๋ถˆ๊ฐ€(NX)์ด๋ฉฐ, ์นด๋‚˜๋ฆฌ๊ฐ€ ๊ฑธ๋ ค์žˆ์œผ๋ฏ€๋กœ์จ ์ƒ๋‹นํžˆ ๋‚œํ•ดํ•ฉ๋‹ˆ๋‹ค.
๋˜ํ•œ ASLR์€ ํ•„์ˆ˜๋กœ ์ ์žฌ๋˜์–ด ์žˆ๊ฒ ์ฃ ?

์ฒ˜์Œ์—” rtl๊ณผ ๊ฐ™์€ ๊ณต๊ฒฉ๊ธฐ๋ฒ•์„ ์ƒ๊ฐํ–ˆ์œผ๋‚˜.. ์ธ์ž๊ฐ€ system์—์„œ ์ ์žฌํ•˜์—ฌ ์‚ฌ์šฉ๋˜๊ธฐ์—
์ด๊ฒƒ์„ ์ด์šฉํ•œ๋‹ค๋ฉด ๋งค์šฐ ์‰ฌ์šด ๋ฌธ์ œ๊ฒ ๊ตฌ๋‚˜!


Exploit design(Senario)

์•„๊นŒ ํŠน์ˆ˜๋ฌธ์ž๋ฅผ ํ•˜ํŠธ๋กœ ๋ณ€ํ™˜ํ•˜๊ณ  ์•ˆ์˜ ์ž…๋ ฅ๋œ ๋ฌธ์ž์—ด์„ ์ž‘์„ฑํ•˜์—ฌ ์‹คํ–‰ํ•˜๋ฏ€๋กœ
cat flag์™€ ๋‚˜๋จธ์ง€๋Š” ๋‹ค๋ฅธ ๋ช…๋ น์–ด๊ฐ€ ์ž…๋ ฅ๋˜์ง€ ์•Š๊ฒŒ ๊ณต๋ฐฑ ๊ทธ๋ฆฌ๊ณ  ๋งˆ์ง€๋ง‰์„ ํŠน์ˆ˜๋ฌธ์ž๋กœ buf๋ฅผ ์ฑ„์šฐ๋ฉด..
๋™์ž‘ ๋กœ์ง์„ ๋งˆ์ง€๋ง‰์œผ๋กœ ํ™•์ธํ•˜๊ณ  ์‹คํ–‰ํ•ด๋ด…์‹œ๋‹ค.

system์ธ์ž๋ฅผ ๋„ฃ๊ธฐ ์œ„ํ•ด buf์˜ ํฌ๊ธฐ์— ๋งž๊ฒŒ 254byte๊ทธ๋ฆฌ๊ณ  ๋งˆ์ง€๋ง‰์€ ํŠน์ˆ˜๋ฌธ์ž๋ฅผ ๋”ํ•ด ๋„ฃ์€ ๋ชจ์Šต

๊ทธ๋Ÿผ epilog์™€ prolog์˜ ๋ฉ”๋ชจ๋ฆฌ์— ๋ญ๊ฐ€ ์ ์žฌ๋˜์–ด ์žˆ์œผ๋ฉฐ, ๋ฉ”์ธ ๋ฒ„ํผ์ธ s์— ๋ญ๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธ ใ„ฑ

์ฐธ๊ณ ๋กœ ๋ณด์‹œ๋ฉด์„œ ํ•˜์„ธ์š”
์œ„์™€ ๊ฐ™์€ ๊ฐ’์„ ๊ฐ€์ง€๋ฉฐ ์Šคํƒ์˜ ํŠน์ง•์ƒ s๊ฐ€ ์ƒ์œ„ esp์— ์ ์žฌ๋˜์–ด ์žˆ์„๊ฑฐ๊ธฐ์—
๊ทธ ๋’ค์— ๋‚˜์˜ค๋Š” ์ € ๋‘๊ฐœ์˜ ๊ฐ’์ด ์žˆ์œผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

์œ„์™€ ๊ฐ™์ด esp+0x10๋ถ€ํ„ฐ ์žˆ๊ธฐ์— 257byte๋งŒํผ ์ž…๋ ฅํ•œ๋‹ค๋ฉด ์•„๋ž˜ ๋“œ๋ž˜๊ทธ ๋œ ๋ถ€๋ถ„์ด null๋กœ ๋“ค์–ด๊ฐ‘๋‹ˆ๋‹ค.
๊ทธ๋Ÿฌ๊ธฐ์— /bin/sh๋ฅผ ๋„ฃ์–ด์„œ ํ•ด๋ณผ๊นŒ ์ƒ๊ฐํ–ˆ์œผ๋‚˜ ์ด ๋’ค์—๋Š” null byte๊ฐ€ ์˜ค๊ธฐ์— ๋Š๊น€์œผ๋กœ ๋‹ค๋ฅธ ๊ฐ’์œผ๋กœ ํ•˜๋ฉด

Senario
  1. buf์— cat flag์™€ ๋‚˜๋จธ์ง€๋ฅผ ๋”๋ฏธ๊ฐ’์œผ๋กœ buf์˜ ๊ธธ์ด-1๋งŒํผ ์ฑ„์›๋‹ˆ๋‹ค.
  2. ๋งˆ์ง€๋ง‰ ๋ฌธ์ž๋ฅผ ํŠน์ˆ˜๋ฌธ์ž๋ฅผ ๋„ฃ์–ด์ค๋‹ˆ๋‹ค.
  3. ์‹คํ–‰ํ๋ฆ„์˜ ๋ณ€์กฐ๋ฅผ ํ•˜์ง€ ์•Š๊ฒŒ ์ž…๋ ฅํ•  s๋ฌธ์ž์—ด์˜ ํฌ๊ธฐ๋ฅผ ๊ณ ๋ คํ•˜๊ธฐ
    - ๋ณ€์กฐํ•˜๋ฉด ๋‹ค๋ฅธ ๊ธฐ๋ฒ•์œผ๋กœ ํ’€์–ด์•ผํ•˜๋‹ˆ๊นŒ ์œ„์— ์„ค๊ฒŒ๊ฐ€ ์•ˆ ๋งž์•„์š” ใ…Ž
cat flag(excute; 8byte) + dummy(245 byte) + *(3byte)

Exploit code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
from pwn import*
 
= ssh(user='loveletter', host='pwnable.kr', port=2222, password='guest').remote('localhost'9034)
 
context(arch='i386', os='linux', endian='little')
#context.log_level='debug'
 
'''payload design & excute'''
#payload = '\bin\sh'
#payload += '\x90'*0xf4
 
payload = "cat flag"
payload += " "* 245
payload += "*"
 
p.sendline(payload)
p.interactive()
cs

์ฝ”๋“œ์˜ ๊ตฌ์„ฑ์€ ์•ž์—์„œ ๋‹ค ์„ค๋ช…ํ–ˆ์œผ๋ฏ€๋กœ ๋„˜์–ด๊ฐ€๊ฒ ์Šต๋‹ˆ๋‹ค. ์‹ฌ์ง€์–ด ์–ด๋ ค์šด ๋ถ€๋ถ„๋„ ์•„๋‹ˆ๊ณ ์š”
์—ฌ๊ธฐ์„œ ์ƒˆ๋กญ๊ฒŒ ๋ณด์ด๋Š” ํ•ต์‹ฌ์€..

์ด ๋ถ€๋ถ„!

 

pwnlib.tubes.ssh — SSH — pwntools 4.8.0 documentation

A new SSH channel, or a path to a script if run=False.

docs.pwntools.com

์ด๊ฑฐ ํ•˜๋‚˜๋ฅผ ์ž˜ ๋ชฐ๋ผ์„œ processํ•˜๊ณ  ํ•ด๋‹น nc๋กœ ๋“ค์–ด๊ฐ€์„œ ํ•ด๋ณด๊ณ .. ํ•˜ 1์‹œ๊ฐ„์„ ๊ทธ๋ ‡๊ฒŒ ๋‚ ๋ ธ๋Š”๋ฐ
์•ž์œผ๋กœ๋Š” pwntools์˜ ๋ฌธ์„œ๋„ ์ข€ ๋” ๋ด๋ณด๊ณ  ๊ตฌ๊ธ€๋ง ์ข€ ๋Š˜๋ฆฌ๊ณ  ํ•ด์•ผ๊ฒ ๋„ค์š”

์—ฌ๊ธฐ์„œ ์›ํ•˜์‹œ๋Š” ๋น„์–ด์žˆ๋Š” ํฌํŠธ๋ฅผ ํ™•์ธํ•ด์ฃผ์‹œ๊ณ  ์‚ฌ์šฉํ•˜์‹œ๋ฉด..


์ฐธ๊ณ  ์ž๋ฃŒ

 

์ฐธ๊ณ  ์ด๋ฏธ์ง€