오늘은 Pwnable 3번째 문제, "내 버퍼가 흘러넘친다!!!"를 풀어보겠다. 우선 바이너리를 체크하니 아무것도 걸려 있지 않았다. 따라서 쉘코드를 충분히 사용할 수 있고, RET 변조가 가능하다. read 함수와 gets 함수가 있는데, 함수의 에필로그까지 간 다음 RET가 존재하므로 gets에서 BOF를 일으키면 된다. 그런데 s의 크기가 20byte밖에 되지 않아 쉘코드를 저장할 수 없다. 따라서 버퍼에 더미값을 넣고 쉘코드를 버퍼 밖에 저장한 뒤, RET를 변조하여 쉘코드 주소를 가리키게 하면 flag를 획득할 수 있을 것이다. 우선 gdb로 stack을 활용하기 위한 준비 과정을 거쳐보자. gets 다음 main+78에 break를 걸면 될 것이다. 0x41부분은 buffer이고, 0x42부분..