전체 글 147

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

Cryptohack - ASCII

별도의 파일은 없고, 그냥 아스키 코드를 chr() 이용해서 문자로 변환시키기만 하면 되는 것 같다. a = [99, 114, 121, 112, 116, 111, 123, 65, 83, 67, 73, 73, 95, 112, 114, 49, 110, 116, 52, 98, 108, 51, 125] for i in range(len(a)): asc = chr(a[i]) print(asc, end='') 문제에 나와있는 숫자들을 리스트로 만들어주고 반복문을 이용해서 문자로 변환시킨다음 출력했다. 플래그는 crytpo{ASCII_pr1nt4bI3} 이다.

INCOGNITO 2022 2022.08.10

Cryptohack - Network Attacks

JSON 오브젝트만 서버에서 입력받는 것 같다. 제공받은 챌린지 파일인 telnetlib_example.py 파일을 수정해서 뭘 해야하는 것 같은데.. 일단 칼리에서 nc socket.cryptohack.org 11112로 접속했다. 그냥 아무말이나 입력했더니 에러 났다. 내가 사고싶은 걸 알려줘야하는 것 같다. #!/usr/bin/env python3 import telnetlib #telnet 원격 접속 제어용 모듈 import json HOST = "socket.cryptohack.org" #telnet으로 접속할 대상 PORT = 11112 #TCP 포트 tn = telnetlib.Telnet(HOST, PORT) def readline(): return tn.read_until(b"\n") de..

INCOGNITO 2022 2022.08.07

CSRF 실습

@app.route('/admin/notice_flag') # notice_flag 페이지 라우팅 def admin_notice_flag(): global memo_text # 메모를 전역변수로 참조 if request.remote_addr != '127.0.0.1': # 이용자의 IP가 로컬호스트가 아닌 경우 return 'Access Denied' # 접근 제한 if request.args.get('userid', '') != 'admin': # userid 파라미터가 admin이 아닌 경우 return 'Access Denied 2' # 접근 제한 memo_text += f'[Notice] flag is {FLAG}\n' # 위의 조건을 만족한 경우 메모에 FLAG 기록 return 'Ok' # O..

Dreamhack 2022.08.05

암호학 Stage 3

AES(Advanced Encryption Standard) 연산 능력 향상으로 DES가 안전하지 않게 된 것에 대한 대안. SPN(Substitution Permutation Network) 암호 구조 - 곱 암호의 일종. 치환(Substitution) - S-Box 사용 순열(Permutation) - P-Box 사용 여러 라운드에 걸쳐 반복함. 페이스텔 구조와 달리 라운드마다 입력 전체에 라운드 함수를 적용하므로 같은 수의 라운드를 사용할 때 두 배의 암호학적 안전성을 갖는다. AES 구조 라운드마다 128비트 크기의 블록을 암호화하는 블록 암호. 키 길이 = 128, 192,256 비트 중 하나 선택 라운드 수 = 키 길이에 따라 10, 12, 14 * AES-128 = 키 길이 128비트 1. ..

Dreamhack 2022.08.04

quizmachine 문제 풀이

먼저 quizmachine 파일을 실행했다. 20개의 덧셈 문제를 풀어야 플래그를 얻을 수 있는 것 같다. 좀 늦게 답했는지 타임아웃이 뜨면서 그냥 실행이 종료돼버렸다. 대충 어떤 식으로 실행되는지 파악했으니 코드를 보면서 어떤식으로 굴러가는지 제대로 파악해본다. 1부터 100까지 랜덤한 숫자를 출력해주는 것같고, scanf로 답을 입력받는다. time(&t1)과 time(&t2)는 각각 문제가 출력될 때 시간, 답을 입력한 때의 시간을 의미하는 것 같다. difftime() 함수를 찾아보니까 시간차를 계산하는 함수라고 한다. 위에 보면 DELAY를 5로 정해놨는데, 5초 안에 답을 적지 못하면 아까처럼 time out!이 뜨면서 종료되는 것 같다. 만약 틀렸다면 wrong!을 출력한다. 코드를 작성할 ..

시스템 해킹 2022.08.04