Normaltic 모의해킹 취업반 스터디 8기 - 11주차 과제(CTF Write-up)

containerxox·2025년 6월 19일
post-thumbnail

☑️ Basic Script Prac

1. 마이페이지의 어느 부분에서 XSS가 일어나는지 탐색하기

▶ ( 탐색 1 ) 마이페이지 개인정보 수정해보자!
👉 마이페이지에서 수정하려는 정보(hello)가 alert 인자에 삽입되어 실행되는게 아니므로
이 방식으로는 XSS 취약점 찾기 힘듦.



▶ ( 탐색 2 ) 마이페이지의 URL 파라미터 user를 변경해보자.

기존 페이지 (조작 X)
↳ URL 파라미터 user의 값과 placeholder속성값이 testuser1으로 서로 동일.

URL 파라미터값을 testuser2로 변경 (조작 O)
↳ 동시에 placeholder의 속성값도 testuser2로 변경되었다.
즉, URL 파라미터 값이 placeholder의 속성값에 삽입된다.→ Reflected XSS 공격 가능!



▶ ( 탐색 3 ) <,',",>,<script>가 필터링 되는지 확인하기
↳ 해당 문자들은 필터링 되지 않음!

2. 일단 <input> 태그의 placeholder 속성값만 추출해보자.
(<input>태그의 placeholder 속성값에 Flag가 존재한다)


➡️ input 태그의 name 속성 값(info)을 이용해 document.getElementsByName()으로 해당 요소를 선택
➡️ .placeholder를 통해 해당 요소의 placeholder 속성값만 추출

3. url파라미터 user에 해당 input태그의 placeholder 속성값을 공격자의 서버로 전송하여 Flag를 획득해보자 !


⚠️ 주의
var secretData = document.getElementsByName('info')[0].placeholder; 코드는
핑크색 네모 박스에 있는 <input> 태그의 placeholder 속성 값을 가져오는 역할을 한다.

하지만, 핑크 네모 박스의 <input>태그는 연두색 네모 박스의 <input> 태그보다
더 늦게 로드되기 때문에
,
var secretData = document.getElementsByName('info')[0].placeholder; 코드가
핑크 네모 박스의 <input>태그가 완전히 로드되기 전에 실행되면 info 요소를 찾지 못한다.

따라서, 이 코드는 window.addEventListener('DOMContentLoaded', ...)를 사용하여
HTML이 완전히 파싱된 이후에 실행되도록 작성
해야 한다.


전달되는 URL 파라미터 값


최종적으로 실행되는 스크립트


▷ Request (요청)
↳ Copy URL

3. 해당 페이지 접속 → 복사한 URL 붙여넣기 → Visit 클릭

4. 관리자의 쿠키가 공격자의 서버로 전송됨! → 쿠키 탈취 성공 !!
➡️Reflected XSS와 DOM-based XSS 기법을 활용




☑️ Steal Info

1. xss 취약점 발생하는 포인트 찾기.

  • 공지사항 게시글
    ↳ title 부분은 HTML Entity 처리가 되어 있어서 XSS 발생가능성 낮다.
    content부분HTML Entity 처리 안되어 있어서 클라이언트측 스크립트 실행가능 → Stored XSS 취약점 有

    ① 게시글 작성
    ‣ create_title: title<'"><script>alert(1);</script>
    ‣ create_body: content<'"><script>alert(1);</script>

    ② 게시글 클릭
    ➡️ title부분은 HTML Entity 처리 O
    ➡️ content부분은 HTML Entity 처리 X, 즉 Stored XSS 취약점 존재!
    alert(1); 알림창 뜸



💁‍♀️ 문제 파악 & 접근 순서


2. 중요한 정보가 있는 페이지와 동일한 형태의 가짜페이지에서 빨간 박스 부분의 텍스트를 추출하기
(해당 요소에 Flag가 있을 것으로 예상됨)


3. content 입력란에 삽입한 iframe이 실제로 가짜 페이지를 로드하는지 확인


4.공격자의 서버로 전송하는 자바스크립트 코드 작성하기
( iframe태그의 src를 실제 중요한 정보가 담긴 페이지로 변경해주기 )



‣ Copy URL


5. 실제 중요 정보가 있는 페이지의 접근 권한은 관리자만 가지고 있기 때문에 관리자 방문 Bot Link 접속
→ 복사한 URL 붙여넣기 → Visit 클릭


6. 관리자Stored의 서버로 전송됨! → 쿠키 탈취 성공 !!
➡️Stored XSS와 DOM-based XSS 기법을 활용




☑️ Steal Info 2

1. 마이페이지의 정보란에 Flag가 숨겨져 있으므로, HTML 구조를 분석하여 해당 값을 추출하자.


➡️ 현재는 정보란의 placeholder 속성값이 없기 때문에 공백이 추출됨

2. XSS가 발생되는 포인트 찾기

  • 공지사항 게시글
    ↳ title 부분은 HTML Entity 처리가 되어 있어서 XSS 발생가능성 낮다.
    content부분HTML Entity 처리 안되어 있어서 클라이언트측 스크립트 실행가능 → Stored XSS 취약점 有

    ① 게시글 작성
    ‣ create_title: title<'"><script>alert(1);</script>
    ‣ create_body: content<'"><script>alert(1);</script>

    ② 게시글 클릭
    ➡️ title부분은 HTML Entity 처리 O
    ➡️ content부분은 HTML Entity 처리 X, 즉 Stored XSS 취약점 존재!
    alert(1); 알림창 뜸

3. 게시판의 content 입력란에 <iframe>태그를 삽입하여, 마이페이지를 창처럼 띄우기

4. 공격자의 서버로 Flag 전송하는 자바스크립트 코드 작성하기

‣ Copy URL

5. admin 계정의 마이페이지 정보란에 flag가 숨겨져 있기 때문에 관리자 방문 Bot Link 접속
→ 복사한 URL 붙여넣기 → Visit 클릭

6. 관리자의 쿠키가 공격자의 서버로 전송됨! → 쿠키 탈취 성공 !!
➡️Stored XSS와 DOM-based XSS 기법을 활용

0개의 댓글