pwn-笔记
pwn-学习笔记 啥几把不会 传上来充数 ————————————————————————-mfc一般用xspy打开,找偏移,然后看文件基址锁定文件主函数 d180一般是去除ollvm(快捷键ctrl+shift+D) 反调试-PEBreadfsdword 是一个与低级操作系统和汇编相关的函数,它通常用于从 FS 段寄存器指定的内存地址读取数据。在 x86 和 x64 架构中,FS 是一个段寄存器,它可以用来访问线程局部存储(TLS)和其他特定于操作系统的数据结构。 1mov eax, fs:[0x30] ; 从 FS 段寄存器的地址 0x30 读取一个双字(32 位) isDebuggerPresent...
CISCN-做题笔记
国赛-CISCN2023-PWN-烧烤摊儿2024.7.31 日常检查 丢进ida里面看看 国赛题是不一样哈!! ida都不好分析(中文字符串反编译不出来) ☝🤓 1https://blog.csdn.net/donglxd/article/details/135243027 找到办法了 嗯~舒服多了! 找一下漏洞,栈溢出 123456789101112__int64 gaiming(){ int v0; // edx int v1; // ecx int v2; // r8d int v3; // r9d char v5[32]; // [rsp+0h] [rbp-20h] BYREF puts("烧烤摊儿已归你所有,请赐名:"); _isoc99_scanf("%s", v5, v0, v1, v2, v3); j_strcpy_ifunc(name, v5); return 0LL;} "%s"...
鹏程杯-2024
包菜的,虽然都没怎么做出来 但也是复现出来了 REjoyVBS-pcb2024打开时一个已VBS结尾的文件 第一次做 上网查了一手 直接实操一手,直接就跑出来了 就是一道凯撒加base64编码 很简单的也是,偏移为14 直接解就行 12345678910111213141516171819202122232425import base64def caesar_cipher(text, shift): result = "" for char in text: if 'A' <= char <= 'Z': result += chr((ord(char) - ord('A') + shift) % 26 + ord('A')) elif 'a' <= char <= 'z': result += chr((ord(char)...
AWDP-总结笔记
没咋打过AWDP,就连AWD打的也很少,因为第一次打线下赛,所以准备写个笔记记录一下,完事之后在准备在补点笔记。 Web那边我不知道,只记录了pwn这块的 唉,菜就多练。 简介 没啥说的,就是跟AWD差不多 漏洞加固技巧 在AWD中每个选手会分配到一个运行了漏洞程序的靶机,我们可以找到自己靶机中的PWN附件(也就是漏洞程序)进行分析,发现漏洞来编写exp攻击其他队伍的靶机,同时我们需要用一些手段加固漏洞防止被其他选手攻击得分。 patch-PWN patch就是通过修改漏洞程序的漏洞汇编代码从而防止其他选手进行漏洞利用,不同的awd平台检查机制各不相同,原则上是只能针对漏洞点进行 patch 加固 工具介绍:ida插件keypatch链接:通过百度网盘分享的文件:IDA_Pro_7.7.zip链接:https://pan.baidu.com/s/1M2OunlHHhSjwCaWLyGsQNA提取码:Rweb 整数溢出 ...
Polar靶场-做题笔记
这个靶场挺好的,比较基础 后缀未做出的我都会标记 后续会补上 Polar-Pwnoverload12024.9.25 日常检查 就是一个常规的覆盖溢出 但是就是要记住gets函数溢出的栈的长度 ida反编译的不太对 1234567891011121314151617181920 from pwn import* p=remote('120.46.59.242', 2102)#p=process('./1111')ret_addr=0x0000000000400661pop_rdi=0x0000000000400973bin_sh=0x000000400A3Csystem_addr=0x04008FD p.sendafter('输入y/n',b'y')p.recvuntil('\n')##p.recv()payload =...
网鼎杯-2024
初赛赛题名称:pwn2解题步骤:第一步:32位的一个栈迁移 首先打开是一个最简单栈溢出和32位rop链 但是仔细看了一下read函数限制了最大长度只有8字节,rbp和返回地址 加上上面的%p泄露了一下rsp的地址 然后就在栈上进行一下栈迁移一个就行了。 前面有一个用户的登录和密码 ida直接打开就能看见 第二步:这里借鉴了一下BUUCTF-ciscn_2019_es_2 因为这里直接是给了栈顶的位置 我们直接进行接一下就行了。因为存在格式化字符串漏洞%p直接进行泄露就行了 exp:123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384from pwn import*from struct import packimport ctypes#from LibcSearcher import *def...
ctfshow-做题笔记-堆利用·前置基础
为防止题目难度跨度太大,135-140为演示题目阶段,你可以轻松获取flag,但是希望你能一步步去调试,而不是仅仅去拿到flag。 如何申请堆? pwn135没啥说的,ida反编译进去看一下源码就知道怎么做了。 简单了解一下堆的知识 malloc函数:作用:从堆内存中分配指定大小的内存块 1void* malloc(size_t size); 参数:size 是需要分配的字节数。 返回值:成功时返回指向已分配内存的指针;若分配失败,则返回 NULL。 特点:分配的内存不会被初始化,可能包含垃圾数据,需要手动清零。 calloc函数:作用:分配并初始化内存块(每个字节都会杯初始化为0)。 1void* calloc(size_t num, size_t size); 参数: num:需要分配的元素个数。 size:每个元素的大小(字节)。 返回值:成功时返回指向已分配内存的指针;若分配失败,则返回 NULL。 特点:分配的内存会被初始化为 0。 realloc函数:作用:重新调整已分配内存的大小 1void* realloc(void* ptr, size_t...
堆的前置知识
什么是堆?在程序运行过程中,堆可以提供动态分配内存,允许程序申请大小未定的内存。其实就是程序虚拟空间的一块连续的线性区域,它由低地址向高地址生长,并称管理堆的程序为:堆管理器。 堆管理器主要进行的工作: 响应用户的申请内存请求,向操作系统申请内存,并将其返回给用户程序。为了保持用户程序的高效性,内核一般都会分配一块很大的连续内存,让堆管理器通过某种算法对其进行管理。只有当堆空间不足时,才会与操作系统进行再次交互 管理用户释放的内存,用户释放的内存并不是直接返回给操作系统,而是由堆管理器进行管理,这样释放的内存可以来响应用户新申请的内存的请求 目前Linux标准发行版中使用的堆分配器是glibc中的堆分配器:ptmalloc2。ptmalloc2主要是通过malloc/free来分配和释放内存块。 ————————————————————————————- 堆和栈的区别 12345678910111213141516171819高地址--->+---------------------------+ | ...
NewStarCTF 2024
NewStarCTF 20241https://match.ichunqiu.com/index?k=AzZXZ11uAmJQOAAxB3Zcfld1UDVScQBkBjoEMFRhDzgGM15pDTUEZQI3BmZUYlc2 pwn签到2024.10.3 nc之后满足条件就行了 Game2024.10.3 1234567891011121314151617181920212223void __noreturn game(){ int v0; // [rsp+0h] [rbp-10h] BYREF int v1; // [rsp+4h] [rbp-Ch] unsigned __int64 v2; // [rsp+8h] [rbp-8h] v2 = __readfsqword(0x28u); v1 = 0; v0 = 0; puts("Let's play a game!"); alarm(5u); while ( 1 ) { printf("pls input you num:...
2024-强网拟态
...