Dreamhack/Web hacking

    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..

    Background: Cookie & Session

    해당 포스팅은 https://dreamhack.io/lecture/roadmaps/1?obj=4를 참고하여 작성하였으며 공부 목적으로 작성하였습니다.쿠키 🍪클라이언트의 IP 주소와 User-Agent는 매번 변경될 수 있는 값이며, HTTP 프로토콜의 Connectionless 와 Stateless 특징으로 인해 웹 서버는 클라이언트를 기억할 수 없다.Connectionless(비연결성) 클라이언트가 서버에 요청을 하고 응답을 받으면 그 즉시, TCP/IP 연결을 끊어 유지하지 않는 것이다. 서버는 이를 활용해 서버의 자원을 효율적으로 관리하고 많은 클라이언트의 요청에도 대응할 수 있게 한다. Stateless(무상태) 서버가 클라이언트의 이전 상태를 보존하지 않는다는 것이다. 이러한 Contection..

    [Web hacking] funjs Write-Up

    [Web hacking] funjs Write-Up

    문제funjs(출처 : dreamhack) Write-Up해당 문제에서는 index.html 파일이 주어지는 문제이다. index.html을 보고 분석한 후 문제에서 의도한 입력값을 입력하면 해결되는 문제이다. index.html 을 열게 되면 Flag를 입력하는 창이 계속해서 움직이는 것을 확인할 수 있으며, 코드 상에서 움직이는 부분을 제거하였다.움직이는 입력 창움직이는 부분과 관련된 코드 다음으로 main() 함수를 살펴보자. main() 함수 내부에 다음과 같이 _0x4949, _0x42931 배열 2개가 선언되어 있고 operator에 총 4개의 연산이 존재한다.var flag = document[_0x374fd6(0x183)](_0x374fd6(0x182))['value'], _0x4949 =..

    [Web hacking] Carve Party Write-up

    문제Carve Party 문제는 호박을 10000번 클릭해 플래그를 획득하는 문제이며 문제 파일로 html 파일이 주어진다.Carve Party(출처 : dreamhack)풀이문제 파일을 열게 되면 다음과 같이 호박과 카운팅 숫자가 나타나게 된다.Carve Party 문제 파일(출처 : dreamhack) 해당 파일의 소스코드를 확인하면 다음과 같이 카운팅하는 부분이 존재한다. 하지만 이를 10이나 100으로 변경 후 클릭하게 되면 원하는 형태의 플래그가 아닌 이상한 문자열이 나오는 것을 알 수 있다.else { $('#clicks').text(10 - counter); } } $(function() { $('#jack-target').click(function () { counter += 1; if (..