분류 전체보기 154

basic_exploitation_000 문제 풀이

void alarm_handler() { puts("TIME OUT"); exit(-1); } 일정 시간이 넘어가면 "TIME OUT"을 출력하고 에러 강제 종료한다. void initialize() { setvbuf(stdin, NULL, _IONBF, 0); setvbuf(stdout, NULL, _IONBF, 0); signal(SIGALRM, alarm_handler); alarm(30); } 초기화하는 함수로 보인다. 이름이 같은 setvbuf가 두 개 있는데, 하나는 입력버퍼, 다른 하나는 출력 버퍼인 것 같다. signal() = 시그널 처리 방법을 설정하는 함수다. 얘가 알람 설정하는 놈인것같다. 30초 지나면 time out을 출력하도록 하는 놈인 것 같다. 위에 선언된 void alar..

시스템 해킹 2022.08.13

RSA 암호화 알고리즘 분석

RSA 알고리즘이란? 현대 컴퓨터 시스템 및 다른 전자기기에서 데이터를 암호화/복호화할 때 사용. 두 개의 다른 key를 사용하는 비대칭(asymmetric) 암호학 알고리즘이다. 유클리드 알고리즘(유클리드 호제법) 1. a,b 두 수가 주어짐.(a>b) 2. b가 0이면 a를 리턴함. 3. a가 b로 나눠 떨어지지 않으면 a를 b로, b를 a에서 b로 나눈 나머지를 대입하고 1번으로 돌아감. a = b b = a%b 위 코드를 temp = a%b a = b b = temp 이런 식으로도 쓸 수 있다. 유클리드 알고리즘을 이용해 38, 10의 최대공약수 구하기 38%10 = 8 a= 10, b= 8 (a에는 b, b에는 a%b 대입) 다시 나눈다. 10%8 = 2 a= 8, b=2 8%2= 0 최대공약수..

INCOGNITO 2022 2022.08.13

Buffer Overflow

버퍼(Buffer) : 시스템이 연산 작업을 하는데 있어 필요한 데이터를 일시적으로 저장하는 메모리 상의 저장 공간 문자열 처리 = 문자열 버퍼, 수열 = 숫자형 데이터 배열 대부분의 프로그램 = 버퍼를 스택에 생성함. 스택은 함수 내에서 선언한 지역 변수가 저장되게 되고 함수가 끝나고 나면 반환된다. - mallo()과 같은 반영구적인 데이터 저장 공간과는 다름. 동작 원리 버퍼 오버플로우 - 미리 준비된 버퍼에 버퍼의 크기보다 큰 데이터를 쓸 때 발생. 위 그림처럼 40바이트의 스택이 준비되어 있을 때 이보다 큰 데이터를 쓰면 버퍼가 넘치고 프로그램 에러가 발생하게 된다. - 41~44바이트 : 이전 함수의 base pointer 수정 - 45~48바이트 : retun address가 저장된 공간 침..

시스템 해킹 2022.08.12

pwnable.kr collision

MD5 Message-Digest algorithm 5 임의의 길이의 값을 입력받아서 128비트 길이의 해시값을 출력하는 알고리즘. 단방향 암호화로, 출력값에서 입력값을 복원하는 것은 일반적으로 불가능하다. 같은 입력값이면 항상 같은 출력값이 나온다. 흔히 패스워드 암호화에 많이 사용되며, 패스워드를 MD5로 해시해서 나온 값을 저장해둔다. 이 값만 봐서는 본래의 값을 알 수 없다. 패스워드를 제대로 입력했다면 같은 해시값이 튀어나올 것이기 때문에 본래의 키라는 것을 확인할 수는 있다. Hash Collision 해시 함수가 서로 다른 두 개의 입력값에 대해 동일한 출력값을 내는 상황. 해시 충돌과 관련된 문제로 보인다. 일단 주어진 서버에 접속한다. ls -al 로 어떤 파일들이 있는지 확인해봤다. 보..

시스템 해킹 2022.08.12

암호학 - 해시

해시 함수(Hash Function) 임의 크기의 데이터를 입력으로 받아서, 고정된 크기의 데이터를 반환하는 함수. 반환값 = 해시 값(Hash Value) 암호학적 해시 함수(Cryptographic Hash Function) : 해시 함수 중에서 특정 성질을 만족하는 함수 다음 성질을 만족한다. 1. 제 1 역상 저항성(Preimage Resistance) 암호학적 해시 함수 H에 대해 y가 주어졌을 때 H(x)=y를 만족하는 x를 찾는 것이 어렵다. 이는 함수가 일방향이어야 함을 의미한다. 2. 제 2 역상 저항성(Second Preimage Resistance) 암호학적 해시 함수 H에 대해 x가 주어졌을 때 이를 만족하는 x'을 찾는 것이 어렵다 3. 충돌 저항성 (Collision Resist..

Dreamhack 2022.08.12

SQL Injection(2)

Simple-SQLi 문제의 목표 : 관리자 계정으로 로그인하면 출력되는 flag 획득하기. 사이트에 접속하면 간단한 로그인 기능만을 제공하고 있음을 확인할 수 있다. Figure 1. 데이터베이스 구성 코드 DATABASE = "database.db" #데이터베이스 파일명 database.db로 설정 if os.path.exists(DATABASE) == False: #데이터베이스 파일이 존재하지 않는 경우, db = sqlite3.connect(DATABASE) # 데이터베이스 파일 생성 및 연결 db.execute('create table users(userid char(100), userpassword char(100));') #users 테이블 생성 #users 테이블에 관리자와 guset 게정..

Dreamhack 2022.08.11

SQL Injection(1)

DBMS에 관리하는 데이터베이스에는 회원 계정, 비밀글과 같이 민감한 정보가 포함되어 있을 수 있다. 공격자는 데이터베이스 파일 탈취, SQL Injection 공격 등으로 해당 정보를 탈취 및 악용할 수 있다. 인젝션(Injection) 주입이라는 의미를 가진 영단어. 이용자의 입력값이 애플리케이션의 처리 과정에서 구조나 문법적인 데이터로 해석되어 발생하는 취약점 이용자가 악의적인 입력값을 주입해 의도치 않은 행위를 일으키는 것을 인젝션이라고 한다. /* 아래 쿼리 질의는 다음과 같은 의미를 가지고 있습니다. - SELECT: 조회 명령어 - *: 테이블의 모든 컬럼 조회 - FROM accounts: accounts 테이블 에서 데이터를 조회할 것이라고 지정 - WHERE user_id='dreamh..

Dreamhack 2022.08.11

SQL

데이터베이스 : 컴퓨터가 정보를 기록하는 곳 DBMS : 데이터베이스 관리 시스템 DataBase Management System (DBMS) - DB에 새로운 정보 기록, 수정, 삭제 - 다수의 사람이 동시 접근 가능 - 웹 서비스의 검색 기능과 같이 복잡한 요구사항을 만족하는 데이터를 조회할 수 있다. 관계형 : 테이블(행과 열의 집합) 형식으로 데이터 저장 - MySQL, MariaDB, PostgreSQL, SQLite 비관계형 : 키값(Key-Value) 형태로 값 저장 - MongoDB, CouchDB, Redis Relational DBMS 행(row)과 열(column)의 집합으로 구성된 테이블의 묶음 형식으로 데이터를 관리. 테이블 형식 데이터를 조작할 수 있는 관계 연산자 제공 관계 연..

Dreamhack 2022.08.11

set UID

SUID = Set UID의 약자. 프로세스가 실행중인 동안 일시적으로 해당 실행 파일의 소유자, 소유그룹의 권한으로써 자원에 접근할 수 있도록 하는 권한 설정. SUID가 설정된 프로그램 동작 시 프로세스가 동작하는 동안에 다음과 같이 설정한다. RUID = 실행시킨 사용자의 UID EUID = 실행 파일 소유자의 UID 유닉스 파일에 rwsr-xr-x 권한 설정된 경우 소유자 권한에서 x 권한 자리에 s로 설정되어있다. 누가 실행하든지 관계없이 해당 파일이 실행될 때 파일 소유자의 권한을 갖는다. A = 파일 소유자 B = 파일 실행자 이때 B가 파일을 실행하면 A의 권한을 갖는다. 해당 파일의 소유자가 root이면 그 파일을 실행하는 사람이 누가 되었든지 파일이 실행되는 프로세스는 실행되는 동안 파..

시스템 해킹 2022.08.10