목록Hack/DreamHack(로드맵) (94)
CIDY
*NRDBMS, NoSQL RDBMS의 경우 복잡하며, 용량의 한계가 있음 -> 이를 해결하기 위해 NRDBMS등장 NRDBMS의 경우 SQL을 이용하지 않고 복잡하지 않은 데이터 저장 -> 단순 검색에 최적화된 저장 공간 키-값(Key-Value)을 이용해 데이터를 저장한다. RDBMS의 경우 SQL이라는 정해진 문법이 있었기에 한 가지 언어로 다양한 DBMS를 이용하면 됐었지만, NoSQL의 경우 DBMS의 종류에 따라 구조와 사용 문법을 따로 알아야 한다. (*NoSQL은 Not Only SQL -> SQL을 이용하지 않고 데이터 처리함을 의미) *MongoDB JSON형태인 Document를 저장한다. -> 스키마를 따로 정의하지 않아 각 컬렉션(Collection)에 대한 정의가 필요없음 -> ..

#!/usr/bin/python3 from flask import Flask, request, render_template, g import sqlite3 import os import binascii app = Flask(__name__) app.secret_key = os.urandom(32) try: FLAG = open('./flag.txt', 'r').read() except: FLAG = '[**FLAG**]' DATABASE = "database.db" if os.path.exists(DATABASE) == False: db = sqlite3.connect(DATABASE) db.execute('create table users(userid char(100), userpassword char..

*SQL Injection SQL는 DBMS에 데이터를 질의하는 언어이다. 웹 서비스는 이용자의 입력을 SQL구문에 포함해 요청하는 경우가 있는데, 로그인 시 ID와 PW, 그리고 게시글의 제목과 내용 등이 있다. SELECT * FROM accounts WHERE user_id='dreamhack' and user_pw='password' 위는 로그인 시 애플리케이션이 DBMS에 질의하는 예시 쿼리이다. 이용자의 입력인 id와 pw를 SQL구문에 포함하고 있는 것을 볼 수 있다. 위 쿼리에서 SELECT *는 테이블의 모든 컬럼을 조회하라는 뜻이다. (SELECT == 조회, * == 모두) From accounts는 어느 테이블에서 데이터를 조회할 것인지를 정해주는 것이고(accounts테이블에서 데..
*DBMS DataBase Management System의 약자이다. 웹 서비스는 DB에 정보를 저장하고, 이를 관리하기 휘애 DBMS를 이용한다. DBMS는 데이터베이스에 새로운 정보 기록/내용 수정/내용 삭제와 같은 역할을 한다. 다수의 사람이 동시에 DB에 접근할 수 있으며, 검색 기능과 같은 데이터 조회 기능이 있다. DBMS에는 다양한 종류가 있으며, 크게 관계형/비관계형으로 나뉜다. 각각에 따른 대표적인 DBMS는 다음과 같다. Relational(관계형) : MySQL, MariaDB, PostgreSQL, SQLite Non-Relational(비관계형) : MongoDB, CouchDB, Redis 관계형의 경우 행/열의 집합으로 이루어진 테이블 형식으로 데이터를 저장하고, 비관계형은 ..
#!/usr/bin/python3 from flask import Flask, request, render_template from selenium import webdriver import urllib import os app = Flask(__name__) app.secret_key = os.urandom(32) try: FLAG = open("./flag.txt", "r").read() except: FLAG = "[**FLAG**]" def read_url(url, cookie={"name": "name", "value": "value"}): cookie.update({"domain": "127.0.0.1"}) try: options = webdriver.ChromeOptions() for _ i..

#!/usr/bin/python3 from flask import Flask, request, render_template, make_response, redirect, url_for from selenium import webdriver import urllib import os app = Flask(__name__) app.secret_key = os.urandom(32) try: FLAG = open("./flag.txt", "r").read() except: FLAG = "[**FLAG**]" users = { 'guest': 'guest', 'admin': FLAG } session_storage = {} def read_url(url, cookie={"name": "name", "value":..

*CSRF(교차 사이트 요청 위조, Cross Site Request Forgery) 임의 이용자의 권한으로 임의 주소에 HTTP요청을 보낼 수 있는 취약점이다. CSRF공격이 성공하려면 이용자가 악성 스크립트(HTTP요청을 보내는 코드)를 실행해야 함 -> 이용자에게 메일을 보내거나, 게시판에 글을 작성해 이용자에게 조회를 유도하는 방법이 있다. CSRF공격 스크립트는 HTML이나 JS로 작성할 수 있다. HTML을 이용할 경우 img나 form태그를 이용할 수 있다. (img는 이미지를 불러오는 태그, form은 웹 페이지에 입력된 양식을 전송하는 태그) 이 태그로 HTTP요청을 보내면 쿠키(HTTP 헤더)에 이용자의 인증 정보가 포함된다. img태그는 이미지 크기를 줄일 수 있는 옵션을 제공하기 때..

#!/usr/bin/python3 from flask import Flask, request, render_template from selenium import webdriver import urllib import os app = Flask(__name__) app.secret_key = os.urandom(32) try: FLAG = open("./flag.txt", "r").read() except: FLAG = "[**FLAG**]" def read_url(url, cookie={"name": "name", "value": "value"}): cookie.update({"domain": "127.0.0.1"}) try: options = webdriver.ChromeOptions() for _ i..