Description

Category: Pwnable

Source: TAMUctf 2019

Points: 463

Author: Jisoon Park(js00n.park)

Description:

nc pwn.tamuctf.com 4322

Difficulty: easy

pwn2

Write-up

어떤 함수를 실행할건지 물어보고 입력값을 select_func() 함수로 넘긴다.

막상 select_func() 함수에서는 입력한 값이 "one" 인지 아닌지만 검사하는 것 같다.

stack 구조를 살펴보자.

내가 입력한 값을 dest로 최대 0x1f 바이트만큼 복사하는데, dest 버퍼의 크기는 0x1e 바이트이고 dest 버퍼 다음은 v3 변수이다. 즉, v3 변수의 첫번째 바이트를 변조할 수 있다.

v3 변수는 상황에 따라 one() 또는 two() 함수의 주소를 갖고 있게 되는데, 첫번째 바이트가 변조된다는 소리는 호출되는 주소값의 마지막 한 바이트를 바꿀 수 있다는 뜻이다. (little endian이니까)

그럼 v3 변수가 default 값인 two 함수 주소를 갖고 있을 때 마지막 바이트를 변조해서 호출할 수 있는 곳에 뭐가 있는지 살펴보자. 너무 뻔하게도, print_flag() 라는 함수가 6D8 번지에 존재한다.

v3 변수의 첫번째 바이트를 D8로 변조하는 exploit을 작성하여 실행해보니 flag를 얻을 수 있었다.

Flag : gigem{4ll_17_74k35_15_0n3}

'writeups > Pwnable' 카테고리의 다른 글

Pwn4  (0) 2019.11.23
Pwn3  (0) 2019.11.23
Pwn1  (0) 2019.11.23
fd  (0) 2019.11.23
collision  (0) 2019.11.23

+ Recent posts