일단 코드를 보면
지난 문제들과 비슷하게 디코딩후
admin이 true인 상태이면
이를 플래그값을 보여주는 형식이다
하지만 이전 문제와 다른점은
authorise함수에서
admin인지 확인할 때 True를 큰따옴표를 이용한걸 보아선
boolean값이 아닌 string값으로 확인한다.
그리고 create_session함수에서도
json형태를 body라는 변수에도 역시 boolean값인 False을 큰따옴표를 이용하여 string값이다.
admin확인 조건문
현재 키값을 모르는 상태이다.
그러나 해당 조건문을 보게 되면
두가지 취약한 점을 깨달을 수 있다.
1. boolean값이 아닌 string값을 통해 구별한다.
2. "False"스트링 값에대한 조건이 없기 때문에, 어쨌든 "True"스트링 값만 나오면 된다.
그래서 string값으로 username을 통한 인젝션을 시도해보았다.
create_session함수
만든 구문 : (사용자가 입력한 유저이름)","admin":"True 예시 : userMSS","admin":"True |
출력된 모습
{"admin": "False", "username": "userMSS","admin":"True"} |
위의 예시로 json을 출력하였다.
그래서 "False"값이 있어도
어쨌든 "True"스트링 값으로 인증이 되는지 사이트에서 확인을 해보았다.
정답
인젝션한 값을 통해 JWT를 만들었고,
이를 통해 admin권한을 얻어 플래그값을 가져왔다.
플래그 값은 crypto{https://owasp.org/www-community/Injection_Theory}이다.