CTFshow-pwn入门-前置基础pwn20-pwn22

news/2024/11/17 16:27:20/

pwn20-pwn22是关于.got节跟.got.plt节的。这3道题的问题描述全是一样的,全都是问.got跟.got.plt是否可写以及他们的地址是什么,然后根据这些信息来拼成flag。那么关于.got和.got.plt的内容非常复杂,这里呢我也不解释了,推荐一个牛逼的博主的文章,大家可以自行去了解一下这两个节。
聊聊Linux动态链接中的PLT和GOT(1)——何谓PLT与GOT
聊聊Linux动态链接中的PLT和GOT(2)——延迟重定位
聊聊Linux动态链接中的PLT和GOT(3)——公共GOT表项
在这里插入图片描述
Ok,本篇文章我们只针对如何获得flag啊,具体涉及到got表即plt表的知识大家看以上的那三篇文章就行了。

解题思路

首先呢,题目问.got与.got.plt节是否可写,那么如何知道他们是否可写呢?

其实呢?Linux的可执行文件都有各种保护机制,包括Stack canaries、No-eXecute、ASLR和PIE、FORTIFY_SOURCE以及RELRO。其中RELRO保护机制就是与.got、.got.plt节是否可写有关!

我们使用python的pwntools工具中的checksec命令就可以查看这些保护机制的信息。例如:
在这里插入图片描述
这里可以看到上面的各种保护机制信息,其中RELRO是我们本篇文章重点关注的。

RELRO(ReLocation Read-Only)机制的提出就是为了解决延迟绑定的安全问题,它最初于2004年由Redhat的工程师Jakub Jelinek实现,它将符号重定向表设置为只读,或者在程序启动时就解析并绑定所有动态符号,从而避免GOT上的地址被篡改。如今,RELOR有两种形式:

Partial RELRO:一些段(包括.dynamic、.got等)在初始化后将会被标记为只读。在Ubuntu16.04(GCC-5.4.0)上默认开启Partial RELRO。
Full RELRO:除了Partial RELRO,延迟绑定将被禁止,所有的导入符号将在开始时被解析,.gotPlt段会被完全初始化为目标函数的最终地址,并被mprotect标记为只读但其实.got.plt会直接被合并到.got,也就看不到这段了。另外link_map和_dl_runtime_resolve的地址也不会被装入。开启Full RELRO会对程序启动时的性能造成一定的影响,但也只有这样才能防止攻击者篡改GOT。

其实还应该多加一种形式,那就是No RELRO。

所以:
当RELRO为Partial RELRO时,表示.got不可写而.got.plt可写。
当RELRO为FullRELRO时,表示.got不可写.got.plt也不可写。
当RELRO为No RELRO时,表示.got与.got.plt都可写。

而使用readelf -S 命令可以查看节头表以查看各个节的信息,这里其中就包含了节的所在地址。

所以我们可以使用checksec命令来看.got与.got.plt是否可写,使用readelf -S 命令来查看.got与.got.plt的地址。

下面我们就开始肝题目吧!

pwn20

在这里插入图片描述
首先我们将pwn文件托到虚拟机然后加上可执行的权限。

接下俩我们就可以使用checksec命令来看RELRO的情况了。

chmod +x pwn
checksec pwn

在这里插入图片描述
RELRO为No RELRO代表.got与.got.plt都可写,那么flag前一部分就为:ctfshow{1_1_。

下面我们再来查看地址:

readelf -S pwn

在这里插入图片描述
这样我们就可以拼出flag的后一部分了:0x600f18_0x600f28}。

所以的总的flag就为:ctfshow{1_1_0x600f18_0x600f28}

pwn21

在这里插入图片描述
首先我们将pwn文件托到虚拟机然后加上可执行的权限。

接下俩我们就可以使用checksec命令来看RELRO的情况了。

chmod +x pwn
checksec pwn

在这里插入图片描述
RELRO为Partial RELRO代表.got不可写而.got.plt都可写,那么flag前一部分就为:ctfshow{0_1_。

下面我们再来查看地址:

readelf -S pwn

在这里插入图片描述
这样我们就可以拼出flag的后一部分了:0x600ff0_0x601000}。

所以的总的flag就为:ctfshow{0_1_0x600ff0_0x601000}

pwn22

在这里插入图片描述
首先我们将pwn文件托到虚拟机然后加上可执行的权限。

接下俩我们就可以使用checksec命令来看RELRO的情况了。

chmod +x pwn
checksec pwn

在这里插入图片描述
RELRO为Full RELRO代表.got和.got.plt都不可写,那么flag前一部分就为:ctfshow{0_0_。

下面我们再来查看地址:

readelf -S pwn

在这里插入图片描述
这样我们就可以拼出flag的后一部分了:0x600fc0}。

所以的总的flag就为:ctfshow{0_0_0x600fc0}


http://www.ppmy.cn/news/472320.html

相关文章

win10系统服务器的ip地址,win10系统查看电脑IP地址和默认网关的操作方法

很多小伙伴都遇到过对win10系统查看电脑IP地址和默认网关进行设置的困惑吧,一些朋友看过网上对win10系统查看电脑IP地址和默认网关设置的零散处理方法,并没有完完全全明白win10系统查看电脑IP地址和默认网关的操作方法非常简单,只需要1、按下…

如何查找云桌面服务器,云电脑服务器怎么查看ip

你知道云电脑服务器怎么查看ip吗?下面和学习啦小编一起来看看云电脑服务器怎么查看ip。 云电脑服务器查看ip的方法 订购云虚拟主机后,会自动生效FTp帐号,密码,Ftp 服务器,及增送的二级域名,这些相关管理信息在提交订单…

win10系统如何看服务器地址,win10查看电脑DNS服务器地址具体步骤

对于电脑初学者来说,一开始都是使用Windows xp或者Windows 7等系统很简单的操作,但是升级成win10系统之后,不知道怎么查看电脑DNS服务器地址。毕竟系统版本的不同,在一些使用习惯上、设置上面都有所不同,今天小编就教大…

C++知识2

1.类函数的重载特性 类函数的重载特性就是我们可以在类里面定义同名的函数,但是参数不同的函数。 class student { public :char name[60];int age;void test();void test(int a); private :int haha; };重载函数在调用的时候,会根据参数的类型&#x…

电脑查询ip地址的方法,第一种最为简单

一般来说,每台电脑都会有固定的一个ip地址。部分电脑则是动态ip地址,每次连接网络时会自动分配。当我们需要查询ip地址的时候,该怎么操作呢?看完你就知道了。 更多系统教程尽在小白系统重装官网 系统:win10专业版 电…

如何查询网站dns服务器地址,如何查询DNS服务器地址 dns服务器地址查询方法详解...

我们知道电脑DNS地址一般都是自动或许的,那么我们有没办法查询DNS服务器地址呢?查询DNS地址其实并不能简单的在网络连接与本地连接中查看,下面编辑为大家介绍下如何查新DNS地址 在去年的一篇文章为大家介绍过:dns是什么 dns服务器…

通过QQ查询ip地址

可以使用以下步骤查询QQ的IP地址: 打开QQ软件,点击右上角的“设置”图标。 在设置界面中,点击“关于我们”。 在关于我们界面中,找到“版本信息”。 在版本信息中,找到“服务器IP地址”。这就是QQ的IP地址。 注意&…

电脑无法获取服务器信息,电脑无法获取IP地址怎么办?原来只需四招就搞定

使用电脑偶尔会有需要改IP地址的时候,例如不想被人查到自己的IP,被网关限制网速了,那么这个时候我们就可以手动修改IP地址了,下面电脑教授就为大家提供一个改IP地址的简易操作,真的只有四步。 1.在桌面上找到网络&…