知识点
Linux基础命令及信息收集
Linux用户分类
Linux下的用户可以分为三类:
超级用户 —— 用户名为root,:它具有一切权限,只有进行系统维护(例如:建立用户等)或其他必要情形下才用超级用户登录,以避免系统出现安全问题。
系统用户(伪用户) —— 是Linux系统正常工作所必需的内建的用户。主要是为了满足相应的系统进程对文件属主的要求而建立的,例如:bin、daemom、adm、lp等用户。
系统用户不能用来登录。
普通用户 —— 是为了让使用者能够使用Linux系统资源而建立的,我们的大多数用户属于此类。
Linux用户组分类
Linux中的组有以下三种:
基本组(私有组):建立账户时,若没有指定账户所属的组,系统会建立一个和用户名相同的组,这个组就是基本组,基本组只容纳一个用户。当把其他用户加入到该组中,则基本组就变成了附加组。
附加组(公有组):可以容纳多个用户,组中的用户都具有组所拥有的权利。
系统组:一般加入一些系统用户
Linux权限
Linux中用户和用户组的配置文件中
每个用户都有一个UID数值:
超级用户的UID —— 0
系统用户的UID —— 1~999
普通用户的UID —— ≥1000
在Linux中,用户账号、密码、用户组信息和用户组密码均是存放在不同的配置文件中的。
分别位于:
/etc/passwd —— 用户账户文件
/etc/shadow —— 用户密码文件
/etc/group —— 用户组账号文件
/etc/gshadow —— 用户组密码文件
Linux用户管理
添加用户 —— useradd username
设置密码 —— passwd username
删除用户 —— userdel username
切换用户 —— su username
用户提权 —— sudo command
注:能不能执行某个操作还是需要以配置文件为准
Linux 用 户分为:拥有者、组群(Group)、其他(other),Linux 系统中,预设的情況下,系统中所有的帐号与一般身份使用者,以及 root 的相关信 息, 都是记录在/etc/passwd
文件中。每个人的密码则是记录在/etc/shadow
文件下。 此外,所有的组群名称记录在/etc/group
內!
linux 文件的用户权限的分析图
-rw-r--r-- 1 user staff 651 Oct 12 12:53 .gitmodules
# ↑╰┬╯╰┬╯╰┬╯
# ┆ ┆ ┆ ╰┈ 0 其他人
# ┆ ┆ ╰┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈ g 属组
# ┆ ╰┈┈┈┈ u 属组
# ╰┈┈ 第一个字母 `d` 代表目录,`-` 代表普通文件
例:rwx rw- r--
r=读取属性 //值= 4
w=写入属性 //值= 2
x=执行属性 //值= 1
示例:
chmod u+x,g+w f01 # 为文件f01设置自己可以执行,组员可以写入的权限
chmod u=rwx,g=rw,o=r f01
chmod 764 f01
chmod a+x f01 # 对文件f01的u,g,o都设置可执行属性
# 将/home/wwwroot/里的所有文件和文件夹设置为755权限
chmod -R 755 /home/wwwroot/*
Linux任务计划管理
crontab 命令被用来提交和管理用户的需要周期性执行的任务,与windows 下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动crond 进程,crond 进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。
#每1分钟执行一次 command
* * * * * commond
# 每小时的第3和第 15 分钟执行
3,15 * * * * command
1 2 3 4 5 whoami
分钟 小时 一个月的第几天 月份 星期几
Linux信息收集
uname -a:显示全部的系统信息,包括系统版本内核版本、处理器类型等。
uname -r:仅显示内核版本。
cat /proc/version:显示Linux内核的编译信息,包括内核版本号、编译时间等。
cat /etc/*-release查看Linux发行版的版本信息。
head -n 1 /etc/issue:查看操作系统的发行版信息(部分系统适用)。
cat /etc/passwd:列出系统上的所有用户信息,包括用户名、UID、GID、家目录等。
cat /etc/group:列出系统上的所有组信息。
ifconfig:查看网络接口的配置信息,包括IP地址、子网掩码等。
netstat:打印 Linux 中网络系统的状态信息
netstat -lntp:显示所有监听的TCP端口及其对应的程序。
netstat -antp:显示所有已建立的TCP连接及其对应的程序。
iptables -L:查看防火墙规则。
top:实时显示系统进程的状态,包括CPU和内存使用情况。
chkconfig --list:列出所有系统服务的状态。
systemctl status <服务名>:对于使用systemd的系统,查看指定服务的状态。
find/-name”config”:查找系统中所有名字中包含config的文件
wget:从指定的 URL 下载文件
nc/netcat: 瑞士军刀
grep:文本搜索工具
cat /etc/hosts:查看host解析记录
grep 'bash' /etc/passwd:收集有效用户
Linux系统管理
ps 命令用于报告当前系统的进程状态。可以搭配 kill 指令随时中断、删除不必要的程序。ps 命令是最基本同时也是非常强大的进程查看命令,使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等等,总之大部分信息都是可以通过执行该命令得到的。
例:
# 按内存资源的使用量对进程进行排序
ps aux | sort -rnk 4
# 按 CPU 资源的使用量对进程进行排序
ps aux | sort -nk 3
kill 命令用来删除执行中的程序或工作。kill 可将指定的信息送至程序。预设的信息为 SIGTERM(15),可将指定程序终止。若仍无法终止该程序,可使用 SIGKILL(9) 信息尝试强制删除程序。程序或工作的编号可利用 ps 指令或 job 指令查看。
例:
# 先用 ps 查找进程,然后用 kill 杀掉
ps -ef | grep vim
root 3268 2884 0 16:21 pts/1 00:00:00 vim install.log
root 3370 2822 0 16:21 pts/0 00:00:00 grep vim
kill 3268
kill 3268
-bash: kill: (3268) - 没有那个进程
systemctl 命令是系统服务管理器指令,它实际上将 service 和 chkconfig 这两个命令组合到一起。 例:
# 1.启动 nfs 服务
systemctl start nfs-server.service
# 2.设置开机自启动
systemctl enable nfs-server.service
# 3.停止开机自启动
systemctl disable nfs-server.service
# 4.查看服务当前状态
systemctl status nfs-server.service
# 5.重新启动某服务
systemctl restart nfs-server.service
# 6.查看所有已启动的服务
systemctl list -units --type=service
# 7. 开启防火墙 22 端口
iptables -I INPUT -p tcp --dport 22 -j accept
# 8. 彻底关闭防火墙
sudo systemctl status firewalld.service
sudo systemctl stop firewalld.service
sudo systemctl disable firewalld.service
crontab 命令被用来提交和管理用户的需要周期性执行的任务,与 windows 下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动 crond 进程,crond 进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。
例:
# 每 1 分钟执行一次 command
* * * * * command
# 每小时的第 3 和第 15 分钟执行
3,15 * * * * command
# 在上午 8 点到 11 点的第 3 和第 15 分钟执行
3,15 8-11 * * * command
# 每隔两天的上午 8 点到 11 点的第 3 和第 15 分钟执行
3,15 8-11 */2 * * command
# 每个星期一的上午 8 点到 11 点的第 3 和第 15 分钟执行
3,15 8-11 * * 1 command
# 每晚的 21:30 重启 smb
30 21 * * * /etc/init.d/smb restart
# 每月 1、10、22 日的 4 : 45 重启 smb
45 4 1,10,22 * * /etc/init.d/smb restart
# 每周六、周日的 1:10 重启 smb
10 1 * * 6,0 /etc/init.d/smb restart
# 每天 18 : 00 至 23 : 00 之间每隔 30 分钟重启 smb
0,30 18-23 * * * /etc/init.d/smb restart
# 每星期六的晚上 11:00 pm 重启 smb
0 23 * * 6 /etc/init.d/smb restart
# 每一小时重启 smb
* */1 * * * /etc/init.d/smb restart
# 晚上 11 点到早上 7 点之间,每隔一小时重启 smb
* 23-7/1 * * * /etc/init.d/smb restart
# 每月的 4 号与每周一到周三的 11 点重启 smb
0 11 4 * mon-wed /etc/init.d/smb restart
# 一月一号的 4 点重启 smb
0 4 1 jan * /etc/init.d/smb restart
# 每小时执行`/etc/cron.hourly`目录内的脚本
01 * * * * root run-parts /etc/cron.hourly
Linux网络管理
curl 命令是一个利用 URL 规则在命令行下工作的文件传输工具。它支持文件的上传和下载,所以是综合传输工具,但按传统,习惯称 curl 为下载工具。作为一款强力工具,curl 支持包括 HTTP、HTTPS、ftp 等众多协议,还支持 POST、cookies、认证、从指定偏移处下载部分文件、用户代理字符串、限速、文件大小、进度条等特征。做网页处理流程和数据检索自动化,curl 可以祝一臂之力。
例:
# 下载文件
$ curl http://man.linuxde.net/text.iso --silent
# 下载文件,指定下载路径,并查看进度
$ curl http://man.linuxde.net/test.iso -o filename.iso --progress
wget 命令用来从指定的 URL 下载文件。
例:
wget http://www.linuxde.net/testfile.zip
firewalld 命令是 Linux 上的防火墙软件(Centos7 默认防火墙)。
参考:https://www.cnblogs.com/moxiaoan/p/5683743.html
例:
systemctl start firewalld #启动
systemctl stop firewalld #关闭
systemctl status firewalld #查看状态
systemctl disable firewalld #开机禁用
systemctl enable firewalld #开机启用
Linux软件管理
yum 命令是在 Fedora 和 RedHat 以及 SUSE 中基于 rpm 的软件包管理器,它可以使系统管理人员交互和自动化地更细与管理 RPM 软件包,能够从指定的服务器自动下载 RPM 包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软体包,无须繁琐地一次次下载、安装。
yum install yum-fastestmirror #自动搜索最快镜像插件
yum install yumex #安装 yum 图形窗口插件
yum grouplist #查看可能批量安装的列表
apt-get 命令是 Debian Linux 发行版中的 APT 软件包管理工具。所有基于 Debian 的发行都使用这个包管理系统。deb 包可以把一个应用的文件包在一起,大体就如同 Windows 上的安装文件。
参考:http://man.linuxde.net/apt-get
例:
# 更新 apt-get
apt-get update
# 安装一个软件包
apt-get install packagename
# 卸载一个已安装的软件包(保留配置文件)
apt-get remove packagename
# 卸载一个已安装的软件包(删除配置文件)
apt-get –purge remove packagename
# 如果需要空间的话,可以让这个命令来删除你已经删掉的软件
apt-get autoclean apt
# 把安装的软件的备份也删除,不过这样不会影响软件的使用的
apt-get clean
# 更新所有已安装的软件包
apt-get upgrade
# 将系统升级到新版本
apt-get dist-upgrade
Linux提权实操
案例复现
kali虚拟机打开终端,使用ip -a查看本地ip地址,然后启用namp对内网网段开始扫描,针对扫描结果,尝试访问开启80端口,即http服务的主机进行访问
尝试连接192.168.32.196:80,能连上,说明确实是目标机ip
对其进行全端口扫描,找到特殊端口1898,尝试对其进行访问
成功访问页面,对网站进行分析
使用火狐插件对其进行分析
启动msf框架,并在msf上查找关于Drupal的漏洞
在列表中寻找相对较新的Excellent的漏洞,使用use进入模块,show options
设置ip、端口,启动攻击
msf攻击获取到shell权限之后,执行命令获取主机信息
退出,上传linux-exploit-suggester-master
再次获取主机shell,查看我们刚刚上传的文件,并为其添加执行权限
执行文件,找到脏牛(dirtycow)漏洞
在漏洞网站上搜索CVE-2016-5195,这里由于本人下载了漏洞库,直接访问本地文件
打开文件,搜索gb,得到下载链接,下载cpp提权文件
下载后,将项目中的c++文件上传到kali中,使用msf将其上传到攻击机中,上传成功后,getshell查看上传的cpp文件,对其进行编译,编译成功后,查看权限
执行文件,再次查看用户相关信息,发现用户及id已更改为root,至此完成Linux提权操作
总结:Linux内核提权利用步骤
信息收集:先使用Nmap、fscan、xray等扫描工具对目标ip进行扫描,寻找漏洞,再利用Cobalt Strike、msf等工具利用漏洞攻击目标,获取shell,再使用相关命令进行信息收集,收集其用户id、用户名称、Linux发行版本、内核版本等信息;
查找漏洞:根据内核版本,在CVE Details等漏洞库搜寻可利用的内核漏洞
利用漏洞:找到适用于目标漏洞的exploit,通常这些EXP可以从漏洞数据库、GitHub等开源平台获取,注意有些EXP是以源代码的形式提供的,需要在目标系统或类似环境的系统上编译成可执行文件。
执行EXP:将编译好的EXP上传到目标系统,并赋予执行权限。然后执行EXP,尝试提升权限。