专栏首页漫流砂文件&目录小技巧 | Linux后门系列

文件&目录小技巧 | Linux后门系列

0x01 Linux 目录技巧

我们都知道 Windows 下文件和文件夹命名是有很多规则和限制的,但是可以通过一些程序来绕过限制,今天我们来看看 Linux 有哪些有趣的规则 参考 https://www.pathname.com/fhs/pub/fhs-2.3.pdf

当然了,我这种人怎么可能按照官方文档按部就班的去研究,我肯定是先 fuzz 一波了,没错,我是手动 fuzz

  • .

一个 dot 代表当前目录,两个 dot 代表上层目录

在 Linux 中 . 和 .. 目录是默认的,代表着本级和上级

所以我们在创建 . 和 .. 的时候会提示文件夹已经存在了,所以我尝试了一下三个点,成功了

所以说 . 是可以出现在目录名字中的,如果以 . 开头的文件和文件夹仅使用 ls 是看不见的


那么问题来了,默认的 . .. 我们是否可以修改呢?继续 fuzz

看这样是不可以修改呀,我们试试软连接呢?

软连接是可以的,可以将 .. 设置一个软连接,那么问题来了,我们可不可以将其他目录的软连接设置为 .. 呢 ?

设置没有出错,但是呢,没有成功,我用 root 权限设置了一下,也没有成功。

  • ?

在文件名扩展(Filename expansion)上扮演的角色是匹配一个任意的字元,但不包含 null 字元

可以看到,问号是可以放在目录里面的,但是呢,在 ls 下没有隐藏效果

那问号是否可以和其他字符组合呢?

可以看到的是问号是可以和其他符号组合的,但是我们创建 .?. 的时候,提示我们已经存在了,应该是和 ... 冲突了,那就说明问号是有特殊含义的,是什么呢?

问号可以匹配任意一个字符,与 * 不同的是,只能匹配一个字符

那问题来了,我新建一个只有一个字符的目录, ls ? 会显示什么呢?

果然和我想的一样

  • #

在文件中表示行开头或者注释

井号可以出现在目录中吗?

可以看到,井号可以放在目录的结尾,可以放在目录中间,但是不可以直接作为目录开头,需要使用引号进行引起来

这里就有一个问题了?

如果web目录中包含 # 号,那么请求结果会怎么样呢?会被截断吗?

大家感兴趣可以去试试,我是没时间整了,等以后的吧。

  • %

在运算式中,用来表示 “除法”

可以看到 % 是完全可以放在目录的任何地方的

  • $

与变量相关

符号本身在 Linux shell 中是代表变量参数的意思,这里我们可以看到, 也是完全可以出现在目录中,但是要注意,

如果不加引号,会跳到根目录,因为如果不加上引号,其实就是执行了 cd $1 ,大家可以执行一下试试,看看什么结果。

  • &

表示 and ,也表示命令在后台执行,也可以用来重定向标记

其实从这里可以看出来,这些特殊的符号基本上都可以使用双边带引号的方式来进行创建目录,但是需要注意的是,进入这些目录的时候需要加上引号

  • *

通配符

星号在 Linux 中通配符的意思,但是我们还是可以创建 * 号这个目录的,前提是目录是空的,不然目录会冲突,具体如下:

  • ^

这个符号在规则表达式中,代表行的 “开头” 位置

尖号在这里是畅通无阻的,和普通的字符一样

  • @

@ 符号本身是没有什么含义的,不过 $@ 是有意义的: @ 与 * 具有相同作用的符号,不过它们两者有一个不同点。符号 * 将所有的引用变量视为一个整体。但符号 @ 则仍旧保留每个引用变量的区段观念。

可以看到,@符号也和普通符号没有什么区别

  • !

通常它代表反逻辑的作用

! 号似乎说法比较多呀,使用也不是很顺畅,这种其实就是我们应该重点关注的

简单来说,叹号可以单独成一个文件夹,也可以作为文件夹的末位字符,说白了,叹号后面不能加东西,叹号加字符代表着特殊含义

所以这里我们进行剖析一下:

!! --> 执行上一条命令 !$ --> 上一个命令的最后一个参数 !^ --> 上一个命令的第一个参数 !:- --> 去掉最后一个参数执行上一个命令 !* --> 使用上条命令的所有参数 命令 !上一条命令:参数所在位置 --> 使用上一条参数的指定参数加入到现在这条命令中 !历史命令数值 --> 执行 history 中指定对应条数的命令 !-2 --> 执行 history 中倒数第二条命令 !关键字 --> 执行上一条包含命令关键字的命令 !!:gs/old/new --> 将上条命令中的 old 替换为 new 逻辑非 ls !(*.cfg)

  • ()

括号这个东西我就一直感觉很迷,和 `` 有异曲同工之妙

  • []

常出现在流程控制中,扮演括住判断式的作用

可以看到,中括号与普通字符没啥区别

  • `

反引号中间的字符串会被当做命令来进行执行

反引号这种还是需要单引号来去掉去特殊含义,之后才能建立相关目录

  • ~

这个符号一直用来代表当前用户的家目录

可以看到,直接在目录中访问 ~ ,会跳到家目录,但是使用绝对路径是可以进入波浪目录的

  • -

减号,也是参数的指定符号

  • +

加号

  • _

下划线

下划线和普通字符无异

  • =

看来等号也和正常符号没啥区别

  • |

竖线可以表示或,也可以进行数据重定向等

竖线有点特殊的是,即使是使用相对路径的情况下还是需要引号

  • \

反斜线,通常用来转义字符

可以看到反斜线也是需要使用引号

  • /

斜线,通常用来指根目录

  • ,

英文字符的逗号,经常被用作分隔

逗号看起来比较随和,与普通字符差异不大

  • 空格

空格放在后面说纯粹就是为了压轴

就问你吓人不,透明的,这比点号还狠,可以说是辽北第一狠人了!

这还不够,一个空格可以作为目录,2个空格也可以作为目录,n个都可以

空格和点能够碰撞出什么样的火花呢?

虽然说很明显,但是呢,还挺有意思的,于是乎,我冒出来一个想法

假如当前目录默认存在 .vim 目录,由于以点开头,那么ls 默认会看不到,可以使用 ls -al 来进行查看

可以看到,这种方式可以创建一个看起来和 .vim 一样的目录,看起来就很异常,但是删除起来可能会抓狂,当然了,有经验的使用 tab 配合进行删除,但是如果该目录下默认没有 .vim 呢?你还会怀疑吗?有点意思!

  • ' "

单/双引号就不说了

  • ” ’

汉字版本的单双引号

  • ;

分号一般用来做命令分隔

  • :

冒号好像应用的不多呀

  • 非打印字符

特殊目录

  • /dev/null
  • ~account
  • /tmp 具有sbit权限
  • /dev/shm/
  • /lost+found/

以上几个目录大家自行学一学,也挺有意思的

0x02 Linux 文件技巧

我们都知道 Windows 下文件和文件夹命名是有很多规则和限制的,但是可以通过一些程序来绕过限制,今天我们来看看 Linux 有哪些有趣的规则 参考 https://www.pathname.com/fhs/pub/fhs-2.3.pdf

这回,我们对文件名进行一下fuzz...

  • .

一个 dot 代表当前目录,两个 dot 代表上层目录

在 Linux 中 . 和 .. 目录是默认的目录,所以是无法创建为文件的,三个点就不受限制了

创建几乎不受限制

  • ?

在文件名扩展(Filename expansion)上扮演的角色是匹配一个任意的字元,但不包含 null 字元

问号作为文件的时候还是较为平和的,基本上和作为目录时一样

  • #

在文件中表示行开头或者注释

井号可以出现在文件名中吗?

井号需要引号的帮助来创建文件,访问文件,可以放在文件名的任意位置

  • %

在运算式中,用来表示 “除法”

可以看到 % 是完全可以放在目录的任何地方的

  • $

与变量相关

符号本身在 Linux shell 中是代表变量参数的意思,这里我们可以看到, 也是完全可以出现在文件名中

  • &

表示 and ,也表示命令在后台执行,也可以用来重定向标记

其实从这里可以看出来,这些特殊的符号基本上都可以使用双边带引号的方式来进行创建文件,但是需要注意的是,进入这些目录的时候需要加上引号

  • *

通配符

到这里可以看出,其实这些特殊字符作为文件和作为目录要求是一样的,下面就直接 po 图了!

  • ^

这个符号在规则表达式中,代表行的 “开头” 位置

  • @

  • !

通常它代表反逻辑的作用

  • []

常出现在流程控制中,扮演括住判断式的作用

  • `

反引号中间的字符串会被当做命令来进行执行

  • ~

这个符号一直用来代表当前用户的家目录

  • -

减号,也是参数的指定符号

  • +

加号

  • _

下划线

  • =
  • |

竖线可以表示或,也可以进行数据重定向等

  • \

反斜线,通常用来转义字符

  • /

斜线,通常用来指根目录

  • ,

英文字符的逗号,经常被用作分隔

  • 空格

空格放在后面说纯粹就是为了压轴

  • ' "

单/双引号就不说了

  • ” ’

汉字版本的单双引号

这字符我发现挺邪乎呀,不知道因为啥!!!值得注意一下!!!


  • ;

分号一般用来做命令分隔

  • :

冒号好像应用的不多呀

  • 非打印字符

Linux万物皆文件

本文分享自微信公众号 - 漫流砂(yidalidemao),作者:意大利的猫

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-07-16

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • alias后门 | Linux 后门系列

    alias 命令的功能是为命令设置别名,比如我想让我每次输入 ls 的时候都实现 ls -al 那怎么实现呢?

    意大利的猫
  • 实战Hasee服务扫描

    可以看出hasee 使用了Aqtronix WebKnight 这款WAF,此时我们应该清楚的是,此处的WAF 可能是cdn厂商的,也可能是hasee 的,所以...

    意大利的猫
  • Mimikatz 用法详解

    遗憾的是作者是一个法国大哥,官网我是一点都看不懂,翻译过来也是乱七八糟,感谢苑老师讲解

    意大利的猫
  • 【DB笔试面试759】在Oracle中,如果主库丢失归档文件,那么物理DG如何恢复?

    面试DBA岗位,面试官对于DG环境常常会问到,若是主库丢失了归档文件,而这些归档文件还未来得及传递到备库,则物理备库是否只能通过重建的方式来恢复呢?这道面试题是...

    小麦苗DBA宝典
  • TextScanner:旷视新作文字识别新突破,确保字符阅读顺序

    由于深度学习和海量数据的涌现,场景文字识别技术获得飞速发展。但是先前同类方法存在种种缺点,为此,本文提出 TextScanner,一种鲁棒的基于分割的场景文字识...

    CV君
  • 2020 年大前端技术趋势解读

    ? 来源:腾讯IMWeb前端团队 时光荏苒,非比寻常的一年即将过去。在这过去的一年中,与其说前端的平稳期即将到来,不如说前端反而进入了技术深水区。换言之,在全...

    腾讯技术工程官方号
  • CRM WebClient UI的翻译问题

    版权声明:本文为博主汪子熙原创文章,未经博主允许不得转载。 https://jerry.bl...

    Jerry Wang
  • 动态 | 谷歌开源 TF-Ranking:专用于排序学习的可扩展 TensorFlow 库

    AI 科技评论按:日前,谷歌 AI 发布了最新成果 TF-Ranking,它是一个专门针对排序学习(learning-to-rank)应用的可扩展 Tensor...

    AI科技评论
  • 【许晓笛】EOS 新增的 WebAssembly 解释器,是什么鬼?

    Daniel Larimer 在最近的博客中透露,EOS 新增了官方的 WebAssembly 解释器,用来解释执行 WebAssembly 智能合约,加上之前...

    圆方圆学院
  • 响铃:世界杯来了,移动办公的“世界杯”怎么踢?

    北京时间6月14日晚,让中国人艳羡“别人家公司”的世界杯终于来了。本届世界杯既有巴西、阿根廷、德国、法国、西班牙、葡萄牙、英格兰等传统强队,也有冰岛等强势黑马,...

    曾响铃

扫码关注云+社区

领取腾讯云代金券