본문 바로가기

Learning/└◆Reversing

[참고] ln 명령어의 대해서 ln 명령어에 대해서 NAME ln - make links between files SYNOPSIS ln [OPTION]... TARGET [LINK_NAME] ln [OPTION]... TARGET... DIRECTORY ln [OPTION]... --target-directory=DIRECTORY TARGET... DESCRIPTION Create a link to the specified TARGET with optional LINK_NAME. If LINK_NAME is omitted, a link with the same basename as the TARGET is created in the current directory. When using the second form with more t.. 더보기
05_Level5 -> Level6[FTZ] 레이스 컨디션 스크립트 만들기 ■ Level5 -> Level6 ■ 목적 레이스 컨디션(Race Condition, 경쟁상태/경쟁조건) 다수의 프로세스가 서로 동일한 자원을 할당받기 위해 경쟁하는 상태. 예) 웹 사이트 뒤로 누르면 뒤로 안가는 사이트가 있다. 뒤로 보내줘야하지만 보안상 못가게 점검한다. 뒤로를 굉장히 빠르게 누르면 뒤로 넘어갈 수 있다. 코딩의 문제이며, 레이스컨디션의 예제로 들수 있다. (경쟁하다가 프로그래머가 생각하지 못한것이 발생할 수 있다.) CPU스케줄링 -현재 Round Robin방식이 가장 많이 사용되고 있다. -SJF는 짧은 작업이 게속들어오면 긴작없이 중요하지만 실행할 수 없는 단점이 생긴다. -RR은 일정한 단위로 작업을 쪼개서 작업하기 때문에, 운영체제의 속도보다 CPU속도가 천배는 빠르기 때문에.. 더보기
05_Level4 -> Level5[FTZ] xinetd 방식 여러가지 로컬/원격 백도어 ■ Level4 -> Level5 목적 xinetd 방식(원격 백도어) xinetd 방식에 대한 이해 (용어) 로컬백도어/원격백도어 원격에서 백도어를 이용해 권한을 얻어낼 때 xinetd 방식을 사용한다. [참고] xinetd 방식에 대해서 ■ 서버에서 서비스 하는 방법의 종류 standalone 방식의 서비스(EX: web, mail) 서버에서 서비스 데몬을 직접 띄워 놓고 서비스 하는 방식 xinetd 방식의 서비스(EX: telnet) 서버에서 xinetd 데몬을 띄워 놓고 클라이언트가 서비스 요청을 하면 그때 xinetd 데몬이 적당한 데몬을 띄워주는 방식 standalone & xinetd 방식의 차이점 ■ standalone 방식의 서비스(EX: web) -> 서비스 요청이 많은 경우에 적당 .. 더보기
04_Level3 -> Level4[FTZ] system() 함수의 취약점 분석 ■ Level3 -> Level4 목적 system() 함수의 취약점 ■ Level4 문제에 도전하기 level3 사용자로 로그인 -> ID/PASS: level3/can you fly? [level3@ftz level3]$ ls -l 합계 12 -rw-r--r-- 1 root root 543 11월 26 2000 hint drwxr-xr-x 2 root level3 4096 2월 24 2002 public_html drwxrwxr-x 2 root level3 4096 1월 15 2009 tmp [level3@ftz level3]$ cat hint 다음 코드는 autodig의 소스이다. #include #include #include int main(int argc, char **argv){ char c.. 더보기
03_level2 -> level3[FTZ] vi 편집기 백도어 ■ Level2 -> Level3 목적 편집기 사용법 ) --> ) --> ) --> ■ Level2 문제에 도전하기 ) --> level2 사용자로 로그인 -> ID/PASS: level2/hacker or cracker ) --> [level2@ftz level2]$ ls -l -rw-r--r-- 1 root root 60 3월 23 2000 hint drwxr-xr-x 2 root level2 4096 2월 24 2002 public_html drwxrwxr-x 2 root level2 4096 1월 16 2009 tmp ) --> [level2@ftz level2]$ cat hint ) --> 텍스트 파일 편집 중 쉘의 명령을 실행시킬 수 있다는데... ) --> ) --> [level2@ftz .. 더보기
[실습] C언어 코드와 어셈블리 언어 코드 테이블 제작 C 언어 코드와 어셈블리 언어 코드 테이블 #include(){ } 0x080482f4 : push %ebp 0x080482f5 : mov %esp,%ebp 0x080482f7 : sub $0x8,%esp 0x080482fa : and $0xfffffff0,%esp 0x080482fd : mov $0x0,%eax 0x08048302 : sub %eax,%esp 0x08048304 : leave 0x08048305 : ret 0x08048306 : nop 0x08048307 : nop #include(){ printf(""); } 0x08048328 : push %ebp 0x08048329 : mov %esp,%ebp 0x0804832b : sub $0x8,%esp 0x0804832e : and $0xff.. 더보기
[과제] gdb(디버거) 사용법 gdb(디버거) 사용법에 대한 조사. [시스템 해킹] gdb(디버거) 사용방법 GDB? GDB는 GNU Debugger의 약자로 Console debugger이다. 먼저 디버깅을 수행하기 위해서는 소스코드를 컴파일할 때 디버깅 정보를 포함하도록 해야한다. gcc에서 이에 해당하는 옵션은 -g 이다. Windows - OllyDBG Linux - GDB 사용방법 ㄱ) $ gdb a.out (gdb -q a.out) 따로 설정 하지 않으면 AT&T기반의 소스코드 사용 (gdb) set dis intel Intel 기반으로 변경 가능 ㄴ) (gdb) disassemble main 메인함수 검색 (gdb) break *주소값 Break Point 설정 (gdb) delete 번호 B.P 삭제 ㄷ) (gdb) R.. 더보기
[참고]어셈블리 예제 [EX] sample.c (C 언어 작성) --- 변환 --> sample.a (어셈블리어) $ cd $ cd tmp $ vi sample.c int function(int a, int b){ char buffer[10]; a = a + b; return a; } int main(void){ int c; c = function(1,2); return 0; } $ gcc -S -o sample.a sample.c $ ls -l -rw-rw-r-- 1 level1 level1 570 11월 25 12:17 sample.a -rw-rw-r-- 1 level1 level1 131 11월 25 12:16 sample.c $ file * sample.a: ASCII assembler program text samp.. 더보기
[참고]어셈블리어의 기본 문법과 명령 어셈블리어의 기본 문법과 명령 어셈블리 명령어는 상당히 많다. 하지만 어셈블리언어로 코딩이 아닌 디버깅을 목적으로 하기 때문에 필수적으로 알아야할 기본적인 명령어만 알아두어도 좋다. 또한 기본 문법과 명령을 공부할때 막연하게 암기 하는 것 보다 좋은 예제를 통해서 그때그때 필요한 명령어를 찾아보는식으로 공부하는게 좋다. PUSH,POP 스택에 값을 집어넣는걸 PUSH, 스택에 있는 값을 가져오는 것이 POP이다. MOV MOV는 MOVE라고 해석할 수 있는데. 여기서는 값을 넣는다는 표현이 어울린다. 예로 MOV eax,ecx는 ecx를 eax에 넣는다라는 표현이다. LEA LEA는 MOV와 비슷한 명령이다. 차이점이라면 MOV는 값을 가져오는 것이고 LEA는 값이 들어있는 주소값을 가져온다 라는 뜻이다.. 더보기
[참고]어셈블리 언어에 대해서_2 (5) 어셈블리(Assembly) (5-1) 용어 ■ 기계어 종류 : 각 CPU 마다 고유 기계어가 있음 모양 : CPU가 바로 해독할 수 있는 0과 1로 구성 특징 : 사람이 이해하기 어려움 기타 : 컴파일을 할 필요가 없음 ■ 어셈블리어 종류 : 각 CPU 마다 고유 어셈블리어 존재 모양 : 사람이 이해하기 쉽도록 OP-CODE 사용 특징 : 기계어와 1:1로 모든 명령이 대응 기타 : 어셈블러를 통해 기계어로 컴파일 해야 함 ■ 어셈블리(Assembly) 소개 기계어 어셈블리어 고급언어 55 98ES 83EC 08 C70424 57000000 E8 7E050000 C9 C3 PUSH EBP MOV EBP,ESP SUB ESP,8 MOV DWORD PTR [ESP],57 CALL LEAVE RETN .. 더보기
[참고]어셈블리 언어에 대해서 어셈블리(Assembly) 언어 1. 리버스 엔지니어링 (1) 리버스 엔지니어링(Reverse Engineering, Reversing)이란? 리버스 엔지니어링(Reverse Engineering)은 인조물로 부터 청사진을 얻는 것에서 유래되었다. 이진 코드로 되어 있는 실행 파일을 분석하려는 일련의 행위이다. 소프트웨어를 분석하고 동작을 해명해나가는 것을 리버스 엔지니어링이라 부른다. 이것은 멀웨어(Malware, 악성코드)에 한정하지 않고 일반적인 소프트웨어를 분석하는 것을 말하기 때문에, 컴퓨터 보안과 관계가 없는 곳에서도 사용된다. (2) 리버스 엔지니어링의 종류 보안적 관점 소프트웨어를 개발 후 개발된 제품에 대해 암호화 알고리즘과 관련된 보안의 평가 해커들이 운영체제/애플리케이션의 취약점을 분.. 더보기
02_level1 -> level2[FTZ] 백도어에 대한 이해와 디버깅 동작 ■ Level1 -> Level2 ■ 목적 백도어(Backdoor)에 대한 이해 ■ 백도어란? 악의적인 프로그램(뒷문) 악의적인 사용자가 시스템의 보안 헛점을 응용하는 고의로 만들어진 프로그램이다. 목적은 시스템에 대한 사용자 인증 등 정상적인 절차를 거치지 않고 응용프로그램 또는 시스템에 접근할 수 있는 프로그램. ■ level1 문제 [level1]$ cd [level1]$ ls -l total 12 -rw-r--r-- 1 root root 47 Apr 4 2000 hint drwxr-xr-x 2 root level1 4096 Dec 7 2003 public_html drwxrwxr-x 2 root level1 4096 Aug 19 21:45 tmp [level1]$ cat hint level2 권한.. 더보기
01_시스템해킹 리버싱 FTZ를 리버싱의 주제로 선정한 이유는 FTZ에 각 LEVEL 에서 사용하는 소스의 목적을 분석하고 그에 맞는 의사 코드를 gdb를 이용해 디버깅하여 리버싱을 통해 복원해보는 과정을 주로 다루며 원본 코드 소스와 비교 해보는 과정을 학습하기 위함이다. 최종 목적은 level15이후의 버퍼 오버 플로우를 공부하고 그 단원의 코드를 분석해보는 것에 있다. 참고자료 Reverse Engineering on HackMe System 학습목표 ■ 리버싱을 통한 의사 코드(가상 코드) 생성 ■ exploit 코드 개발 상대편의 취약성을 공격하는 코드 HackMe(ftz.hackerschool.org) 참고 사이트 : http//inhack.org/wordpress/?cat=68 문제 풀이에 대한 참고 사이트 htt.. 더보기