728x90 Portswigger/CSRF11 Portswigger - CSRF with broken Referer validation solution 이번 문제는 참조자 검증이 손상되었다는데 아마 검증방법에 취약점이 존재하는 것 같다. 로그인 후 이메일 변경하는 요청을 repeater로 보내면 Referer이 https://0a5900d104be0f428659adb40023007f.web-security-academy.net/my-account?id=wiener인걸 볼수있다. https://0a5900d104be0f428659adb40023007f.web-security-academy.net/my-account?id=wiener 위 두 사진의 차이점을 보면 1번은 referer링크에서 초록 부분을 변경했고 2번은 빨간 부분을 변경해 보았다. 테스트 결과 초록 부분은 변경을 해도 상관없지만 빨간 부분은 한글자라도 변경되거나 추가되면 오류메시지가 출력되게.. 2023. 11. 10. Portswigger - CSRF where Referer validation depends on header being present solution 이번 문제는 referer 검증에 따른 csrf에 대한 문제이다. 먼저 로그인을 하고 패킷을 잡아보면 Referer헤더를 볼 수 있는데 Referer 헤더란? Referer 헤더는 웹 브라우저나 웹 애플리케이션에서 웹 페이지 요청 시 해당 요청이 어디서 발생했는지를 나타 내는 정보이다. 이 정보는 웹 서버에게 어떤 웹 페이지나 웹 사이트에서 사용자가 현재 페이지로 이동했는지를 알려 준다. 예를 들어 http://www.jhhack.com/1.html이라는 웹페이지에 있는 링크를 클릭하여 http://www.jhhack.com/2.html으로 이동했을 때 referer는 http://www.jhhack.com/1.html 이 된다. 웹사이트나 웹 애플리케이션 운영 시, Referer 정보는 매우 중요한 역.. 2023. 11. 8. Portswigger - SameSite Lax bypass via cookie refresh solution 이번 문제는 쿠키 새로고침으 통한 SameSite Lax 옵션 우회에 대한 문제다. 이번 문제에서는 특이하게 OAuth 기반 로그인을 지원한다. OAuth 기반 로그인이란? 웹 서핑을 하다 보면 위 사진처럼 Google과 Kakao 등의 외부 소셜 계정을 기반으로 간편히 회원가입 및 로그인할 수 있는 웹 어플리케이션을 쉽게 찾아볼 수 있다. 이때 사용되는것이 바로 OAuth다. OAuth란 Open Authorization의 약자로, 애플리케이션이 특정 시스템의 보호된 리소스에 접근하기 위해, 사용자 인증(Authentication)을 통해 사용자의 리소스 접근 권한(Authorization)을 위임받는 것을 의미한다. 확인을 위해 사이트에 접속 후 로그인페이지로 가면 소셜미디어에 로그인 하도록 안내한다.. 2023. 11. 1. Portswigger - SameSite Strict bypass via client-side redirect solution 이번 문제는 리다이렉트를 이용해 samesite=strict 옵션을 우회하면 된다. 리다이렉트란? 해석하면 다시 지시하다 즉, 브라우저에게 다른 URL(길, 방향)을 지시하는 것을 리다이렉트라 한다. 예를 들면 우리가 홈페이지에 로그인을 안 한 채로 글을 작성하려 한다면 글작성 페이지로 이동되는것이 아니라 로그인 페이지로 이동될 것이다. (1) 비로그인 상태에서 글작성 버튼 클릭 브라우저 -------> SERVER (2) 로그인 페이지로 이동 브라우저 SERVER (4) 다시 글작성 페이지로 이동 브라우저 2023. 10. 30. Portswiger - SameSite Lax bypass via method override solution 이번 문제는 매소드 재정의에 의한 SameSite Lax 우회에 대한 취약점이 포함된 문제다. samesite에 대한 내용을 정리해봤다. https://jh-hack.tistory.com/110 [개념정리] SameSite 쿠키에 별도로 설정을 가하지 않는다면, 크롬을 제외한 브라우저들은 모든 HTTP 요청에 대해서 쿠키를 전송하게 된다. 그 요청에는 HTML 문서 요청, HTML 문서에 포함된 이미지 요청, XHR 혹은 Form을 jh-hack.tistory.com 우선 로그인 후 이메일 변경 패킷을 burpsuite로 잡아 repeater로 보냈다. 요청을 보아 session퀴키의 samesite속성이 정의되지 않을 걸로 보아 Lax로 설정되었을 것을 알 수 있다. 그 후 change request .. 2023. 10. 25. Portswigger - CSRF where token is duplicated in cookie solution 이번 문제는 토큰이 쿠키에 복제되는 상황에서 CSRF취약점을 발생시키면 된다. 먼저 확인을 위해 로그인해서 쿠키값을 변경해 보자 그 후, 새로고침 후 csrf토큰을 확인해 보면 토큰도 같은 값으로 변경되는 걸 확인할 수 있다. 그럼 상대방의 쿠키값을 변경하고 그 값을 토큰값으로 넣은 후 이메일을 변경하면 변경되지 않을까? 저번 문제 코드랑 크게 달라진 점은 없는 것 같다. 2023. 10. 23. Portswigger - CSRF where token is tied to non-session cookie solution 이번 문제는 세션에 연결되지 않은 쿠키값에 대한 CSRF취약점이 포함되어 있다. wiener계정으로 로그인했을때 쿠키값을 보면 session값과 함께 csrfKey라는 쿠키값이 존재하는 걸 확인할 수 있다. 만약 csrfKey값을 임의로 바꾼뒤 이메일을 변경해 보면 허용되지 않은 토큰이라며 변경되지 않는다. 그럼 만약 carlos계정의 쿠키값과 토큰값을 넣으면 어떻게 될까? 이메일이 변경되는 걸 볼 수 있다. 그러면 내 토큰값과 쿠키값을 상대에게 주입한 후 이메일을 변경하면 상대방의 토큰과 쿠키값 없이도 변경이 가능하다. 브라우저에서 서버로 요청을 전송할 때 그 요청에 대한 응답에 Set-Cookie 헤더가 포함되어 있는 경우, 브라우저는 Set-Cookie에 있는 데이터를 저장하고, 이 저장된 데이터를.. 2023. 10. 18. Portswigger - CSRF where token is not tied to user session solution 이번 문제는 이메일 변경 기능에 취약점이 존재하고 CSRF 공격을 방지하지만 사이트의 세션 처리 시스템에 통합되지 않는다고 한다. 또한 로그인할 수 있는 계정을 2개 준다. 사이트의 세션 처리 시스템에 통합되지 않는다 이게 이 문제의 핵심인데 서버에서는 유저들을 구분해야 하기 때문에 세션을 저장할 서버가 필요하다. 위 그림은 sticky session 방식으로 고정된 세션을 의미하는데 User1 이 1번부터 3번까지의 서버 중 1번 서버에 세션을 생성하였다면, 이후에 User1이 보내는 모든 요청은 1번 서버로만 보내지게 된다. 즉, Load Balancer는 User가 첫 번째 세션을 생성한 서버로 모든 요청을 리다이렉트 하여 고정된 세션만 사용하게 한다. CSRF 토큰은 유저를 판별하는 기능은 없기 .. 2023. 10. 14. Portswigger - CSRF where token validation depends on token being present solution 이번 문제는 존재하는 토큰에 따라 유효성 검사가 달라지는 CSRF이다. 우선 문제 구성은 지난 문제와 동일하고 우선 확인을 위해 변경 email만 적어 요청을 보내봤다. ??? 문제가 풀렸다...? 왜 풀렸는지 몰라서 다시 찾아보던 결과 csrf토큰을 입력한 후 시도했을 때도 email이 변경되었지만 csrf토큰을 임의값으로 변경해서 넣으면 무효한 csrf 토큰이라는 경고문과 함께 변경되지 않는다. 아마 이러한 csrf토큰의 기능을 알려주기 위한 문제 같다. 2023. 10. 13. Portswigger - CSRF where token validation depends on request method 이번 문제는 이메일 변경에 CSRF 취약점이 있고 특정 유형의 요청에서만 방어한다고 한다. 우선 이메일 변경 방식은 저번문제랑 동일하고 저번 문제와 같은 형식의 코드를 전송했더니 csrf 파라미터가 없다고 오류 메시지가 출력된다. 이는 csrf 토큰을 의미하는데 csrf 토큰이란? 서버에 들어온 요청이 실제 서버에서 허용한 요청이 맞는지 확인하기 위한 토큰으로 서버 측 애플리케이션에서 생성되고 클라이언트와 공유되는 인증 값이다. 이번 문제에서는 문제 이름에서 힌트를 얻을 수 있는데 특정 유형의 요청에서만 방어하는 csrf이므로 요청 방식을 postdptj get으로 바꿔봤다. 어라? 이메일이 변경되었다. 왜 get방식에서는 csrf토큰이 없어도 이메일이 변경되는 것일까? 왜냐하면 CSRF 토큰 필터는 G.. 2023. 10. 11. 이전 1 2 다음 728x90