首页 > 其他分享 >CTFHub Writeup 彩蛋 ECB

CTFHub Writeup 彩蛋 ECB

时间:2024-02-09 09:04:14浏览次数:22  
标签:u0000 CTFHub Writeup padded 彩蛋 key import BLOCK SIZE

缘起

最近做到做到这道题, flag[42:48] = aes_256_ecb_decode("c6e1d72b1102f9b96b20c1f00cc7a178d5b3f99193faaa60e53b45b9e644d782", key), 自己用Py没解出来...

import binascii
from Crypto.Cipher import AES

data = binascii.unhexlify(b"c6e1d72b1102f9b96b20c1f00cc7a178d5b3f99193faaa60e53b45b9e644d782")
key = b"ctfhub".ljust(32, b'\0')
cipher = AES.new(key, AES.MODE_ECB)
data = cipher.decrypt(data)
print(data)
print(data.decode(errors='ignore'))
#b'\x91\xcf\xc0\x8f{P\xfc\xe6\xd6\\=\xfb\xcc\x97\xe0V\xa8\x9a\xec\xcfJLsb3x\x13>2& \x15'
#{P\=̗VJLsb3x>2&

看了网上的讲解, 大佬们直接就在这个网站上解密出来了

磨难

自己尝试了在所有其他在线解密的网站均无法得出答案, 所以想是不是自己的padding搞错了, 所以我试试, 试了好几天, 无果. 那就配合这个网站再试, 看来下大佬们说要输出选hex, 想了想c6e1d72b1102f9b96b20c1f00cc7a178d5b3f99193faaa60e53b45b9e644d782明显没有大于f的, 也就是hex, 尝试了换换其他参数, ECB, 256位, ctfhub, hex必选其他随意. 然后发现我选no padding时Response是

{"status":1,"info":"ok","data":["62013}\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"]}

所以大概可以肯定就是b'\0'填充.

灵感

既然不是填充的问题, 解密也不成, 那我尝试加密看看有没有效果呢?失败.

import base64
from bf import _bf
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad, unpad
import binascii
import exrex
from itertools import product

# xuHXKxEC+blrIMHwDMeheNWz+ZGT+qpg5TtFueZE14I=
# Y3RmaHViAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
# c6e1d72b1102f9b96b20c1f00cc7a178d5b3f99193faaa60e53b45b9e644d782

key = b"ctfhub"
msg = b"62013}"
key = key.ljust(32, b"\0")
msg = msg.ljust(32, b"\0")
cipher = AES.new(key, AES.MODE_ECB)
msg_en = cipher.encrypt(msg).hex()
print(msg_en)
# b3742f3ac154cd15101618711eb4f3491c78ce108072c1d50c02f7951228a586


不过由此得知base64应该是xuHXKxEC+blrIMHwDMeheNWz+ZGT+qpg5TtFueZE14I=. 忽然想到是不是语言的原因, 我用的Py, 在线的大部分应该是JS, 那么这个网站是什么呢?看了网页的Response:nginx,emmm,试了试dirsearch, 然后看了作者最开始的文章写的是wordpress搭建博客, 初步考虑是php. 好, 那就php, 搜了下php ecb写法, 失败.

<?php

$key = 'ctfhub';
$data = '62013}';
$encrypted = base64_encode(openssl_encrypt($data, "AES-256-ECB", $key, 1));
echo  $encrypted;
# DGB0/QZE+e6J6JiC+gSZvw==

这是为啥呢?真是烦人啊. 看了看作者博客是14年搭建的, 那么google限制下时间是2014年及以前的, emmm, 写法没啥变化, 2010年及以前呢? mcrypt_encrypt映入眼帘, 看了眼文档MCRYPT_RIJNDAEL_256不是 AES-256,它是 Rijndael 分组密码的不同变体。找了下ecb写法和在线的php网站, 终于成功了, 喜极而泣啊!

咱们就是说, 咱们就是说, 咱们就是说, 咱们就是说, 咱们就是说, 咱们就是说, 咱们就是说, 咱们就是说, 咱们就是说, 咱们就是说.

<?php
# php4
# https://onlinephp.io/ 
    $key = 'ctfhub';
    $plaintext = "62013}";
    $ciphertext = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key,
                                 $plaintext, MCRYPT_MODE_ECB);
    $ciphertext = $ciphertext;
    $ciphertext_base64 = base64_encode($ciphertext);
    echo  $ciphertext_base64;
    $ciphertext_dec = base64_decode($ciphertext_base64);
    $plaintext_dec = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key,
                                    $ciphertext_dec, MCRYPT_MODE_ECB);
    echo  $plaintext_dec;
    # xuHXKxEC+blrIMHwDMeheNWz+ZGT+qpg5TtFueZE14I=
    # 62013}锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷
?>

成功

那么问题又来了, 咋用Py写呢? 看了网上的代码都是Py2的, 结果Py2也报错. 然后发现了py3rijndael, 魔改了一下py2的代码.

from py3rijndael.rijndael import Rijndael as rijndael
import base64
import binascii

KEY_SIZE = 16
BLOCK_SIZE = 32


def encrypt(key, plaintext):
    padded_key = key.ljust(KEY_SIZE, b"\0")
    padded_text = plaintext + (BLOCK_SIZE - len(plaintext) % BLOCK_SIZE) * b"\0"
    r = rijndael(padded_key, BLOCK_SIZE)
    ciphertext = b""
    for start in range(0, len(padded_text), BLOCK_SIZE):
        ciphertext += r.encrypt(padded_text[start : start + BLOCK_SIZE])

    encoded = base64.b64encode(ciphertext)

    return encoded


def decrypt(key, encoded):
    padded_key = key.ljust(KEY_SIZE, b"\0")

    ciphertext = base64.b64decode(encoded)

    r = rijndael(padded_key, BLOCK_SIZE)

    padded_text = b""
    for start in range(0, len(ciphertext), BLOCK_SIZE):
        padded_text += r.decrypt(ciphertext[start : start + BLOCK_SIZE])

    plaintext = padded_text.split(b"\x00", 1)[0]

    return plaintext


key = b"ctfhub"
text = b"62013}"

encoded = encrypt(key, text)
print(repr(encoded))

decoded = decrypt(
    key,
    base64.b64encode(
        binascii.unhexlify(
            b"c6e1d72b1102f9b96b20c1f00cc7a178d5b3f99193faaa60e53b45b9e644d782"
        )
    ),
)
print(repr(decoded))
# b'xuHXKxEC+blrIMHwDMeheNWz+ZGT+qpg5TtFueZE14I='
# b'62013}'

想法

以后ctfhub的题第一想法就得是php环境去解题, 不行就上老版本.
功不唐捐啊!

标签:u0000,CTFHub,Writeup,padded,彩蛋,key,import,BLOCK,SIZE
From: https://www.cnblogs.com/twfb/p/18012296

相关文章

  • PoloarCTF WriteUp
    PoloarCTFWriteUpWebloginimportreimportrequestsres=""url="http://5077cb7c-84a4-4a16-84e9-8a4547f7efbc.www.polarctf.com:8090"foriinrange(2,30):username="202001{:02d}".format(i)password="202001{......
  • [pwn]hgame2024 week1 WriteUp
    目录1.EzSignIn2.ezshellcode3.EldenRandomChallenge1.EzSignIn签到题,直接nc2.ezshellcodechecksec,保护全开64位程序丢IDA跟进一下myread函数可以看到会执行写入的内存,但有两个点一是长度限制,可以通过整型溢出绕过,二是myread函数会检查写入的内容,必须为字母或数字看......
  • 【Loading】ctfshow_WriteUp | _萌新
    萌新_密码1题目密文:53316C6B5A6A42684D3256695A44566A4E47526A4D5459774C5556375A6D49324D32566C4D4449354F4749345A6A526B4F48303D提交格式:KEY{XXXXXXXXXXXXXX}分析所有字符由数字和ABCDEF组成,先用HEX解码得到S1lkZjBhM2ViZDVjNGRjMTYwLUV7ZmI2M2VlMDI5OGI4ZjRkOH0=。......
  • 【西湖论剑2024初赛】MISC3-easy_rawraw WriteUp
    easyraw!manypasswords!首先用volatility+mimikatz可以爆出windows账户密码das123admin321vol.py--plugins=./plugins-f./rawraw.raw--profile=Win7SP1x64mimikatz剪贴板中,有另一个密码DasrIa456sAdmIn987,用来解压mysecretfile.rarvol.py--plugins=./plugins-f......
  • 春秋杯2023冬季赛writeup_cyi
    cyiWRITEUP个人信息个人名称:cyi个人排名:51解题情况请粘贴个人排名截图和答题情况截图:解题过程题目序号谁偷吃了我的外卖操作内容:Winhex查看了一下,发现最后有个标志,直接binwalk+foremost提取出一个压缩包给了段注释,不知道什么用本身还以为缺的用户1缺的四字符加上bumai(卜卖)爆......
  • cyi polarctf冬季个人挑战赛WriteUp
     PolarCTF网络安全2023冬季个人挑战赛WRITEUP参赛人员:楚颖iPolarCTF网络安全个人挑战赛组委会制  目录第一部分:MISC11-1签到喵11-4机密4第二部分:CRYPTO72-5base11第三部分:WEB133-1cool133-2cookie欺骗143-4干正则163-7随机值1......
  • CTFHUB-综合过滤练习
    前言靶场地址:www.ctfhub.com综合过滤练习点击查看代码<?php$res=FALSE;if(isset($_GET['ip'])&&$_GET['ip']){$ip=$_GET['ip'];$m=[];if(!preg_match_all("/(\||&|;||\/|cat|flag|ctfhub)/",$......
  • XP版扫雷官方作弊彩蛋分析
    概述Minesweeper(扫雷)是一款由微软于1992年发行的小游戏。游戏目标是在最短的时间内根据点击格子出现的数字找出所有非雷格子,同时避免踩雷,踩到一个雷即全盘皆输。该游戏在推出后预装到Windows系统中,随后逐渐风靡全球,经久不衰。本次分析主要是对XP版本的扫雷游戏中官方预置的彩蛋......
  • HUBUCTF 2022新生赛Writeup
    既然是母校,那一定要好好对待~    2024-01-1322:42:34WEB [HUBUCTF2022新生赛]checkin题目链接:checkin原题<?phpshow_source(__FILE__);$username="this_is_secret";$password="this_is_not_known_to_you";include("flag.php");//hereI......
  • NSSCTF Round#16 Basic WriteUp
    NSSCTFRound#16Basicwp目录NSSCTFRound#16Basicwp一.pwn1.nc_pwnre2.ret_text一.pwn1.nc_pwnrenc连接得到题目,给了一段汇编代码以及40个十六进制数字分析代码可知,将一个字符串与10h即16进行异或运算,二次异或运算得到字符串TlNTQ1RGe1dFTGMwTV9UMF9wV25fdzByMWQhfQ......