初探 RE:从入门认知到 BUUCTF 简单题练习
初探 RE:从入门认知到 BUUCTF 简单题练习这篇文章记录我刚开始接触 CTF 逆向时的学习过程。第一天主要是了解 RE 到底在做什么、常见工具和大致解题流程;第二天开始上手刷一些 BUUCTF 的简单题,在做题里熟悉最基础的分析方法。 目前我的想法也比较明确:先通过题目建立直觉,遇到不会的知识点再回头补,这样学起来更有目标感。 Day1第一天没有急着做题,主要先梳理方向,尽量对 CTF 逆向建立一个整体认识。 逆向学习框架我参考了一篇系统性入门文章,感觉下面这句话很适合初学阶段: 在逆向工程领域知识碎片化的今天,强大的自学能力和持之以恒的精神尤为关键。教程可以帮助我们建立方向感,但真正的提升还是要靠持续练习。 CTF 中的逆向工程在做什么CTF 里的逆向工程,核心目标通常是从题目给出的程序或文件中找出隐藏的 flag。 如果用一个更形象的比喻来理解: 出题人像厨师,把“配料”通过一系列加工步骤做成成品。 做逆向的人则需要通过观察程序行为、分析代码逻辑、还原处理流程,最终推导出被藏起来的核心信息,也就是 flag。 为什么需要逆向工具程序从高级语言编译到二进制之后,很多...
AWDP-PWN 赛前速成
awdp-pwn赛前速成小记没打过AWDP,因为第一次打线下赛,所以准备写个笔记记录一下,完事之后在准备在补点笔记。 Web我还没有学,只记录了pwn AWDP一般分为两个板块,Break(自己的payload打通)和Fix(让主办方的payload打不通) patch:指防御。 checker:指在部署题目的时候,检查选手提交的补丁(patch文件)是否符合预设条件的专门脚本。常见的非常规防御的例子就是把二进制文件直接删除、把关键漏洞语句直接删除、在堆利用的题目中将free语句直接删除等,checker就是用于检查选手是否存在这些非常规补丁的。它主要是通过和提交的二进制文件通信来判断这个二进制文件是否有异常。 打补丁有下面2个基本原则: 1.不改变程序的正常运行流程。 2.能够防御想要防御的攻击 漏洞加固技巧在AWDP中每个选手会收到一个附件,类似两个ctf题,只是一个修一个打,不同队伍不互通,有的赛制修是累加得分,有的就是固定分数,根据不同的赛制来得分,但本质上还是ctf赛题 patch-PWN使用:patch就是通过修改漏洞程序的漏洞汇编代码从而防止其他选手进行漏洞利用,不...
Hello World
Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub. Quick StartCreate a new post1$ hexo new "My New Post" More info: Writing Run server1$ hexo server More info: Server Generate static files1$ hexo generate More info: Generating Deploy to remote sites1$ hexo deploy More info: Deployment
在2.27版本中尝试进行堆的简单攻击
在2.27版本中尝试进行堆的简单攻击tcache bin 基础 tcache机制是glibc 2.26之后引入的一种技术,它提高了堆管理器的性能,但是舍弃了很多的安全检查,所以有多种利用方式,现在的题目一般都基于更新版本的libc,tcache肯定是必不可少的一环,而且是最开始的那一环。 1.每个线程默认使用64个单链表结构的bins,每个bins最多存放7个chunk,64位机器16字节递增,从0x20到0x410,也就是说位于以上大小的chunk释放后都会先行存入到tcache bin中。 2.对于每个tcache bin单链表,它和fast bin一样都是先进后出,而且prev_inuse标记位都不会被清除,所以tcache bin中的chunk不会被合并,即使和Top chunk相邻。 tcache机制出现后,每次产生堆都会先产生一个0x250大小的堆块,该堆块位于堆的开头,用于记录64个bins的地址(这些地址指向用户数据部分)以及每个bins中chunk数量。在这个0x250大小的堆块中,前0x40个字节用于记录每个bins中chunk数量,每个字节对应一条tc...
axb_2019_fmt64
axb_2019_fmt64前言:本来这道题很简单的,但是还是写了我好长时间,为什么我本地是打通了,但是为什么远程是打不通的,这就很难理解了。 题目1.首先还是checksec一下 只开启nx保护,RELRO部分开启,证明got表可写。 2.ida反编译 这里有一个非常明显的格式化字符串漏洞 3.接着找一下偏移,可以看到偏移是8 下面可以泄露libc基址了,计算system一开始打算libc是这样泄露的payload = p64(puts_got)+”%08$s”,失败了,动调发现被/x00截断了,64位都有这个情况, 关于64位格式化字符串利用,可以看这篇文章,建议先看一下这篇文章,64位跟32位的关于格式化字符串漏洞的利用有点不一样。64位格式化字符串漏洞修改got表利用详解-安全KER - 安全资讯平台 这样的话,payload就要修改成如下,补齐8字节,是为了完整的占用一个偏移,给下面的puts_got泄露构造条件 12payload=b'%9$s'.ljust(8,b'a')payload += p64(...
堆初学
堆初学前言前面的两个学期都没有咋认真学,但是在暑假集训中,每天只需要学一件事,就是学习pwn知识,今天是7-15,前面我花了十天左右的时间学习了格式化字符串。但是也没有完全学会,只掌握了那几种方法。非栈上的还是没有掌握完全。先就这样吧,该开堆了,不开堆跟不上进度了。初步学习堆感觉堆的世界很大,有很多的新知识去学。 堆更多的是对指针的利用,不同于栈的思路。 本篇笔记记录堆原理,和堆的相关数据结构,以及ptmalloc2工具 堆概述 - CTF Wiki 堆相关知识 堆概述 什么是堆?在程序运行过程中,堆可以提供动态分配的内存,允许程序申请大小未知的内存。堆其实就是程序虚拟地址空间的一块连续的线性区域,它由低地址向高地址方向增长。我们一般称管理堆的那部分程序为堆管理器。 引用自《堆概述 - CTF Wiki》 先看堆在虚拟内存中的位置 堆的生长方向是从低地址向高地址生长的,而栈是从高地址向低地址生长的。 **/我对这里有问题/** 我通过查资料,着重看一下这个heap和stack的内存分布 stack从高地址向低地址扩展,这样栈空间的起始位置就能确定下来。动态的调整栈空间大小也...
