시스템 해킹

 1576, 1/79 회원가입  로그인  
   ewqqw
   버퍼오버플로우 질문....

http://www.hackerschool.org/HS_Boards/zboard.php?AllArticle=true&no=1856 [복사]


#include<stdio.h>
#include<string.h>

int main(int argc, char* argv[]){
        int check1 = 0x200a0b00;
        int check2 = 0xaabbccdd;
        char buffer[20];
        strcpy(buffer, argv[1]);
        if(check2==0x11223344)
                if(check1==0x200a0b00)
                        system("/bin/sh");
}

.. 인데요

그 해커스쿨 BOF왕기초편으로 공부하면서  어떻게 해보려고 시도했습니다.

메모리에 쌓이는 순서가

| BUFFER[20] | check2 | check1 | 이잖아요...  그래서 인자값넣고

./BOF1 AAAAAAAAAAAAAAAAAAAA(20개)`perl -e 'print "\x44\x33\x22\x11"''perl -e 'print "\x00\x0b\x0a\x20"'` 했는데
안되더라구요 ㅎㅎㅎ (little edian 적용 했습니다)

조언부탁드려요 ㅠㅠ

  Hit : 3136     Date : 2017/04/16 02:36



    
해쿨러 buffer가 20인지는 알 수 없습니다
gdb로 strcpy의 첫번째 인자를 가져올 때 lea 0x~~(%ebp), %~~ 에서 ebp오프셋을 보셔야 하고
0x11223344랑 비교하는 값을 가져올때 어떻게 가져오는지 봐서 스택에서 두개 차이가 얼마나 나는지 확인해야합ㄴ디ㅏ
그리고 check1은 이미 같은값을 같은값으로 비교하니 덮을 필요가없습니다 덮을수도 없구요 널바이트때문에
2017/04/16  
pwnnnt 해쿨러님의 좋은 말씀처럼, gcc 일정 버전 이상부터는 dummy 값이 스택에 붙기 때문에 실제 buffer의 주소가 ebp-20인지 알 수 없습니다. 2017/04/16