CTF write_up/Hack CTF

[Pwn] Offset

ws1004 2019. 9. 24. 00:27

 

해당 문제를 한번 실행해 보겠습니다.

 

checksec 명령어를 한번 입력해 보겠습니다.

 

IDA 32bit를 이용해서 열어보겠습니다.

 

gets 함수가 보이므로 bof 문제네요!

 

select_func함수로 입력한 변수 s의인자를 같이 전달 합니다.

 

전달받은 값을 dest 변수에 넣고 그 값이 one 이면 v3의 값을 one 함수로 보내는 기능을 하는 코드 입니다.

 

select_func함수의 변수 stack 모형을 한번 그려 보겠습니다.

 

|----------------|

| dest [ebp-2A] | == src

|----------------|

|   v3   [ebp-C] |

|----------------|

|   SFP  [ebp-0] |

|----------------|

|  RET  [ebp+4] |

|----------------|

|   src  [ebp+8] |

|----------------|

 

의 형태를 가지고 있습니다.

 

결국에는 v3의 주소로 return 되기 때문에 v3의 주소를 print_flag 함수로 변조 하면 될 것 같습니다.

 

dest와 v3의 거리는 2A-C = 0x1E이기 때문에 dummy값 30개를 넣고 나서 그뒤로 더입력을 하면 v3가 덮히게 됩니다.

 

print_flag()의 주소는 다음과 같습니다.

 

0x6D8 입니다.

 

exploit code를 작성해 보겠습니다.

 

 

Flag : HackCTF{76155655017129668567067265451379677609132507783606}