fuzz - 浅析原理与 AFLpp 使用
最近在学习 fuzz,写一篇文章来梳理一下相关芝士
目前只做了一个框架,具体的技术细节之后再填补进来
[1] 原理
[1-1] 什么是 fuzz?
fuzzer 是实施 fuzz 这一操作的工具,它将一系列测试样本 (testcase)
输送给 PUT(Program Under Test),用以检测 PUT
在大量测试样本下功能是否可以正常运行。所以通俗来说,fuzz
技术就是生成一堆 testcases,然后让 PUT 去执行这些 testcases。
但我们也知道,程序的输入集合可以是无穷大的(程序可以有任意的输入),但能触发
bugs 的输入集合的大小却远小于程序的输入集合,我们称这种现象为 sparse
defects
space。如果算力也是无穷、计算速度可以忽略不计的话,我们当然可以遍历输入空间来“大海捞针”,但事实是我们并不能这样做。因此,我们需要找到最优的
testcases,这些 cases 可以在最短时间内找到最多的 bugs。
那么,我们如何找到这样的 cases 呢?我们得先搞明白什么样的...
blockchain - openzeppelin 源码阅读
就像做 pwn 要读 glibc 源码,做 blockchain 怎么能不分析 openzeppelin 呢
[1] ERC20
ERC20 是以太坊上最基本的代币规范
openzeppelin
ERC20 源码在这
以下是该合约的变量
123456mapping(address account => uint256) private _balances; // account 该 token 的余额// account 批准 spender 使用的余额,实际上花的还是 account 的 tokensmapping(address account => mapping(address spender => uint256)) private _allowances; uint256 private _totalSupply; // 该合约总共发行的 token 数string private _name; // 该 token 的 namestring private _symbol; // 简约版的...
blockchain - Uniswap V2
学习一下 Uniswap V2
[1] 前置知识
[1-1] AMM(Automated Market
Makers)
一种去中心化的交易协议,用于在区块链网络中实现无需订单簿的资产交换。传统交易所通常依赖于买家和卖家通过订单簿来匹配交易,而AMM通过智能合约和算法自动确定资产的价格,从而进行交易。
AMM的基本原理是通过池子(Liquidity
Pools)来提供流动性。流动性池通常由两种或更多种资产组成,并由流动性提供者(LP)存入这些资产。然后,AMM使用特定的算法(例如常见的x
* y...
blockchain - All Your Tokens are Belong to Us Demystifying Address Verification Vulnerabilities in Solidity Smart Contracts论文阅读笔记
单一漏洞 + 污点分析做到顶会,暑假就想复现了结果拖到现在
年份:2024
[1] Abstract
基于目前研究较少的address
verification漏洞,本文用污点分析实现了的“轻量级”专属扫描工具AVVerifier,检查了数百万的合约,找到了数百个有该漏洞的合约,并将其部署在链上成为实时检测工具,并成功检测到了一次数十万美元的攻击
[2] Intro & Background
[2-1] Ethreum Primer
大概讲了一下现在区块链非常火,自从以太坊和智能合约出现后,DApps的各种应用层出不穷,比如闪电贷等。指出为了防止漏报带来的经济损失,能保证soundness的静态符号执行常常被用到(mythril)
[2-2] Whitelist address
verification
Beosin. Two vulnerabilities in one function: The analysis of visor
finance exploit....
2024年终总结
...
Web - 网络安全概述
12.24网络安全期末,用这篇文章来梳理一下对相关知识的理解
导图
这篇文章主要从TCP/IP五层模型的层次来比较宽泛地讲一些常见的网络攻击。众所周知,TCP/IP五层模型将网络架构分为物理层、数据链路层、网络层、运输层和应用层。针对物理层的攻击我不是很懂,因此不在本篇文章的描述范围内,而应用层出现的app漏洞和防御技术比较广泛,会用几章分别叙述。
每一章大概分为"协议-攻击方式-防御措施"三部分。常见攻击可以分为"DoS,投毒,劫持",其中,劫持一般是劫持有状态的协议。
[1] 数据链路层(局域网)
[1-1] 协议
这部分讲述的协议不只是设计数据链路层的协议,而是涉及到局域网通信的协议。
由于物理媒介的不同,我们可以把网络分为有线网络和无线网络。无线网络涉及AP、信道等内容,不利于基础攻防技术的学习,因此本文主要基于有线网络进行讲述。根据IEEE
802.3 的规定,有线网络使用的数据传输策略是CSMA/CD(carrier sensation
multiple...
Web - DNS Poisoning
记录一下这学期最难的一次网络安全实验,恰逢期末,之后回来填坑
[1] 虚拟机 virtualbox 配置
如何便捷地
copy 虚拟机(直到写这篇 wp 才想起来可以 STFW,我最开始用的
vdi...还需要用
VBoxManage internalcommands sethduuid /path/to/your.vdi
重新解绑uuid)
由于此次打开的虚拟机较多,所以每个虚拟机内存只分配2GB即可
之后,把双向粘贴板和双向拖放打开,再把“显示 ->
屏幕”中扩展特性的“启用3D加速”打开(要不然会花屏)
之后再在“网络 ->
网卡1”栏目中,将连接方式改为“内部网络”,然后名称改为intnet0/1/2(这里根据自己需求来写,比如我配的权威DNS就是intnet1)
最后进入虚拟机中,在上方栏目的“设备”中点击安装增强功能,它会自动打开一个文件夹,在终端里运行autorun.sh即可自动安装,之后重启虚拟机就可以启用双向粘贴板和拖放了
[2] 虚拟机网络配置
IP...
comp - CTF_blockchain_summary
CTF 中的 blockchain 题目和常用工具的用法都放在这里面
[FF] 常用工具
[FF-1] forge
[FF-1-1] 动态调试
在安装好forge之后,使用forge init将项目环境初始化成 Foundry
的标准格式
12345project/├── src/ # Solidity 源代码文件├── test/ # 测试文件├── lib/ # 外部依赖(如 OpenZeppelin)└── foundry.toml # 项目配置文件
在 project/test 中创建文件 xxx.t.sol,在该文件中放入测试用例。
1234567891011121314151617181920// SPDX-License-Identifier: UNLICENSEDpragma solidity ^0.8.26;import {Test, console} from "forge-std/Test.sol";import...
CSBasics - NJU_Program_Analysis_Note
记录一下上课+做实验时产生的问题、思考与收获
[1] Lecture1 Introduction
[1-1] what is Static Analysis?
Static Analysis is different with dynamic analysis, analyzers need to
construct static bird's view of the whole workflows. Besides, static
analyzers usually focus on the consequence of the analysis rather than
the process.
[1-2] What is a good Static
Analysis?
Before introducing what is a good static analysis, we need to find
out what is 'sound' and what is 'complete'.
sound: We describe a result...
blockchain - Damn Vulnerable Defi 靶场复现
继续刷题
[0] 环境设置
我是用 forge 搭建的靶场,貌似还可以用 npm
之类的搭建,这样做题就直接用 web3.js 交互就可以了。
根据官方说明搭建靶场环境。forge
可能由于网络原因会失败,多安装几次就好了
forge build之后,本地有这样几个文件夹比较重要:
src: 漏洞源码。要做的题目都在这里面
test:
题解。如果想要解题,必须运行forge test --mp test/<题目名称>/<题目名称>.t.sol -vv,-vv是为了打印
emit
log,方便我们调试。而我们的攻击poc就要写在上面这个.t.sol文件的test_()这个函数中。
[1]...