오늘 잠시 대구를 갔다와서 TIL을 못 썼는데 사실 이건 어제 한거라 어제 날짜로 올리는 것이다.
일단 전에 이슈였던 innerText는 사실상 뚫을 방법이 없다.
다시 모의해킹 희망편이다.
리액트의 디폴트는 이제 Render을 하는 부분에서 <>부분을 인코딩을 해서 보낸다.
그러나 리액트의 함수 중에 dangerouslySetInnerHTML이라는 함수가 있었는데 얘는 이름에서부터 위험한 것을 알 수 있듯이 사실 innerHTML을 쓰는거라 이렇게 되면 DB에 <>만 넣을 수 있게 된다면 <>를 그대로 뱉으면서 스크립트나 이벤트핸들러가 있는 HTML 태그를 삽입할 수 있게되면서 XSS 공격을 이행할 수 있는 환경이 될 것 같다.
그리고 전에 말했던 두번째 이슈에서 Burp Suite가 로컬호스트 패킷을 잡지못한다고 했는데 다시 보니까 CORS때문에 막히는 것이었다.
프록시를 켜면 CORS에 걸리고 끄면 CORS에 걸리지 않고 제대로 동작하는 이유는 모르겠으나 지금은 패킷이 HTML 인코딩이 되어있는지만 보면 됐기에 그냥 CORS를 꺼버리고 한 번 테스트를 해보았다.
일단 패킷을 안 잡고 그냥
이런 식으로 글을 작성하면 앞에서 늘 그랬듯이 DB에
이런 식으로 저장이 된다.
그리고 요청이 오면 8081로 잠시 프록시로 잡아서 Burp Suite로 패킷을 잡으면 내가 예상했던대로
이런 식으로 패킷에서 이미 HTML 인코딩이 되어있다
아 ㅋㅋ 아 ㅋㅋ 내가 이겼다
이걸 이제 그냥
이렇게 바꿔서 보내면
이렇게 HTML의 img 코드가 삽입되어 있는 것을 볼 수 있다.
캡쳐는 못 했지만 이미 alert창이 뜨기도 했었고 이미 이렇게 된 것을 보아 DB에 <>가 raw로 저장이 되어있다는 말이긴 하지만 확실하게 하기 위해 DB를 확인해보니
이렇게 <>가 인코딩이 아니라 raw로 들어간 상태를 볼 수 있다.
이런 식으로 결국 DB에 raw상태의 <>를 넣을 수 있었고