[CTF]-PWN:C++文件更换libc方法(WSL)

C++文件与C文件更换libc有很多不一样的地方,我是在写buu的ciscn_2019_final_3才意识到这个问题,C文件只需要更换libc和ld就可以了,但是C++文件不同,除了更换libc和ld,它还需要更换libstdc++.so.6和libgcc_s.so.1

更换libc和ld的方法我在那篇文章里讲了,这里就不重复讲了。主要是把更换libstdc++和libgcc的方法讲一下。

ld:
patchelf --set-interpreter 新的ld路径 文件名
例如:
64位(约ubuntu16):patchelf --set-interpreter /root/glibc-all-in-one/libs/2.23-0ubuntu3_amd64/ld-2.23.so babyrop2
32位(约ubuntu16):patchelf --set-interpreter /root/glibc-all-in-one/libs/2.23-0ubuntu3_i386/ld-2.23.so hacknotelibc:
patchelf --replace-needed 原来第二行的==>前的libc名 要更换成的libc 文件名
例如:
64位(约ubuntu16):patchelf --replace-needed libc.so.6 /root/glibc-all-in-one/libs/2.23-0ubuntu3_amd64/libc-2.23.so babyrop2
32位(约ubuntu16):patchelf --replace-needed libc.so.6 /root/glibc-all-in-one/libs/2.23-0ubuntu3_i386/libc-2.23.so hacknote
ld:
64位(约ubuntu18):patchelf --set-interpreter /root/glibc-all-in-one/libs/2.27-3ubuntu1_amd64/ld-2.27.so babyheaplibc:
64位(约ubuntu18):patchelf --replace-needed libc.so.6 /root/glibc-all-in-one/libs/2.27-3ubuntu1_amd64/libc-2.27.so babyheap

如果是用虚拟机的话也可以根据wsl的方法改一下路径,也是可以按照这个方法改的

我们就以buu的ciscn_2019_final_3为例

在更换了libc和ld之后可以发现程序依旧没法启动,ldd查看之后发现报错

这表示我们还需要更换libstdc++和libgcc_s.so.1

更换libstdc++:

更换libstdc++可以用patchelf实现

先讲如何获取libstdc++

在glibc-all-in-one里面我们是找不到libcstdc++的,同样也没有libgcc,所以我们可以用docker来获取(这里参考了其他师傅的博客),流程如下。

更改流程:

第一步先用docker创建容器(往linux命令行输入)

docker run -it ubuntu:18.04 /bin/bash

第二步根据自己原有的ubuntu版本的路径来找libstdc++的位置

我这里就是/usr/lib/x86_64-linux-gnu

所以用docker cp命令把文件拷贝下来,这里建议不要只拷贝libstdc++,而是把它所在的整个文件下下来,因为不一定所有文件都可以使用。

docker cp ee50a7998286:/lib/x86_64-linux-gnu /
#这里记得根据你的容器改一下

第三步在拷贝下来的文件里找到libstdc++,但是要注意,这个libstdc++文件可能没法用(不知道是不是我自己的问题,但这里还是要说一下)用vscode可以看到,libstdc++.so.6没法用,改了之后会发现not found,并且当你尝试打开它时会发现不在路径中,相当于根本没有这个文件。

但我们可以用libstdc++.so.6.0.25,效果差不多了。

第四步更换libstdc++

patchelf --replace-needed libstdc++.so.6 /root/libc/18/usr-x86_64-linux-gnu/libstdc++.so.6 final3

注意依照自己的路径改一下命令。

更换libgcc:

更换完libstdc++之后就要更换libgcc了,但是libgcc好像没法用patchelf --replace-needed来替换,正常一点的方法我暂时还没想到,但鉴于这种c++文件在正常比赛中不常见,这里采用了个简单粗暴的方法,那就是照着路径去把原来的libgcc改名,然后把ubuntu18的libgcc换到原来libgcc的位置(不是替换,不是删除)而是把原来改名,让新的占原来的位置就行了。

我暂时也没更好的方法了。

改完之后就是这样了

这样程序就可以正常启动了。

补充:libgcc不一定在上面下载的那个文件里,可以根据ldd文件里的路径来找。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux实用指令

Linux实用指令 1.指定运行级别 运行级别说明: 0 :关机 1 :单用户【找回丢失密码】 2:多用户状态没有网络服务 3:多用户状态有网络服务 4:系统未使用保留给用户 5:图形界面 6:系统重…

Netty应用(七) 之 Handler Netty服务端编程总结

目录 15.Handler 15.1 handler的分类 15.1.1 按照方向划分 15.1.2 handler的结构 15.2 输入方向ChannelInboundHandlerAdapter 15.2.1 输出方向Handler的顺序 15.2.2 多个输入方向Handler之间的数据传递 15.2.2.1 handler消失了 15.2.2.2 手动编写netty提供的new Strin…

磁盘database数据恢复: ddrescue,dd和Android 设备的数据拷贝

ddrescue和dd 区别: GNU ddrescue 不是 dd 的衍生物,也与 dd 没有任何关系 除了两者都可用于将数据从一台设备复制到另一台设备。 关键的区别在于 ddrescue 使用复杂的算法来复制 来自故障驱动器的数据,尽可能少地造成额外的损坏。ddrescue…

备战蓝桥杯---图论之最短路dijkstra算法

目录 先分个类吧: 1.对于有向无环图,我们直接拓扑排序,和AOE网类似,把取max改成min即可。 2.边权全部相等,直接BFS即可 3.单源点最短路 从一个点出发,到达其他顶点的最短路长度。 Dijkstra算法&#x…

UI文件原理

使用UI文件创建界面很轻松很便捷,他的原理就是每次我们保存UI文件的时候,QtCreator就自动帮我们将UI文件翻译成C的图形界面创建代码。可以通过以下步骤查看代码 到工程编译目录,一般就是工程同级目录下会生成另一个编译目录,会找到…

rbd快照管理、rbd快照克隆原理与实现、rbd镜像开机自动挂载、ceph文件系统、对象存储、配置对象存储客户端、访问Dashboard

目录 快照 快照克隆 开机自动挂载 ceph文件系统 使用MDS 对象存储 配置服务器端 配置客户端 访问Dashborad 快照 快照可以保存某一时间点时的状态数据快照是映像在特定时间点的只读逻辑副本希望回到以前的一个状态,可以恢复快照使用镜像、快照综合示例 #…

【刷题记录】合并两个有序数组、移除元素

本系列博客为个人刷题思路分享,有需要借鉴即可。 1.题目链接: T1:LINK T2:LINK 2.详解思路: T1: 思路1:弄个新数组,比较两个数组中的值,哪个小就把哪个值放到新数组中。 分析1&a…

自定义类型详解 结构体,位段,枚举,联合

目录 结构体 1.不完全声明 2.结构体的自引用 3.定义与初始化 4.结构体内存对齐与结构体类型的大小 结构体嵌套问题 位段 1.什么是位段? 2.位段的内存分配 枚举 1.枚举类型的定义 2.枚举的优点 联合(共同体) 1.联合体类型的声明以…

Vue语法

1.vue模板语法2大类 插值语法: 功能:用于解析标签内容 用途:用于标签内容定义 写法:{{xxx}},xxx是js表达式,且可以直接读取到data中的所有属性 指令语法: 功能:用于解析标签&am…

去空行小工具Html + Javascript

这是一个平常用到的小工具&#xff0c;为了节省屏幕空间把空行去掉&#xff0c;怕要用的时候找不到故记录在此。 效果图 网页版&#xff0c;放在浏览器里就可以用 <!doctype html> <html><head><meta charset"utf-8"><title>去回车…

JMeter性能测试系列一初识JMeter

1.JMeter介绍 Apache组织的Stefano Mazzocchi是JMeter项目的创始人。编写JMeter最初的目的是为了测试server的性能(后期被Tomcat替代)。随后&#xff0c;JMeter在Apache组织内部开始被其他项目所使用&#xff0c;并最终推广出来&#xff0c;成为独立的软件项目并不断更新&…

内网渗透Searchall敏感凭证信息搜索工具

一、开发背景 在实战中进入内网的时候&#xff0c;大家需要搜集一些敏感信息例如账号&#xff0c;密码甚至浏览器的账号密码。searchall完美解决了这个问题。所以我就结合自身的经验写了一款搜索敏感信息的利用工具。它可以搜索敏感信息&#xff0c;更快为你获取到有价值的信息…

【51单片机】LED点阵屏(江科大)

9.1LED点阵屏 1.LED点阵屏介绍 LED点阵屏由若干个独立的LED组成,LED以矩阵的形式排列,以灯珠亮灭来显示文字、图片、视频等。 2.LED点阵屏工作原理 LED点阵屏的结构类似于数码管,只不过是数码管把每一列的像素以“8”字型排列而已。原理图如下 每一行的阳极连在一起,每一列…

Codeforces Round 926 (Div. 2)(A,B,C,D,E,F)

这场还是很有含金量的&#xff0c;B题开始就有难度了&#xff0c;B是个推结论的题&#xff0c;C要推结论然后递推&#xff0c;D题是有点难的树上DP&#xff08;主要是状态转移方程不好写&#xff09;&#xff0c;E题是个二进制预处理然后状压DP&#xff0c;F题是个数论&#xf…

【Redis快速入门】Redis三种集群搭建配置(主从集群、哨兵集群、分片集群)

个人名片&#xff1a; &#x1f43c;作者简介&#xff1a;一名大三在校生&#xff0c;喜欢AI编程&#x1f38b; &#x1f43b;‍❄️个人主页&#x1f947;&#xff1a;落798. &#x1f43c;个人WeChat&#xff1a;hmmwx53 &#x1f54a;️系列专栏&#xff1a;&#x1f5bc;️…

python系统学习Day2

section3 python Foudamentals part one&#xff1a;data types and variables 数据类型&#xff1a;整数、浮点数、字符串、布尔值、空值 #整型&#xff0c;没有大小限制 >>>9 / 3 #3.0 >>>10 // 3 #3 地板除 >>>10 % 3 #1 取余#浮点型&#xff…

红队笔记Day2 -->上线不出网机器

今天就来讲一下在企业攻防中如何上线不出网的机器&#xff01;&#xff01; 1.基本网络拓扑 基本的网络拓扑就是这样 以下是对应得的P信息&#xff0c;其中的52网段充当一个内网的网段&#xff0c;而111充当公网网段 先ping一下&#xff0c;确保外网ping不通内网&#xff0c;内…

2024年道路运输企业主要负责人证模拟考试题库及道路运输企业主要负责人理论考试试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年道路运输企业主要负责人证模拟考试题库及道路运输企业主要负责人理论考试试题是由安全生产模拟考试一点通提供&#xff0c;道路运输企业主要负责人证模拟考试题库是根据道路运输企业主要负责人最新版教材&#…

你知道.NET的字符串在内存中是如何存储的吗?

一、字符串对象的内存布局 从“值类型”和“引用类型”来划分&#xff0c;字符串自然属于引用类型的范畴&#xff0c;所以一个字符串对象自然采用引用类型的内存布局。引用类型实例的内存布局总的来说整个内存布局分三块&#xff1a;ObjHeader TypeHandle Payload。对于一般…

EasyCaptcha,开源图形验证码新标杆!

引言&#xff1a; 随着互联网的普及&#xff0c;验证码已成为网站和应用程序中不可或缺的安全组件。它能够有效地防止自动化攻击、垃圾邮件和机器人活动。在众多验证码解决方案中&#xff0c;Easy-captcha以其简单易用和高度可定制的特点受到了开发者的青睐。本文将指导读者如…