
코드를 살펴보겠습니다.FLAG 변수에 flag.txt의 내용을 저장하고, users에 사용자명과 비밀번호를 딕셔너리 형태로 저장합니다. 그리고 session_storage 라는 세션을 저장할 빈 딕셔너리를 하나 만듭니다.루트 경로에서는 sessionid 쿠키의 값을

문제 먼저 문제 코드를 살펴보겠습니다. 풀이 코드를 부분별로 분석해 보곘습니다. 먼저 try문으로 flag.txt 파일에 존재하는 플래그를 FLAG 변수에 저장합니다. 사용자 정보가 { 계정 : 비밀번호 } 형태의 딕셔너리로 저장됩니다. @app.route(
해시 함수(Hash Function)는 임의 데이터를 입력으로 받아서 고정된 크기의 데이터를 반환하는 함수입니다. 여기서 반환된 데이터를 해시 값(Hash Value)이라고 부릅니다.해시함수중는 암호학적 해시함수(Cryptographic Hash Function)와 비
많은 고전 암호에서는 송신자와 수신자가 같은 키를 가지고 있어야 했습니다. 이처럼 송신자와 수신자가 같은 키를 공유해야 하는 암호 시스템을 대칭키 암호 시스템(Symmetric key cryptosystem)이라고 부릅니다.같은 키를 공유하는 특성상, 대칭키 암호 시스

고전 암호는 컴퓨터와 같은 고성능 연산 장치가 발명되기 이전에, 비교적 간단한 기계나 손 등으로 암복호화를 수행하던 암호를 말합니다. 대부분 컴퓨터를 사용하면 쉽게 복호화할 수 있기 때문에 현대에는 사용되지 않습니다.고대 암호는 일반적으로 치환(Substitution

위의 Patch.exe를 실행한 화면을 보면 플래그 부분이 볼 수 없게 칠해져 있음을 확인할 수 있습니다.Patch 문제는 WinAPI를 이용해 만들어진 GUI 프로그램이기 때문에 main함수 대신 WinMain 함수를 찾아야 합니다. 그럼 IDA로 WinMain 함수

IDA를 사용해 main 함수를 디컴파일 해보겠습니다.memset 이후에 printf 함수와 scanf 함수가 실행됩니다.if문의 조건인 sub_140001000 함수를 살펴보겠습니다.for문을 살펴보면 aC4 \* i와 a1i를 11바이트만큼 비교하여 같으면 1을 리

문제 풀이 문제 파일인 chall1.exe 파일을 IDA에서 실행해보겠습니다. 아래는 main 함수를 디컴파일한 코드입니다.
윈도우의 PE 파일은 PE 헤더와 1개 이상의 섹션으로 구성되어 있습니다. 여기서 섹션이란, 유사한 용도로 사용되는 데이터가 모여있는 영역입니다.셋견에 대한 정보는 PE 헤더에 적혀있습니다. PE 헤더에 저장되는 섹션과 관련된 데이터 중, 중요한 것은 다음과 같습니다.

Partial RELRO만 적용되어 있습니다.문제의 압축파일을 해제했는데 소스 파일이 없습니다. 이런 경우 IDA같은 툴을 사용해 디컴파일을 하여 문제를 해결할 수 있습니다.다음은 IDA로 validator_dist를 연 화면입니다.이제 f5를 눌러 디컴파일해서 mai

Full RELRO, NX, PIE가 적용되어 있습니다.read(0, center_name, 100)에서 스택 오버플로우가 가능해 보입니다. system(cmd_ip)에서 /bin/sh를 실행해 셸을 얻을 수 있어 보입니다. cmd_ip의 첫 8 바이트는 ifconfi

NX만 적용되어 있습니다.get_shell 함수가 존재하며 signal(SIGSEGV, get_shell) 함수는 Segmentation Fault 시그널을 받았을 때 get_shell 함수가 실행됩니다. read에서 크기를 size -1로 받고 read의 세 번째 인

Partial RELRO, Canary, NX가 적용되어 있으므로 GOT overwrite가 유효해 보입니다.create_heap을 통해 원하는 크기의 청크를 만들 수 있고, delete_heap을 통해 청크를 해제할 때 포인터를 초기화하지 않으므로 modify_hea

Canary와 NX가 적용되어 있습니다. Partial RELRO가 적용되어 있으므로 여전히 GOT Overwrite는 유효해 보입니다.create로 원하는 크기의 청크를 할당할 수 있고, delete에서 청크를 해제할 때 포인터를 초기화하지 않으므로 Double Fr

Full RELRO와 NX가 적용되어 있으므로 Hook Overwrite를 고려해 볼 수 있습니다.Allocate에서 원하는 크기의 청크를 할당할 수 있고, Edit에서 청크의 데이터를 수정할 수 있습니다. Free에서 청크를 해제하고 나서 chunk 포인터를 초기화하
Double Free Bug(DFG)는 같은 청크를 두 번 해제할 수 있는 버그를 말합니다. ptmalloc2에서 발생하는 버그 중 하나이며, 공격자에게 임의 주소쓰기, 읽기, 임의 코드 실행 등의 수단으로 활용될 수 있습니다.Dangling Pointer는 Doubl

앞에서 배운 보안 기법들이 전부 적용되어 있습니다.Human과 Robot이라는 구조체가 존재하고, 할당하는 human_func와 robot_func 함수가 존재합니다.human_func 함수와 robot_func 함수를 보면, 구조체 변수를 위한 메모리 영역을 할당할
Dangling Pointer는 유효하지 않는 메모리 영역을 갖는 포인터를 말합니다. 메모리의 동적 할당에 사용되는 malloc 함수는 할당한 메모리의 주소를 반환합니다. 메모리를 해제할 때는 free 함수를 호출합니다. 하지만 free 함수는 청크를 ptmalloc