서브웨이

pwnable.kr bof 풀이 본문

Pwnable/pwnable.kr

pwnable.kr bof 풀이

샌드위치메이커 2020. 2. 4. 22:58

언젠가 한번쯤은 들어본 BOF를 풀어봅시다.

일단 BOF(Buffer OverFlow)에 관한 설명은 아래에서 확인하시면 될 것 같습니다.

https://namu.wiki/w/%EB%B2%84%ED%8D%BC%20%EC%98%A4%EB%B2%84%ED%94%8C%EB%A1%9C

 

버퍼 오버플로 - 나무위키

이 저작물은 CC BY-NC-SA 2.0 KR에 따라 이용할 수 있습니다. (단, 라이선스가 명시된 일부 문서 및 삽화 제외) 기여하신 문서의 저작권은 각 기여자에게 있으며, 각 기여자는 기여하신 부분의 저작권을 갖습니다. 나무위키는 백과사전이 아니며 검증되지 않았거나, 편향적이거나, 잘못된 서술이 있을 수 있습니다. 나무위키는 위키위키입니다. 여러분이 직접 문서를 고칠 수 있으며, 다른 사람의 의견을 원할 경우 직접 토론을 발제할 수 있습니다.

namu.wiki

일단 코드를 봅시다.

딱봐도 overflowme배열을 오버플로우 시켜서 key값을 deadbeef에서 cafebabe로 바꿔야합니다.

일단 이 문제를 풀려면 스택프레임의 구조에 대해서 알고 있어야합니다.

http://www.soen.kr/book/ccpp/annex/c2.htm

 

http://www.soen.kr/book/ccpp/annex/c2.htm

2.호출 규약 1.스택 호출 규약(Calling Convention)은 함수를 호출하는 방식에 대한 약속이다. 인수는 어떻게 전달하고 리턴값은 어떻게 반환하며 함수 호출을 위해 사용한 메모리는 누가 정리할 것인가를 규정한다. 일종의 약속이므로 양쪽이 정해진 규칙대로 보조를 맞추어야 정상 동작한다. 호출 규약은 컴파일러 내부의 일이라 함수를 사용하기만 한다면 몰라도 큰 지장이 없다. 하지만 이 과정을 이해하면 문법에 대한 자신감이 생기고 민감한 에러 상황에

www.soen.kr

자세한 내용은 위를 참조해주세요.

코드를 보고 스택프레임을 대충 예상해서 그려보면

이런식일겁니다.

한번 gdb로 확인해봅시다.

main을 확인했으니 func을 봅시다.

c코드와 비교해보면 첫번째 call은 printf, 두번째는 gets, 세번째는 system, 네번째는 printf라는 것을 알 수 있습니다.

그리고 어셈코드를 보면

예상했던 그림과 같이 ebp+8에 key가 위치하는 것을 알 수 있고

gets 함수의 인자가 overflowme이므로 ebp-0x2c에 overflowme가 위치하는 것을 알 수 있습니다.

그럼 예상했던 그림과 다르게 ebp와 overflowme사이에 12바이트의 무엇인가가 끼어있게 됩니다.

따라서 위와 같이 스택프레임이 구성됩니다.

그러므로 52바이트를 아무값으로 채우면 key 값을 수정할 수 있게됩니다.

간단하게 파이썬을 사용합니다.

짜잔

'Pwnable > pwnable.kr' 카테고리의 다른 글

pwnable.kr random 풀이  (0) 2020.08.11
pwnable.kr passcode 풀이  (0) 2020.07.21
pwnable.kr flag 풀이  (0) 2020.02.18
pwnable.kr collision 풀이  (0) 2020.01.29
pwnable.kr fd 풀이  (0) 2020.01.28
Comments