목록Hack/DreamHack(로드맵) (94)
CIDY
*CSP Content Security Policy의 약자. 컨텐츠 보안 정책으로, XSS와 같이 의도치 않은 데이터를 삽입하는 형태의 공격을 방어하기 위한 보안 계층이다. XSS공격은 브라우저가 서버로부터 전달받은 데이터를 신뢰한다는 것에 기반한다. CSP는 이와 같은 형태의 공격 방지를 위해 웹 페이지에 사용될 수 있는 자원의 위치와 출처에 제약을 건다. CSP헤더는 여러 개의 정책 지시문이 ; 으로 분리된 형태이다. 정책 지시문은 default-src, script-src와 같은 지시문과 'self', https:, *.dreamhack.io와 같은 출처가 공백으로 분리된 형태여야 한다. default-src 'self' https://example.dreamhack.io 위 CSP구문은 페이지 내..
#!/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..
*자바스크립트 키워드 필터링 자바스크립트는 Unicode escape sequence를 지원한다. -> 유니코드 문자를 코드포인트로 나타낼 수 있는 표기법이다. ("\uAC00" == "가") var foo = "\u0063ookie"; // cookie var bar = "cooki\x65"; // cookie \u0061lert(document.cookie); // alert(document.cookie) 따라서 위와 같은 필터링 문자열 우회가 가능해진다. 또, 자바스크립트는 Computed member access를 지원한다. document["coo"+"kie"] == document["cookie"] == document.cookie 위와 같이 객체의 특정 속성에 접근할 때 속성 이름을 동적으로..
#!/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..
*이벤트 핸들러 속성 JS코드를 실행할 수 있는 HTML태그는 여럿 있는데, 그중에서 on으로 시작하는 태그들은 이벤트 핸들러 지정이다. 이벤트 핸들러는 특정 요소에서 발생한느 이벤트를 처리하기 위한 콜백 형태 핸들러 함수 -> 이벤트 핸들러 안에 XSS공격 코드를 넣음 -> 그 이벤트 발생 시 해당 공격 코드 실행 자주 사용되는 이벤트 핸들러 속성으로는 onload, onerror, onfocus등이 있다. ->onload이벤트 핸들러 ->onerror이벤트 핸들러 ->onfocus이벤트 핸들러 input태그에 커서를 클릭해 포커스되면 실행되는 이벤트 핸들러이다. autofocus로 자동 포스커시키거나, URL의 hash부분에 input태그의 id속성값을 입력해 자동으로 포커스되도록 한다. *문자열 치..
#!/usr/bin/env python3 from flask import Flask, request import os app = Flask(__name__) @app.route('/' , methods=['GET']) def index(): cmd = request.args.get('cmd', '') if not cmd: return "?cmd=[cmd]" if request.method == 'GET': '' else: os.system(cmd) return cmd app.run(host='0.0.0.0', port=8000) app코드 자체는 짧다. 인자 준 대로 리턴하는데... GET말고 다른걸로 해야 else문이 실행되면서 system에 대한 cmd가 실행될 듯 하다. 이것저것 알아보던 차에 bu..
10000번 클릭하라는 게 말이 되나 싶지만 생각보다 현실적인 수치다. 진짜 이름값하는 문제네... 이렇게 하면 될 줄 알았는데 안된다 ㅋㅋ 얘를 건드려야 할 듯?(click으로 검색해봄) 콘솔에 아래 코드를 입력해주자 for(i=0; i 맞음
#!/usr/bin/python3 from flask import ( Flask, request, render_template ) import http.server import threading import requests import os, random, base64 from urllib.parse import urlparse app = Flask(__name__) app.secret_key = os.urandom(32) try: FLAG = open("./flag.txt", "r").read() # Flag is here!! except: FLAG = "[**FLAG**]" @app.route("/") def index(): return render_template("index.html") @app...