풀긴 했는데 제가 이해한 것인지 확실히 하고 싶습니다.
csrf라는 걸 제가 이해한건
-
공격자가 <img src="/change_password?..."> 같은 구문을 '자유게시판' 같은 곳에 입력해둔다
-
사용자가 그 게시물을 클릭하는 순간 비밀번호가 바뀐다
-
공격자는 admin의 비밀번호가 바뀐것을 기다리다가 관리자 계정을 탈취한다.
그런데 여기서는 flag라는 입력칸에 구문을 입력해서 직접 비밀번호를 바꾼 뒤에 로그인하는 걸로 구현이 되어 있는데
이는 그저 실습을 위해서 만들어졌기 때문인가용?
혹시 제가 이해한 것에 잘못된 것이 있거나, 좀더 깊이 이해하려면 어떤 부분을 보완해야 하는지 알려주실 수 있으신가요?
#web
작성자 정보
답변
1
One_
큐레이터
/change_password는 pw라는 인자값만 넘겨받고, 사용자의 세션을 가져와
세션 스토리지에 저장되어있는 유저의 패스워드를 pw 인자값으로 변경하게 됩니다.
공격자가 /flag에 /flag?param=<img src="/change_password?pw=1">
이런식으로 값을 넘기게 되면,
봇(코드 상에서 구현된 어드민)이 vuln?param=<img src="/change_password?pw=1">
으로 접속하게 되고,
img 태그를 통해 /change_password에 pw=1로 파라미터를 전송하게 됩니다.
그렇게 되면 세션 스토리지에 있는 어드민의 패스워드는 pw=1 때문에 패스워드가 1로 바뀌게 되고,
공격자는 1이라는 패스워드를 이용해 어드민으로 로그인할 수 있게 됩니다.
flag라는 입력칸에 구문을 입력해서 직접 비밀번호를 바꾼 뒤에 로그인하는 걸로 구현이 되어 있는데
이는 그저 실습을 위해서 만들어졌기 때문인가용?
-> 맞습니다. 실제로는 이해하신대로 과정과 비슷하게 공격이 시행됩니다.