티스토리 뷰
- 2022.11.7
- Rating weight: 23.58
- 리버싱, 포너블 문제는 없었고 대부분이 암호학, MISC, Forensic 문제였다.
- Cryptography
- Find the message
- How can I retrieve the message
- Forensic
- Get your flag
- Criptography
- Take my key
- Variables and more variables
- General Skills
- Find a Flag
- Binary in sigth
- Get the flag
- Bad Code
Cryptography
Find the message
해당 문자열을 보니
flag가 특수문자를 제외하고 알파벳만 밀려있는 듯한 모습이다.
rot13.com
rot13.com Please enable JavaScript to use this page. ↓ ROT1 ROT2 ROT3 ROT4 ROT5 ROT6 ROT7 ROT8 ROT9 ROT10 ROT11 ROT12 ROT13 ROT14 ROT15 ROT16 ROT17 ROT18 ROT19 ROT20 ROT21 ROT22 ROT23 ROT24 ROT25 ↓
rot13.com
해당 사이트에서 rot13을 돌려보니 flag가 나왔다
Fl@g{A_s0ld13r shoOt$, a hAck3R g!ves 3nteR}
How can I retrieve the message
소수 한쌍에 대한 이야기가 나온 것으로 보아 IF는 N으로 생각하고 복호화를 진행하였다.
from Crypto.Util.number import *
IF = 10403
e = 8743
c = 99
# IF = 101 * 103
p = 101
q = 103
phi = (p-1)*(q-1)
d = inverse(e, phi)
print(pow(c, d, IF))
9366
Forensic
Get your flag
문제에서 binary 파일을 주었다.
대부분의 이런 포렌식 첫 번째 문제는 hxd로 열어보면 flag가 있는 경우가 많다
우선 flag 포멧을 모르고 있어서 flag라고 검색하였더니 바로 나왔다.
flag{T3@m_H3rE_1s_yU0r_Fl@G_XD}
Criptography
Take my key
문제에서 Alice와 Bob은 공개키로 p와 g를 고르고,
Alice는 x를, Bob은 y를 골랐다고 한다. 이들의 대칭키는?
p와 g를 공개하는 것으로 보아 디피헬만 키 교환 알고리즘이라고 생각하였고
위의 알고리즘에서 대칭키를 생성하는 방식대로 만들어보았다.
p = 101
g = 17
x = 19
y = 13
key = g**(x*y) % p
print(key)
14
Variables and more variables
문제에서 p, q, e, c를 알려주었으니 간단하게 풀 수 있다.
from Crypto.Util.number import *
p = 7
q = 11
e = 13
c = 17
n = p*q
phi = (p-1)*(q-1)
d = inverse(e, phi)
print(pow(c, d, n))
52
General Skills
Find a Flag
해당 문제에서 주는 파일을 다운받고 압축을 풀어보면
이런 식으로 great_author 폴더 안에 3개의 폴더가 있고
각각의 폴더들 안에도 폴더 / 폴더 / 폴더 이런 형식으로 되어있다.
문제에서는 oliver_twist.txt를 찾으라고 하였으니 everything을 이용하여 빠르게 찾아보았다.
fl@g{Ch@rRl3$_D1cK3N$}
Binary in sigth
binary 파일과 script 파일이 주어지고
script 파일을 실행하였더니 별 달라지는 게 없어서 hxd로 binary 파일을 열어보았다.
문제의 이름대로 눈 앞에 바로 있었다.
Fl@g{Mr_Rob0t_3th1c4l_H@ck3R25}
Get the flag
포렌식 Get your flag 문제와 동일한 방식으로 풀었다.
flag{grep_is_a_good_tool}
Bad Code
문제에서 준 파일을 열어보니
import random
def str_xor(secret, key):
#extend key to secret length
new_key = key
i = 0
while len(new_key) < len(secret):
new_key = new_key + key[i]
i = (i + 1) % len(key)
return "".join([chr(ord(secret_c) ^ ord(new_key_c)) for (secret_c,new_key_c) in zip(secret,new_key)])
flag_enc = chr(0x01) + chr(0x21) + chr(0x08) + chr(0x19) + chr(0x21) + chr(0x51) + chr(0x5c) + chr(0x40) + chr(0x3a) + chr(0x24) + chr(0x5d) + chr(0x21) + chr(0x20) + chr(0x07) + chr(0x0a) + chr(0x04),
flag = str_xor(flag_enc, 'enkidu')
print('That is correct! Here\'s your flag: ' + flag)
이런 식으로 들여쓰기가 문제 있는 것으로 보여서 고친 다음 실행을 하였지만 에러가 나왔다.
그러곤 한참 구글링해보며 처음부터 따라서 코드를 적던 중
flag_enc 변수 끝에 필요없는 , 가 붙어있었다.
이를 지우고 실행하니 flag가 나왔다.
dOcpE$9.QM9TEiam
문제를 9개나 풀어서 기분은 좋았지만
실력이 늘만한 문제는 없었어서 아쉬웠다.
'CTF' 카테고리의 다른 글
JBUCTF 2023 문제풀이 및 후기 (1) | 2023.11.01 |
---|---|
더 해킹 챔피언십 주니어 2023(DSEC 2023) 문제 풀이 및 후기 (0) | 2023.10.30 |
27th Hacking Camp 후기 (0) | 2023.09.04 |
순천향대학교 제 21회 정보보호 페스티벌 본선 풀이 및 후기 (1) | 2023.08.29 |
순천향대학교 제 21회 정보보호 페스티벌 예선전 풀이 및 후기 (1) | 2023.08.28 |
- Total
- Today
- Yesterday
- 티스토리챌린지
- Write up
- Ethereum
- 이더넛
- Python
- Ethernaut
- smart contract
- blockchain
- forensic
- YISF
- 이세돌
- 오블완
- Lord of SQL injection
- 프로그래머스
- solidity
- Los
- 파이썬
- 알고리즘
- ctftime
- misc
- CTF
- 디스코드 봇
- 디지털 포렌식
- 워게임
- 코딩테스트
- writeup
- 정렬
- Crypto
- web3
- 웹해킹
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |