51mee - AI智能招聘平台Logo
模拟面试题目大全招聘中心会员专区

在Web应用中,如何利用SQL注入漏洞获取数据库中的敏感信息(如用户密码、管理员权限)?请详细说明注入点的定位、注入语句构造以及利用过程。

360助理安全研究员(漏洞挖掘与利用)难度:中等

答案

1) 【一句话结论】

SQL注入漏洞通过构造恶意用户输入,绕过Web应用对SQL语句的过滤,执行非预期的SQL命令,从而获取数据库中的敏感信息(如用户密码、管理员权限)。

2) 【原理/概念讲解】

老师口吻:SQL注入的核心是“欺骗”Web应用,让它执行我们构造的SQL语句。首先,注入点定位:向用户输入字段(如登录的用户名、密码框)注入特殊字符(如单引号),观察页面响应(如错误提示、数据泄露或页面跳转),判断是否存在注入。比如输入' or 1=1 --后页面显示“登录成功”,说明存在注入。接着,注入语句构造:根据数据库类型(如MySQL用' or 1=1 --验证,SQL Server用分号分隔语句,Oracle用多字节字符),结合UNION、ORDER BY等技巧。类比:就像给数据库系统“输入错误指令”,让它执行我们想让它做的事情,而不是系统原本想让它做的事情。

3) 【对比与适用场景】

概念SQL注入(通用)基于时间的注入(绕WAF)
定义恶意构造输入导致SQL执行非预期利用数据库响应时间差异
特性需要解析输入,绕过过滤不需要返回数据,只看响应时间
使用场景获取数据、权限提升避免WAF检测
注意点数据库类型差异需要精确控制时间

4) 【示例】

假设登录接口URL为/login?username=xxx&password=xxx(GET),测试步骤:

  • 注入点定位:输入username=' or 1=1 --,password为空或任意值,观察页面是否显示“登录成功”,若显示则存在注入。
  • 工具使用(Burp Suite Intruder):将参数username设为Payload,Payload为' or 1=1 --,执行扫描,若响应状态码或内容变化则确认注入。
  • 获取表名(MySQL):构造语句username=' or (select table_name from information_schema.tables where table_schema=database() limit 0,1) --,结果为users。
  • 获取列名:构造语句username=' or (select column_name from information_schema.columns where table_name='users' limit 0,1) --,结果为username,password。
  • 获取数据:构造语句username=' or (select username,password from users limit 0,1) --,结果为admin,123456。
  • SQL Server示例:构造语句username=' or 1=1; select top 1 username,password from users --(分号分隔语句)。
  • Oracle多字节字符示例:构造username=' or 1=2 and (select count(*) from users)=1 --(用多字节字符绕过过滤,如' or 1=2 and (select count(*) from users)=1 --,实际构造时用chr(97)代替a等字符)。
  • 时间盲注(绕WAF):构造username=' or (select 1 from users where username='admin')=1 and sleep(5)--,若存在admin用户,数据库等待5秒,页面响应延迟,通过时间差判断。

5) 【面试口播版答案】

面试官您好,针对SQL注入漏洞获取数据库敏感信息,核心思路是通过构造恶意用户输入绕过Web应用对SQL语句的过滤,执行非预期的SQL命令。首先,注入点定位:向用户输入字段(如登录的用户名、密码框)注入单引号,观察页面响应,若出现“登录成功”则说明存在注入。比如输入' or 1=1 --后页面显示登录成功,证明存在注入。然后,注入语句构造:根据数据库类型调整,比如MySQL用UNION查询,SQL Server用分号分隔语句,Oracle用多字节字符。比如先通过UNION SELECT table_name FROM information_schema.tables WHERE table_schema=database() LIMIT 0,1获取表名,再逐列获取数据。利用过程就是通过这些构造的SQL语句,逐步获取数据库中的用户密码或管理员权限。比如时间盲注绕过WAF时,构造username=' or (select 1 from users where username='admin')=1 and sleep(5)--,若存在admin用户,数据库会等待5秒,页面响应时间明显变长,从而判断存在该用户。

6) 【追问清单】

  • 问:如何判断注入点是否可利用?
    答:通过注入特殊字符观察页面响应,若出现错误或数据泄露则可利用。
  • 问:如何绕过Web应用防火墙(WAF)?
    答:使用基于时间的注入(如时间盲注,通过调整sleep时间验证)、编码注入(对特殊字符进行URL编码或字符编码)、利用数据库特性(如MySQL的load_file)。
  • 问:如何获取管理员权限?
    答:查询管理员表(如admin表),或利用权限提升的SQL语句(如修改用户权限的语句,如UPDATE users SET role='admin' WHERE username='admin')。
  • 问:不同数据库的注入技巧有何差异?
    答:MySQL常用单引号和UNION,SQL Server用分号分隔语句,Oracle用多字节字符(如chr(97)代替a)。
  • 问:数据库版本差异对注入的影响?
    答:不同版本对SQL语句处理不同,比如某些版本不支持information_schema,需调整语句,如MySQL 5.0以下用mysql系统表(select table_name from mysql.tables where table_schema=database())。

7) 【常见坑/雷区】

  • 忽略输入类型:GET参数易被缓存或过滤,需测试POST参数;POST参数更隐蔽,但构造Payload更复杂。
  • 工具使用不当:未使用Burp Suite Intruder进行参数扫描,导致遗漏注入点;未调整Payload格式(如URL编码)。
  • WAF绕过不足:直接构造简单注入语句被WAF拦截,未考虑时间参数调整(如sleep(5)的验证)或编码注入。
  • 数据验证缺失:获取密码后未通过明文或加密方式确认正确性,导致利用失败。
  • 数据库类型差异:使用错误的注入字符(如MySQL用单引号,SQL Server用单引号但需分号),导致语句执行失败。
51mee.com致力于为招聘者提供最新、最全的招聘信息。AI智能解析岗位要求,聚合全网优质机会。
产品招聘中心面经会员专区简历解析Resume API
联系我们南京浅度求索科技有限公司admin@51mee.com
联系客服
51mee客服微信二维码 - 扫码添加客服获取帮助
© 2025 南京浅度求索科技有限公司. All rights reserved.
公安备案图标苏公网安备32010602012192号苏ICP备2025178433号-1