Dreamhack 31

SSRF 함께 실습

FLASK로 작성된 image viewer 서비스 SSRF 취약점을 이용해 플래그를 획득하기 /app/flag.txt에 플래그가 존재함. @app.route("/img_viewer", methods=["GET", "POST"]) def img_viewer(): if request.method == "GET": return render_template("img_viewer.html") elif request.method == "POST": url = request.form.get("url", "") urlp = urlparse(url) if url[0] == "/": url = "http://localhost:8000" + url elif ("localhost" in urlp.netloc) or ("127..

Dreamhack 2022.08.24

파일 취약점 함께 실습

index.php는 list.php와 upload.php로 이동하는 메뉴를 출력한다. list.php는 $directory의 파일들 중 ., .., index.html을 제외하고 나열한다. upload.php는 이용자가 업로드한 파일을 uploads 폴더에 복사하며, 이용자는 http://host1.dreamhack.games:[PORT]/uploads/[FILENAME] URL을 통해 접근할 수 있다. 만약 같은 이름의 파일이 있다면 "already exits'' 라는 메시지를 반환한다. 업로드할 파일에 대해 어떠한 검사도 하지 않으므로, 웹 쉘 업로드 공격에 취약하다.

Dreamhack 2022.08.24

File Vulnarability

File Upload Vulnerability 공격자의 파일을 웹 서비스의 파일 시스템에 업로드하는 과정에서 발생하는 보안 취약점. 파일 시스템 상 임의 경로에 원하는 파일을 업로드하거나 악성 확장자를 갖는 파일을 업로드할 수 있을 때 발생한다. 원하는 시스템 커맨드를 실행하는 원격 코드 실행 취약점을 유발할 수 있다. 이용자가 업로드될 파일의 이름을 임의로 정할 수 있을 때 발생. 파일 이름에 이용자가 입력한 문자열을 그대로 사용하거나, 이용자의 이메일, 닉네임 등을 포함시키는 등의 소스 코드 패턴이 이러한 취약점을 발생시킨다. 1. Path Traversal 일반적인 서비스 -> 보안을 위해 특정 디렉토리에만 업로드 허용. 제한 x = 악의적 이용자가 웹 서버의 소스 코드나 서버에 있는 중요 시스템 ..

Dreamhack 2022.08.24

Command Injection

시스템 함수 이용 = 이미 설치된 소프트웨어들을 쉽게 이용할 수 있다. 함수의 인자를 쉘의 명령어로 전달 - 치명적인 취약점 Command Injection 취약점 = 명령어를 실행해주는 함수를 잘못 사용해서 발생 명령어를 실행하는 함수에 이용자가 임의의 인자를 전달할 수 있을 때 발생. 시스템 함수를 사용하면 이용자의 입력을 소프트웨어의 인자로 전달할 수 있다. 파이썬 웹 애플리케이션에서 입력한 임의 IP에 ping을 전송하고 싶다면 os.system("ping[user-input]") #임의 IP ping 전송 os.system("cat [user-input]") #임의 파일을 읽고자 할 때 이용자의 입력을 제대로 검사하지 않으면 임의 명령어가 실행될 수도 있다. -> 리눅스 쉘 프로그램이 지원하는 ..

Dreamhack 2022.08.19

암호학 - 해시

해시 함수(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

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