블로그 이미지
Nehoy
경기대학교 / kknock

calendar

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

Notice

Tag

2020. 2. 22. 18:03 Hack/리버싱

Halffeed.zip
0.00MB

입력 값을 암호화해주는 프로그램이다.

 

3Execute 메뉴에 복호화 했을 때 cat flag가 나오는 암호문과 태그 값을 입력하면 플래그를 얻을 수 있다.

 

하지만 서버에서는 cat flag가 포함된 평문을 암호화할 수 없다.

 

암호에 사용되는 키 값 또한 서버에 파일로 존재하기 때문에 알 수 없다.

평문을 암호화하는 코드는 위와 같다. 코드를 살펴보면 T와 평문을 xor 연산하여 암호문을 생성하고 있다. 여기서 평문에 00000000000000000000000000000000를 넣으면 T leak할 수 있다는 걸 알 수 있다.

 

00000000000000000000000000000000 ;cat flag;000000

00000000000000000000000000000000 3B63617420666C61673B303030303030

우리는 평문을 위와 같이 넣었을 때 나오는 암호문과 태그 값을 원하기 때문에 다음과 같이 평문을 넣어 블록 연산에 사용되는 T를 구한다. (블록이 두개인 이유는 이후에 서술할 collision 때문이다.)

00000000000000000000000000000000 00000000000000000000000000000000

T2_1 = ec8e2e8ec0319fbaa0e7d4d819006e28

T2_2 = e6048fd38996e7cb945879d068a612bd

T를 알아냄으로써 우리는 우리가 원하는 암호문을 다음과 같이 얻을 수 있다.

CHIPER_TEXT = ec8e2e8ec0319fbaa0e7d4d819006e28 dd67eea7a9f08baaf36349e05896228d

 

이제 태그 값을 알아내야 하는데 위 코드를 참고하면, 우리가 원하는 태그 값이 다음과 같다는 것을 알 수 있다.

하지만 AES_Encrypt에 사용되는 키 값을 모르기 때문에 태그 값을 바로 구하지는 못하고, 우리가 알 수 있는 ANS 값을 이용해 태그 값을 구해야 한다.

 

P2 = 00000000000000000000000000000000 3B63617420666C61673B303030303030

P1 = ?

P1를 입력했을 때의 ANS값과 P2를 입력했을 때의 ANS값을 같게 하고, P1을 서버에서 암호화하면 우리가 원하는 태그 값을 얻을 수 있다는 게 핵심이다.

여기서 블록을 두개 사용하는 이유가 나오는데, 첫번째 블록이 달라지면 두번째 블록에서 사용되는 T_2값이 달라지기 때문에 두개의 블록을 사용하는 것이다.

 

P1_1 = 11111111111111111111111111111111

P1의 첫번째 블록에 사용할 값은 위와 같다. T1_2를 알아내기 위해 다음과 같은 값을 서버에서 암호화한다.

11111111111111111111111111111111 00000000000000000000000000000000

T1_2 = 00928a21ee7ae49344e7336d666bdba6

 

이제 어떤 값을 P1_2에 넣어야 ANS가 나오는지 계산한다.

P1 = 11111111111111111111111111111111 ddf56486478a6f39673B303030303030

 

P1을 서버에 전송함으로써, 우리가 원하는 태그 값을 얻을 수 있다.

TAG = 04e46eb38401a4727f15967a29784f17

 

위에서 얻은 CHIPER값과 TAG값을 Execute의 입력 값으로 넣으면 플래그를 얻을 수 있다.

Flag: CODEGATE2020{F33D1NG_0N1Y_H4LF_BL0CK_W1TH_BL0CK_C1PH3R}

'Hack > 리버싱' 카테고리의 다른 글

Codegate2020 Preliminary: Verifier  (0) 2020.02.22
Windows Exception  (0) 2020.01.18
[CSAW 2017] tablez  (0) 2017.09.20
[Codegate 2016] compress  (0) 2017.05.20
[CodeEngn] Challenges : Basic 01  (0) 2016.12.20
posted by Nehoy