학습
워게임
CTF
커뮤니티
랭킹
스토어
커리어
Beta
로그인
|
기업 서비스
Home
학습
워게임
CTF
커뮤니티
랭킹
커리어
Beta
기업 서비스로 이동하기 >
LEVEL 1
Double DES
crypto
1427
509
2024.04.30. 18:49:47
로그인 하고 문제 풀기
문제 정보
풀이
21
난이도 투표
30
질문
2
최근 풀이자
509
댓글
4
문제 설명
4바이트 전수 조사 쯤이야 간단하죠!
Exploit Tech: Meet in the middle attack
에서 함께 실습하는 문제입니다.
Translate
난이도 투표
30
문제 풀이를 완료한 후에 피드백을 제출할 수 있습니다.
투표 결과
전체 투표 로그
1 / 6
worldtree
대표 업적 없음
LEVEL 2에 투표했습니다.
23일 전
미과일
꿈나무
LEVEL 2에 투표했습니다.
1개월 전
cmdking
대표 업적 없음
LEVEL 1에 투표했습니다.
1개월 전
탈퇴한 이용자
대표 업적 없음
LEVEL 1에 투표했습니다.
1개월 전
거북목마스터
암호학 고인물
LEVEL 2에 투표했습니다.
2개월 전
질문
2
문제 풀이에 어려움이 있으신가요?
커뮤니티에서 문제에 대한 질문하고 답변 얻기
최종 솔브 코드 어떻게?
로드맵 강의 천천히 따라가면서 Meet-in-the-middle attack을 실습하고 있습니다. 첨부파일 다운로드 하고 코드 분석, 익스플로잇 설계까지 코드 모두 이해했습니다. 문제 prob.py파일 코드** #!/usr/bin/env python3 from Crypto.Cipher import DES import signal import os if name == "main": signal.alarm(15) with open("flag", "rb") as f: flag = f.read() key = b'Dream_' + os.urandom(4) + b'Hacker' key1 = key[:8] key2 = key[8:] print("4-byte Brute-forcing is easy. But can you do it in 15 seconds?") cipher1 = DES.new(key1, DES.MODE_ECB) cipher2 = DES.new(key2, DES.MODE_ECB) encrypt = lambda x: cipher2.encrypt(cipher1.encrypt(x)) decrypt = lambda x: cipher1.decrypt(cipher2.decrypt(x)) print(f"Hint for you :> {encrypt(b'DreamHack_blocks').hex()}") msg = bytes.fromhex(input("Send your encrypted message(hex) > ")) if decrypt(msg) == b'give_me_the_flag': print(flag) else: print("Nope!") 최종 솔브 코드** from pwn import * from Crypto.Cipher import DES io = process(["python3", "prob.py"]) io = remote("host3.dreamhack.games", 18664) io.recvuntil(b":> ") hint = bytes.fromhex(io.recvline().decode()) conflict = dict() for i in range(65536): b = i.to_bytes(2, "big") cipher = DES.new(b"Dream_" + b, DES.MODE_ECB) enc = cipher.encrypt(b"DreamHack_blocks") conflict[enc] = b"Dream_" + b for i in range(65536): b = i.to_bytes(2, "big") cipher = DES.new(b + b"Hacker", DES.MODE_ECB) dec = cipher.decrypt(hint) if dec in conflict: key1 = conflict[dec] key2 = b + b"Hacker" break cipher1 = DES.new(key1, DES.MODE_ECB) cipher2 = DES.new(key2, DES.MODE_ECB) encrypt = lambda x: cipher2.encrypt(cipher1.encrypt(x)) assert encrypt(b"DreamHack_blocks") == hint io.sendlineafter(b'> ', encrypt(b"give_me_the_flag").hex().encode()) flag = eval(io.recvline()) io.close() print(flag.decode()) 강의에서 설명하는 원리와 코드는 이해했는데 이를 환경에 어떻게 적용해서 flag를 얻어야 할지 모르겠습니다. 칼리 리눅스, zsh, pwntools, tqdm, pycryptodome 패키지 모두 설치했습니다.
lnan9yeol
답변
1
추천
0
10개월 전
키를 1과 2로나누지 않는다면?
문제에서는 key를 반절로 쪼개어서 Cipher1과 Cipher2로 나누어서 암호화를 했습니다. 그래서 Meet-in-the-Middle 공격을 사용해서 브포하는 시간이 2^32에서 2^17정도로 줄일 수 있었습니다. 하지만 키를 나누지 않고 Cipher한개만 사용해서 암호화를 한다면 2^32의 경우의 수를 모두 대입해보는 수 밖에 없나요?
neuroner
답변
1
추천
0
4개월 전
«
‹
1
›
»
LEVEL 1
Double DES
crypto
1427
509
2024.04.30. 18:49:47
로그인 하고 문제 풀기
출제자 정보
Dreamhack
대표 업적 없음
Dreamhack official account
First Blood!
One_
웹해킹 고인물
출제된 지
3개월
만에 풀이 완료!
최근 풀이자
509
Seo.H
대표 업적 없음
8일 전
Ctrlisk
대표 업적 없음
8일 전
0NE
대표 업적 없음
8일 전
우연
대표 업적 없음
17일 전
jin182
대표 업적 없음
22일 전
worldtree
대표 업적 없음
23일 전
가디언_pjh
대표 업적 없음
23일 전
jwon2006
대표 업적 없음
23일 전
GiuNash
시니어
24일 전
P4ankster
대표 업적 없음
24일 전
«
‹
1
2
3
4
5
›
»
댓글
4
Rootsquare
바탈리온
5개월 전
브루트포스 전략 연습
Translate
Zer0Luck
해결사
1년 전
강의 복습에 아주 유용했습니다. 👍
Translate
스카이넷
워게임 고인물
1년 전
ez
Translate
One_
웹해킹 고인물
1년 전
기존 로드맵에 비해 설명이 많아서 확실히 이해하는데에 도움이 많이 됩니다. GOAT 드림핵 😎
Translate
«
‹
1
›
»
댓글 4