본문 바로가기

전체 글

(47)
[DreamHack] basic_exploitation_001 드림핵 System Hacking 워게임 basic_exploitation_001 문제이다. #include #include #include #include void alarm_handler() { puts("TIME OUT"); exit(-1); } void initialize() { setvbuf(stdin, NULL, _IONBF, 0); setvbuf(stdout, NULL, _IONBF, 0); signal(SIGALRM, alarm_handler); alarm(30); } void read_flag() { system("cat /flag"); } int main(int argc, char *argv[]) { char buf[0x80]; initialize(); gets(buf); return ..
[DreamHack] basic_exploitation_000 드림핵 System Hacking 워게임 basic_exploitation_000 문제이다. #include #include #include #include void alarm_handler() { puts("TIME OUT"); exit(-1); } void initialize() { setvbuf(stdin, NULL, _IONBF, 0); setvbuf(stdout, NULL, _IONBF, 0); signal(SIGALRM, alarm_handler); alarm(30); } int main(int argc, char *argv[]) { char buf[0x80]; initialize(); printf("buf = (%p)\n", buf); scanf("%141s", buf); return 0; ..
[DreamHack] Return Address Overwrite 드림핵 System Hacking 워게임 Return Address Overwrite 문제이다. #include #include void init() { setvbuf(stdin, 0, 2, 0); setvbuf(stdout, 0, 2, 0); } void get_shell() { char *cmd = "/bin/sh"; char *args[] = {cmd, NULL}; execve(cmd, args, NULL); } int main() { char buf[0x28]; init(); printf("Input: "); scanf("%s", buf); return 0; } 1. 프로그램 분석 크기가 40바이트인 버퍼에 scanf로 입력받은 문자열을 저장하는 프로그램이다. 2. 취약점 분석 scanf("%s"..
[System Hacking] Stack Buffer Overflow 1. 버퍼 버퍼는 데이터가 목적지로 이동되기 전에 보관되는 임시 저장소이다. 데이터의 처리 속도가 다른 두 장치가 있을 때, 둘 사이에 오가는 데이터를 임시로 저장해 두는 것을 완충 작용이라고 한다. 데이터의 처리 속도가 다른 두 장치 사이에 별도의 장치가 없다면, 유실되는 데이터가 발생한다. 이런 문제를 해결하고자 수신 측과 송신측 사이에 버퍼라는 임시 저장소를 두고, 이를 통해 간접적으로 데이터를 전달하게 한다. 즉, 송신 측은 버퍼로 데이터를 전송하고, 수신 측은 버퍼에서 데이터를 꺼내 사용한다. 이렇게 버퍼를 이용하면 버퍼가 가득 찰 때까지 유실되는 데이터 없이 통신할 수 있다. 스택에 있는 지역 변수는 스택 버퍼, 힙에 할당된 메모리 영역은 힙 버퍼라고 한다. 2. 버퍼 오버플로우 버퍼 오버플로..
[System Hacking] 함수 호출 규약 1. 함수 호출 규약 함수 호출 규약은 함수의 호출 및 반환에 대한 약속이다. 한 함수에서 다른 함수를 호출하면 프로그램의 실행 흐름은 다른 함수로 이동한다. 그리고 호출한 함수를 반환하면 원래 함수로 돌아와서 기존의 실행 흐름을 이어간다. 그러므로 함수를 호출할 때는 반환된 이후를 위해 호출자의 상태(Stack frame) 및 반환 주소(Return address)를 저장해야 한다. 또한 호출자는 피호출자가 요구하는 인자를 전달해줘야 하며, 피호출자의 실행이 종료될 때는 반환 값을 전달받아야 한다. 함수 호출 규약을 적용하는 것은 일반적으로 컴파일러의 몫이다. 그러나 컴파일러의 도움 없이 어셈블리 코드를 작성하거나 어셈블리로 작성된 코드를 읽고자 한다면 함수 호출 규약을 알아야 할 필요가 있다. 컴파일..
[Cryptography] Diffie-Hellman에 대한 중간자 공격 Diffie-Hellman에 대한 중간자 공격에 대하여 공부하기 위해 Diffie-Hellman 알고리즘에 대하여 알아야 한다. Diffie-Hellman 알고리즘에 대한 참고 링크이다. 7. Diffie-Hellman 알고리즘 저번 시간에는 운영모드에 대하여 공부하였다. 이번 시간은 공개 키 교환 알고리즘인 Diffie-Hellman 알고리즘에 대하여 공부할 것이다. 밑에 링크는 공개 키 교환 알고리즘을 공부하기 위해 합동식 sungw00k.tistory.com 1. Diffie-Hellman에 대한 중간자 공격 중간자 공격은 네트워크로 통신하는 두 주체는 서로의 신원을 확인하기 어렵다는 네크워크 특성을 이용한 공격이다. 일반적으로 네트워크에서 발생하는 공격은 공격자가 통신에 개입하지 않으면 1) 수동..
7. Diffie-Hellman 알고리즘 저번 시간에는 운영모드에 대하여 공부하였다. 이번 시간은 공개 키 교환 알고리즘인 Diffie-Hellman 알고리즘에 대하여 공부할 것이다. 밑에 링크는 공개 키 교환 알고리즘을 공부하기 위해 합동식에 대한 참고 자료 링크이다. 1. 암호학 개념 - 암호학에 대하여 공부를 시작 - 정보보안기사책과 드림핵을 보며 공부 할 것이다. 이번 시간은 암호학을 공부하기 위해 필요한 개념에 대하여 공부한다. 1. 암호학 암호학은 정보를 보호하기 sungw00k.tistory.com 1. Diffie-Hellman 알고리즘 배경 대칭키 암호는 안전하게 암호화할 수 있는 암호 기술이지만, 수신자와 송신자가 같은 키를 공유해야 한다. 그러므로 수신자와 송신자가 대칭키 암호 시스템을 사용하여 통신하려면 데이터를 교환하기 ..
[DreamHack] Shell_basic ※ [DreamHack] Shell_basic 문제 조건 1 : 입력한 셸코드가 실행되는 프로그램이다. 조건 2 : execve, execveat 시스템 콜을 사용하지 못한다. 조건 3 : flag 위치와 이름은 "/home/shell_basic/flag_name_is_loooooong"이다. ※ 풀이 조건 1을 통해 셸코드를 입력하면 실행되기 때문에 원하는 동작을 하는 셸코드를 작성해서 입력하여 flag 파일을 읽는다. 조건 2를 통해 셸을 획득하기 위해 execve 시스템 콜을 사용하면 안된다. 조건 3을 통해 flag 파일의 위치와 이름을 알기 때문에 파일을 읽고 출력하는 orw 셸코드를 작성해서 입력하면 flag 파일을 읽고 출력할 수 있다. orw 셸코드 작성법은 밑에 링크를 참조 [System..