OWASP ZAP 预装在 Kali Linux 上,因此请确保在您的终端中使用其进行更新sudo apt update %% sudo apt upgrade。
从应用程序菜单或 zaproxy在终端中输入启动应用程序,并配置必要的设置,例如目标 URL 和代理设置(考虑使用FoxyProxy这样的插件来轻松更改代理)。
扫描目标Web应用程序:
点击“攻击”按钮或从“工具”菜单中选择“蜘蛛”选项,即可启动扫描。这将启动对 Web 应用程序的爬取并识别潜在漏洞的过程。
查看结果:
扫描完成后,OWASP ZAP 将在“警报”选项卡中显示已识别漏洞的列表。您可以单击每个警报以查看更多详细信息,例如漏洞类型、严重性(通过彩色标志轻松可视化)和简要说明。
从应用程序菜单或 zaproxy在终端中输入启动应用程序,并配置必要的设置,例如目标 URL 和代理设置(考虑使用FoxyProxy这样的插件来轻松更改代理)。
扫描目标Web应用程序:
点击“攻击”按钮或从“工具”菜单中选择“蜘蛛”选项,即可启动扫描。这将启动对 Web 应用程序的爬取并识别潜在漏洞的过程。
查看结果:
扫描完成后,OWASP ZAP 将在“警报”选项卡中显示已识别漏洞的列表。您可以单击每个警报以查看更多详细信息,例如漏洞类型、严重性(通过彩色标志轻松可视化)和简要说明。
手动测试漏洞
手动测试 Web 应用程序是否存在漏洞是确定是否存在漏洞的一种方法。最常见的手动测试涉及在输入或表单字段中使用 JavaScript 来查看命令是否会运行。还有许多其他类型的手动测试(OWASP 整理了 XSS 过滤器逃避备忘单),但这通常是涉及的第一步。
步骤 1:设置 DVWA
DVWA 也预装在 Kali Linux 中。如果你使用其他操作系统,请从其 GitHub 存储库下载,或sudo apt install dvwa在终端中使用。
通过运行托管应用程序的 Web 服务器启动 DVWA。
通过 Web 浏览器访问 DVWA,通常在http://localhost/dvwa。
使用提供的凭据登录或创建新帐户。
导航到“XSS”类别下的“反射型 XSS”部分。
第 2 步:识别漏洞
第一步是观察用户输入字段,因为这些是我们希望用于此类 XSS 攻击的元素。在开发者控制台中,检查易受攻击页面的源代码,以找到可能易受反射型 XSS 攻击的输入字段。
手动测试 Web 应用程序是否存在漏洞是确定是否存在漏洞的一种方法。最常见的手动测试涉及在输入或表单字段中使用 JavaScript 来查看命令是否会运行。还有许多其他类型的手动测试(OWASP 整理了 XSS 过滤器逃避备忘单),但这通常是涉及的第一步。
步骤 1:设置 DVWA
DVWA 也预装在 Kali Linux 中。如果你使用其他操作系统,请从其 GitHub 存储库下载,或sudo apt install dvwa在终端中使用。
通过运行托管应用程序的 Web 服务器启动 DVWA。
通过 Web 浏览器访问 DVWA,通常在http://localhost/dvwa。
使用提供的凭据登录或创建新帐户。
导航到“XSS”类别下的“反射型 XSS”部分。
第 2 步:识别漏洞
第一步是观察用户输入字段,因为这些是我们希望用于此类 XSS 攻击的元素。在开发者控制台中,检查易受攻击页面的源代码,以找到可能易受反射型 XSS 攻击的输入字段。
您已设置了一个简单的监听服务器来捕获 XSS 负载发送的数据。每当执行负载时,服务器日志都会显示接收到的数据,这正是我们现在要做的。您可以更改代码以捕获其他信息,例如 cookie、URL 等。
利用反射型XSS
现在,我们将演示一种利用反射型 XSS 漏洞捕获敏感用户输入(例如登录凭据)并将其发送到攻击者控制的服务器的高级技术。在本次演示中,我们将再次使用 DVWA。
步骤 1:导航到“反射型 XSS”部分
在您的网络浏览器中打开 DVWA,通常可以通过 访问http://localhost/dvwa。
使用提供的凭据登录或创建新帐户。
导航到“XSS”类别下的“反射型 XSS”部分。
步骤 2:制作有效载荷
现在,我们编写一个 JavaScript 有效负载,它在执行时会捕获用户在特定表单字段中输入的内容,并将其发送到您控制的服务器。
利用反射型XSS
现在,我们将演示一种利用反射型 XSS 漏洞捕获敏感用户输入(例如登录凭据)并将其发送到攻击者控制的服务器的高级技术。在本次演示中,我们将再次使用 DVWA。
步骤 1:导航到“反射型 XSS”部分
在您的网络浏览器中打开 DVWA,通常可以通过 访问http://localhost/dvwa。
使用提供的凭据登录或创建新帐户。
导航到“XSS”类别下的“反射型 XSS”部分。
步骤 2:制作有效载荷
现在,我们编写一个 JavaScript 有效负载,它在执行时会捕获用户在特定表单字段中输入的内容,并将其发送到您控制的服务器。
hook glbic的方法更多的只是用在用户态做阻拦,例如之前文章中通过LD_PRELOAD进行动态链接阻拦的方法如果通过sudo命令运行,或者使用syscall运行的时候就无法进行拦截
现在需要将我们的思维发散,在终端下实现whoami命令的时候,调用的其实是getuid()这个函数,所以我们要针对的是getuid
引入一个Liunx下一个非常特别的内核机制,eBPF。那么什么是eBPF。eBPF(Extended Berkeley Packet Filter) 是一种高效、灵活的 内核扩展 机制,允许开发者在 不修改内核代码 的情况下,在内核中 运行安全的自定义程序,用于 网络处理、安全监控、系统跟踪、性能优化 等,最关键的一个点是它不需要直接修改Linux相关的内核,保证了内核的安全,减少了系统崩溃的风险
现在需要将我们的思维发散,在终端下实现whoami命令的时候,调用的其实是getuid()这个函数,所以我们要针对的是getuid
引入一个Liunx下一个非常特别的内核机制,eBPF。那么什么是eBPF。eBPF(Extended Berkeley Packet Filter) 是一种高效、灵活的 内核扩展 机制,允许开发者在 不修改内核代码 的情况下,在内核中 运行安全的自定义程序,用于 网络处理、安全监控、系统跟踪、性能优化 等,最关键的一个点是它不需要直接修改Linux相关的内核,保证了内核的安全,减少了系统崩溃的风险
设计流程
1. 进程监控(eBPF kprobe / tracepoint)
○ 监听 execve() / execveat() 系统调用,获取用户执行的命令。
○ 提取 命令参数(argv),解析高危行为。
2. 黑名单匹配
○ 预设 高危命令列表(如 rm -rf /*、dd if=/dev/zero、nc -e /bin/sh)。
○ 支持模式匹配(正则表达式匹配危险行为)。
3. 安全策略
○ 允许(Pass):普通命令执行不受影响。
○ 拦截(Block):如果检测到高危命令,则阻断执行。
○ 记录(Log):将日志存入 eBPF Map,供用户态程序分析。
4. 用户态交互
○ 用户态程序通过 eBPF Map 获取检测数据,发送 告警通知。
○ 支持 Syslog / SIEM / Webhook 进行日志采集与分析。
1. 进程监控(eBPF kprobe / tracepoint)
○ 监听 execve() / execveat() 系统调用,获取用户执行的命令。
○ 提取 命令参数(argv),解析高危行为。
2. 黑名单匹配
○ 预设 高危命令列表(如 rm -rf /*、dd if=/dev/zero、nc -e /bin/sh)。
○ 支持模式匹配(正则表达式匹配危险行为)。
3. 安全策略
○ 允许(Pass):普通命令执行不受影响。
○ 拦截(Block):如果检测到高危命令,则阻断执行。
○ 记录(Log):将日志存入 eBPF Map,供用户态程序分析。
4. 用户态交互
○ 用户态程序通过 eBPF Map 获取检测数据,发送 告警通知。
○ 支持 Syslog / SIEM / Webhook 进行日志采集与分析。
某luo数据包加密逆向
抓包发现,大部分请求包和返回包都加密了,但是发现做了frida检测
第一种是使用修改过特征的frida-server
这里使用的是florida-server
找到用于检测的库,在它检测之前nop掉检测函数或者是直接删了这个so库
运行后发现在进入了libmsaoaidsec库后发生进程终止,说明这个库里存在检测机制
进入这个app文件夹里删了这个库
抓包发现,大部分请求包和返回包都加密了,但是发现做了frida检测
第一种是使用修改过特征的frida-server
这里使用的是florida-server
找到用于检测的库,在它检测之前nop掉检测函数或者是直接删了这个so库
运行后发现在进入了libmsaoaidsec库后发生进程终止,说明这个库里存在检测机制
进入这个app文件夹里删了这个库
jadx反编译源码搜索encrypt函数,
这里对genEAS函数的返回结果进行了base64编码,传入的参数src是encrypt接收的字符串,另一个也是字符串
查看一下genEAS函数
去掉空值检查和异常处理其实就是用AES算法对输入字符串数据基于给定密钥进行加密并返回加密后的字节数组
可以跟最基本的javax.crypto包提供的 AES 加密功能实现代码
可以看到genAES函数中填充方式为C8479a.f30298b,键入进去看一下,可以看到这个值为"AES/CBC/PKCS5Padding"
这里对genEAS函数的返回结果进行了base64编码,传入的参数src是encrypt接收的字符串,另一个也是字符串
查看一下genEAS函数
去掉空值检查和异常处理其实就是用AES算法对输入字符串数据基于给定密钥进行加密并返回加密后的字节数组
可以跟最基本的javax.crypto包提供的 AES 加密功能实现代码
可以看到genAES函数中填充方式为C8479a.f30298b,键入进去看一下,可以看到这个值为"AES/CBC/PKCS5Padding"
远程
还是先创建文件映射对象 然后映射到内存 写入shellcode
额外的一步是通过MapViewOfFile2 将本地文件视图映射到远程进程
MapViewOfFile2 与 MapViewOfFile 共享文件映射句柄 所以任何对本地映射视图中的有效载荷的任何修改都会反映在远程进程的远程映射视图中的文件中
注意进程句柄必须有PROCESS_VM_OPERATION 权限 所以这里创建完进程后通过OpenProcess指定PROCESS_VM_OPERATION再拿进程句柄 pi.hProcess不行
方便起见这里用CreateRemoteThread 如果这里用EarlyBird的话就是MapViewOfFile联动EarlyBird
还是先创建文件映射对象 然后映射到内存 写入shellcode
额外的一步是通过MapViewOfFile2 将本地文件视图映射到远程进程
MapViewOfFile2 与 MapViewOfFile 共享文件映射句柄 所以任何对本地映射视图中的有效载荷的任何修改都会反映在远程进程的远程映射视图中的文件中
注意进程句柄必须有PROCESS_VM_OPERATION 权限 所以这里创建完进程后通过OpenProcess指定PROCESS_VM_OPERATION再拿进程句柄 pi.hProcess不行
方便起见这里用CreateRemoteThread 如果这里用EarlyBird的话就是MapViewOfFile联动EarlyBird