[pwnable] Dreamhack - Datestring
글쓴이는 pwnable 매우 매우 초보자이다.
- [문제 파악]
파일을 실행시켰을 때 년, 달, 날, 시, 분, 초를 입력받고 입력받은 걸 토대로 구성된 date를 보여주고 있다.
- [문제 해결]
밑의 사진은 main() 함수의 일부분이다. 보면 rbp-0x4 위치의 4바이트 값이 0이 아니라면 flag() 함수를 실행시킬 수 있다.
rbp-0x84
rbp-0x90
rbp-0x4 => 0x0
rbp-0x6c => Year 입력값
rbp-0x4c => Year - 0x76c 값 저장
rbp-0x68 => Month 입력값 후에 뭔가를 빼고 나누고 더한 거 같음
rbp-0x50 => rbp-0x68 값 저장
rbp-0x64 => Day 입력값 후에 뭔가를 빼고 나누고 더한 거 같음
rbp-0x54 => rbp-0x64 값 저장
rbp-0x70 => Hour 입력값 후에 뭔가를 나누고 곱하고 더한 거 같음
rbp-0x58 => rbp-0x70 값 저장
rbp-0x74 => Minute 입력값 후에 뭔가를 나누고 더하고 빼는 거 같음
rbp-0x5c => rbp-0x74 값 저장
rbp-0x78 => Second 입력값 후에 뭔가를 곱하고 나누고 더하는 거 같음
rbp-0x60 => rbp-0x78 값 저장
rbp-0x68 위치의 값을 2랑 비교하는 조건문이 있음.
rbp-0x20 => 뭐가 저장되어 있는 거지?
rbp-0x48 => 연산식
마지막에 rbp-0x50 위치의 값이 11이어야 하고 rbp-0x54 위치의 값이 25여야 하고 rbp-0x48 위치의 값이 0이어야 하고 rbp-0x4 위치의 값이 0이 아니라면 flag() 함수 실행된다.
- 작성해 본 익스플로잇 코드
rbp-0x4 위치의 값이 원래 0으로 저장되어 있는데 1로 바꾸려고 한다. 그래서 익스플로잇 코드를 짜봤지만 돌아가지 않는다. 수정이 필요해 보인다.
from pwn import *
p = remote('주소' , '포트')
payload = b'A' * 36
payload += b'25\n'
payload += b'B' * 3
payload += b'11\n'
payload += b'C' * 7
payload += b'0\n'
payload += b'D' * 67
payload += p64(1)
# 페이로드 전송
p.sendlineafter(b"Second: ", payload)
# 상호작용 모드 (결과 확인)
p.interactive()
- 문제 출처
https://dreamhack.io/wargame/challenges/1364