千家信息网

Linux的xxd命令怎么使用

发表于:2025-02-01 作者:千家信息网编辑
千家信息网最后更新 2025年02月01日,这篇文章主要介绍"Linux的xxd命令怎么使用",在日常操作中,相信很多人在Linux的xxd命令怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"Linux的x
千家信息网最后更新 2025年02月01日Linux的xxd命令怎么使用

这篇文章主要介绍"Linux的xxd命令怎么使用",在日常操作中,相信很多人在Linux的xxd命令怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"Linux的xxd命令怎么使用"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

xxd命令跟hexdump比较相似,都是用来查看二进制文件的内容,不过用起来,xxd命令似乎更顺手一点。

xxd 介绍

我们知道如果想要将某个文件转换成另一种格式,我们可以通过使用一些在线的转换工具,它可以帮助我们将一个文件转换成几乎任何我们所需的文件格式,例如:"pdf to word,jpg to pdf,excel to pdf"等等。但如果有人想要将任意文件转换为十六进制或二进制形式,那又该怎么办呢? 其实这很简单,在Linux上我们可以通过xxd这个命令来做到这一点。xxd命令可以为给定的标准输入或者文件做一次十六进制的输出,它也可以将十六进制输出转换为原来的二进制格式。这也有助于对任意文件的编码和解码。 首先,让我们使用help/man命令,查看xxd命令的具体使用方法。

xxd -h

使用 xxd 执行的主要操作 将文件内容转换为十六进制:例如,我创建了一个名为"secret.txt"的新文件,现在我想将其内容都转换为十六进制形式,我可以通过键入以下命令执行:

Syntax: xxd filenamexxd secret.txt

如下图所示,很明显xxd已经为文件"secret.txt"生成了十六进制转储。 在这里我们可以观察到,以下十六进制转储获得了它的默认格式,例如: 索引行数 每组的默认八位字节数为2,其分组大小为4字节 标准列长度为16位,带有空格

使用xxd跳过第n行:在转换文件时,有许多数据可能是我们不需要的。因此,我们可以跳过这些内容。我们可以使用xxd跳过第n行,并在跳过的行后生成十六进制值。 假设在我当前的情况下,我想要从第5行生成十六进制转储,那么可以通过使用"-s"参数后跟xxd命令来实现。

xxd -s 0x50 secret.txt

将输出限制为特定长度:以上我已经解释了如何通过跳过行数来检索数据。但是,如果你想要限制标准输出的长度,那么你可以使用"-l"参数。 这里,我限制了我的内容长度,以将数据打印到有限的范围,即第5行,如下图所示。

xxd -l 0x50 secret.txt

因此,我们可以观察到两个命令之间的差异;第一个命令生成从第6行初始化的十六进制值,第二个命令根据十六进制索引以第5行结束,请参考以上截图。

将文件内容转换为二进制文件:如果你想将文件转换为二进制形式,则可以使用"-b"选项。命令如下:

xxd -b secret.txt

设置列长:上面我已经介绍了如何跳过并限制输出到范围,其实我们还可以设置列的长度。默认情况下,对于任何转储文件它都是12, 16。 默认值:我们知道默认列长度为16。这将打印16个字符,包括空格。

xxd -l 0x20 secret.txt

将列长度设置为32:我使用"-l"选项设置了结束索引以限制打印数据的范围。然后我使用"-c"参数,将列的长度设为了32。

xxd -l 0x40 -c 32 secret.txt

从下图中,我们可以知道xxd是如何限制列长度的。 将列长度设置为9:现在我们将列长度设置为"9"。

xxd -l 0x40 -c 9 secret.txt

在所有这些情况下,xxd都是通过空格计数每个字符来为文件创建十六进制转储的。 纯16进制转储:我们可以使用"-ps"选项,以 postscript的连续16进制转储输出。这里我们将其输出保存在hex文件中,以获取secret.txt文件的纯16进制转储。为了验证结果,我们使用cat命令从hex文件中读取输出。 xxd -ps secret.txt > hex cat hex 从下图中,我们可以知道xxd是如何为"secret.txt"文件,创建纯十六进制转储的。 还原文件:我们可以使用"-r"选项,来还原转换的文件内容。在我们的例子中,我使用了"-r -p"将纯十六进制转储的反向输出打印为了ASCII格式。

xxd -r -p hex

分组大小字节:如果我们需要将输出分组为多个八位字节,那么我们可以使用"-g"选项来实现。默认情况下为2。因此,如果我们将值设为4,那么它将被分组为8位。 在下图中我们将值设为8,它将分组为16位作为输出以简化结果。

xxd -l 0x30 -g 8 secret.txt

SUID Lab 设置

SUID特殊权限是以命令的所有者权限来运行这一命令的,而不是以执行者的权限来运行该命令。现在,让我们在xxd上启用SUID权限,这样本地用户就有机会利用xxd来获取root权限。 键入以下命令,启用SUID位:

which xxd chmod u+s /usr/bin/xxd ls -al /usr/bin/xxd

SUID 利用

现在,我们将通过特殊权限位SUID来利用xxd服务。为此,我创建了一个受害者机器的会话,这将允许我们利用目标系统的本地用户访问。 让我们使用ssh连接到目标机器,命令如下:

ssh test@192.168.1.103

成功访问受害者机器后,我们使用find命令来查找具有SUID权限的二进制文件。

find / -perm -u=s -type f 2>/dev/null

这里我们可以看到有许多二进制文件具有SUID位,但我们重点关注/usr/bin/xxd。

在xxd上获得特殊权限位SUID,我们将获取用于提取密码哈希文件的shadow文件。 如下图所示,我已请求通过使用xxd暴露/etc/shadow文件,它将为该文件生成十六进制转储,并通过管道传输xxd命令来恢复其输出。

xxd "/etc/shadow" / xxd -r

现在,我将使用john the ripper这款工具来破解哈希密码。这样我们就可以获取用户凭据,如下图所示。

john hash

获取凭据后,我们就可以切换用户了。首先,我们来检查下用户的sudo权限:raj,发现用户"raj"具有所有权限。

su raj sudo -l sudo su

因此,让我们直接切换到root用户帐户,并访问root shell。至此,我们已成功利用xxd命令提升了我们的用户权限。

到此,关于"Linux的xxd命令怎么使用"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

文件 命令 十六进制 输出 长度 权限 用户 二进制 内容 限制 格式 分组 可以通过 字节 情况 数据 学习 生成 特殊 参数 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 海南ios软件开发工程师 南宁冠泰网络技术有限公司 微头条软件开发 大话四下服务器终极丹多钱一个 关于网络安全信息的思想汇报 mysql怎么使用数据库 php实现数据库查询 华侨大学复试数据库题型 ac管理服务器主要功能 河北省网络安全学院官网 web服务器向app发送消息 渭南网络技术服务 网络安全培训最强的机构 海南龙雪互联网科技有限公司 数据库的安全性包含哪些方面 公司有软件开发部吗 易语言数据库打开成功表打开失败 安徽安卓软件开发机构 前段开发软件开发 国产数据库管理系统是什么 浙江潮流软件开发设施应用 东莞家政软件开发费用是多少 计算机网络技术女生学的出来吗 校园网络安全案例评选 计算机网络技术的学习笔记 2017网络安全学校方案 魔兽怀旧服各服务器注册人数 苏州叠纸网络技术有限公司 软件开发买什么笔记本 英雄联盟澳洲服务器英语
0