美文网首页CTFLinuxCTF
快速计算能覆盖到 rip / eip 的 junk 数据长度

快速计算能覆盖到 rip / eip 的 junk 数据长度

作者: 王一航 | 来源:发表于2017-03-28 16:55 被阅读84次

简介

前置条件 :

1. 可以栈溢出
2. 溢出长度足够覆盖到函数的返回地址
3. 栈代码具有执行权限

功能 :

快速计算应该填充多少字节 junk 数据 , 计算以后可以直接在数据后追加返回地址
这样就可以接管程序的执行流程
64 位 / 32 位通用

演示视频 :

https://www.youtube.com/watch?v=7plB3z6dKDY

仓库地址 :

https://github.com/wangyihang/GetJunkSize.git

代码实现 :

getJunk.py

#!/usr/bin/env python
# coding:utf-8

import sys

start = ord("0")

def getJunk(length):
    global start
    result = ""
    size = (length / 4)
    padding = length - size * 4
    for i in range(size):
        result += chr(start + i) * 2 + "\x00\x00"
    return result + "@@\x00\x00"[0:padding]

def main():
    if len(sys.argv) != 2:
        print "Usage : "
        print "        python getJunk.py [LENGTH]"
        exit(1)
    junk = getJunk(int(sys.argv[1]))
    print junk
    with open("junk.dat","w") as f:
        f.write(junk)

if __name__ == "__main__":
    main()

getSize.py

#!/usr/bin/env python
# coding:utf-8

import sys

start = ord("0")

def getSize(address):
    global start
    flag1 = int(address[-6:-4], 16)
    flag2 = int(address[-4:-2], 16)
    flag3 = int(address[-2:], 16)
    result = 0
    if flag1 != 0 and flag2 != 0 and flag3 == 0:
        result = (flag1 - start) * 4 - 1
    elif flag1 != 0 and flag2 == 0 and flag3 == 0:
        result = (flag1 - start) * 4 - 2
    elif flag1 == 0 and flag2 == 0 and flag3 != 0:
        result = (flag3 - start) * 4 + 1
    elif flag1 == 0 and flag2 != 0 and flag3 != 0:
        result = (flag3 - start) * 4
    else:
        print "Illegal Address!"
        exit(2)
    return result

def main():
    if len(sys.argv) != 2:
        print "Usage : "
        print "        python getSize.py [OVERWRITED_RIP]"
        exit(1)
    size = getSize(sys.argv[1])
    print "[Length] : [%d]" % size

if __name__ == "__main__":
    main()

相关文章

  • 快速计算能覆盖到 rip / eip 的 junk 数据长度

    简介 前置条件 : 功能 : 演示视频 : 仓库地址 : 代码实现 : getJunk.py getSize.py

  • 数据结构(一):什么是数据结构

    一、什么是数据结构 1、数据结构的定义 数据:从计算机的角度来看,数据是所有能被输入到计算机中且能被计算机处理的符...

  • 数据结构基本概念

    数据:所有能被输入到计算机中,且能被计算机处理的符号的集合。是计算机操作的对象的总称。数据元素:数据(集合)中的一...

  • 基因长度并不是end-start

    需求 tpm、fpkm这样的数据,计算公式里都有“基因有效长度”,有些地方直接叫基因长度。之前计算这些,都是采用最...

  • 数据结构简介

    数据结构 some concepts 数据:所有能被输入到计算机中,且能被计算机处理的符号的集合。是计算机操作的对...

  • MD5

    MD5 算法的介绍 特点1、压缩性:任意长度的数据,算出的MD5值长度都是固定的。 2、容易计算:从原数据计算出M...

  • JAVA多线程与并发学习总结

    1. 计算机系统 使用高速缓存来作为内存与处理器之间的缓冲,将运算需要用到的数据复制到缓存中,让计算能快速进行;当...

  • MD5加密

    特点 1、压缩性:任意长度的数据,算出的MD5值长度都是固定的。2、容易计算:从原数据计算出MD5值很容易。3、抗...

  • 提取fasta文件特定ID序列,及其计算序列长度

    参考: https://www.biostars.org/p/127141/快速计算fasta序列长度的方法 Ti...

  • 《数据结构与算法》知识点(一)

    第一章 绪论 基本概念和术语: 1.数据、数据元素、数据项和数据类型 数据:所有能被输入到计算机中,且能被计算机处...

网友评论

    本文标题:快速计算能覆盖到 rip / eip 的 junk 数据长度

    本文链接:https://www.haomeiwen.com/subject/smnjottx.html