Oh! JUN

[WebGoat] JWT - 2 (HashCat 활용하여 비밀 키 알아내기) 본문

웹 해킹/Broken Authentication

[WebGoat] JWT - 2 (HashCat 활용하여 비밀 키 알아내기)

Kwon Oh! JUN 2023. 12. 2. 18:06

해당 문제는 [Payload]의 'username' 을 'WebGoat'로 변경시켜서 JWT를 제출해야합니다.

 

사전에[Header]에서 알고리즘이 'none'이 아니면

JWT는 [Header/Payload]값을 base64 인코딩 시키고

'비밀키'를 사용하여 암호화된 값을 [Signature]라고 했습니다.

 

[Payload]의 'username'을 변경시키면 '비밀키'와 [Header/Payload]의 암호화 과정에서

다른 [Signature]값이 나와 무결성을 해치기 때문에 정상적으로 제출할 수 없습니다.

 

따라서

 

공격자가 '비밀키'를 알고 있다면  'username'을 변경시켜도 무결성을 해치지 않습니다.


 

 

HashCat 설치하기

https://hashcat.net/hashcat/ hashcat - advanced password recovery Download Name Version Date Download Signature hashcat binaries v6.2.6 2022.09.02 Download PGP hashcat sources v6.2.6 2022.09.02 Download PGP Signing key on PGP keyservers: RSA, 2048-bit. Key

securitystudy.tistory.com

 

'비밀키'를 알아내기 위해서 '사전 대입 공격'을 실행할건데 

그 전에 'HashCat'을 사용해서 공격을 실행할 것 입니다.


 

 

JWT.IO

JSON Web Tokens are an open, industry standard RFC 7519 method for representing claims securely between two parties.

jwt.io

문제에서 제시한 JWT 토큰을 가져와서 위의 링크에 붙여넣어보면 

[Header/Payload]가 구분되고 '비밀키'를 입력하여 [signature]을 확인할 수 있습니다.


다음으로 'hashcat'을 실행하기 위해 C:\hashcat 위치에

'jwt.txt' 토큰값과 'google-10000-english.txt' 사전 대입 공격에 사용할 파일을 생성해줍니다.

 

https://github.com/first20hours/google-10000-english/blob/master/google-10000-english.txt

 


hashcat -a 3 -m 16500 jwt.txt google-10000-english.txt

*16500 : JMT 해시 모드

 

jwt.txt의 JWT 토큰에 JMT 해시 모드로 googole-10000-english.txt 사전 대입 공격을 실행시킵니다.


 

'비밀키'는 'business' 인것을 확인했습니다!!


'비밀키'에 business 입력해주면 [Signature]가 변경됩니다.


변경된 [Header/Payload/Signature] 을 입력해주면 성공하게 됩니다.


 

 

[WebGoat] JWT tokens - 1

1. 소개 JWT는 "JSON Web Token"의 약자입니다. JWT는 웹 애플리케이션에서 사용자 인증과 데이터 교환을 안전하게 처리하기 위한 토큰 기반의 인증 방식입니다. 2. JWT 구조 JWT의 구조는 [Header/Payload/Signa

securitystudy.tistory.com

두 번째 방법은 이전에 했던 공격과 동일합니다.


 

알고리즘을 'none'에 대한 취약점 조치가 되어있지 않아서

이전 문제와 동일하게 설정해서 해결할 수 있었습니다.