0x00 序

​ 之前学了蒸米大佬的ropx86,本次学习 ropx64

0x01 Leak Memory & Dynelf

​ 蒸米大佬使用pwntools的Dynelf模块来获取函数地址,Dynelf模块的原理是,定义的leak函数至少可以泄漏出一个字节的数据,并且这个函数可以执行无数次(每次执行完 都会返回到函数起始继续执行 )然后经过Dynelf调用N次,pwntools经过对泄漏的数据进行求特征值这样一个操作,比较之后得到system函数地址。

​ 使用方法:

  • 定义leak函数

    def leak(address):
    payload1 = 'a'*140 + p32(plt_write) + p32(vulfun_addr) + p32(1) +p32(address) + p32(4)
    p.send(payload1)
    data = p.recv(4)
    print "%#x => %s" % (address, (data or '').encode('hex'))
    return data
  • 初始化Dynelf模块

    d = DynELF(leak, elf=ELF('./level2'))
  • 获取system函数地址

    system_addr = d.lookup('system', 'libc')

    如此操作之后,就可以得到system函数的地址,蒸米大佬的例题中有read和.bss

    段,所以可以直接利用read读取/bin/sh到bss段当做system参数,当read之后有多余的三个参数怎么办,就需要清栈,清栈需要用到gadget,使用工具ROPgadget寻找到之后,布置payload即可。

0x02 x86与x64的区别

区别主要有两点

  1. 内存地址的范围发生变化,x64中可以使用的内存地址不能超过0x00007fffffffffff,就是说测试溢出点的时候崩溃的ip不会指向我们的输入的地址,因为ret改变ip时会发生异常,所以直接看esp的值就好
  2. 传参方式发生变化,前6个参数使用 RDI,RSi,RDX,RCD,R8,R9来传,从第七个参数开始仍然使用栈传参

0x03 使用工具寻找gadgets

ROPgadget: https://github.com/JonathanSalwan/ROPgadget/tree/master
ROPgadget --binary level4 --only "pop|ret"

工具使用很简单,就不多说了。

0x04 通用gadgets

x64下有一些万能gadgets可以使用,主要原因是因为__libc_csu_init()这个函数

参考链接:https://www.cnblogs.com/Ox9A82/Ox9A82/p/5487725.html

从而找到x64下调用一个参数,两个参数,三个参数的方法

0x05 EDB调试

EDB-debugger
https://github.com/eteran/edb-debugger

参考资料

https://sp4n9x.github.io/2018/05/11/一步一步学ROP之Linux_x64篇-蒸米/

pwn学习(2)的更多相关文章

  1. PWN学习之格式化字符串漏洞

    目录 PWN学习之格式化字符串漏洞 格式化输出函数 格式化字符串漏洞 漏洞利用 使程序崩溃 栈数据泄露 任意地址内存泄漏 栈数据覆盖 任意地址内存覆盖 PWN学习之格式化字符串漏洞 格式化输出函数 可 ...

  2. PWN学习之整数溢出

    目录 PWN学习之整数溢出 整数溢出 溢出和回绕 漏洞多发函数 整数溢出例子 PWN学习之整数溢出 整数溢出 如果一个整数用来计算一些敏感数值,如缓冲区大小或数值索引,就会产生潜在的危险.通常情况下, ...

  3. PWN学习之栈溢出

    目录 PWN学习之栈溢出 前言 写bug bug.cpp源码 OD动态调试bug.exe OD调试观察溢出 栈溢出攻击之突破密码验证 x64位栈溢出 PWN学习之栈溢出 前言 我记得我在最开始学编程的 ...

  4. [二进制漏洞]PWN学习之格式化字符串漏洞 Linux篇

    目录 [二进制漏洞]PWN学习之格式化字符串漏洞 Linux篇 格式化输出函数 printf函数族功能介绍 printf参数 type(类型) flags(标志) number(宽度) precisi ...

  5. pwn学习(1)

    0x00 简介 入职之后,公司发布任务主搞pwn和re方向,re之前还有一定的了解,pwn我可真是个弟弟,百度了一番找到了蒸米大佬的帖子,现在开始学习. 0x01 保护方式 NX (DEP):堆栈不可 ...

  6. pwn学习之二

    刚刚开始学习pwn,记录一下自己学习的过程. 今天get了第二道pwn题目的解答,做的题目是2017年TSCTF的easy fsb,通过这道题了解了一种漏洞和使用该漏洞获取shell的方法:即格式化字 ...

  7. pwn学习之一

    刚刚开始学习pwn,记录一下自己学习的过程. 今天完成了第一道pwn题目的解答,做的题目是2017年TSCTF的bad egg,通过这道题学习到了一种getshell的方法:通过在大小不够存储shel ...

  8. pwn学习日记Day7 基础知识积累

    知识杂项 strncpy(char s1,const char s2,int n); 其中有三个参数分别表示目标字符串s1,源字符串s2,拷贝长度.意思是将s2指向的字符串的前n个长度的字符放到s1指 ...

  9. pwn学习日记Day5 基础知识积累

    知识杂项 int mprotect(const void *start, size_t len, int prot); mprotect()函数把自start开始的.长度为len的内存区的保护属性修改 ...

  10. Arm pwn学习

    本文首发于“合天智汇”公众号 作者:s0xzOrln 声明:笔者初衷用于分享与普及网络知识,若读者因此作出任何危害网络安全行为后果自负,与合天智汇及原作者无关! 刚刚开始学习ARM pwn,下面如有错 ...

随机推荐

  1. 【洛谷P1659】啦啦队排练

    题目大意:给定一个长度为 N 的字符串,求前 K 个长度为奇数的回文子串的长度的乘积是多少. 题解:利用回文自动机,将所有长度的回文串和个数求出来,按照长度排序进行模拟即可. 代码如下 // luog ...

  2. re模块正则表达式

    regular expression / regex / RE 正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配.Python 自1.5版本起增加了re 模块,它提供 ...

  3. gzy的摄影梦

    好像当身高180的摄影师啊. 记录一下素材,等自己有相机了,就一一实现. 竟然有人在看哎. 一袭红衣的女子,将手伸出窗外,开心的看这漫天大雪. 今天的晚霞,近处是蓝色,颜色逐渐变淡,一直延伸到远处.( ...

  4. SQL随记(六)

    1.关于dbms_sql包的一些执行语句 cursor_name := DBMS_SQL.OPEN_CURSOR; --打开游标: DBMS_SQL.PARSE(cursor_name, var_dd ...

  5. 机器学习中模型泛化能力和过拟合现象(overfitting)的矛盾、以及其主要缓解方法正则化技术原理初探

    1. 偏差与方差 - 机器学习算法泛化性能分析 在一个项目中,我们通过设计和训练得到了一个model,该model的泛化可能很好,也可能不尽如人意,其背后的决定因素是什么呢?或者说我们可以从哪些方面去 ...

  6. Kubernetes实战:目录

    一.Docker实战 Docker: 基础介绍 [一] Docker:Docker 性质及版本选择 [三] Docker:网络及数据卷设置 [四] Docker:手动制作镜像 [五] Docker:d ...

  7. 基于IPV6的数据包分析(GNS3)

    1.拓扑图 2.配置ipv6地址.使路由器之间可互ping,用ospf配置.(R5为例) 查看路由表 试R5 ping 到R4 R4 ping到 R1 3.开始抓包分析 128返回请求(Echo Re ...

  8. 解决无法打开myeclipse-->“The default workspace'D: /myeclipse spaceis in use or cannot be created. Please choose a different one”

    解决方法:到工作空间中删除.metadata文件夹中的.lock文件 如果提示无法删除,到任务管理器中关闭java进程:

  9. CentOS下RPM方式安装MySQL5.6(转载)

    之前的项目全都在windows系统环境下部署的,这次尝试在Linux系统环境下部署,于是这次我们组织在7台主机上安装了JDK.Maven.Jboss其中一台安装了Mysql,并将局域网配置好,终于大功 ...

  10. day 21 - 1 包,异常处理

    创建目录代码 1. 无论是 import 形式还是 from...import 形式,凡是在导入语句中(而不是在使用时)遇到带点的,都要第一时间提高警觉:这是关于包才有的导入语法2. 包是目录级的(文 ...