pwn学习(2)
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的区别
区别主要有两点
- 内存地址的范围发生变化,x64中可以使用的内存地址不能超过0x00007fffffffffff,就是说测试溢出点的时候崩溃的ip不会指向我们的输入的地址,因为ret改变ip时会发生异常,所以直接看esp的值就好
- 传参方式发生变化,前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)的更多相关文章
- PWN学习之格式化字符串漏洞
目录 PWN学习之格式化字符串漏洞 格式化输出函数 格式化字符串漏洞 漏洞利用 使程序崩溃 栈数据泄露 任意地址内存泄漏 栈数据覆盖 任意地址内存覆盖 PWN学习之格式化字符串漏洞 格式化输出函数 可 ...
- PWN学习之整数溢出
目录 PWN学习之整数溢出 整数溢出 溢出和回绕 漏洞多发函数 整数溢出例子 PWN学习之整数溢出 整数溢出 如果一个整数用来计算一些敏感数值,如缓冲区大小或数值索引,就会产生潜在的危险.通常情况下, ...
- PWN学习之栈溢出
目录 PWN学习之栈溢出 前言 写bug bug.cpp源码 OD动态调试bug.exe OD调试观察溢出 栈溢出攻击之突破密码验证 x64位栈溢出 PWN学习之栈溢出 前言 我记得我在最开始学编程的 ...
- [二进制漏洞]PWN学习之格式化字符串漏洞 Linux篇
目录 [二进制漏洞]PWN学习之格式化字符串漏洞 Linux篇 格式化输出函数 printf函数族功能介绍 printf参数 type(类型) flags(标志) number(宽度) precisi ...
- pwn学习(1)
0x00 简介 入职之后,公司发布任务主搞pwn和re方向,re之前还有一定的了解,pwn我可真是个弟弟,百度了一番找到了蒸米大佬的帖子,现在开始学习. 0x01 保护方式 NX (DEP):堆栈不可 ...
- pwn学习之二
刚刚开始学习pwn,记录一下自己学习的过程. 今天get了第二道pwn题目的解答,做的题目是2017年TSCTF的easy fsb,通过这道题了解了一种漏洞和使用该漏洞获取shell的方法:即格式化字 ...
- pwn学习之一
刚刚开始学习pwn,记录一下自己学习的过程. 今天完成了第一道pwn题目的解答,做的题目是2017年TSCTF的bad egg,通过这道题学习到了一种getshell的方法:通过在大小不够存储shel ...
- 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的内存区的保护属性修改 ...
- Arm pwn学习
本文首发于“合天智汇”公众号 作者:s0xzOrln 声明:笔者初衷用于分享与普及网络知识,若读者因此作出任何危害网络安全行为后果自负,与合天智汇及原作者无关! 刚刚开始学习ARM pwn,下面如有错 ...
随机推荐
- AtCoder瞎做第二弹
ARC 067 F - Yakiniku Restaurants 题意 \(n\) 家饭店,\(m\) 张餐票,第 \(i\) 家和第 \(i+1\) 家饭店之间的距离是 \(A_i\) ,在第 \( ...
- Vue js 的生命周期(看了就懂)
转自: https://blog.csdn.net/qq_24073885/article/details/60143856 用Vue框架,熟悉它的生命周期可以让开发更好的进行. 首先先看看官网的图, ...
- 攻防常用命令(linux)
1.修改SSH密码: #登录SSH passwd 出现current passwoed或new password 输入就密码再输入新密码确认或直接输入新密码确认即可 2.修改Mysql密码: 1.在m ...
- EL表达式+JSTL
一. EL表达式 1.1 什么是EL EL是JSP表达式语言,全称是Expression Language,提供了JSP中简化表达式的方法. 1.2 如何学习EL 没有EL的时候 怎么写 用EL表达式 ...
- locate命令
locate命令介绍 locate(locate) 命令用来查找文件或目录. locate命令要比find -name快得多,原因在于它不搜索具体目录,而是搜索一个数据库/var/lib/mlocat ...
- 第六周博客作业<西北师范大学|李晓婷>
1.助教博客链接:https://home.cnblogs.com/u/lxt-/ 2.作业要求链接:https://www.cnblogs.com/nwnu-daizh/p/10569690.htm ...
- JavaWeb之DButils整理
一.DBUtils介绍 apache 什么是dbutils,它的作用 DBUtils是java编程中的数据库操作实用工具,小巧简单实用. 用前导包!!!DBUtils包!!! 二.DBUtils的三 ...
- Angular记录(9)
文档资料 箭头函数--MDN:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Functions/Arrow_fun ...
- uCos-II移值(一)
os_cpu.h文件 该文件主要是完成操作系统使用的内部数据类型.常数以及宏的定义,这些都是与处理器平台密切相关的: 第一部分 以下部分定义了系统内部常用的数据类型,为了增加系统的可移植性,系统内核只 ...
- .NET面试题系列(十八)常用关键字
序言 const和readonly关键字 private protected public internal的区别 out ref out适合用在需要retrun多个返回值的地方,而ref则用在需要 ...