목록Hack/DreamHack(로드맵) (94)
CIDY

웹 개발 언어는 HTTP요청을 전송하는 라이브러리를 제공한다. HTTP라이브러리는 PHP의 php-curl, NodeJS의 경우 http, python의 경우 urllib, requests가 있다. 라이브러리들은 이용자가 HTTP요청을 보낼 때도 이용되지만, 서버 간 통신에도 이용된다. 서버는 다른 웹 애플리케이션에 존재하는 리소스를 이용하기 위한 목적으로 통신한다. (마이크로서비스 간 통신, 외부 API호출, 외부 웹 리소스 다운로드 등) 마이크로서비스들은 HTTP나 GRPC를 이용해 API통신을 한다. (웹 서비스의 구성요소가 늘어남에 따라 마이크로서비스들로 웹 서비스를 구현하는 추세 -> SSRF는 파급력이 높은 취약점임) (*마이크로서비스: 소프트웨어가 API를 통해 통신하는 소규모의 독립적인 서..

#!/usr/bin/env python3 import os import shutil from flask import Flask, request, render_template, redirect from flag import FLAG APP = Flask(__name__) UPLOAD_DIR = 'uploads' @APP.route('/') def index(): files = os.listdir(UPLOAD_DIR) return render_template('index.html', files=files) @APP.route('/upload', methods=['GET', 'POST']) def upload_memo(): if request.method == 'POST': filename = request...

Image Storage Home List Upload Upload and Share Image ! index.php파일이다. 이해는 못 하겠지만 Upload and Share Image문구가 있는 걸로 봐서는 문제 사이트의 메인 격에 해당하지 않나 추측해본다.. Image Storage Home List Upload
*File Upload Vulnerability 웹 서비스 이용자의 파일 -> 서버 파일 시스템으로 업로드하는 과정에서 발생하는 취약점이다. 업로드할 파일의 이름에 대한 결정권이 이용자에게 있을 때 발생할 수 있다. 이것도 이전의 Injection들과 마찬가지로 이용자의 입력을 그대로 이용하는 과정에서 발생하는 취약점인 것. 크게 Path Traversal 과 악성 파일 업로드가 있다. ->Path Traversal 파일 업로드 제약을 우회해 임의 디렉토리에 파일을 업로드 할 수 있는 취약점이다. from flask import Flask, request app = Flask(__name__) @app.route('/fileUpload', methods = ['GET', 'POST']) def uploa..

#!/usr/bin/env python3 import subprocess from flask import Flask, request, render_template, redirect from flag import FLAG APP = Flask(__name__) @APP.route('/') def index(): return render_template('index.html') @APP.route('/ping', methods=['GET', 'POST']) def ping(): if request.method == 'POST': host = request.form.get('host') cmd = f'ping -c 3 "{host}"' try: output = subprocess.check_output(['/..
*Command Injection 이전에 임의의 쿼리문 Injection처럼 말 그대로 명령어를 Inject하는거다. 이용자의 입력을 시스템 명령어로 실행하도록 함 -> 명령어 실행 함수에 이용자가 인자를 전달할 수 있는 상황이어야 함. 그리고 시스템 해킹 공부할 때 배웠던 메타문자 같은걸로 명령 여러개 실행하는것도 가능함을 감안하면 다양한 공격이 가능할 듯. ->메타문자 `` 명령어 치환 ``안에 들어있는 명령어를 실행한 결과로 치환 $() 명령어 치환 $()안에 들어있는 명령어를 실행한 결과로 치환. 중복 사용 가능. && 명령어 연속 실행 한 줄에 여러 명령어 사용 가능. 앞 명령어에서 에러가 없어야 뒷 명령어를 실행. (Logical And) || 명령어 연속 실행 한 줄에 여러 명령어 사용 가능..

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.stringify(data).toLowerCas..

*NoSQL Injection SQL Injection과 방법은 유사하다. 둘 다 이용자의 입력이 쿼리에 포함되면서 발생하게 된다. MongoDB는 오브젝트 타입의 입력값을 처리할 때 사용하는 쿼리 연산자를 통해 여러가지를 할 수 있다. (*별도의 타입 검증이 없을 경우 오브젝트 타입의 값을 입력할 수 있다.) const express = require('express'); const app = express(); const mongoose = require('mongoose'); const db = mongoose.connection; mongoose.connect('mongodb://localhost:27017/', { useNewUrlParser: true, useUnifiedTopology: tr..