본문 바로가기

Security

(80)
[wargame] xss-2 https://dreamhack.io/wargame/challenges/268/writeups xss-2 여러 기능과 입력받은 URL을 확인하는 봇이 구현된 서비스입니다. XSS 취약점을 이용해 플래그를 획득하세요. 플래그는 flag.txt, FLAG 변수에 있습니다. Reference ClientSide: XSS dreamhack.io #!/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",..
[wargame] xss-1 https://dreamhack.io/wargame/challenges/28/ xss-1 여러 기능과 입력받은 URL을 확인하는 봇이 구현된 서비스입니다. XSS 취약점을 이용해 플래그를 획득하세요. 플래그는 flag.txt, FLAG 변수에 있습니다. Reference Client-side Basic dreamhack.io #!/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").r..
[wargame] csrf-2 https://dreamhack.io/wargame/challenges/269/ csrf-2 여러 기능과 입력받은 URL을 확인하는 봇이 구현된 서비스입니다. CSRF 취약점을 이용해 플래그를 획득하세요. Reference Client-side Basic dreamhack.io #!/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",..
[Webhacking] file vulnerability 파일 업로드 / 다운로드 하는 기능에서 발생할 수 있는취약점들과 취약점으로부터 안전하게 구현할 수 있는 방법. 파일 업로드 취야점 서버의 파일 시스템에 사용자가 원하는 경로 또는 파일 명 등으로 업로드가 가능하여 악영향을 미칠 수 있는 파일이 업로드 되는 취약점 파일 다운로드 취약점 서버의 기능구현 상의도하지 않은파일을 다운로드할 수 있는 취약점 file upload code from flask import Flask, request app = Flask(__name__) @app.route('/fileUpload', methods = ['GET', 'POST']) def upload_file(): if request.method == 'POST': f = request.files['file'] f.sa..
[Webhacking] server side request forgery (SSRF) 웹 어플리케이션에서 사용자가 입력한 URL에 요청을 보내는 기능이 구현되어야 하는 경우도 존재. URL을 통해 사용자가 입력한 사진을 업로드하는 기능을 구현하면 사용자가 입력한 URL을 웹 어플리케이션에서 접근해야 함. CSRF와 차이점은 변조된 요청을 보내는 대상의 차이. CSRF는 변조된 요청을 웹 클라이언트(브라우저)가 보내며, SSRF는 웹 어플리케이션에서 보냄. 웹 어플리케이션에서 요청을 보내기 때문에 웹 어플리케이션이 작동하고 있는 포트, 서버와 연결된 내부망에 요청 보낼 수 있음 External from flask import Flask, render_template, request import requests from dreambank import imgcheckFunc, adminFunc..
[Webhacking] path traversal URL에서 해석되는 구분문자 / Path identifier .. Parent directory * /tmp/test/../1234 => /tmp/1234 ? Query identifier * ? 뒤는 query로 해석 # Fragment identifier * # 뒤의 값은 Server로 전달되지 않음 & Parameter separator * key1=value&key2=value... 형식으로 사용 내부 API가 Path variable로 입력 데이터를 받는 형태로 구현되어 URL의 Path로 데이터가 입력되는 경우도 존재. dream이라는 user의 정보를 가져오기 위해 http://internal.dreamhack.io/api/user/dream 이렇게 입력이 들어가기도 함. URL 구분문자 사..
[Webhacking] server side template injection (SSTI) 웹 어플리케이션에 동적인 내용을 HTML로 출력할때 미리 정의한 Template에 동적인 값을 넣어 출력하는 Template Engine을 사용하기도 함. 사용자 입력이 Template source에 들어가게 된다면 악의적인 입력으로 개발자가 의도하지 않은 임의의 Template 기능 실행 가능. 대부분의 Template Engine에서 {{2*3}}, ${2*3} 과 같은 문법을 지원. ... class Secret(object): def __init__(self, username, password): self.username = username self.password = password secret = Secret('admin', secret_password) ... @app.route('/boar..
[Webhacking] Command Injection 웹 어플리케이션은 OS Command를 위한 PHP(system), Node JS(child_process), Python(os.system)과 같은 함수가 존재. 일반적으로 웹 어플리케이션에서 OS Command를 사용하는 이유는 이미 기능을 구현한 OS 실행 파일이 존재할 때 코드 상에서 다시 구현하지 않고 이를 실행하면 더 편리하기 때문. OS Command는 내부적으로 shell 사용하고, shell은 한 줄에 여러 명령어를 실행하는 특수 문자가 존재. 만약 사용자가 OS Command의 입력 값을 검증하지 않고 함수의 인자로 전달 시에 특수 문자를 통해 사용자가 원하는 명령어를 함께 실행 가능. `` 명령어 치환 ``안에 들어있는 명령어를 실행한 결과로 치환됩니다. $ echo `echo the..