목록list (398)
y0u_bat
ROP ( Return Oriented Programming )는 BOF + 여러가지 미티게이션을 우회 할 수 있는 테크닉이다. 미티게이션이란?- 취약점을 막는게 아니라 취약점을 통한 익스플로잇을 막는것이다. 5개정도 있으며 아래 대중적으로 3개가 있다. 1. ASLR2. NX3. SSP 1. ALSR ( address sapce layout randomization의 약자) - 주소를 난수화 한다.- 거는방법 /proc/sys/kernel/randomize_va_space 값이 0이면 안걸림 1이면 반 2면 풀 aslr 해결책- 랜덤화 안해주는 주소값을 찾아서 이용하자 (정적영역)- 리눅스 32비트 로컬환경에서는 ulimit -s unlimit을 통해 스택의 크기를 풀로 늘려주자 2. NX ( Non ..
C언어 - strcpy 함수구현 ihaechan-ui-MacBook-Pro:C ihaechan$ vi strcpy.c #include void str_cpy(char *dst,char *src); int main(int argc,char *argv[]){ char buf1[] = "i'm love iu\n"; char buf2[] = "me to\n"; printf("%s\n",buf2); str_cpy(buf2,buf1); printf("%s\n",buf2); return 0;} void str_cpy(char *dst,char *src){ int i=0; while(dst[i] = src[i]) { i++; } }
C언어 - strchr 함수구현 #include int str_chr(char *p,char serarch); int main(int argc,char *argv[]){ char buffer[] = "test\n"; printf("%x\n",str_chr(buffer,'d')); } int str_chr(char *p,char serarch){ while(1) {if(*p == 0x0)return -1; if(*p == serarch) return p; *p++; } return 0; } 반환값: 1. 찾은 문자열를 가르키는 포인터 주소2. 못찾을 경우 반환값은 -1 그 포인터 주소로 해당 값을 바꾸거나 없애거나 가능 몇번째 해당문자열인지 알려면 ( 해당포인터주소 - 원래버퍼주소 + 1 ) 를 하면 된다.
strlen 함수 구현 int strlen(char *string){int i = 0 ;while(1) {if(string[i] == NULL) { return i; } i++; }}
system call == apiinterrput descriptor table (IDT)0 - timer8 - filoppy128 - System Service Descriptor Table (약자로 SSDT) ex) write 함수를 쓰고 싶다 하면, ssdt[4]() 이렇게 하면 write();가 완성된다.저기 있는 숫자는 syscall number 이다. syscall이란 - 시스템에 미리 만들어 놓은 함수를 이용하여 처리하는 것을 말한다. 호출은 인터럽터를 사용하며 리눅스는 IDT의 128번째인(int $0x80) 인터럽터를 사용한다. 우분투32비트 기준으로 /usr/include/asm/unistd_32.h 에서 syscall number를 볼수있다. 범용 레지스터eax(ax,ah,al) :곱..
Piaid CTF 2013 Ropasaurusrex 풀이 아이다로 바이너리 파일을 보면, 한눈에 바로 취약점이 보인다. 버퍼는 136바이트 페이로드. 간단히 ROP하시면 됩니다. 클리어! from socket import *import structimport time p = lambda x: struct.pack("
[CodeGate2014] nuclear 뉴클리어 풀이 buffer over flow 취약점이 start_routine 함수 안에 있으며, launch 하고 start_routine가 실행된다. launch할려면 패스코드가 필요하다. 메모리릭을 통해 패스코드를 구해준다. 간단히 s1,v4,v5만 꽉 채우면 메모리릭 되서 s(패스코드)를 볼수있다. 그다음 버퍼오버플로우 취약점을 찾았으니, 간단히 ROP하면 된다. 끄읏.!!
[Window] 2. 윈도우 버퍼오버플로우(여러가지 쉘코드로 점프) 1장에서는 jmp esp을 이용한 기본적인 BOF를 했었다. 2장에서는 쉘코드로 점프하는 여러 방법에 대해 설명 되어 있다. 방법은 여러가지 있다. 1. jmp or call // 1번문서와 같이 JMP ESP를 이용하는것이다 또는 Call esp를 이용하는 것이다.2. pop/return // pop과 ret을 이용하여 쉘코드로 이동하는것이다.3. push/return // push와 ret을 이용하여 쉘코드로 이동하는것이다.4. jmp [reg+offset] // jmp esp 할때 그버퍼가 esp 시작점에 위치하지 않을때 오프셋을 이용하여 쉘코드로 이동하는 것이다. 5. blind return // 6. 사용가능 버퍼가 제한되어 있..
[Window] 1. 윈도우 스택 버퍼 오버 플로우 예전에 이미 발견된 "Easy RM to MP3 Converter" 이라는 프로그램으로 실습했습니다. 이런식으로 생긴 프로그램이다. 여기서 어디가 취약하냐면, 플레이리스트를 로딩할때 버퍼오버플로우 취약점이 발견됩니다. 일단 플레이리스트의 확장자를 보니 m3u,pls,smi 등등 여러개 있는데 전부 다 됩니다. 전 pls를 확장자로 해보았습니다. 파이썬으로 확장자가 .pls로 되는 파일을 하나 만들고 그 내용을 대충 놉 3만개로 해줍니다. 그렇게 만들어진 파일을 한번 로딩 해보았습니다. 이런식으로 크래쉬까 뜨는걸 볼 수 있습니다. "문제에 관한 정보 자세히 보기" 를 누르면 저렇게 나오는데, 저기서 예외 오프셋을 보면 90909090으로 변해 있는걸 볼 ..
0x080485bb :lea ecx,[esp+0x4] 0x080485bf :and esp,0xfffffff0 0x080485c2 :push DWORD PTR [ecx-0x4] 0x080485c5 :push ebp 0x080485c6 :mov ebp,esp 0x080485c8 :push ecx 0x080485c9 :sub esp,0x84 0x080485cf :mov eax,ecx 0x080485d1 :mov edx,DWORD PTR [eax+0x4] 0x080485d4 :mov DWORD PTR [ebp-0x7c],edx 0x080485d7 :mov ecx,DWORD PTR gs:0x14 0x080485de :mov DWORD PTR [ebp-0xc],ecx 0x080485e1 :xor ecx,ecx 0x..