全新攻击——混乱攻击
基于这些观察,我们开始关注这些模块之间的“关系”和“交互”。如果一个模块意外修改了它认为不重要但对另一个模块至关重要的结构字段,则它可能会影响后者的决策。此外,如果字段的定义或语义不够精确,导致模块对相同字段的理解产生歧义,也可能导致潜在的安全风险!
从这个出发点,我们开发了三种不同类型的攻击,因为这些攻击或多或少与结构字段的滥用有关。因此,我们将这个攻击面命名为“混淆攻击”,以下是我们开发的攻击:
文件名混淆
DocumentRoot 混淆
处理程序混乱
通过这些攻击,我们发现了 9 个不同的漏洞:
CVE-2024-38472 - Windows UNC SSRF 上的 Apache HTTP 服务器
CVE-2024-39573 - Apache HTTP Server 代理编码问题
CVE-2024-38477 - Apache HTTP 服务器:崩溃导致 mod_proxy 通过恶意请求拒绝服务
CVE-2024-38476 - Apache HTTP Server 可能使用可利用/恶意的后端应用程序输出通过内部重定向运行本地处理程序
CVE-2024-38475 - 当替换的第一个段与文件系统路径匹配时,Apache HTTP Server mod_rewrite 中存在弱点
CVE-2024-38474 - Apache HTTP Server 漏洞,反向引用中存在编码问号
CVE-2024-38473 - Apache HTTP Server 代理编码问题
CVE-2023-38709 - Apache HTTP 服务器:HTTP 响应拆分
CVE-2024-?????? - [已删除]
这些漏洞是通过官方安全邮件列表报告的,并由 Apache HTTP Server 在2024-07-01 发布的2.4.60 更新中解决。
基于这些观察,我们开始关注这些模块之间的“关系”和“交互”。如果一个模块意外修改了它认为不重要但对另一个模块至关重要的结构字段,则它可能会影响后者的决策。此外,如果字段的定义或语义不够精确,导致模块对相同字段的理解产生歧义,也可能导致潜在的安全风险!
从这个出发点,我们开发了三种不同类型的攻击,因为这些攻击或多或少与结构字段的滥用有关。因此,我们将这个攻击面命名为“混淆攻击”,以下是我们开发的攻击:
文件名混淆
DocumentRoot 混淆
处理程序混乱
通过这些攻击,我们发现了 9 个不同的漏洞:
CVE-2024-38472 - Windows UNC SSRF 上的 Apache HTTP 服务器
CVE-2024-39573 - Apache HTTP Server 代理编码问题
CVE-2024-38477 - Apache HTTP 服务器:崩溃导致 mod_proxy 通过恶意请求拒绝服务
CVE-2024-38476 - Apache HTTP Server 可能使用可利用/恶意的后端应用程序输出通过内部重定向运行本地处理程序
CVE-2024-38475 - 当替换的第一个段与文件系统路径匹配时,Apache HTTP Server mod_rewrite 中存在弱点
CVE-2024-38474 - Apache HTTP Server 漏洞,反向引用中存在编码问号
CVE-2024-38473 - Apache HTTP Server 代理编码问题
CVE-2023-38709 - Apache HTTP 服务器:HTTP 响应拆分
CVE-2024-?????? - [已删除]
这些漏洞是通过官方安全邮件列表报告的,并由 Apache HTTP Server 在2024-07-01 发布的2.4.60 更新中解决。
混淆攻击:利用 Apache HTTP 服务器中隐藏的语义模糊性!
整个 Httpd 服务依靠数百个小模块协同工作来处理客户端的 HTTP 请求。在官方文档列出的 136 个模块中,大约有一半是默认启用的或网站经常使用的!
更令人惊讶的是,这些模块request_rec在处理客户端 HTTP 请求时还维护着一个庞大的结构。该结构包括处理 HTTP 所涉及的所有元素,其详细定义可在include/httpd.h中找到。所有模块都依赖这个庞大的结构进行同步、通信和数据交换。当 HTTP 请求经过几个阶段时,模块就像接球游戏中的玩家一样,将结构从一个传递给另一个。每个模块甚至可以根据自己的偏好修改此结构中的任何值!
整个 Httpd 服务依靠数百个小模块协同工作来处理客户端的 HTTP 请求。在官方文档列出的 136 个模块中,大约有一半是默认启用的或网站经常使用的!
更令人惊讶的是,这些模块request_rec在处理客户端 HTTP 请求时还维护着一个庞大的结构。该结构包括处理 HTTP 所涉及的所有元素,其详细定义可在include/httpd.h中找到。所有模块都依赖这个庞大的结构进行同步、通信和数据交换。当 HTTP 请求经过几个阶段时,模块就像接球游戏中的玩家一样,将结构从一个传递给另一个。每个模块甚至可以根据自己的偏好修改此结构中的任何值!
This media is not supported in your browser
VIEW IN TELEGRAM
不过,这种利用方式仍然存在一个问题:获取到一个uid的shell并不等于直接进程内代码执行,我们如果想进一步进行hook、代码注入的话,这种利用方式会需要一个额外的代码覆盖执行跳板,但并非每个应用程序都有此功能,且Android14进一步引入了DCL限制。
Template.php catid变量 SQL注入漏洞(CVE-2017-11583)
漏洞分析:
/finecms/dayrui/controllers/api.php 114 data2函数
首先我们要绕过安全码认证
$auth = $this->input->get('auth', true);
if ($auth != md5(SYS_KEY)) {
// 授权认证码不正确
$data = array('msg' => '授权认证码不正确', 'code' => 0);
} else {
这个安全码直接定义在config中,可以在后台被修改,会在cookie中被泄露
当我们第一次访问站点的时候,我们会获得cookie,这个前缀就是安全码
漏洞分析:
/finecms/dayrui/controllers/api.php 114 data2函数
首先我们要绕过安全码认证
$auth = $this->input->get('auth', true);
if ($auth != md5(SYS_KEY)) {
// 授权认证码不正确
$data = array('msg' => '授权认证码不正确', 'code' => 0);
} else {
这个安全码直接定义在config中,可以在后台被修改,会在cookie中被泄露
当我们第一次访问站点的时候,我们会获得cookie,这个前缀就是安全码
通用漏洞挖掘——网关系统
未授权访问查看管理员账号密码
目标是个网关系统,使用弱口令进入系统后,开始测试功能点,在系统用户处测试抓包:
通用漏洞挖掘——网关系统-RadeBit瑞安全
删除cookie后发现仍然可以访问管理员相关信息包括密码、手机号码等:
通用漏洞挖掘——网关系统-RadeBit瑞安全
浏览器直接访问,然后查看密码即可:
通用漏洞挖掘——网关系统-RadeBit瑞安全
任意文件下载
后台存在日志查询功能点, 查看服务器日志时有下载功能:
通用漏洞挖掘——网关系统-RadeBit瑞安全
点击下载并抓包:
通用漏洞挖掘——网关系统-RadeBit瑞安全
将参数fileName的值删除重放后报错泄漏了物理路径,其中fopen(../../../log/)猜测是downFile.php文件中的源代码:
通用漏洞挖掘——网关系统-RadeBit瑞安全
在参数fileName后拼接:../../../VAG/pag/web/html/serverLog/downFile.php,查看downFile.php源码。定义了$file_dir的值为../../../log/,这里用户传入的值$file_name没有进行任何过滤,就直接拼接在变量$file_dir后面然后使用fopen函数打开拼接后的文件。
这里使用../可以直接下载任意文件:
通用漏洞挖掘——网关系统-RadeBit瑞安全
任意文件读取
在测试服务器日志时,服务器返回的代码中含有参数showFile.php?fileName=:
通用漏洞挖掘——网关系统-RadeBit瑞安全
这里构造数据包/serverLog/showFile.php?fileName= 可以直接查看目标源文件:
通用漏洞挖掘——网关系统-RadeBit瑞安全
在测试过程中发现存在未授权访问,在浏览器中可以直接读取文件源代码:
通用漏洞挖掘——网关系统-RadeBit瑞安全
未授权创建存储型XSS
发现在资源管理功能点存在未授权,可以创建存储型XSS,插入XSS平台地址:
通用漏洞挖掘——网关系统-RadeBit瑞安全
当管理员访问资源管理功能点时:
通用漏洞挖掘——网关系统-RadeBit瑞安全
XSS平台成功获取到系统管理员cookie:
通用漏洞挖掘——网关系统-RadeBit瑞安全
任意用户密码修改
在后台管理测试修改密码功能点,这里原始密码随意输入,点击保存并抓包。
通用漏洞挖掘——网关系统-RadeBit瑞安全
发现在/data/checkIsExist.php数据包中会对当前账户的原始密码进行校验,原始密码错误返回1,密码正确返回0。
通用漏洞挖掘——网关系统-RadeBit瑞安全
这里将服务器返回的数据包修改为0,进入下一个数据包,这里是对密码进行修改。
通用漏洞挖掘——网关系统-RadeBit瑞安全
释放数据包后显示密码修改成功:
通用漏洞挖掘——网关系统-RadeBit瑞安全
使用修改之后的密码去尝试登录,可以成功登录到管理后台。
此时想到这个系统存在很多未授权操作,如果修改密码功能点也存在未授权,那么就可以直接重置系统任意用户的密码。
这里浏览器直接访问修改密码的URL,发现用户名为空:
通用漏洞挖掘——网关系统-RadeBit瑞安全
这里按照之前的流程先走一遍,点击保存并抓包,发现name参数的值为空,这里修改为admin:
通用漏洞挖掘——网关系统-RadeBit瑞安全
在修改服务器返回的数据包为0之后,再将参数name的值修改为admin:
通用漏洞挖掘——网关系统-RadeBit瑞安全
释放数据包后,显示修改成功:
未授权访问查看管理员账号密码
目标是个网关系统,使用弱口令进入系统后,开始测试功能点,在系统用户处测试抓包:
通用漏洞挖掘——网关系统-RadeBit瑞安全
删除cookie后发现仍然可以访问管理员相关信息包括密码、手机号码等:
通用漏洞挖掘——网关系统-RadeBit瑞安全
浏览器直接访问,然后查看密码即可:
通用漏洞挖掘——网关系统-RadeBit瑞安全
任意文件下载
后台存在日志查询功能点, 查看服务器日志时有下载功能:
通用漏洞挖掘——网关系统-RadeBit瑞安全
点击下载并抓包:
通用漏洞挖掘——网关系统-RadeBit瑞安全
将参数fileName的值删除重放后报错泄漏了物理路径,其中fopen(../../../log/)猜测是downFile.php文件中的源代码:
通用漏洞挖掘——网关系统-RadeBit瑞安全
在参数fileName后拼接:../../../VAG/pag/web/html/serverLog/downFile.php,查看downFile.php源码。定义了$file_dir的值为../../../log/,这里用户传入的值$file_name没有进行任何过滤,就直接拼接在变量$file_dir后面然后使用fopen函数打开拼接后的文件。
这里使用../可以直接下载任意文件:
通用漏洞挖掘——网关系统-RadeBit瑞安全
任意文件读取
在测试服务器日志时,服务器返回的代码中含有参数showFile.php?fileName=:
通用漏洞挖掘——网关系统-RadeBit瑞安全
这里构造数据包/serverLog/showFile.php?fileName= 可以直接查看目标源文件:
通用漏洞挖掘——网关系统-RadeBit瑞安全
在测试过程中发现存在未授权访问,在浏览器中可以直接读取文件源代码:
通用漏洞挖掘——网关系统-RadeBit瑞安全
未授权创建存储型XSS
发现在资源管理功能点存在未授权,可以创建存储型XSS,插入XSS平台地址:
通用漏洞挖掘——网关系统-RadeBit瑞安全
当管理员访问资源管理功能点时:
通用漏洞挖掘——网关系统-RadeBit瑞安全
XSS平台成功获取到系统管理员cookie:
通用漏洞挖掘——网关系统-RadeBit瑞安全
任意用户密码修改
在后台管理测试修改密码功能点,这里原始密码随意输入,点击保存并抓包。
通用漏洞挖掘——网关系统-RadeBit瑞安全
发现在/data/checkIsExist.php数据包中会对当前账户的原始密码进行校验,原始密码错误返回1,密码正确返回0。
通用漏洞挖掘——网关系统-RadeBit瑞安全
这里将服务器返回的数据包修改为0,进入下一个数据包,这里是对密码进行修改。
通用漏洞挖掘——网关系统-RadeBit瑞安全
释放数据包后显示密码修改成功:
通用漏洞挖掘——网关系统-RadeBit瑞安全
使用修改之后的密码去尝试登录,可以成功登录到管理后台。
此时想到这个系统存在很多未授权操作,如果修改密码功能点也存在未授权,那么就可以直接重置系统任意用户的密码。
这里浏览器直接访问修改密码的URL,发现用户名为空:
通用漏洞挖掘——网关系统-RadeBit瑞安全
这里按照之前的流程先走一遍,点击保存并抓包,发现name参数的值为空,这里修改为admin:
通用漏洞挖掘——网关系统-RadeBit瑞安全
在修改服务器返回的数据包为0之后,再将参数name的值修改为admin:
通用漏洞挖掘——网关系统-RadeBit瑞安全
释放数据包后,显示修改成功:
SQLite手工注入Getshell技巧
SQLite是一种嵌入式数据库,它的数据库就是一个文件。由于SQLite本身是C写的,而且体积很小,所以经常被集成到各种应用程序中,主要在手机的App中使用。
之前没有遇到过关于SQLite的注入,这次遇到一个在ASPX中使用SQLite数据库,并且存在注入。这篇文章将主要介绍一下从注入到获取WEBSHELL的过程和遇到的一些坑。
首先介绍一下SQLite的使用方法,然后在本地搭建环境以及利用注入获取WEBSHELL,最后将讲述在实际应用中遇到的问题以及如何解决(e.g.手工注入写shell)。
0x02 SQLite的使用
SQLite 的一个重要的特性是零配置的,这意味着不需要复杂的安装或管理。在 Windows 上使用SQLite时访问 SQLite下载页面,从 Windows 区下载预编译的二进制文件。现在最新的为sqlite-tools-win32-x86-3190300.zip,下载下来后解压。我这里将其中的文件复制到D:\sqlite目录。
SQLite的语法和其他数据库差不多,只不过SQLite的数据库是一个单独的文件。SQLite创建数据库的方法有两种,一种是创建,另外一种是附加。
创建使用命令:sqlite3.exe 数据库文件名。例如创建一个名字为aa.db的数据库,使用命令:sqlite3.exe aa.db。
SQLite是一种嵌入式数据库,它的数据库就是一个文件。由于SQLite本身是C写的,而且体积很小,所以经常被集成到各种应用程序中,主要在手机的App中使用。
之前没有遇到过关于SQLite的注入,这次遇到一个在ASPX中使用SQLite数据库,并且存在注入。这篇文章将主要介绍一下从注入到获取WEBSHELL的过程和遇到的一些坑。
首先介绍一下SQLite的使用方法,然后在本地搭建环境以及利用注入获取WEBSHELL,最后将讲述在实际应用中遇到的问题以及如何解决(e.g.手工注入写shell)。
0x02 SQLite的使用
SQLite 的一个重要的特性是零配置的,这意味着不需要复杂的安装或管理。在 Windows 上使用SQLite时访问 SQLite下载页面,从 Windows 区下载预编译的二进制文件。现在最新的为sqlite-tools-win32-x86-3190300.zip,下载下来后解压。我这里将其中的文件复制到D:\sqlite目录。
SQLite的语法和其他数据库差不多,只不过SQLite的数据库是一个单独的文件。SQLite创建数据库的方法有两种,一种是创建,另外一种是附加。
创建使用命令:sqlite3.exe 数据库文件名。例如创建一个名字为aa.db的数据库,使用命令:sqlite3.exe aa.db。