전체 글 299

[Dreamhack Wargame] CSS Injection

CSS Injection 배경지식 개념 웹 페이지 로딩 시 악의적인 문자열을 삽입하여 악의적인 동작을 이끄는 공격 임의 CSS 속성을 삽입해 웹페이지의 UI 를 변조하거나 웹 페이지내의 데이터를 외부로 훔칠 수 있다 CSRF Token, 피해자의 API Key등 웹 페이지에 직접적으로 보여지는 값처럼 CSS 선택자를 통해 표현이 가능한 값이어야 한다 HTML (style) 영역에 공격자가 임의 입력 값을 넣을 수 있거나 임의 HTML을 삽입할 수 있는 상황에서 사용한다 예제 => $theme에 yellow; h1 { color: red 삽입 시 UI 변조 가능 IP ping back 방법 - 외부 요청을 전송함으로써 웹페이지의 데이터를 탈취할 수 있다 CSS 가젯 설명 @import 'https://le..

security/웹해킹 2023.07.05

[Dreamhack Wargame] Client Side Template Injection

Template Injection 공격 배경지식 1. Vue Template Injection 확인: {{ 2*2 }} 생성자를 이용한 스크립트 실행: {{ _Vue.h.constructor("alert(1)")() }} 2. AngularJS Template Injection 확인: {{ 7*7 }} 생성자를 이용한 스크립트 실행: {{ constructor.constructor("alert(1)")() }} // xss 코드 전달 시 문자열 형태로 constructor에게 건네주어야 함 문제 분석 @app.after_request def add_header(response): global nonce # CSP 적용 response.headers['Content-Security-Policy'] = f"..

security/웹해킹 2023.07.05

[Dreamhack Wargame] CSP Bypass Advanced

소스코드 분석 # 이 부분 패치됐네, html을 렌더링한다 # 따라서 에 src로 넣질 못한다! SyntaxError 발생 (html 파일의 첫 줄 부터 해석하지 못함) @app.route("/vuln") def vuln(): param = request.args.get("param", "") return render_template("vuln.html", param=param, nonce=nonce) - vuln.html을 렌더링해서 리턴한다 - 직전 'CSP Bypass'에서처럼 script 태그의 source로 /vuln 페이지를 건네주면 에러 발생 // /vuln은 렌더링 완료된 vuln.html을 리턴하는데, 첫 줄부터 JS로 해석하지 못해 에러 발생 @app.after_request def a..

security/웹해킹 2023.07.03

[Dreamhack Wargame] CSP Bypass + CSP에 대해

Content Security Policy (CSP, 컨텐츠 보안 정책) -XSS / 데이터 삽입 공격이 발생하였을 때 피해를 줄이고 웹 관리자가 공격 시도를 보고 받을 수 있도록 새롭게 추가된 보안 계층 - 웹 페이지에 사용될 수 있는 자원의 위치, 출처 등에 제약을 검 - CSP 구문은 일반적으로 Content-Security-Policy HTTP 헤더에 추가하여 적용할 수 있음 Content-Security-Policy: default-src 'self' https://example.dreamhack.io 특징 - 인라인 코드 (Inline Code)를 유해하다고 간주 * * 실제 스크립트 부분 (lcoation.href='/memo?memo='+document.cookie) 는 파라미터로 전달되면..

security/웹해킹 2023.07.03

[Dreamhack Wargame] XSS Filtering Bypass Advanced + HTML 엔티티

def xss_filter(text): _filter = ["script", "on", "javascript"] for f in _filter: if f in text.lower(): return "filtered!!!" advanced_filter = ["window", "self", "this", "document", "location", "(", ")", "&#"] for f in advanced_filter: if f in text.lower(): return "filtered!!!" return text - 주요 단어들을 필터링 중이다. 치환 및 삭제가 아니여서 더 까다롭다 'on', 'script', 'document', 'location', 'window' 등이 막혀있으므로 - 이벤트핸들러 ..

security/웹해킹 2023.07.02

[Dreamhack Wargame] blind-command + curl

소스코드 분석 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) - index 페이지 접근에 있어서 허용된 method = 'GET' - 하지만 request.method=='GET' 이면 os.system() 실행 안 된다 =..

security/웹해킹 2023.07.01

[Dreamhack Wargame] web-ssrf + SSRF에 대해

XSS (Cross Site Scripting) 공격할 사이트의 origin에서 스크립트를 실행시킴, 클라이언트 대상 공격으로 세션 및 쿠키 탈취 목적 CSRF (Cross Site Request Forgery) 악성 스크립트가 포함된 페이지에 접근한 이용자의 권한으로 임의 페이지에 HTTP 요청을 보내는 / 웹서비스의 임의 기능을 실행시키는 공격 SSRF (Server Side Requet Forgery) 웹 서비스의 요청을 변조하는 취약점으로, 브라우저가 변조된 요청을 보내는 CSRF와는 다르게 웹 서비스의 권한으로 변조된 요청 보냄 웹 서비스의 요청 내에 이용자의 입력값이 포함되어야 함 - 입력 URL에 요청 보내는 경우: 웹서비스의 마이크로서비스 API 주소를 파악한 후 접근 - 웹서비스의 요청 ..

security/웹해킹 2023.06.30

[Dreamhack Wargame] Command-Injection-1

Shell에서 사용 가능한 메타문자 `` 명령어 치환 `` 안에 들어있는 명령어를 실행한 결과로 치환됩니다. $() 명령어 치환 $()안에 들어있는 명령어를 실행한 결과로 치환됩니다. 이 문자는 위와 다르게 중복 사용이 가능합니다. (echo $(echo $(echo theori))) && 명령어 연속 실행 한 줄에 여러 명령어를 사용하고 싶을 때 사용합니다. 앞 명령어에서 에러가 발생하지 않아야 뒷 명령어를 실행합니다. || 명령어 연속 실행 한 줄에 여러 명령어를 사용하고 싶을 때 사용합니다. 앞 명령어에서 에러가 발생해야 뒷 명령어를 실행합니다. ; 명령어 구분자 한 줄에 여러 명령어를 사용하고 싶을 때 사용합니다. ;은 단순히 명령어를 구분하기 위해 사용하며, 앞 명령어의 에러 유무와 관계 없이 ..

security/웹해킹 2023.06.30

[Dreamhack Wargame] Mango + req.query 타입검사 미흡

db.collection('user').findOne({ 'uid': uid, 'upw': upw, }, function(err, result){ if (err){ res.send('err'); }else if(result){ res.send(result['uid']); }else{ res.send('undefined'); } }) - MongoDB blind SQLI - 성공, 실패 여부만 출력해주는 blind SQL Injection 상황이다 로컬 환경에서 테스트 npm install # package.json 파일에 명시된 버전의 패키지 설치 node main.js # main.js 파일 실행 app.get('/login', function(req, res) { const {uid, upw} = r..

security/웹해킹 2023.06.29