ericet
ericet

Likecoin/Desmos/Evmos/Nomic/Cerberus 验证人。喜欢分享各类脚本。 网站: https://ericet.xyz

Console NFT 黑客任务6解密

这次的Console NFT黑客任务算是蛮有挑战的。解开最后的密语需要用到SQL Injection, web3, solidity, AES128/MD5 解密

这次任务的网址: https://console-nft.art/pro_6/

任务要解密4段密码,然后按照这个格式把最终的命令发给Console机器人:/hacker_riddle_part_6_key4-key2-key1-key3

SQL Injection进入管理页面

网页显示需要登录账号,查了一遍代码,没有藏在代码里面登录密码。那剩下可能就是需要用SQL Injection来破解了

账号和密码都输入 " or ""="


果然顺利进入管理页面


在管理页面的To Do List那里,给了找到每个key的提示

  • Key1: 登陆你的账号的密码就是Key1
  • Key2: 给Hacker转账,转账的Tx ID就是Key2
  • Key3: 需要用到web3
  • Key4: 登陆你的账号,破解key4


破解Key1

进入管理页面后,来到Gold Club Members的页面: https://console-nft.art/pro_6/dashboard/members.php

按F12,选择Network,然后输入你的id(user_xxxx discord ID最后4位)。点击Network页面的filter.php, 会看到你输入的id的密码(MD5加密的)


由于密码是经过MD5加密的,所有你需要通过https://www.md5online.org/md5-decrypt.html 进行解密

解密成功,获得我的key1: smokey, 也是我账号的登录密码


解密Key2

上面的解密获得了账号的登录密码,所以回到登陆页面,用上面破解的密码登录我的账号

登录成功:


登录成功后,到转账页面,要做的是给Hacker转账获得TX ID: https://console-nft.art/pro_6/dashboard/payment.php


发送成功后,到转账记录页面查找TX ID: https://console-nft.art/pro_6/dashboard/history.php

TX ID 就是我的Key2, 所有我的Key2是 g145S42N7x


解密Key3

到Key_3页面: https://console-nft.art/pro_6/dashboard/key_3.php

显示的是一个合约链接和一个ABI。很明显是让你调用这个合约的getThirdKey函数获得key3


为了方便,写了小工具调用合约查看Key3: https://replit.com/@ericet/Hacker6Key3#index.js

点击运行,然后输入你的4位discord ID,我的是8888,给的结果是adult,这就是我的key3


解密Key4

回到Dashboard页面: https://console-nft.art/pro_6/dashboard/index.php 拉到下面,会给你3串字符


把3段字符分别复制到这里进行解密:https://www.javainuse.com/aesgenerator

注:secret key那个最多支持16个字符,所以secret key是console_nft_encr

解密后获得key4: useful


最终命令

最终的命令的格式是: /hacker_riddle_part_6_key4-key2-key1-key3

结合上面解开的4个keys,我的最终命令是:

/hacker_riddle_part_6_useful-g145S42N7x-smokey-adult

发送命令给console bot就能获得500个Tokens

网站还有一个额外的密语,一登录就能看到的: /sqli_hacker

发送给console bot获得100个tokens


怎么获得最终命令的格式?

是不是好奇怎么获得最终命令的格式的? Dashboard页面底下有个“The Final Key", 里面是一个Solidity合约,但是合约里面有几个语法错误,修改一下部署合约就会获得我上面所说的格式: /hacker_riddle_part_6_key4-key2-key1-key3


如果你有兴趣自己部署合约来获得最终的key,你可以用下面我修改过的合约代码:

pragma solidity ^0.8.0;


contract HackerRiddlePart6_Final_Key {
    
        function finalKey(string memory key_1, string memory key_2, string memory key_3, string memory key_4) public pure returns (string memory) {

        string[5] memory json;

        json[0] = string(
            abi.encodePacked('/hacker_riddle_part_6_')
        );

        json[1] = string(
            abi.encodePacked(key_4, "-")
        );
        json[2] = string(
            abi.encodePacked(key_2, "-")
        );

        json[3] = string(
            abi.encodePacked(key_1, "-")
        );
        json[4] = string(
            abi.encodePacked(key_3)
        );

        string memory result = 
            string(
                abi.encodePacked(
                    json[0],
                    json[1],
                    json[2],
                    json[3],
                    json[4]
                )
        );

        return string(abi.encodePacked(result));
    }

}


CC BY-NC-ND 2.0 版权声明

喜欢我的文章吗?
别忘了给点支持与赞赏,让我知道创作的路上有你陪伴。

加载中…
加载中…

发布评论