1. NoSQL Injection -MongoDB SQL은 저장하는 데이터의 자료형으로 문자열, 정수, 날짜 등을 사용할 수 있다. MongoDB는 이 외에도 오브젝트, 배열 타입을 사용할 수 있는데 오브젝트 타입의 입력값을 처리할 때 쿼리 연산자를 사용할 수 있어 다양한 행위가 가능하다. http://localhost:3000/?data=1234 data: 1234 type: string http://localhost:3000/?data[]=1234 data: [ '1234' ] type: object http://localhost:3000/?data[]=1234&data[]=5678 data: [ '1234', '5678' ] type: object http://localhost:3000/?data[..
Web Hacking
Mongodb로 작성된 사이트이다. const express = require('express'); const app = express(); const mongoose = require('mongoose'); mongoose.connect('mongodb://localhost/main', { useNewUrlParser: true, useUnifiedTopology: true }); const db = mongoose.connection; // flag is in db, {'uid': 'admin', 'upw': 'DH{32alphanumeric}'} const BAN = ['admin', 'dh', 'admi']; filter = function(data){ const dump = JSON.string..
1. NoSQL (비관계형 데이터베이스) NoSQL은 SQL을 사용하지 않고 복잡하지 않은 데이터를 저장해 단순 검색 및 추가 검색 작업을 위해 매우 최적화된 저장 공간인 것이 큰 특징이자 RDBMS와의 차이점이다. NoSQL의 종류로는 Redis, Dynamo, CouchDB, MongoDB 등 다양한 DBMS가 존재한다. 2. MongoDB MongoDB는 아래와 같은 특징을 가진다. 1. 스키마를 따로 정의하지 않아 컬렉션에 대한 정의가 필요없다. 2. JSON형식으로 쿼리를 작성할 수 있다. 3. _id 필드가 Primary Key 역할을 한다. [SQL] SELECT * FROM inventory WHERE status = "A" and qty < 30; [MongoDB] db.inventory..
dreamhack의 simple_sqli를 blind sql injection으로 풀어보았다. import requests URL="http://host3.dreamhack.games:11344/login" #비밀번호 길이 password_length = 0 ''' def binsearch(low: int, high: int): while 1: mid = (low + high) // 2 if low + 1 >= high: break data = {"userid" : f"admin\" and length(userpassword) < {mid} -- ", "userpassword" : 1} r = requests.post(URL, data=data) if "admin" in r.text: high = mid..
CSRF란? 임의 이용자의 권한으로 임의 주소에 HTTP요청을 보낼 수 있는 취약점이다. 예를 들어, 이용자의 계정으로 임의 금액을 송금해 이득을 취하거나 관리자 계정을 공격해 공지사항 작성 등으로 혼란을 줄 수 있다. CSRF 공격에 성공할려면 공격자가 작성한 악성 스크립트를 이용자가 실행해야 한다. 이는, 공격자가 이용자에게 메일을 보내거나 게시판에 글을 작성해 이용자가 이를 조회하도록 유도하는 방법이 있다. 다시 예를 들어, 공격자가 form 태그를 사용해 http요청을 보내는 코드를 작성하고, 이용자가 이를 조회하면 공격자는 이용자에게 들키지 않고 임의 페이지에 이용자의 권한으로 요청을 보낼 수 있다. 악성 스크립트가 포함된 게시글을 작성하면은, 그 게시글을 조회한 이용자들이 공격을 당한다.