XSS(CrossSiteScripting)
- 서버의 응답에 공격자가 삽입된 악성 스크립트를 받은 사용자의 웹 브라우저에서 악성 스크립트가 실행되는 공격
XSS 공격을 수행하기 위해 요구되는 조건
- 악성 script가 삽입될 수 있는 낮은 검증 수준
- 정보가 웹 사이트에 출력될수 있는 낮은 검증 수준
그 외 다양한 XSS 변종 기법
- Stored XSS : 게시판에 글을 작성하여 관리자에게 읽도록 유도하는 악성 script 실행 기법
- Reflected XSS : 말 그대로 악성 script를 반사시킨다 주로 메일로 전송시키는 기법
Dreamhack의 XSS-1 문제입니다.
XSS 취약점에 관련된 웹 해킹 문제입니다.
제공된 사이트에 접속해보겠습니다.
/xss
/memo
/flag
세 개의 링크가 존재합니다.
csrf 문제 때와 비슷하게
xss에서는 취약점에 대한 힌트를 줄 것이며
flag에서는 공격코드를 작성해 입력할 것으로 보입니다.
접속하자마자 alert(1) 메시지가 출력되고 있습니다.
url에 존재하는 코드를 살펴보면
<script> alert(1)</script>
라는 문자열이 들어가 있습니다.
해당 문제에서는 별도의 필터링이 존재하지 않는 듯하며
<script>, alert() 등 태그와 기능이 전부 정상적으로 작동하고 있습니다.
/memo에서는 flag가 출력될 것입니다.
또한 url의 memo 부분에 넣은 메시지가 출력됩니다.
공격 코드를 삽입할 /flag입니다.
이제 코드를 살펴보겠습니다.
코드를 분석해본 결과 제 수준에서 알 수 있었던 것은
쿠키가 존재하는 걸로 봐서
공격코드로 쿠키를 탈취/변조해야 함과 동시에
아까 확인했듯 코드에 대한 필터링이 없다는 점이었습니다.
물론 Flask에 해박한 지식을 갖고 있다면 더 많은 걸 알 수 있겠지만,,
일단 필터링이 없다 -> <script> 문법을 사용 가능
cookie값을 활용해야 함 -> cookie값을 탈취/변조해야 함
하지만 JavaScript에 document.cookie() 문법이 존재하는 걸 생각해보면
존재하는 계정의 cookie를 변조하기보다는 출력(탈취)해내는 게 맞는 것 같습니다.
<script>
alert("hello"); <!-- 메시지 출력 -->
document.cookie; <!-- 쿠키값 -->
location.href=""; <!-- ""내의 링크로 위치 이동 -->
document.location=""; <!-- "" 링크로 이동 -->
</script>
XSS에서 사용되는 네 가지 종류의 문법입니다.
각각의 기능은 주석으로 작성되어 있습니다.
이중 쿠키값을 출력하는 document.cookie와
location.href를 통해 memo에서 쿠키를 출력하도록 코드를 짜 보겠습니다.
<script>
location.href="/memo?memo="+document.cookie;
</script>
처음에는 document.cookie를 통해 쿠키값만 출력해주면 되는 게 아닌가 싶었고
location.href를 통해 memo로 위치를 이동해줘야 하는 이유가 조금 이해가 가질 않았었습니다.
지금도 정확히 아는 건지는 잘 모르겠지만
값이 출력될 수 있는 부분은 /memo 링크가 유일하기 때문에
location.href를 통해 /memo로 주소를 옮겨준 후
? memo=+document.cookie; 를 넣어
cookie값을 출력해주는 원리인 것 같습니다.
이상 감사합니다.
'정보보안 > Web Hacking' 카테고리의 다른 글
웹 해킹을 위한 DB 별 기초 쿼리문 (0) | 2020.08.07 |
---|---|
SQL Injection을 위한 SQL기초 구문 모음 (0) | 2020.08.06 |
[SQL Injection] - 쿼리에서 반환되는 열의 개수 구하기 // PortSwigger 예제 (0) | 2020.07.31 |
[CSRF] CSRF(Cross Site Request Forgery)공격 실습 - (DreamHack 실습예제) (0) | 2020.07.30 |
cookie를 통한 웹해킹 - DreamHack예제(cookie) (4) | 2020.07.25 |
댓글