전체 글

전체 글

    simple-sqli Write-Up

    문제simple-sqli(출처 : dreamhack) Write-Up문제에서 주어지는 URL에 접속할 경우 로그인 화면이 나오게 된다.주어지는 URL 실제 어떻게 로그인 과정이 이루어지는지 확인하기 위해 웹에 대한 코드인 app.py를 살펴보자.app.py에는 DB를 생성하고 연결을 종료하는 등 다양한 코드가 존재하지만 실질적으로 살펴야되는 부분은 login이다. login 코드를 보게되면 userid, password를 입력받아 동적으로 쿼리문을 생성(RawQuery)하고 DB에 해당하는 값을 받아온다. 이후 userid가 admin이면 Flag를 출력하는 과정으로 동작한다.@app.route('/login', methods=['GET', 'POST']) def login(): if request.me..

    SQL Injection

    해당 포스팅은 https://dreamhack.io/lecture/roadmaps/1?obj=14를 참고하여 작성하였으며 공부 목적으로 작성하였습니다.DBMS(데이터베이스 관리 시스템)정의웹 서비스는 데이터베이스에 고객 정보, 기업 내 정보 등 많은 정보를 저장한다. 이러한 데이터를 관리하기 위해 사용하는 것이 DBMS(DataBase Management System)이다. DBMS는 새로운 정보를 기록하거나, 기록된 내용을 수정, 삭제하는 역할을 한다. 구분DBMS는 크게 관계형과 비관계형으로 분류하고 대표적인 DBMS는 다음과 같다.종류대표적인 DBMSRelational(관계형)MySQL, MariaDB, PostgreSQL, SQLiteNon-Relational(비관계형)MongoDB, CouchD..

    csrf-2 Write-Up

    문제csrf-2(출처 : dreamhack)Write-Up주어진 URL에 접속하였을 때 다음과 같이 vuln(csrf)page, flag, login 3개의 페이지가 존재한다.csrf-2 웹 화면 app.py를 살펴보자. 기본적으로 vuln(csrf)page, flag, login 기능에 대한 코드가 존재하며 페이지 상 보이지 않던 change_password 가 존재하는 것을 알 수 있다.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 = ..

    csrf-1 Write-Up

    문제csrf-1(출처 : dreamhack) Write-Up해당 문제에서 주어진 URL로 들어가게 되면 다음과 같이 vuln(csrf) page, memo, notice flag, flag 총 4개의 페이지가 존재한다.csrf-1 URL 페이지를 확인하였다면 app.py 에 존재하는 페이지들의 코드를 살펴보자. 코드 전체는 다음과 같다. 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..

    ClientSide:CSRF

    ClientSide:CSRF

    해당 포스팅은 https://dreamhack.io/lecture/roadmaps/1?obj=8를 참고하여 작성하였으며 공부 목적으로 작성하였습니다. Cross Site Request Forgery(CSRF)정의CSRF(사이트 간 요청 위조)는 임의 이용자의 권한으로 임의 주소에 HTTP 요청을 보낼 수 있는 취약점으로, 이용자의 의지와는 무관하게 공격자가 의도한 행위(수정, 삭제, 등록, 송금 등)를 특정 웹사이트에 요청하게 만드는 공격이다. CSRF 공격 방식은 및 과정은 다음과 같다. CSRF 공격 과정공격자는 이메일이나 게시판에 CSRF 스크립트가 포함된 게시물을 전송(등록)관리자는 공격자가 등록한 CSRF 스크립트게 포함된 게시물 열람관리자가 CSRF 스크립트가 포함된 게시물을 열람할 시 공격자..

    xss-2 Write-Up💻

    문제xss-2(출처 : dreamhack) Write-Up해당 문제는 XSS-1 과 다르게 vuln 페이지의 입력된 값을 볼 때 alert(1)이 실행되어야 한다. 하지만, 실행되지 않는 것으로 볼 때 XSS 필터링이 적용된 것으로 볼 수 있다.vuln 페이지 나머지 페이지는 동일한 것을 확인하였고 주어진 코드(app.py)는 다음과 같다. 모든 부분에서는 동일한 것을 알 수 있으나 vuln과 관련된 코드에서 render_template() 함수를 활용해 vuln.html을 출력하기 때문에 일반적인 XSS 취약점은 발생하지 않게 된다. 즉, XSS Bypass를 해야 Flag를 획득할 수 있다.from flask import Flask, request, render_template from seleniu..

    xss-1 Write-Up💻

    문제xss-1(출처 : dreamhack)Write-Up해당 문제는 주어지는 app.py 파일을 분석한 후 주어진 URL 에서 XSS 취약점을 발생시켜 Flag를 획득하는 유형이다. 우선, app.py를 먼저 분석해보자가장 처음 확인가능한 코드는 memo() 이다. memo() 는 request.args.get() 을 통해 특정 값을 입력받아 render_template()을 활용하여 리턴하기 때문에 XSS 취약점이 발생하지 않는다.@app.route("/memo") def memo(): global memo_text text = request.args.get("memo", "") memo_text += text + "\n" return render_template("memo.html", memo=mem..

    ClientSide: XSS 🧑🏻‍💻

    해당 포스팅은 https://dreamhack.io/lecture/roadmaps/1?obj=8를 참고하여 작성하였으며 공부 목적으로 작성하였습니다.XSS정의클라이언트 사이드 취약점 중 하나로, 공격자가 웹 리소스에 악성 스크립트를 삽입하여 이용자의 웹 브라우저에서 해당 스크립트를 실행하는 취약점이이다. 공격자는 해당 취약점을 통해 특정 계정의 세션 정보를 탈취하고 해당 계정으로 임의의 기능을 수행할 수 있다. 즉, 공격자가 특정 사이트에 XSS 취약점 공격을 수행한 게시물을 올렸다고 가정하자. 만약 사이트 사용자가 해당 게시물에 접근하게 된다면 악성 스크립트가 실행되어 공격자가 의도한 공격이 수행되는 것이다. XSS 발생 예시와 종류종류설명Stored XSSXSS에 사용되는 악성 스크립트가 서버에 저장..

    [Web hacking] Mitigation: Same Origin Policy

    해당 포스팅은 https://dreamhack.io/lecture/roadmaps/1?obj=7를 참고하여 작성하였으며 공부 목적으로 작성하였습니다.Same Origin Policy(SOP)브라우저는 쿠키를 인증 정보로 사용하기 위해 브라우저 내부에 보관하며 클라이언트가 웹 서비스에 접속을 요청할 때 쿠키 정보를 HTTP 요청에 포함시켜 전달하는 방식으로 동작한다. 하지만, 치명적인 문제가 존재한다. 쿠키를 HTTP 요청에 포함시켜 전달하는 특징은 직접 접속하는 것에만 한정되는 것이 아니라 웹 리소스를 통해 간접적으로 타 사이트를 접근할 때도 사용한다는 특징을 지니고 있다. 이러한 특징을 악의적인 페이지가 클라이언트 권한을 이용해서 타 사이트로 HTTP 요청을 보낼 경우 클라이언트 정보 탈취가 가능해진다..

    session-basic Write-Up

    문제session-basic(출처 : dreamhack) Write-Up해당 문제로 접속할 경우 접속할 URL 정보와 문제 파일이 존재한다. 또한, 주어진 URL로 접속하면 다음과 같이 간단하게 Session, Home, login 등과 같은 기본적인 기능만 존재한다.주어진 URL URL내에서는 default user 값이 guest/guest 인 것 말고는 별다른 정보를 찾지 못해 제공된 파일을 살펴보았다. 제공된 파일은 플라스크 기반으로 작성된 app.py 로 main() 부분은 다음과 같이 구성되어 있으며 서버를 동작시키는 코드와 admin 계정의 sessionid를 생성하는 코드이다.if __name__ == '__main__': import os # create admin sessionid an..