Web Hacking Advanced

Web Hacking Advanced

OAuth 2.0

OAuth는 인터넷 사용자들이 ID, PW를 제공하지 않고 다른 웹사이트 상의 자신들의 정보에 대해 웹사이트나 애플리케이션의 접근 권한을 부여할 수 있는 공통적인 수단으로서 사용되는, 접근 위임을 위한 개방형 표준이다. 즉, 현재 서비스의 ID와 PW를 입력하지 않고 인증할 수 있는 프로토콜이다. 예를 들어 Google에 로그인한 후 Google 자격 증명을 이용해서 현재 서비스에 액세스했다면 OAuth를 사용한 것이다. oAuth는 보통 SSO(Single Sign On) 시스템에서 사용한다. SSO는 1번의 로그인으로 여러 서비스를 이용할 수 있는 시스템을 뜻한다. 즉, SSO 시스템을 구축하기 위해서는 oAuth 프로토콜을 이용한 인증시스템이 필요하다. oAuth를 이용하는 시스템은 단순히 간단한 ..

Web Hacking Advanced

Prototype Pollution

JS prototype 개념prototype pollution을 이해하기 위해서는 JS의 object prototype과 constructor에 대한 개념을 알아야한다. 자바스크립트는 다음과 같은 특징이 있다.모든 것은 객체이고, 객체로서 동작하는 완전한 객체지향 언어다.var keyme = new Person('keyme');객체는 생성자의 prototype 객체를 상속한다.keyme라는 객체는 Person.prototype을 상속받는다.객체는 생성자 함수를 사용해서 만든다.생성자 함수 → Person()  prototype은 객체 지향 프로그래밍에서 상속을 구현하는 데 사용되는 중요한 개념이다. 모든 객체는 prototype을 가지고 있으며, 이를 통해 객체 간의 상속 및 속성, 메서드 공유가 가능하..

Web Hacking Advanced

[dreamhack] DOM XSS

문제풀이@app.after_requestdef add_header(response): global nonce response.headers['Content-Security-Policy'] = f"default-src 'self'; img-src https://dreamhack.io; style-src 'self' 'unsafe-inline'; script-src 'self' 'nonce-{nonce}' 'strict-dynamic'" nonce = os.urandom(16).hex() return responsecsp를 보면 script-src에서 strict-dynamic이 존재한다. strict-dynamic는 동적으로 스크립트를 로드하는 것을 허용한다는 의미다. 사실 이 문제는..

Web Hacking Advanced

[dreamhack] Relative Path Overwrite

개념정리○ Relative Path Overwrite(RPO)서버와 클라이언트가 경로를 해석하는 차이를 이용한 취약점이다. 다음 예제를 보자. 1. 절대 경로2. 상대경로2가지 태그의 차이점은 경로 생성방식이다. 만약, rpo.php라는 페이지가 있다고 가정하자. filter.js를 상대경로로 지정했다. 따라서 RPO 취약점이 발생 가능한 상황이다. 다음과 같이 경로를 요청하면/index.php/ src가 로드되는 과정에서 /index.php/filter.js 와 같이 잘못된 경로로 filter.js를 요청하게된다. 따라서 오류가 발생하고 filter.js가 로드되지않는다.→ 즉, XSS 가능 위와 같이 쿠키를 탈취하는 payload를 작성했다. /index.php/?page=vuln&param=payl..

Web Hacking Advanced

[dreamhack] CSS Injection

개념정리○ CSS Injection공격자가 웹 페이지의 스타일시트에 악의적인 CSS 코드를 삽입하여 웹 페이지의 모양이나 동작을 변조하는 공격이다. XSS는 script를 삽입해서 공격하는 방식이다. 이와 비슷한 방식으로 style sheet의 CSS를 삽입해서 공격하는 방식이 CSS Injection이다. 예를 들어서 생각해보자. 웹 페이지 사용자가 웹 사이트의 background 색깔을 지정할 수 있는 서비스가 있다고 하자. 해당 서비스의 style 태그는 위와 같이 구성될 것이다. color라는 사용자의 입력값을 받고 동적으로 CSS 코드를 생성한다. 만약, 이 과정에서 color에 대한 검증이 없다면 어떤 일이 발생할까? black; } input[type=text] { width: ; heigh..

Web Hacking Advanced

[dreamhack] CSRF Advanced

문제풀이@app.route("/")def index(): session_id = request.cookies.get('sessionid', None) try: username = session_storage[session_id] except KeyError: return render_template('index.html', text='please login') return render_template('index.html', text=f'Hello {username}, {"flag is " + FLAG if username == "admin" else "you are not an admin"}')admin으로 로그인하면 flag가 출력된다. @app.rout..

keyme
'Web Hacking Advanced' 카테고리의 글 목록