SECCON Beginners CTF 2020 Writesup
스코어 서버
htps : / / s 이것. 베긴 rs. 괜찮아. jp/짱게 s
Welcome
문제문에 기재된 대로 SECCON Beginners의 Discord 채널에 액세스하면 플래그가 있다.
FLAG:ctf4b{sorry, we lost the ownership of our irc channel so we decided to use discord}
emoemoencode
이모티콘을 기반으로 플래그를 추정합니다.
처음 세 문자가 ctf로 변환된다고 가정하고 이모티콘을 숫자로 변환하면 다음과 같이됩니다 (python ord 사용)
🍣 127843 ⇔ c 99
🍴 127860 ⇔ t 116
🍦 127846 ⇔ f 102
이와 같이, 이모티콘을 숫자로 변환 후, 127744를 뺀 것을 다시 영문자로 변환하면 플래그를 취득할 수 있다.
답변 코드
question="🍣🍴🍦🌴🍢🍻🍳🍴🍥🍧🍡🍮🌰🍧🍲🍡🍰🍨🍹🍟🍢🍹🍟🍥🍭🌰🌰🌰🌰🌰🌰🍪🍩🍽"
result=""
for q in question:
result=result+chr(ord(q) -127744)
print(result)
FLAG:ctf4b{stegan0graphy_by_em000000ji}
mask
파일을 다운로드 한 후 실행하면 다음과 같이 사용법이 표시됩니다.
./mask
Usage: ./mask [FLAG]
./mask a
Putting on masks..
a
a
Wrong FLAG. Try again
올바른 플래그를 입력하면 지울 수 있습니다.
해당 파일을 IDA 혹은 gidra로 열면, 이하의 2개를 만족하는 캐릭터 라인인 것을 알 수 있다
1. 인수로 건네준 문자열과 0x75의 문자열의 논리합을 취득해, 그 결과가 "atd4`qdedtUpetepqeUdaaeUeaqau"가 되는 것
2. 인수로 건네준 문자열과 0xeb의 문자열의 논리합을 취득해, 그 결과가 "c`b bk`kj`KbababcaKbacaKiacki"가 되는 것
답변 코드
v1="atd4`qdedtUpetepqeUdaaeUeaqau"
v2="c`b bk`kj`KbababcaKbacaKiacki"
result=""
for i in range(len(v1)):
count=0x00
while(1):
result_v1= chr(0x75 & count)
result_v2= chr(0xeb & count)
if result_v1 == v1[i] and result_v2==v2[i]:
result=result+chr(count)
break
else:
count=count+1
print(result)
ctf4b{dont_reverse_face_mask}
Spy
실재하는 종업원을 특정할 수 있으면 플래그를 얻을 수 있는 것 같다.
주어진 코드를 확인하면,
1. 직원 ID가 DB에 없으면 오류를 반환합니다.
2. 직원 ID가 DB에 있으면 암호 해시를 계산하지 않으면 오류를 반환합니다.
if not exists:
return render_template("index.html", message="Login failed, try again.", sec="{:.7f}".format(time.perf_counter()-t))
# auth.calc_password_hash(salt, password) adds salt and performs stretching so many times.
# You know, it's really secure... isn't it? :-)
hashed_password = auth.calc_password_hash(app.SALT, password)
if hashed_password != account.password:
return render_template("index.html", message="Login failed, try again.", sec="{:.7f}".format(time.perf_counter()-t))
정중하게 실행에 걸린 시간을 출력하는 코드가 기재되어 있으므로, 존재하는 직원의 경우에는 시간이 걸린다고 가정된다. 직원의 ID를 모두 입력하고 걸린 시간이 많은 직원만 식별하면 다음 플래그가 얻어졌다.
ctf4b{4cc0un7_3num3r4710n_by_51d3_ch4nn3l_4774ck}
R&B
다운로드한 파일을 확인하면, 암호화된 결과와 방식이 기재된 파일이 건네진다.
방식에 관해서는
1. FORMAT의 문자열이 R이면 FLAG 문자열이 ROT13 인 것 앞에 R을 부여합니다.
2. FORMAT의 문자열이 B이면 FLAG 문자열이 BASE64 인 것 앞에 B를 부여합니다.
3. 그렇지 않으면 아무 작업도
그러므로 복호할 때는 반대로 하면 되고, 이하를 암호화된 문자열에 적용한다.
1. FLAG 문자열의 시작이 R이면 R을 제거하고 나머지를 ROT13
2. FLAG 문자열의 시작이 B이면 B를 제거하고 나머지를 BASE64
ctf4b{rot_base_rot_base_rot_base_base}
감상
최소한의 인권은 얻었다.
개인적으로는 Crypt 문제에 조금 손을 대고 싶었습니다.
Reference
이 문제에 관하여(SECCON Beginners CTF 2020 Writesup), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/karma0106/items/bf6caf7c3268b1e57770
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
이모티콘을 기반으로 플래그를 추정합니다.
처음 세 문자가 ctf로 변환된다고 가정하고 이모티콘을 숫자로 변환하면 다음과 같이됩니다 (python ord 사용)
🍣 127843 ⇔ c 99
🍴 127860 ⇔ t 116
🍦 127846 ⇔ f 102
이와 같이, 이모티콘을 숫자로 변환 후, 127744를 뺀 것을 다시 영문자로 변환하면 플래그를 취득할 수 있다.
답변 코드
question="🍣🍴🍦🌴🍢🍻🍳🍴🍥🍧🍡🍮🌰🍧🍲🍡🍰🍨🍹🍟🍢🍹🍟🍥🍭🌰🌰🌰🌰🌰🌰🍪🍩🍽"
result=""
for q in question:
result=result+chr(ord(q) -127744)
print(result)
FLAG:ctf4b{stegan0graphy_by_em000000ji}
mask
파일을 다운로드 한 후 실행하면 다음과 같이 사용법이 표시됩니다.
./mask
Usage: ./mask [FLAG]
./mask a
Putting on masks..
a
a
Wrong FLAG. Try again
올바른 플래그를 입력하면 지울 수 있습니다.
해당 파일을 IDA 혹은 gidra로 열면, 이하의 2개를 만족하는 캐릭터 라인인 것을 알 수 있다
1. 인수로 건네준 문자열과 0x75의 문자열의 논리합을 취득해, 그 결과가 "atd4`qdedtUpetepqeUdaaeUeaqau"가 되는 것
2. 인수로 건네준 문자열과 0xeb의 문자열의 논리합을 취득해, 그 결과가 "c`b bk`kj`KbababcaKbacaKiacki"가 되는 것
답변 코드
v1="atd4`qdedtUpetepqeUdaaeUeaqau"
v2="c`b bk`kj`KbababcaKbacaKiacki"
result=""
for i in range(len(v1)):
count=0x00
while(1):
result_v1= chr(0x75 & count)
result_v2= chr(0xeb & count)
if result_v1 == v1[i] and result_v2==v2[i]:
result=result+chr(count)
break
else:
count=count+1
print(result)
ctf4b{dont_reverse_face_mask}
Spy
실재하는 종업원을 특정할 수 있으면 플래그를 얻을 수 있는 것 같다.
주어진 코드를 확인하면,
1. 직원 ID가 DB에 없으면 오류를 반환합니다.
2. 직원 ID가 DB에 있으면 암호 해시를 계산하지 않으면 오류를 반환합니다.
if not exists:
return render_template("index.html", message="Login failed, try again.", sec="{:.7f}".format(time.perf_counter()-t))
# auth.calc_password_hash(salt, password) adds salt and performs stretching so many times.
# You know, it's really secure... isn't it? :-)
hashed_password = auth.calc_password_hash(app.SALT, password)
if hashed_password != account.password:
return render_template("index.html", message="Login failed, try again.", sec="{:.7f}".format(time.perf_counter()-t))
정중하게 실행에 걸린 시간을 출력하는 코드가 기재되어 있으므로, 존재하는 직원의 경우에는 시간이 걸린다고 가정된다. 직원의 ID를 모두 입력하고 걸린 시간이 많은 직원만 식별하면 다음 플래그가 얻어졌다.
ctf4b{4cc0un7_3num3r4710n_by_51d3_ch4nn3l_4774ck}
R&B
다운로드한 파일을 확인하면, 암호화된 결과와 방식이 기재된 파일이 건네진다.
방식에 관해서는
1. FORMAT의 문자열이 R이면 FLAG 문자열이 ROT13 인 것 앞에 R을 부여합니다.
2. FORMAT의 문자열이 B이면 FLAG 문자열이 BASE64 인 것 앞에 B를 부여합니다.
3. 그렇지 않으면 아무 작업도
그러므로 복호할 때는 반대로 하면 되고, 이하를 암호화된 문자열에 적용한다.
1. FLAG 문자열의 시작이 R이면 R을 제거하고 나머지를 ROT13
2. FLAG 문자열의 시작이 B이면 B를 제거하고 나머지를 BASE64
ctf4b{rot_base_rot_base_rot_base_base}
감상
최소한의 인권은 얻었다.
개인적으로는 Crypt 문제에 조금 손을 대고 싶었습니다.
Reference
이 문제에 관하여(SECCON Beginners CTF 2020 Writesup), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/karma0106/items/bf6caf7c3268b1e57770
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
./mask
Usage: ./mask [FLAG]
./mask a
Putting on masks..
a
a
Wrong FLAG. Try again
v1="atd4`qdedtUpetepqeUdaaeUeaqau"
v2="c`b bk`kj`KbababcaKbacaKiacki"
result=""
for i in range(len(v1)):
count=0x00
while(1):
result_v1= chr(0x75 & count)
result_v2= chr(0xeb & count)
if result_v1 == v1[i] and result_v2==v2[i]:
result=result+chr(count)
break
else:
count=count+1
print(result)
실재하는 종업원을 특정할 수 있으면 플래그를 얻을 수 있는 것 같다.
주어진 코드를 확인하면,
1. 직원 ID가 DB에 없으면 오류를 반환합니다.
2. 직원 ID가 DB에 있으면 암호 해시를 계산하지 않으면 오류를 반환합니다.
if not exists:
return render_template("index.html", message="Login failed, try again.", sec="{:.7f}".format(time.perf_counter()-t))
# auth.calc_password_hash(salt, password) adds salt and performs stretching so many times.
# You know, it's really secure... isn't it? :-)
hashed_password = auth.calc_password_hash(app.SALT, password)
if hashed_password != account.password:
return render_template("index.html", message="Login failed, try again.", sec="{:.7f}".format(time.perf_counter()-t))
정중하게 실행에 걸린 시간을 출력하는 코드가 기재되어 있으므로, 존재하는 직원의 경우에는 시간이 걸린다고 가정된다. 직원의 ID를 모두 입력하고 걸린 시간이 많은 직원만 식별하면 다음 플래그가 얻어졌다.
ctf4b{4cc0un7_3num3r4710n_by_51d3_ch4nn3l_4774ck}
R&B
다운로드한 파일을 확인하면, 암호화된 결과와 방식이 기재된 파일이 건네진다.
방식에 관해서는
1. FORMAT의 문자열이 R이면 FLAG 문자열이 ROT13 인 것 앞에 R을 부여합니다.
2. FORMAT의 문자열이 B이면 FLAG 문자열이 BASE64 인 것 앞에 B를 부여합니다.
3. 그렇지 않으면 아무 작업도
그러므로 복호할 때는 반대로 하면 되고, 이하를 암호화된 문자열에 적용한다.
1. FLAG 문자열의 시작이 R이면 R을 제거하고 나머지를 ROT13
2. FLAG 문자열의 시작이 B이면 B를 제거하고 나머지를 BASE64
ctf4b{rot_base_rot_base_rot_base_base}
감상
최소한의 인권은 얻었다.
개인적으로는 Crypt 문제에 조금 손을 대고 싶었습니다.
Reference
이 문제에 관하여(SECCON Beginners CTF 2020 Writesup), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/karma0106/items/bf6caf7c3268b1e57770
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
최소한의 인권은 얻었다.
개인적으로는 Crypt 문제에 조금 손을 대고 싶었습니다.
Reference
이 문제에 관하여(SECCON Beginners CTF 2020 Writesup), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/karma0106/items/bf6caf7c3268b1e57770텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)