执行结果如图所示
文章插图
方法2:编辑时整数溢出下图为向块写入时的功能函数 , 这里变量i定义为unsigned __int64类型 , 在第7行 , 当a2为0时 , a2-1就会变得"无限大" , 从而可以无限制写入数据 , 溢出到下一个块 , 利用unlink漏洞实现任意地址写 , 进而拿到系统shell 。
文章插图
方法3:输入索引整数溢出在edit功能内 , 调用read_num_4009B9()让用户输入索引 , 利用求余使索引小于7 。
文章插图
进入read_num_4009B9()函数内 , 可以看到程序对用户输入进行了判断 , 若小于0则取相反数 。
文章插图
漏洞就出现在 , 当用户输入的为最大负整数(即-9223372036854775808) , 内存中十六进制表示为0x8000000000000000 , 取相反数过程为-x=~x+1 , 即0x7fffffffffffffff+1=0x8000000000000000 , 在计算机表示中最大负整数的相反数还是最大负整数!
当v0为最大负整数 , 则v0%7>=v0的条件也能被满足 , 且结果v3为-1 , 这将向ptr[-1]指向的地址写入内容 , 而ptr[-1]指向的地址为最近操作过的块的地址 。而写入的大小为qword_6020C0[-1+8] , 即ptr[6] , 其为i=6块的地址 , 即可以写入"无限"多的数据 , 溢出到下一块实现unlink , 进一步实现任意地址写、函数地址泄露、构造执行system("/bin/sh") , 拿到shell 。
经验总结扩展阅读
- 子宫体癌有什么症状
- 痤疮怎样根治
- 酒店的夜灯怎么关不掉
- 秋冬季节适合种什么
- 负面情绪有哪些影响
- 面粉是不是低筋
- 什么是高通滤波
- 氧化剂是物质还是一种元素
- 什么是T形管
- 编码中的Adapter,不仅是一种设计模式,更是一种架构理念与解决方案