> For the complete documentation index, see [llms.txt](https://www.xn--hy1b43d247a.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://www.xn--hy1b43d247a.com/web-and-mobile/01-account-management/owasp-juice-shop.md).

# 세번째, OWASP Juice Shop 로그인 페이지에서의 통신 흐름과 구조 알아보기

그럼 이번에는  OWASP Juice Shop의 로그인 페이지에서 응용해보자.

아래 이미지와 같이 192.168.149.128:3000/#/login의 주소가&#x20;

Juice Shop의 로그인 페이지 주소이고&#x20;

<figure><img src="https://1805673931-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FtMFEdQUk1veqYea72hvC%2Fuploads%2F9mqKU5qgcrovw2HyEmW7%2Fimage.png?alt=media&amp;token=fe919ab8-b440-4b5f-9afb-5549e2fb6b8b" alt=""><figcaption></figcaption></figure>

Burp Suite로 해당 페이지를 접근하면 아래와 같이 여러 URL에 접근 되는 것이 보인다.

<figure><img src="https://1805673931-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FtMFEdQUk1veqYea72hvC%2Fuploads%2FwZQ1yZ4ZZlgyvZIEnBMG%2Fimage.png?alt=media&amp;token=c9cd4ffb-b2c3-4291-9108-500448e83f05" alt=""><figcaption></figcaption></figure>

지금 목표는 로그인 성공이니 여기에서 다 볼 필요는 없다. 그럼 로그인을 시도할 때 통신 되는 데이터를 찾아보자 로그인을 시도할 시에 /rest/user/login 주소로 통신이 되고 아래 이미지 처럼 email, password 값에 임의로 주소를 넣어야 로그인이 성공 되는 것을 짐작하는데

<figure><img src="https://1805673931-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FtMFEdQUk1veqYea72hvC%2Fuploads%2FO6q3J2TPefEkL8AbdaS4%2Fimage.png?alt=media&amp;token=605e7620-6120-497f-97ed-f7dd6439b14e" alt=""><figcaption></figcaption></figure>

Email의 메시지 박스와&#x20;

<div align="left"><figure><img src="https://1805673931-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FtMFEdQUk1veqYea72hvC%2Fuploads%2FkZoNIArjnvDQQPcgZWbz%2Fimage.png?alt=media&amp;token=df63588d-1903-4566-b3a9-2be393b7523f" alt=""><figcaption></figcaption></figure></div>

<figure><img src="https://1805673931-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FtMFEdQUk1veqYea72hvC%2Fuploads%2FbkN5pP4gmqsvAQeP7lNk%2Fimage.png?alt=media&amp;token=4e2d4158-33dd-4f84-9ecd-f332fff567c8" alt=""><figcaption></figcaption></figure>

password의 메시지 박스의 소스코드를 확인 해야 한다.

이 두가지 class를 알아본 이유는 후에 자동 로그인 소스코드를 만들기 위한 정보에 필요해보이기 때문에 우선 확인을 한 것이다.

<div align="left"><figure><img src="https://1805673931-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FtMFEdQUk1veqYea72hvC%2Fuploads%2FHwvzgNqSAqZpcO1OVWyC%2Fimage.png?alt=media&amp;token=9d4c4fde-5aef-46d9-8b06-2c0400a7af91" alt=""><figcaption></figcaption></figure></div>

<figure><img src="https://1805673931-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FtMFEdQUk1veqYea72hvC%2Fuploads%2FbiHbYOIRqQrcmxg4Lkbc%2Fimage.png?alt=media&amp;token=e9ea2e41-24d2-4129-939c-d85df915d9ce" alt=""><figcaption></figcaption></figure>

그럼 계정을 만들고 로그인을 직접 진행 해보자  로그인을 성공할 시에 통신 과정을 보면&#x20;

/rest/user/login&#x20;

/rest/user/whoami&#x20;

/rest/basket/6&#x20;

/api/Quantitys/ 의 과정으로 통신이 진행되면서 로그인이 성공하는 것을 확인 할 수 있는데 여기에서 '/api/Quantitys/' api를 짐작하는 통신을 확인 할 수 있고

<figure><img src="https://1805673931-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FtMFEdQUk1veqYea72hvC%2Fuploads%2FfEkzGBvSxcYJ1fgtuEZ9%2Fimage.png?alt=media&amp;token=e969b58e-d454-4d33-befb-257b090a4e95" alt=""><figcaption></figcaption></figure>

/rest/user/whoami는 로그인 사용자의 정보로 짐작이 되는데

<figure><img src="https://1805673931-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FtMFEdQUk1veqYea72hvC%2Fuploads%2FW7gztneyd6P0FXe14PQN%2Fimage.png?alt=media&amp;token=7c9f4f86-cc12-4a6a-9872-c5e83f23d404" alt=""><figcaption></figcaption></figure>

우선적으로 로그인 인증과 세션 유지에 중요해 보이는 것은 API로 보이기 때문에 API를 봐보자

아래 이미지와 같이 로그인을 성공하면 "authentication":{"token":"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1N ....이하생략  token이 암호화 되어 있는 것과

<figure><img src="https://1805673931-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FtMFEdQUk1veqYea72hvC%2Fuploads%2FyS0c2xhfiugEtY2HYv4F%2Fimage.png?alt=media&amp;token=949e9f31-a824-44da-a2ea-eab630c32fbf" alt=""><figcaption></figcaption></figure>

'/api/Quantitys/' api의 통신 데이터로 보이는 값을 확인 할 수 있는데

<figure><img src="https://1805673931-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FtMFEdQUk1veqYea72hvC%2Fuploads%2FGIH1Em0wKCY34HZJd3sb%2Fimage.png?alt=media&amp;token=d5ba9606-35b0-4fc7-802e-17da04f55eb2" alt=""><figcaption></figcaption></figure>

암호화 되어있는 token값을 base64로 디코딩해서 보면 나오는 정보가 있다. &#x20;

해당 정보에서의 요점은

<figure><img src="https://1805673931-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FtMFEdQUk1veqYea72hvC%2Fuploads%2FpJh4cvUAeg6kyk7jLRJi%2FAnimation5%20(22).gif?alt=media&amp;token=49e1362e-b427-481f-bf98-4d681ee43ae2" alt=""><figcaption></figcaption></figure>

첫번째, 'JWT'

<div align="left"><figure><img src="https://1805673931-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FtMFEdQUk1veqYea72hvC%2Fuploads%2FDgpRtgFDvrMORbf43nKT%2Fimage.png?alt=media&amp;token=fb2fa26e-cf3f-4c45-af3a-c0d42dc51529" alt=""><figcaption></figcaption></figure></div>

두번째, 로그인을 성공할 시의 정보 값을 요점으로 봐야하는데

<figure><img src="https://1805673931-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FtMFEdQUk1veqYea72hvC%2Fuploads%2F4zfMFM8xfiHm9svVtSgs%2Fimage.png?alt=media&amp;token=3b227182-e26a-4c79-abfa-98221ad1b849" alt=""><figcaption></figcaption></figure>

JWT을 간략히 소개하자면

JSON 웹 토큰(JWT)은 시스템 간에 암호화 서명된 JSON 데이터를 전송하기 위한 표준 형식이다. 인증,세션 관리 및 액세스 제어 메커니즘 에 일반적으로 사용된다. 이는 공격자가 JWT를 성공적으로 수정할 수 있는 경우 자신의 권한을 에스컬레이션하거나 다른 사용자를 가장할 수 있음을 의미한다.

juice-shop은 DVWA와는 달리 로그인 보안을 신경 쓴 것이 보이기는 하나 결국 JWT도 취약점이 있다는 것을 알게 되었고 다음 글에는 해당 인증 취약점과 세션을 유지하는 방법을 알아보겠다.

참고자료 : <https://portswigger.net/burp/documentation/desktop/testing-workflow/session-management/jwts>
