zoukankan      html  css  js  c++  java
  • 常用技巧

    2019年8月6日:

    注意数组下标越界造成的漏洞

    地址可以分批输入

    system("sh")也可以执行

    例题:攻防世界 pwn 高阶 stack2

     

    js shell

    例题:攻防世界 pwn 高阶 monkey

    2019年8月9日:

    ret2_runtime_resolve

    大致流程:

    1. 修改 .plt 中的偏移使其指向伪造的 .rel.plt 节区中信息
    2. 设计好伪造的 .rel.plt  节区信息使其指向伪造的  .dynsym
    3. 伪造.dymsym 使其指向 .dynstr 。最后修改动态连接字符串为目标函数名

     

    攻击条件:dl_resolve不会检查对应的符号是否越界,只会根据我们给定的数据来执行,dl_resolve最后的解析依赖于所给定的字符串

    注意事项:把栈迁移到 .bss节区时应先检查是否可写,伪造 r_info 时注意能否被 0x10 整除

    参考文章:https://wiki.x10sec.org/pwn/stackoverflow/advanced_rop/

    2019年8月15日:

    无 “/bin/sh” 可以去libc中找,也可以考虑向 .bss中写入(前提是 .bss 段可写)

    注意 :p.send 和 p.sendline适用条件

    2019年9月14日:

    泄露libc函数地址的一些方法:

    (一)LibcSearCher:使用前先泄露其中某个函数的地址,比如说:puts(),write()等函数的地址。例如:

    from LibcSearcher import * #第二个参数,为已泄露的实际地址,或最后12位(比如:d90),int类型 obj = LibcSearcher("fgets", 0X7ff39014bd90) obj.dump("system") #system 偏移 obj.dump("str_bin_sh") #/bin/sh 偏移 obj.dump("__libc_start_main_ret")

    具体安装和使用可以去github:https://github.com/lieanu/LibcSearcher

    (二)DynELF:pwntools中的DynELF模块是专门针对没有libc文件时泄露地址信息,从而获取shell。其代码模板如下:

    p = process('./xxx')
    def leak(address):
      #各种预处理
      payload = "xxxxxxxx" + address + "xxxxxxxx"
      p.send(payload)
      #各种处理
      data = p.recv(4)
      log.debug("%#x => %s" % (address, (data or '').encode('hex')))
      return data
    d = DynELF(leak, elf=ELF("./xxx"))      #初始化DynELF模块 
    systemAddress = d.lookup('system', 'libc')  #在libc文件中搜索system函数的地址

    参考文章:https://www.anquanke.com/post/id/85129

    (三)OneGadget:没用过,有兴趣的可以参考:https://github.com/david942j/one_gadget

    2019年11月6日:

    通过函数返回值控制eax寄存器的值

  • 相关阅读:
    数组中的趣味题二
    数组中的趣味题一
    归并排序
    堆内存与栈内存
    c++中的继承和组合
    直接插入排序
    NYOJ 1067 Compress String(区间dp)
    C++ Primer 学习笔记与思考_7 void和void*指针的使用方法
    ucgui界面设计演示样例2
    手机无法连接电脑的手机助手
  • 原文地址:https://www.cnblogs.com/countfatcode/p/11309247.html
Copyright © 2011-2022 走看看