아 ㅋㅋ 오늘 희망도 깨졌고 믿음도 깨졌다.
아무리봐도 버프스위트로 로컬호스트 패킷을 프록시로 잡을 방도가 안 보여서 그냥 자기만의 웹페이지 아무거나 만든 친구 사이트에 적용을 해보았다.
일단 친구에게 물어보니 다들 많이 쓰는 MERN으로 구현을 했다고 한다.
어차피 내가 만든 게시판도 MERN이라서 상관없을 것 같았다. 그래서 동의없는 양해(?)를 구하고 무작정 넣어봤다.
일단 Post 요청임에도 제일 밑에 있는 것처럼 입력값을 가져올 수 있고 저걸 우리가 바꿔서 보낼수도 있다.
일단 실제 내가 입력했던 <>"' 문자가 아니라 "됐다!" 싶었지만 HTML 인코딩도 아니고 URL 인코딩이었다.
그래도 혹시나 싶어서 해당 내용들을 원래 내용인 <>"'로 바꿔서 보내보았다.
이런 식으로 내용은 잘 뜨긴하는데 이걸 개발자모드로 보니까
이런식으로 HTML 인코딩이 된 상태로 와 있는걸 보아 내가 패킷을 잡아서 변조해서 다시 보낸 이후에 인코딩이 이루어 진 것을 알 수 있다.
그래서 아.. DB에 넘기기 직전이나 DB가 자체적으로 저장하기전에 인코딩을 하는구나..
라는 생각을 했는데 더 이상한 점이 생기기 시작했다.
그래서 웹사이트를 만든 친구에게 DB를 한 번 확인해달라고 했는데
이렇게 <>"'가 잘 저장이 되어있다.
뭔가 이상해서 이 친구가 처음 만들고 나한테 "방명록 써주셈ㅋㅋ"이라고 해서 손수 넣어줬던 공격코드도 다시 봐달라고 하니
이마저도 그대로 html인코딩 없이 DB에 들어가있는 것을 보게 되었다.
그런데도 내가 예전에 내 DB에서 바꾸고 들어갔을 때(0803TIL 참조)는 실행이 되었던 것과는 달리 얘는 대놓고 들어가 있는데도 스크립트가 실행이 안 되었다는 것이다.
이걸보고 두 가지 가설이 생겼다.
1. 얘는 서버에서 다시 클라이언트로 해당 게시물을 보낼 때 html 인코딩이 이루어지고 브라우저가 읽을 때 다시 디코딩을 해버리는 것이다.
2. 1과는 달리 그냥 <>"'를 그대로 서버에서 뱉긴 하는데 이걸 받아내는 javascript가 어쩌면 innerHTML이 아니라 innerText일수도 있다.
1번을 위해서는 이제 생각났지만 와이어샤크를 이용하면 또 분석을 할 수 있을 것 같고,
2번을 위해서는 또 innerText를 우회할 수 있는 방법을 찾아봐야겠다.