본문 바로가기

Security118

[pwnable.kr] Toddler's Bottle - cmd1 이번에는 cmd1 문제를 풀어보았다. 문제를 읽어보니 리눅스에서 PATH enviornment가 뭐냐고 묻고 있다. 아마도 이번 문제는 이와 관련한 문제인 것 같다. 아래에 적혀있는 명령어로 접속해준다. 접속 완료했다. 파일 리스트는 이 정도 있다는 것을 확인한 뒤 cmd1.c 파일의 내용을 살펴봤다. 먼저 main 함수를 살펴보았다. int main(int argc, char* argv[], char** envp){ putenv("PATH=/thankyouverymuch"); if(filter(argv[1])) return 0; system( argv[1] ); return 0; } 먼저, 낯선 함수 putenv를 살펴보았다. putenv는 환경변수의 내용을 수정하거나 추가하는데 사용된다. key=va.. 2022. 5. 7.
[pwnable.kr] Toddler's Bottle - bof 이번에는 bof 문제를 풀어보았다. 문제를 읽어보니 버퍼 오버플로우가 가장 흔한 소프트웨어 취약점이라고만 한다. 버퍼 오버플로우와 관련이 있는 문제라는 것만 알고 넘어가자. 문제에 있는 다운로드 링크를 통해, 바이너리와 c파일을 받아준다. 아래에 있는 nc 명령어는 나중에 거기로 접속해서 플래그를 획득하면 되니 일단은 넘어가자. 다운 받은 c파일을 열어 코드를 확인해보았다. #include #include #include void func(int key){ char overflowme[32]; printf("overflow me : "); gets(overflowme);// smash me! if(key == 0xcafebabe){ system("/bin/sh"); } else{ printf("Nah.... 2022. 5. 7.
[Dreamhack Reverse Engineering] STAGE 4 [x86 Assembly] 1. 어셈블리 언어 1) 어셈블리 언어 - 컴퓨터의 기계어와 치환되는 언어 - CPU에 사용되는 ISA의 종류만큼 많은 수의 어셈블리어가 존재 ex. x64에는 x64의 어셈블리어 존재 2. x64 어셈블리 언어 1) 기본 구조 - 명령어 + 피연산자로 구성 - 명령어 : 동사에 해당 - 피연산자 : 목적어에 해당 - 예시 2) 명령어 데이터 이동 mov, lea 산술 연산 inc, dec, add, sub 논리 연산 and, or, xor, not 비교 cmp, test 분기 jmp, je, jg 스택 push, pop 프로시저 call, ret, leave 시스템 콜 syscall 3) 피연산자 - 상수, 레지스터, 메모리 - 메모리 피연산자는 []으로 둘러싸인 것으로 표현.. 2022. 5. 6.
[pwnable.kr] Toddler's Bottle - input 이번에는 input 문제를 풀어보았다. 그냥 컴퓨터 프로그램에 input을 어떻게 전달할 수 있냐고 물어보고 있다. 별 의미는 없는 것 같다. 아래에 있는 명령어를 통해 접속해준다. 접속 완료했다. 파일 리스트는 이 정도 있다는 것을 확인한 뒤 cat으로 input.c 내용을 살펴보았다. 너무 길어서 캡쳐보다는 코드를 긁어와서 아래에 가져왔다. #include #include #include #include #include int main(int argc, char* argv[], char* envp[]){ printf("Welcome to pwnable.kr\n"); printf("Let's see if you know how to give input to program\n"); printf("Just.. 2022. 5. 5.
[Dreamhack Reverse Engineering] STAGE 3 [Computer Architecture] 1. 컴퓨터 구조 1) 컴퓨터 구조 - 컴퓨터가 효율적으로 작동할 수 있도록 하드웨어 및 소프트웨어의 기능을 고안하고 이들을 구성하는 방법 - 컴퓨터 기능 구조에 대한 설계, 명령어 집합구조, 마이크로 아키텍처, 기타 하드웨어 및 컴퓨팅 방법에 대한 설계 포함 2) 컴퓨터 기능 구조에 대한 설계 - 효율적인 연산을 위해 컴퓨터에 필요한 기능들을 고민, 설계하는 분야 - ex. 폰 노이만 구조, 하버드 구조, 수정된 하버드 구조 3) 명령어 집합구조(CPU 명령어에 대한 설계) - CPU가 처리해야하는 명령어 설계하는 분야 - ex. ARM, MIPS, AVR, 인텔의 x86 및 x86-64 등 2. 폰 노이만 구조 1) 컴퓨터의 핵심 기능 - 연산, 제어, 저장.. 2022. 4. 28.
[Dreamhack Reverse Engineering] STAGE 2 [Binary] 1. 프로그램과 컴파일 1) 프로그램 - 연산 장치가 수행해야 하는 동작을 정의한 일종의 문서 - 프로그램을 연산 장치에 전달하면, CPU는 적혀있는 명령들을 처리하여 프로그래머가 의도한 동작을 수행함 - 소프트웨어 개발자, 해커 등 많은 정보 분야의 엔지니어들이 프로그램을 '바이너리'라고 부름 Stored-Program Computer에서 프로그램이 저장 장치에 이진 형태로 저장되기 때문 2) 컴파일러 - 소스 코드 : CPU가 수행해야 할 명령들을 프로그래밍 언어로 작성한 것 - 컴파일 : 소스 코드를 컴퓨터가 이해할 수 있는 기계어의 형식으로 번역하는 것 - 컴파일러 : 컴파일을 해주는 소프트웨어 - 대표적인 컴파일러 : GCC, Clang, MSVC 3) 인터프리터 - 모든 언어가.. 2022. 4. 28.
[Dreamhack Reverse Engineering] STAGE 1 [소개] 1. 리버스 엔지니어링 1) 리버스 엔지니어링 - 엔지니어링 : 완성품과 이를 구성하는 부품들의 기능과 설계를 고안하고 제작하는 과정 - 리버스 엔지니어링 : 엔지니어링 과정을 거꾸로 하는 행위 - 완성된 제품을 해체하고 분석하여 구조와 기능, 디자인을 파악 - 리버스 엔지니어링 or 리버싱이라고 함 2) 리버싱의 분야 - 약의 성분을 분석하는 것 - 자동차의 주행 원리를 이해하는 것 - 전자 제품의 회로를 분석하는 것 - 등등...이 있지만 여기서 다룰 것은 소프트웨어를 대상으로 한 리버싱 2. 리버싱의 용도 1) 좋은 사례 - 판매된 지 너무 오래되어 제작사가 이미 개발을 중단한 프로그램에 대한 패치가 필요할 때 매우 효과적 - 각종 프로그램의 보안성 평가 (얼마나 안전하게 설계되었는지 알아.. 2022. 4. 28.
[Digital Forensic] 네트워크 1. 네트워크 기초 1) 네트워크 - Net + work의 합성어 - 컴퓨터들이 통신 기술을 이용하여 그물망처럼 연결된 통신 이용 형태를 의미 - 두 대 이상의 컴퓨터들을 연결하고 서로 통신할 수 있는 것 - 어떤 연결을 통해 컴퓨터의 자원을 공유하는 것 2) 네트워크의 장단점 ① 장점 - 파일 공유를 통해 다른 네트워크에 있는 컴퓨터의 파일에 접근 가능 - 미디어 스트리밍으로 디지털 미디어를 네트워크를 통해 재생할 수 있음 - 광대역 인터넷 연결을 공유할 수 있게 되어 각 PC마다 별도의 인터넷 계정을 구입할 필요가 없음 - 무선전파를 이용한 무선 네트워크로 책상에서 벗어나 웹작업을 할 수 있음 ② 단점 - 바이러스나 악성코드, 원치 않는 정보를 받게 됨 - 해킹으로 인한 개인 정보 유출 - 데이터 변.. 2022. 4. 28.
[Digital Forensic] 기초암호학 1. 암호학 기초 1) 암호학 - 암호에 관련된 기술 - 정보 보호와 관련된 수학적 방법론 등을 다룸 2) 암호학 용어 - 평문 (Plain Text) : 암호화되지 않은 원본 텍스트 - 암호문 (Cipher text) : 암호화된 판독할 수 없는 텍스트 - 암호화 (Encryption) : 평문을 암호문으로 바꾸는 것 - 복호화 (Decryption) : 암호문을 평문으로 바꾸는 것 3) 암호학 기본 요소 ① 평문 ② 알고리즘 : 암복호화할 때 사용하는 순차적인 계산 절차 ③ 키 : 암호화에 임의성을 추가하기 위한 임의의 값 다른 사용자가 같은 알고리즘을 가지고 있더라도 키를 이용하여 암호화를 했다면 복호화할 때 같은 알고리즘 + 키가 필요 4) 암호학 기능 - 기밀성 : 허가 받은 사용자가 아니면 내.. 2022. 4. 5.