一个id参数引发的数据库沦陷"

admin 2026-10-16 03:12:37 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

一个id参数引发的数据库沦陷

三垣网安

2026年10月8日 17:59
湖南

在小说阅读器读本章

去阅读

在公众号小说中沉浸阅读

面向白帽学习者的合规复盘:

记录思路要点及其PgSQL注入技巧

合规说明:本文仅面向合法授权的白帽网络安全学习与安全防护研究。未经授权,不要对任何真实系统进行漏洞验证或测试。

前言

SQL注入是Web安全最经典的漏洞类型,但很多白帽初学者对SQL注入的认知仅仅停留在MySQL这一种数据库。实际上,不同数据库系统的注入技巧存在显著差异——PostgreSQL、MSSQL、Oracle各个数据库的函数库和语法特性,闭合方式、注释符、内置函数都存在不同之处。

本文是某大学edu资产的SQL注入实战案例:从URL中的id参数发现注入点,到通过报错信息识别出PostgreSQL数据库并泄露表名列名,再到构造布尔条件进行盲注提取数据库名称。涵盖了闭合方式判断、数据库类型识别、布尔盲注Payload构造等技能,对白帽初学者理解PgSQL注入和盲注技术有一定学习参考价值。

一、漏洞资产与目标信息

案例演示的是某高校的生物科研数据系统。漏洞URL如下:

https://[目标域名].edu.cn/XXXX/feature\_page.php?id=61423

URL结构分析:

feature\_page.php —— PHP动态页面,通过id参数进行查询操作

id=61423 —— 数字型参数,可尝试拼接SQL查询语句

通过ICP备案查询确认资产归属为某大学。

资产证明如下:

二、漏洞复现过程

1.注入点发现与闭合方式判断

正常访问 id=61423 时,功能正常,说明id参数被服务端接收并用于数据库查询。

对id参数进行注入测试的第一步是判断闭合方式。依次尝试以下测试:

id=61423 (正常值)—— 页面正常显示

id=61423' (加单引号)—— 页面报错,返回数据库错误信息

id=61423'' (加两个单引号)—— 页面恢复正常显示

单引号触发报错、双单引号恢复正常,典型的字符串型单引号闭合。

后端SQL语句的结构大致为:

SELECT ... FROM \"XXXX\_info\" WHERE ta\_id = '[用户输入]'

报错信息中直接泄露了关键数据库结构信息。

2.数据库类型识别

报错内容是判断数据库类型的重要依据。本例中报错信息如下:

Query failed 42: 错误: 未终止的字符串常量在 \"0\" 或附近的

LINE 1: ...rom \"XXXX\_info\" taptair where \"XXXX\_info\".taptair.ta\_id = '0' ^ A

错误代码42,双引号包裹表名和列名(\"XXXX\_info\")—— PostgreSQL的特征,可以确认数据库为PostgreSQL。

这一步至关重要——PostgreSQL的注入函数和语法与MySQL有显著差异,后续Payload构造必须基于PostgreSQL的函数库。

3.布尔条件测试与盲注确认

确认闭合方式后,尝试构造布尔条件判断是否存在布尔盲注。分别构造永真条件和永假条件进行对比测试:

Payload 1: id=0 or '1   —— 永真条件('1' 被解析为TRUE)

Payload 2: id=0 or '0   —— 永假条件('0' 被解析为FALSE)

测试结果:

id=0 or '1 —— 页面无回显,请求被卡住。原因可能是永真条件导致全表扫描返回大量数据,触发超时

id=0 or '0 —— 页面正常回显,等价于 id=0 的查询结果

两种Payload产生不同的页面响应,说明构造的SQL语句被执行。

4.盲注Payload构造与数据库名提取

确认布尔盲注可行后,接下来的目标是提取当前数据库名称,从而佐证漏洞存在并且证明漏洞危害。

此处采用爆破的方式来获得数据库名。

爆破得到首字母为T,结合站点搜集到的信息,猜测数据库名为TXXX开头

后续检验布尔盲注成功,确认数据库名前四个字符为TXXX

三、技术拓展

1.PostgreSQL注入与MySQL注入的差异

PostgreSQL和MySQL是Web应用中最常见的两种开源数据库,但注入技巧存在显著差异。白帽初学者如果只熟悉MySQL注入,在遇到PgSQL时容易踩坑。

以下对比关键差异:

最关键的差异是报错注入:MySQL的extractvalue()和updatexml()可以在报错信息中回显查询结果,而PostgreSQL没有等价函数,报错信息不会直接回显注入的数据。

2.PostgreSQL特有利用技巧

PostgreSQL作为功能强大的企业级数据库,提供了一些MySQL没有的特殊功能,在渗透测试中可以利用这些特性进行深入测试:

COPY TO/FROM——PostgreSQL的COPY命令可以在数据库和文件系统之间传输数据。如果当前用户具有足够权限,可通过COPY TO将查询结果写入文件,或通过COPY FROM读取文件内容到表中,实现任意文件读写。

PostgreSQL文件读取(需超级用户权限)id=0' or 1=(SELECT pg\_read\_file('/etc/passwd'))--

写文件到Web目录id=0'; COPY (SELECT '') TO '/var/www/html/shell.php'--

pg\_read\_file()——PostgreSQL内置的服务器端文件读取函数,参数为文件路径。仅超级用户可调用。可用于读取配置文件、SSH密钥等敏感文件。

pg\_sleep()——时间盲注的核心函数,参数为秒数(支持小数)。当布尔盲注不可行时,可切换为时间盲注——通过页面响应时间判断条件真假。

四、总结

本Edu实战案例完整复现了一次针对PostgreSQL的SQL注入测试过程:从URL参数发现注入点,到通过报错信息识别数据库类型和表结构,再到构造布尔条件进行盲注提取数据库名称。

对白帽初学者而言,需要记住的是:不同数据库的注入技巧存在显著差异,要想真正学会SQL注入,必须了解PostgreSQL函数库和语法的特征,保证遇到时能够辨别。

—关注三垣网安,学习更多网安小技巧—

三垣网安公众号会持续分享Web安全领域的漏洞复现与技术分析文章,覆盖SQL注入、XSS、SSRF、文件上传、信息收集等渗透测试常见方向的网络安全实战方法。

有疑问或不同见解欢迎各位白帽在评论区交流讨论,共同进步。

如果这篇文章对你有帮助,欢迎点赞、收藏、关注!

SQL注入 #PostgreSQL #布尔盲注 #渗透测试 #漏洞复现 #Web安全 #网络安全


一个id参数引发的数据库沦陷" 网络安全文章

一个id参数引发的数据库沦陷"

本文为某大学edu资产的PostgreSQLSQL注入实战复盘,从URL的id参数发现注入点,通过报错信息识别数据库类型,构造布尔条件盲注提取数据库名称,并对比了PostgreSQL与MySQL注入差异,介绍了PgSQL特有利用技巧。文章末尾有公众号推广内容,属于软文性质。
中国工程院院士邬江兴:从“概率性”中构建“确定性”,以内生安全范式破解大模型安全困局" 网络安全文章

中国工程院院士邬江兴:从“概率性”中构建“确定性”,以内生安全范式破解大模型安全困局"

中国工程院院士邬江兴提出以内生安全范式破解大模型安全困局,强调从概率性构建确定性。核心思路包括构造决定安全、利用必要多样性与群体共识机制,通过多元异构执行体交叉验证降低单一模型不确定性,实现从绝对正确到相对可靠、从语义判定到语法比对、从理论公理到构造法则的三大跃迁。相关实践在内容安全与自动驾驶场景中威胁发现率达99.4%以上,并构建五层内生安全边界,推动安全从外部防护转向系统内生,让AI既跑得快又跑得稳。
2026年上半年网络安全事件综述" 网络安全文章

2026年上半年网络安全事件综述"

2026年上半年我国网络安全形势高位运行,AI成为最突出新变量,攻击手法加速AI化,黑产链条工业化。木马与黑产持续规模化,基础设施遭弱口令批量攻陷,勒索攻击与漏洞压力上升,执法与治理同步加码。总体呈现两头挤压特征,防守重心应回摆到资产梳理、口令治理、补丁备份等基本功,并对智能体等新入口建立准入白名单与最小权限机制。
评论:0   参与:  0