AFL源码阅读之afl-fuzz结束
AFL-fuzz源码阅读perform_dry_run(use_argv);1234567891011121314151617181920212223242526272829303132333435363738static void perform_dry_run(char** argv) { struct queue_entry* q = queue; u32 cal_failures = 0; u8* skip_crashes = getenv("AFL_SKIP_CRASHES"); while (q) { u8* use_mem; u8 res; s32 fd; u8* fn = strrchr(q->fname, '/') + 1; ACTF("Attempting dry run with '%s'...", fn); fd = open(q->fname, O_RDONLY); if (fd < 0) P ...
AFL源码阅读之afl-fuzz(1)
afl-fuzz源码阅读12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819 ...
AFL源码阅读之afl-gcc&afl-as
基本概念basic block(基本块)、edge(边)、代码覆盖率
edge就被用来表示在基本块之间的跳转,知道了每个基本块和跳转的执行次数,就可以知道程序中的每个语句和分支的执行次数,从而获得比记录BB更细粒度的覆盖率信息
代码覆盖率是一种度量代码的覆盖程度的方式,也就是指源代码中的某行代码是否已执行;对二进制程序,还可将此概念理解为汇编代码中的某条指令是否已执行。
覆盖率劫持:
劫持汇编器(afl-gcc、afl-clang、afl-g++),通过识别跳转指令,然后在其中插入一段汇编用于与AFL之间的通信(__afl_maybe_log)
clang内置,LLVM 内置了一个简单的代码覆盖率检测 (SanitizerCoverage),它在函数、基本块和边缘级别插入对用户定义函数的调用。提供了这些回调的默认实现,并实现了简单的覆盖率报告和可视化
编译器将在 -fsanitize-coverage=trace-pc-guard 每个边缘插入以下代码:
1__sanitizer_cov_trace_pc_guard(uint32_t* guard_variable)
每条边都有 ...
protobuf初探
Protobuf (Protocol Buffers) 是谷歌开发的一款无关平台,无关语言,可扩展,轻量级高效的序列化结构的数据格式,用于将自定义数据结构序列化成字节流,和将字节流反序列化为数据结构。所以很适合做数据存储和为不同语言,不同应用之间互相通信的数据交换格式,只要实现相同的协议格式,即后缀为proto文件被编译成不同的语言版本,加入各自的项目中,这样不同的语言可以解析其它语言通过Protobuf序列化的数据。目前官方提供c++,java,go等语言支持。
使用首先定义一个.proto文件
12345678syntax = "proto2";message devicemsg{ required sint64 actionid = 1; required sint64 msgidx = 2; required sint64 msgsize = 3; required bytes msgcontent = 4;}
然后根据要通过c或者python来使用,来使用相应的命令
12protoc --c_out=. tes ...
windows heap初探(2)
windows堆基础知识win10的memory allocator基本上分为两种:
Nt Heap
默认的memory allocator
后端管理器(Back-End)
前端管理器(Front-End)
SegmentHeap
Win10中全新的memory allocator机制
在LFH未启用时,我们call malloc
启用LFH后,第一次或LFH能用的空间都用完时,会先跟Back-End要一大块空间来管理
启用LFH之后分配相同大小时,会直接给Front-End管理
Nt HeapBack-End数据结构_HEAP_HEAP是每个堆的核心结构,用来管理该heap,每个Heap都有一个_HEAP在heap开头
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869//0x2c0 bytes (sizeof)struct _HEAP{ un ...
windows pwn初探(1)
window_pwnhttps://www.anquanke.com/post/id/188170#h3-1
SEH相关数据结构TIB结构TIB,即线程信息块,是保存线程基本信息的数据结构,它位于TEB的头部。TEB是操作系统为了保存每个线程的数据创建的,每个线程都有自己的TEB。
TIB结构如下:
123456789101112typedef struct _NT_TIB{ struct _EXCEPTION_REGISTRATION_RECORD *Exceptionlist;//指向异常处理链表 PVOID StackBase;//当前进程所使用的栈的栈底 PVOID StackLimit;//当前进程所使用的栈的栈顶 PVOID SubSystemTib; union { PVOID FiberData; ULONG Version; }; PVOID ArbitraryUserPointer; struct _NT_TIB *Self;//指向TIB结构自身} ...
Qemu逃逸初识
qemu逃逸学习CTF中的qemu逃逸便是通过在qemu源码中注册一个新的pci,来模拟真实环境下的某一个pci外设,例如键盘控制器之类?通过构造特定的Guest操作触发漏洞(一般是越界读写),最终在Host上获得shell读取flag,主要还是侧重于代码的逆向和漏洞的利用技巧。
实战中的或许是类似于针对云服务商的?目标是突破租户隔离,来获得宿主机的敏感信息吧,还是非常有意思滴!!!
原文:https://xz.aliyun.com/news/6166
只做学习记录和批注
好文:https://xuanxuanblingbling.github.io/ctf/pwn/2022/06/09/qemu/
qemu概述运行的每个qemu虚拟机都相应的是一个qemu进程,从本质上看,虚拟出的每个虚拟机对应 host 上的一个 qemu 进程,而虚拟机的执行线程(如 CPU 线程、I/O 线程等)对应 qemu 进程的一个线程。
其中**客户机系统 (Guest)**:运行在 QEMU 之上,是虚拟机中安装的操作系统。
客户机系统认为自己直接运行在硬件上,但实际上是通过 QEMU 与底 ...
Android逆向之Wiki篇
静态分析java层2014 ASIS Cyber Security Contest Finals Numdroid逆向分析12345678910111213141516171819202122232425262728293031protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ArrayTools.each_with_index(buttons, new EachIndexAction<Integer>() { // from class: io.asis.ctf2014.numdriod.MainActivity.1 @Override // io.asis.ctf2014.numdriod.tools.EachIndexAction public void action(final int i ...
一些IoT漏洞复现
一些路由器漏洞复现前言一些漏洞的学习笔记,比较的潦草,只是记录一下😊😊😊😊
CVE-2024-52028Netgear R7000P v1.3.3.154 被发现通过 wiz_pptp.cgi 上的 pptp_user_netmask 参数存在堆栈溢出。此漏洞允许攻击者通过精心设计的 POST 请求引发拒绝服务 (DoS)。
固件链接:https://www.netgear.com/support/product/r7000p/#download
usr/sbin/httpd
没找到!
Netgear XR300 v1.0.3.78、R7000P v1.3.3.154 和 R6400 v2 1.0.4.128 被发现通过 bsw_pppoe.cgi 的 pppoe_localip 参数包含堆栈溢出。此漏洞允许攻击者通过精心设计的 POST 请求引发拒绝服务 (DoS)。
123456789101112131415161718case 4: if ( input_length > *limits ) return -1; for ( check ...
android之hook入门
Android运行机制一般而言,在启动一个 App 时,Android 会首先执行 Application 类(AndroidManifest.xml 文件中注明)的创建工作,然后再开始执行 Main Activity,继而根据各种各样的逻辑执行相关代码。
Android 逆向
分析方法,可以采用以下方式
静态分析,对源代码进行逆向,然后阅读分析
动态分析,对代码进行动态调试,一般来说动态分析离不开静态分析。
分析对象,一般有以下两类对象
java层代码
原生层代码
Android 逆向主要应用于以下几个方向
app 安全审查
系统漏洞挖掘
恶意代码杀查
同行业产品技术原理分析
移除安全机制
AndroidManifest.xml 文件
软件包名
apk 主活动,隐藏程序没有主 Activity
Application 在 java 层启动最早
逆向技巧字符串定位:
程序报错信息
服务
广播
敏感API定位:
控件的事件函数
onclick
show
Toast
网络函数
HttpGet
HttpPost
HttpUriRequest
socket
发送 ...