笔记|CTF中PWN知识点整理

文章推薦指數: 80 %
投票人數:10人

0x01 前言: 本次笔记主要介绍CTF中PWN题所涉及的知识点以及解题的一般思路。

PWN是一个骇客的俚语词,由“own”引申出来,含义是玩家在游戏对战中存在 ... 笔记|CTF中PWN知识点整理雨后小蛙 关注专栏/科技/学习/笔记|CTF中PWN知识点整理笔记|CTF中PWN知识点整理 学习 2021-04-2322:36--阅读· --喜欢· --评论 雨后小蛙粉丝:31文章:13 关注0x01前言:         本次笔记主要介绍CTF中PWN题所涉及的知识点以及解题的一般思路。

PWN是一个骇客的俚语词,由“own”引申出来,含义是玩家在游戏对战中存在明显优势,勇敢与嘲笑竞争对手在整个游戏中被完全击败(“Youjustgotpwned!”),是攻破或控制的含义。

CTF中的PWN指的是通过程序本身的漏洞,利用脚本破解程序拿到主机的权限,这需要对程序进行分析,了解操作系统的特性和相关漏洞。

0x02涉及到的知识点:1,PWN基础        包括:缓冲区溢出基础与实践,缓冲区漏洞调试与分析,基于pwntools编写pwn代码,基于zio编写pwn代码,Fuzz之SPIKE,Fuzz之AFL,Ghidra,约束求解器Z3.2,栈相关漏洞        包括:精确覆盖变量数据,通用跳转技术,环境变量继承,指针改写,返回地址覆盖,绕过返回地址现在,执行shellcode,栈帧溢出覆盖返回地址,构建栈帧绕过NX选项。

        高级栈溢出技术有:ret2csu,ret2win,split,callme,write4,badchars,fluff,pivot.3,堆相关漏洞4,格式化字符串漏洞(通过write实现信息泄露)5,整型漏洞6,逻辑漏洞7,Attack&Defense模式0x03可能会用到的工具Metasploit工具:一款开源的安全漏洞检测工具。

包括智能开发,密码审计,web应用程序扫描,社会工程等。

调试工具:Ollydbg、ImmunityDebugger、Windbg、CDBpwntools:一个CTF框架和漏洞利用开发库,用Python开发,由rapid设计,旨在让使用者简单快速的编写exploitzio库:一个专门为CTFPWN开发的Python库,基于zio可以方便实现对远程服务器上的服务程序进行数据读写操作。

zio也支持对本地程序的数据读写。

SPIKE:一个模糊器创建工具包,提供了API,允许用户使用C语言基于网络的协议来创建自己的fuzzer。

(fuzzer测试:将故意格式错误的数据发送到程序以便在应用程序中生成故障或错误的过程)AFL:号称当前最高级的Fuzzing测试工具之一。

Ghidra:美国国家安全局(NSA)免费向公众开放的逆向工程工具GHIDRA。

Z3:一款微软出品的开源约束求解器,能够解决很多情况下的给定部分约束条件寻求一组满足条件的解的问题。

0x04涉及的知识点gdb,python,radare2,ROPGadget,IDA,pwntools,string和grep命令的使用,汇编程序,操作系统保护机制,system调用机制,异或运算,函数调用、传参机制,PLT表、GOT表,ROP中针对栈空间限制的处理技巧,NX选项寄存器:eax:累加器;ebx:基址寄存器;ecx:计数器;edx:eax的溢出寄存器eip:存储cpu下次所执行的指令地址;esp;ebp;esi:源地址指针;edi:目的地址指针lea:取有效地址(偏移地址)至寄存器call:将程序的执行交给其他代码段0x05解题的一般步骤1,先看程序的基本信息:file文件名;checksec文件名可以知道的信息,是64位二进制程序,无cook,NXenabled2,通过IDA静态分析,F5查看伪码可知read()函数读取数据,随后调用echo()。

查看echo函数,看到它的栈帧大小位20h(32字节),存在循环赋值。

且read读取的数据会超过echo栈帧的大小。

3,构造ROP。

需要在payload中不包含“x00”。

我们可以只复制过去24字节数据加上一个包含连续4个pop指令的gadget地址(8字节),借助这个gadget跳过原字符串的前32字节数据,即可进入正常的通用gadget调用过程。

4,绕过上述障碍后,解题思路就很清晰了:泄露libc,获取system,gets等函数地址。

构造gets(bss);将“/bin/sh”写入bss段。

构造system("/bin/sh")得到shell。

用ROPgadget寻找gadget,用于构造ROP链条。

ROPgadget--binary./程序名--only"pop|ret"5,找到main函数地址,用作返回地址:objdump-dwelpwn|grepmainbss段开始地址,用于存储字符串(‘/bin/sh’):readelf-S程序名|grepbssputs(plt)地址,用于泄露内存:objdump-d程序名|grepputs6,构造ROP链,泄露内存rop=p64(poprdi)+p64(addr)+p64(puts_plt)+p64(main)payload="A"*24+p64(ppppr)+rop7,利用pwnlib中DynELF模块泄露libc中system和puts地址。

8,接受服务器端返回的数据。

9,构造ROP链将“/bin/sh”写入bss段,并执行system(“/bin/sh”):rop=p64(poprdi)+p64(bss)+p64(gets)+p64(poprdi)+p64(bss)+p64(system)+p64(0xdeadbeef)padload="A"*24+p64(pppr)+rop0x06实验笔记缓冲区溢出基础与实践1,测试程序,明白程序大致执行流程,看是否存在溢出漏洞2,利用溢出工具,扫描目标主机,找到对应端口后,进行溢出。

3,使用telnet与远程主机建立连接,输入ipconfig/all查看目标主机信息,看是否拿到了shell4,运行Metasploitconsole,对目标主机进行信息收集,并对返回的信息进行收集分析。

在msf下搜索漏洞的利用模块,利用该模块对目标主机进行攻击。

使用ping命令查看主机是否瘫痪。

编写PWN代码1,安装pwntools模块。

2,与目标服务器或程序进行交互,可以使用remote产生一个远程socket。

3,shellcode生成器可以生成对应架构的shellcode代码,直接使用链式调用方法就可以得到。

4,elf文件操作,提供了一种便捷的方式能够迅速得到文件内函数的地址,plt位置以及got表位置。

5,ROP生成器。

由于NX开启无法在栈上执行shellcode,可以用程序中的一些pop/ret代码块来平衡堆栈。

CTF-PWN之通用跳转技术1,正常情况下程序接收输入数据后会产生对应的输出信息并直接退出,然而当输入一定的数据量时,可能会提示bzzzt的错误信息。

当输入的精心构造的输入数据时可对程序发起溢出攻击,达到执行Shellcode的目的。

2,顺序:对程序进行逆向分析和调试,找到程序内部的漏洞,构造特殊的输入数据,使它执行shellcode。

堆溢出 堆是一个更复杂的内存位置,主要是因为它的管理方式。

放置在堆内部部分的每个对象都“打包”成一个“块”,它包含header头部和userdata用户数据两个部分。

在堆的情况下,当用户能够写入比预期更多的数据时,会发生内存损坏。

按损坏的情况,分为:发生在块的边界内(intra-chunkoverflow),或跨越两个或更多块的边界(inter-chunkoverflow)。

1,编译程序,生成可执行文件2,反汇编目标程序的主函数来获取断点的地址。

3,一旦命中断点,我们就查找程序的内部布局,找到堆的位置。

我们使用vmmap命令,看到堆地址的开始位置。

我们从一开始就分析堆。

4,对于我们对象相关的Heap块进行详细分解。

找到哪里是块的header,哪里是对象的u_data区。

5,输入数据破坏堆空间。

导致块内堆内存损坏。

本文禁止转载或摘编 CTF 笔记 解题思路 PWN 分享到: 投诉或建议 推荐文章 更多精彩内容好题好文好词好句Chapter11(2022·深圳二模)好题:2022·深圳二模好文(例文为“大无恙Alfred读后续写”所有)好词好句1>systematic成体系的shabby破旧的passionate充满激情的numerous许多2>Petercouldfeelfearslowlycreepinguphisheart.Peter能感觉到恐惧慢慢爬上他的心头。

3>arousedthejudges’interest激起了评审员们的兴趣4>Rightonthesameday,newbinsw大无恙Alfred读后续写 学习 4 3 0 两周一词动作描写篇Chapter18温故:2022.4.9戳完成下面两个句子:Thechildren______holesinthescreendoor.孩子们把纱门戳了几个洞。

Hekept_______atthepapercupwithhispencil.他用铅笔戳着纸杯。

2022.4.23这一期我们来看看“捧”的英文表达。

大家可能一下子想不出一个表示捧的词语,那么就听Alfred来介绍介绍吧。

Alfred查了一查好像确实没有一个固定的词汇直接对应“捧”的义项,但有一个大词有“捧”的意思,那就是"大无恙Alfred读后续写 学习 6 2 0 今天是世界读书日,聊聊读书前言:读书的话题我以前聊过很多,今天随便聊一聊。

其实我不太想聊读书,因为以前聊过很多次,聊这种话题让我觉得我像一个复读机。

不过今天是世界读书日,所以该聊的还是要聊一聊,总之以下内容全是实话,全是我的真实感受。

先说说我的情况吧,我已经过了一个劲看书的阶段了,以前是不知道该看什么,所以什么都看、看的很勤。

现在是知道自己该看什么、需要什么了。

所以只看自己需要的、不怎么看那些“现在用不到”的。

我最近明白了一个道理:知道的知识多了,不一定能解决更多的问题,也可能会给自己制造更多的问题。

知识可以解决问题,知若终有一天 学习 18 8 0 评论目录------0



請為這篇文章評分?