cat的一个缺陷

说明

  • cat有一个缺陷,如果内容中存在 \r 回车符,那么在cat直接查看的时候会首先输出\r后的内容,如果\r后的内容长度小于 \r 前的内容长度,那么就会输出 \r 后的内容在加上 \r 前的长度差的后几位。
  • 利用这个可以隐藏在一些脚本里面,比如 crontab, 直接 cat file 的查看方式会让运维不能发现问题。但是可以通过 vim less 查看到。

举例

看了上面的说明,可能还是不是很清楚,举个例子说明一下就很明白了。

1
2
3
4
5
# 示例代码
with open("result.sh", "w") as f:
hiding_content = "1234567"
output = hiding_content + "\r11111"
f.write(output)

会先输出 \r 后的 11111 ,由于 len(""1234567"") - len("11111)" = 2 ,所有最后会输出 1234567 的最后两位

这样?

实操

因为 cat 输出空文件和输出空格,肉眼看起来是一样的,所以可以利用空格来隐藏我们要执行的命令

空格和空文件

1. 直接隐藏

1
2
3
4
with open("result.sh", "w") as f:
hiding_content = "echo I am hidden content"
output = hiding_content + "\r" + " " * len(hiding_content)
f.write(output)

直接隐藏

2. 隐藏在正常的脚本里面

1
2
3
4
5
original_content = "echo I am normal content"
with open("result.sh", "w") as f:
hiding_content = "echo I am hidden content;"
output = hiding_content + "\r" + original_content + " " * len(hiding_content)
f.write(output)

隐藏到其他文件

总结

只要是可能会用cat看的地方,都可以做一下手脚,结合权限维持还不错。

有些说得不太准确的地方,望大佬们指正。

Powered by Hexo and Hexo-theme-hiker

Copyright © 2017 - 2020 Damit5's Blog All Rights Reserved.

UV : | PV :