[CryptoHack] CRYPTO ON THE WEB(JSON in JSON)
작성자 - ikbak_2
JSON in JSON
문제 설명
우리는 어떻게 결함있는 검증이 JWT들의 보안을 부술 수 있는지 조사해왔지만, 때때로 코드를 악용하여 예상하지 못한 데이터에 서명할 수 있다. |
https://web.cryptohack.org/json-in-json/
풀이
import json
import jwt # note this is the PyJWT module, not python-jwt
FLAG = ?
SECRET_KEY = ?
@chal.route('/json-in-json/authorise/<token>/')
def authorise(token):
try:
decoded = jwt.decode(token, SECRET_KEY, algorithms=['HS256'])
except Exception as e:
return {"error": str(e)}
if "admin" in decoded and decoded["admin"] == "True":
return {"response": f"Welcome admin, here is your flag: {FLAG}"}
elif "username" in decoded:
return {"response": f"Welcome {decoded['username']}"}
else:
return {"error": "There is something wrong with your session, goodbye"}
@chal.route('/json-in-json/create_session/<username>/')
def create_session(username):
body = '{' \
+ '"admin": "' + "False" \
+ '", "username": "' + str(username) \
+ '"}'
encoded = jwt.encode(json.loads(body), SECRET_KEY, algorithm='HS256')
return {"session": encoded}
일단 코드를 보면
지난 문제들과 비슷하게 디코딩후
admin이 true인 상태이면
이를 플래그값을 보여주는 형식이다
하지만 이전 문제와 다른점은
authorise함수에서
admin인지 확인할 때 True를 큰따옴표를 이용한걸 보아선
boolean값이 아닌 string값으로 확인한다.
그리고 create_session함수에서도
json형태를 body라는 변수에도 역시 boolean값인 False을 큰따옴표를 이용하여 string값이다.
현재 키값을 모르는 상태이다.
그러나 해당 조건문을 보게 되면
두가지 취약한 점을 깨달을 수 있다.
1. boolean값이 아닌 string값을 통해 구별한다.
2. "False"스트링 값에대한 조건이 없기 때문에, 어쨌든 "True"스트링 값만 나오면 된다.
그래서 string값으로 username을 통한 인젝션을 시도해보았다.
만든 구문 : (사용자가 입력한 유저이름)","admin":"True 예시 : userMSS","admin":"True |
import json
username = 'userMSS","admin":"True'
body = '{' \
+ '"admin": "' + "False" \
+ '", "username": "' + str(username) \
+ '"}'
print(body)
{"admin": "False", "username": "userMSS","admin":"True"} |
위의 예시로 json을 출력하였다.
그래서 "False"값이 있어도
어쨌든 "True"스트링 값으로 인증이 되는지 사이트에서 확인을 해보았다.
인젝션한 값을 통해 JWT를 만들었고,
이를 통해 admin권한을 얻어 플래그값을 가져왔다.
플래그 값은 crypto{https://owasp.org/www-community/Injection_Theory}이다.
P.S.
https://owasp.org/www-community/Injection_Theory
플래그값에 있는 사이트에 들어가 보면
Injection Theory라는 글을 볼 수가 있는데
조만간 함 다뤄봐도 괜찮을 것 같다.
'워게임 > CryptoHack' 카테고리의 다른 글
[CryptoHack] SYMMETRIC CIPHERS(ECB CBC WTF) (0) | 2023.05.05 |
---|---|
[CryptoHack] SYMMETRIC CIPHERS(Lazy CBC) (0) | 2023.05.04 |
[CryptoHack] CRYPTO ON THE WEB(JWT Secrets) (0) | 2023.05.03 |
[CryptoHack] CRYPTO ON THE WEB(JSON WEB TOKENS, JWT Sessions, No Ways JOSE) (0) | 2023.05.01 |
[CryptoHack] 가입, Introduction (0) | 2023.03.31 |