XSS CheatSheet

본 문서는 지속적으로 업데이트됩니다. Basic Advanced Uncommon Tags Sandbox XSS Delimiters Obfuscation Operator Unicode / UTF-8 No Quote No Parentheses No Quote and Parentheses Bypass Uppercase / Lowercase Bypass Replace Bypass Chrome Auditor Script in XML Whitelist Iframe Make Redirection Cookie Hijacking Data Wrapper Variable Make DOM XSS DOM Object Finding Set-Cookie Obfuscate IP Address Escalate XSS Bypass History A Tag XSS without interaction document.createComment php::checkdnsrr() Loop in a line

Quine SQL Injection

Quine SQL 이란 Quine 은 소스코드를 그대로 출력으로 반환하는 프로그램을 의미하는데위의 파이썬 소스코드를 참고하면 어떤 의미인지 쉽게 이해할 수 있을 것이다.이는 대부분의 언어로 작성되어 위키백과에 등재되어 있다. Quine SQL Query 마찬가지로 SQL 언어를 사용해 작성한 Quine 쿼리도 존재하는데, 위가 그 예이다. 여기서 필요없는 부분을 잘라내면 위와 같다. 이런 특성을 이용하여 SQL 인젝션에 응용할 수 있는데사용자 입력과 쿼리 결과값이 같은지 확인하는 검증로직이 존재할 경우에이를 사용하면 우회가 가능할 것이다. Summary 위 식에서

Jsonp Injection Attack

CORS(Cross Origin Resource) HTTP 통신시에, 처음 전송되는 리소스와 다른 도메인으로부터 리소스가 요청될 경우 해당 요청을 Cross-origin HTTP Request 라고 부른다.보안 상의 이유로 대부분의 브라우저들은 이러한 통신을 제한하고 있는데자바스크립트의 XMLHttpRequest 객체로 통신할 때에 사이트 외의 도메인에 요청을 보낼 수 없는 것 또한 이런 이유에서다.CORS는 Jsonp, document.cookie 값 설정, 브라우저 특수 옵션(크롬의 –disable-web-security 옵션 등) 와 같은 방법으로일부 극복이 가능하지만 보안 취약점을 유발할 수 있기에 주의하여 사용하여야 한다. JSONP(JSON with Padding) Jsonp는

JWT None Type Injection Attack

JSON Web Token(RFC 7519)은 JSON 문서에 클레임을 인코딩한 후 서명하는 방법이다. JWT란 JWT 는 웹사이트 사용자 인증에서 종종 쓰이는데, 쿠키에 주로 포함되어 쓰인다.base64로 인코딩되어 온점 2개로 구분되는 header.payload.signature 의 구조를 띈다. https://jwt.io/ 에서 JWT를 간편하게 복호화해 볼 수 있다. Header는 Type와 Algorithm 두 요소를 가지며, alg는 JWT의 세번째 부분인 Signature의 해싱 알고리즘을 지정할 수 있다. Payload는 토큰의 실제 정보가 들어있다.인증에 쓰이는 정보 이외에 추가로 클레임(reserved claim) 이라고 부르는 정보가 포함되는데토큰의

angstromCTF – Madlibbin

python format string injection 문제이다. 강조된 문장에서 볼 수 있듯 args 변수에 request.args 를 대입하여 format 메소드의 인자로 이용하는데 request.args 부분은 조작이 불가능하지만, 대상 문자열은 마음대로 사용자의 입력대로 들어가므로 이를 이용해서, os.environ 을 읽어내면 해결되는 문제이다! 다만 format 함수의 대상이 되는 문자열의 중괄호 안에서 메소드 호출은 불가능하므로 메소드를 사용하지 않고 문제를 해결할 수 있어야 한다. os 모듈의 environ 속성에 환경변수가 저장되어있으니 이를 참조해 주자.

angstromCTF – DOM Validator

XSS 필터링 문제인데, <head> 태그에서 자바스크립트로 문서 내용을 해싱하여 비교 검증하는 특이한 방식을 사용했다. 시도하다 보니 필터링 로직이 복잡하여 짜여 있다는 것을 알게 되었는데, 본래 복잡해질수록 허점도 생기는 법 아니겠는가.. 여러가지 페이로드를 확인해보니 결국 먹히는 것이 나왔다. (3시간 정도 걸렸다)

angstromCTF – no sequel 2

이전 문제와 동일하다. 하지만 인증 우회에 그쳤던 것과 다르게, 이젠 실제 비밀번호를 요구한다. 정규식 쿼리를 이용하면 간단한데 길이를 먼저 확인하고 브루트 포싱을 해보면 금방 답이 나온다.

angstromCTF – no sequel 1

Express 로 구성된 서버에 소스가 주어진다. 상단에 monk instance 라고 적혀있는데, mongodb 를 사용했다는 것을 말하고 싶었으리라. 흔한 mongodb 취약점인데 위처럼 배열을 삽입해주면 not equal 비교를 통해 인증이 우회된다. 시도해보니 배열은 입력으로 받지 않는 모양이었지만 Content-Type을 수정하여 데이터를 json형태로 전송함으로써 인젝션에 성공하였다.