pwn学习日记Day8 基础知识积累
知识杂项
- aslr:是一种针对缓冲区溢出的安全保护技术,通过对堆、栈、共享库映射等线性区布局的随机化,通过增加攻击者预测目的地址的难度,防止攻击者直接定位攻击代码位置,达到阻止溢出攻击的目的的一种技术。
str.strip([chars]);
用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列。
chars -- 移除字符串头尾指定的字符序列。
返回移除字符串头尾指定的字符生成的新字符串。调整栈帧技巧
在存在栈溢出的程序中,有时候我们会碰到一些栈相关的问题,例如溢出的字节数太小,ASLR导致的栈地址不可预测等。针对这些问题,我们有时候需要通过gadgets调整栈帧以完成攻击。常用的思路包括加减esp值,利用部分溢出字节修改ebp值并进行stack pivot等。
修改esp扩大栈空间
通过观察数据我们很容易发现被修改的EIP是通过strncpy复制到输入前面的0x50个字节的最后8个。由于没有libc,one gadget RCE使不出来,且使用了strncpy,字符串里不能有\x00,否则会被当做字符串截断从而无法复制满0x50字节制造可控溢出,这就意味着任何地址都不能被写在前0x48个字节中。在这种情况下我们就需要通过修改esp来完成漏洞利用。这就意味着我们可以把ROP链放在0x50字节之后,然后通过增加esp的值把栈顶抬到ROP链上。
栈帧劫持stack pivot
- 通过可以修改esp的gadget可以绕过一些限制,扩大可控数据的字节数,但是当我们需要一个完全可控的栈时这种小把戏就无能为力了。在系列的前几篇文章中我们提到过数次ALSR,即地址空间布局随机化。这是一个系统级别的安全防御措施,无法通过修改编译参数进行控制,且目前大部分主流的操作系统均实现且默认开启ASLR。正如其名,在开启ASLR之前,一个进
程中所有的地址都是确定的,不论重复启动多少次,进程中的堆和栈等的地址都是固定不变的。这就意味着我们可以把需要用到的数据写在堆栈上,然后直接在脚本里硬编码这个地址完成攻击。例如,我们假设有一个没有开NX保护的,有栈溢出的程序运行在没有ASLR的系统上。由于没有ASLR,每次启动程序时栈地址都是0x7fff0000.那么我们直接写入shellcode并且
利用栈溢出跳转到0x7fff0000就可以成功getshell。而当ASLR开启后,每次启动程序时的栈和堆地址都是随机的,也就是说这次启动时时0x7fff0000,下回可能就是0x7ffe0120。这时候如果没有jmp esp一类的gadget,攻击就会失效。而stack pivot这种技术就是一个对抗ASLR的利器。 stack pivot之所以重要,是因为其利用到的gadget几乎不可能找不到。在函数建立栈帧时有两条指令push ebp; mov ebp, esp,而退出时同样需要消除这两条指令的影响,即leave(mov esp, ebp; pop ebp)。且leave一般紧跟着就是ret。因此,在存在栈溢出的程序中,只要我们能控制到栈中的ebp,我们就可以通过两次leave劫持栈。
内容来源
Python strip()方法
i春秋月刊第六期——Linux pwn零基础入门
pwn学习日记Day8 基础知识积累的更多相关文章
- pwn学习日记Day7 基础知识积累
知识杂项 strncpy(char s1,const char s2,int n); 其中有三个参数分别表示目标字符串s1,源字符串s2,拷贝长度.意思是将s2指向的字符串的前n个长度的字符放到s1指 ...
- pwn学习日记Day5 基础知识积累
知识杂项 int mprotect(const void *start, size_t len, int prot); mprotect()函数把自start开始的.长度为len的内存区的保护属性修改 ...
- pwn学习日记Day3 基础知识积累
知识杂项 msfVENOM:Msfvenom是msf框架配套的攻击载荷生成器. payload:有效载荷. payload:目标系统上渗透成功后执行的代码. Metasploit:一款开源的安全漏洞检 ...
- pwn学习日记Day9 基础知识积累
知识杂项 libc是Linux下的ANSI C的函数库. LOOKUP函数 数组形式:公式为= LOOKUP(lookup_value,array) 式中 array-包含文本.数字或逻辑值的单元格区 ...
- pwn学习日记Day6 基础知识积累
知识杂项 ELF:在计算机科学中,是一种用于二进制文件.可执行文件.目标代码.共享库和核心转储格式文件. char fgets(char buf, int bufsize, FILE stream); ...
- pwn学习日记Day2 基础知识积累
知识杂项 shell-storm.org的shellcode数据库 使用pwntools库把shellcode作为输入传递给程序,尝试使用io.interactive()与程序进行交互,发现可以执行s ...
- pwn学习日记Day1 基础知识积累
ida / od 窗口(针对od操作) 反汇编窗口:显示被调试程序的反汇编代码,标题栏上的地址.HEX 数据.反汇编.注释可以通过在窗口中右击出现的菜单 界面选项->隐藏标题 或 显示标题 来进 ...
- pwn学习日记Day4 基础知识积累
知识杂项 *:字符串重复 空指令NOP:\x90 cmp:是比较指令,cmp的功能相当于减法指令.它不保存结果,只是影响相应的标志位. xor:将两个操作数进行异或运算,并将结果存放到操作数1中. s ...
- 如何学习FPGA?FPGA学习必备的基础知识
如何学习FPGA?FPGA学习必备的基础知识 时间:2013-08-12 来源:eepw 作者: 关键字:FPGA 基础知识 FPGA已成为现今的技术热点之一,无论学生还是工程师都希望 ...
随机推荐
- mac OS下 安装MySQL 5.7
Mac OS X 下 TAR.GZ 方式安装 MySQL 5.7 与 MySQL 5.6 相比, 5.7 版本在安装时有两处不同: 1:初始化方式改变, 从scripts/mysql_install_ ...
- python打印表格式数据-星号或注释
python打印表格式数据,留出正确的空格,格式化打出 代码如下: def printPicnic(itemsDict,leftWidth,rightWidth): print('PICNIC ITE ...
- 使用Mmap系统调用进行硬件地址访问
Mmap系统调用: Mmap函数是内存映射函数,负责把文件内容映射到进程的虚拟内存空间,通过对这段内存的读取和修改,来实现堆文件的读取和修改,而不需要再调用read,write等操作. 原型如下: 其 ...
- zookeeper:1
分布式环境的特点 分布性:多台机器位置不同,但是相互协同做某一件事情. 并发性:程序运行过程中,并发性操作是很长见的.比如:同一个分布式系统中的多个节点,同时访问一个共享资源.(数据库,分布式存储) ...
- What Linux bind mounts are really doing
Lots of Unixes have some form of 'loopback' mounts, where you can mount a bit of an existing filesys ...
- U盘装manjaro 18报Python error in job “initcpio”
更新: 还是不行,大家再找别的方法. 以下内容仅做参考,意义不大. U盘安装 用rufus做U盘,写入选DD模式,比ISO模式可靠点. 错误解决 报错信息: Error installing Manj ...
- Mybatis在xml文件中处理大于、小于、不等于号的方法
在mapper.xml使用大于.小于等符号会和xml语法冲突,解决冲突有两种方式. 方法一: 使用转义字符: 字符名称 字符符号 转义字符 大于号 > > 小于号 < < 与 ...
- ArrayList 和 Vector 的区别是什么?(未完成)
ArrayList 和 Vector 的区别是什么?(未完成)
- springboot2.0入门(七)-- 自定义配置文件+xml配置文件引入
一.加载自定义配置文件: 1.新建一个family.yam文件,将上application.yml对象复制进入family family: family-name: dad: name: levi a ...
- AtCoder Beginner Contest 142【D题】【判断素数的模板+求一个数的因子的模板】
D - Disjoint Set of Common Divisors Problem Statement Given are positive integers AA and BB. Let us ...