NewStarCTF2024-Week4-Misc-WP

题目对勇师傅来说已经是开始上难度了所以这周没有AK

分享下自己做出来的题的解题思路

目录

1、扫码领取flag

2、擅长加密的小明同学

3、ezblockchain


1、扫码领取flag

看到 png 头改成 png 后缀,发现 crc 报错

爆破一下拿到二维码一部分

第二个打开也是 png 头

同理

另外两个也一样

得到四个二维码图片,但是怎么拼看着都不对,没有定位符,补了一下也没成功

Base64…试了下将图片全转成 base64,整合起来试了下 base64 隐写,没有结果

看不懂这个提示,感觉像一个key,但是又不知道用在哪里…

(我真的非常不明白提示 base64 干什么还有属性里给的这个名字又是什么)

hint 是一张倒着的图片,因此将四块二维码进行旋转、取反色等各种操作后进行拼接,取反色后中间有一个十字,看着像数据矩阵码,进行了各种组合,扫不出来

折腾了好久看到一个叫阿兹特克码的东西

逆天

拿到 flag:flag{Then_d0_you_kn0w_w6at_Hanx1n_cod3_1s?}

后面仔细看了下那个单词,好吧。。。

2、擅长加密的小明同学

先用工具找磁盘的 key

拿到:142593-710886-423500-433763-213499-455807-632885-152152

打开磁盘,拿到一个加密的压缩包

根据题目提示有一个画图的工具,在进程里看到 mspaint.exe

导出

先是尝试分离,但是出来的东西太多了,大致看了下没什么有用东西

将 dmp 后缀改为 data,使用 Gimp 打开

调一下偏移和宽高度

拿到密码:rxnifbeiyomezpplugho

解压看到 flag

拿到 flag:flag{5ZCb44Gv5Y+W6K+B5pys5b2T44Gr5LiK5omL}

3、ezblockchain

一开始用的插件创的账户,先从水龙头获取到测试的以太币

但是交易的时候新建的那个网络不支持

想直接登录它这里创的账户但是又没有私钥,只有个地址

不知道题目意思是必须使用它这里创建的账户还是自己创的账户也可以

先用 python 试一下,创建一个账户并获取私钥

from eth_account import Account

# 创建新账户
account = Account.create()

# 输出地址和私钥
print(f"地址: {account.address}")
print(f"私钥: {account._private_key.hex()}")  # 输出新生成账户的私钥

接水

结合获取到的源码:

调用合约的 unlock 函数,使 isSolved 变量为 true

Exp:

from web3 import Web3
from eth_account import Account

# 连接到 RPC
rpc_url = 'http://47.238.151.2:12001'  # 使用题目提供的 RPC URL
web3 = Web3(Web3.HTTPProvider(rpc_url))

# 检查连接是否成功
if not web3.is_connected():
    print("连接失败")
    exit()

# 设置账户地址和私钥
account_address = '0xa3C8fCA1CE13ae4BB5149B1a3d6B892226F3758C'
private_key = 'c9b38355bdbdc2e165c3a31a090eccd9114bfedeadef30ee4634eff507f86b37'

# 获取合约地址
contract_address = '0x03943849eF1401F498A92FBbFb67BcA05208D8cF'  # 你之前获得的合约地址

# 合约 ABI(这里用默认的 ABI,具体可以根据合约源代码修改)
contract_abi = [
    {
        "inputs": [
            {
                "internalType": "string",
                "name": "_str",
                "type": "string"
            }
        ],
        "name": "unlock",
        "outputs": [],
        "stateMutability": "payable",
        "type": "function"
    }
]

# 创建合约实例
contract = web3.eth.contract(address=contract_address, abi=contract_abi)

# 构建交易
transaction = contract.functions.unlock("re@1lY_eA3y_Bl0ckCh@1n").build_transaction({
    'from': account_address,
    'value': web3.to_wei(0.0721, 'ether'),  # 发送的以太币数量
    'gas': 2000000,
    'gasPrice': web3.to_wei('50', 'gwei'),
    'nonce': web3.eth.get_transaction_count(account_address),
})

# 签名交易
signed_txn = web3.eth.account.sign_transaction(transaction, private_key)

# 发送交易
txn_hash = web3.eth.send_raw_transaction(signed_txn.raw_transaction)

# 等待交易确认
txn_receipt = web3.eth.wait_for_transaction_receipt(txn_hash)

print(f"交易成功,交易哈希: {txn_hash.hex()}")

拿到 flag: flag{b10ckch@1n_15_r3@lly_1nt3r35t1ng!}

猜你喜欢

转载自blog.csdn.net/Myon5/article/details/143362878