Home
System Hacking
🗳️

CUSES writeup

Type
CTF
년도
2022
Name
SSTF
분야
WEB
세부분야
CRYPTO
2022/08/28 12:17
점수
100점대
1 more property

풀이 사전 지식

+ CTR
CTR 공격

# Problem

# Source

<?php include "secret.php"; //server_secret, iv, flag $cookie_name = "SESSION"; if (!isset($_COOKIE[$cookie_name])) { header('Location: /signin.php'); exit; } $cipher="aes-128-ctr"; list($iv, $encrypted_session_data) = explode("|", base64_decode($_COOKIE[$cookie_name]), 2); $session_data = openssl_decrypt($encrypted_session_data, $cipher, $server_secret, OPENSSL_RAW_DATA, $iv); list($username, $auth_code) = explode("|", $session_data); if ($auth_code !== $server_secret) { die("No hack!"); } ?>
PHP
복사

# Solving strategy

1.
aes-128-ctr 취약점 이용
a.
고정된 nonce를 사용하여 암호화 하는 경우 같은 구간에서 같은 키스트림을 가지고 XOR 암호화 된다.
b.
$username에는 guest가 들어간다.
c.
guestadmin의 길이는 5 글자로 XOR되는 데이터만 찾아 admin과 XOR 하면 나머지 데이터에 대해서는 수정이 가해지지 않아 $auth_code이 변경되지 않는다.

# Exploit

# Payload

import base64 cookie = "v4VtAOyMFMYbr+Xs6mSVUnxfECs6Ore01RkALAJYrLp2pGpWJdK+m+u7pPvj43wJSmCm68cDI6SL5t5uXftCBBWHef3Xf4ijTi7PmIxVoFEJVlcG1Zvgfg==" de_cookie = base64.b64decode(cookie) iv = de_cookie.split(b'|')[0] encode_data = de_cookie[len(iv)+1:] #encode_data ^ ? = guest|~~ xor_data = [e^g for e, g in zip(encode_data[:5], b'guest')] admin_data = bytearray([e^g for e, g in zip(xor_data, b'admin')]) admin_cookie = base64.b64encode(iv+b"|"+admin_data+encode_data[5:]).decode() print(admin_cookie)
Python
복사

# Flag

SCTF{T3ll_me_4_r3ally_s3cure_w4y_to_m4na9e_5eSS10ns}
Plain Text
복사

# Reference