此实验室在产品类别筛选器中包含 SQL 注入漏洞。当用户选择类别时,应用程序将执行如下所示的 SQL 查询:
SELECT * FROM products WHERE category = 'Gifts' AND released = 1
若要解决实验室问题,请执行 SQL 注入攻击,使应用程序显示任何类别(已发布和未发布)中所有产品的详细信息。
一个没有安全概念的网站,会直接将用户的输入拼接到SQL语句中进行查询。
例如当用户单击“礼品”类别时,其浏览器会请求 URL:
https://insecure-website.com/products?category=Gifts
这会导致应用程序进行 SQL 查询,以从数据库中检索相关产品的详细信息:
SELECT * FROM products WHERE category = ‘Gifts’
因此在黑盒测试中可以利用注释的方法尝试SQL注入
https://portswigger.net/web-security/sql-injection/lab-retrieve-hidden-data
● 启动靶场
https://0a6c00d604cb757cc0978126005c00ca.web-security-academy.net/
a. 查看网站发现类似于SHOP的网站
b. 点击进入对应的View details
可以查看商品的信息
c. url拼接了/product?productId=6
a. 从总体的功能点来分析 : 加载首页→加载了很多图片→访问商品明细→展示信息
b. 因此,不难分析/product?productId=6
就是我们的突破口
a. 发送一次数据包
b. 猜测存在注入点,尝试直接注入,将6直接修改成5+1,查看回显情况是否有变化
"Invalid product ID"
说明SQL语句并不是直接结束的,例如
SELECT * FROM products WHERE category = 'Gifts'
很有可能是后面还拼加了内容,例如:
SELECT * FROM products WHERE category = 'Gifts' AND released = 1
这时候我输入5+1
会变成
SELECT * FROM products WHERE category = '5+1' AND released = 1
c. 尝试拼接注入 1' or 1=1 -- qwe
回显"Protocol error" 错误的请求,说明注入的方式不对
d. 接着测试了其他位置,发现尝试失败
a. 点击了标签,发现参数变成了
filter?category=Clothing%2c+shoes+and+accessories
并不一定只有数字的地方才是注入点
b. 尝试修改filter?category=
发现内容回显在了HTML中
c. 用户可控的传参+存在回显=大概率存在注入
根据提示的代码SELECT * FROM products WHERE category = 'Gifts' AND released = 1
以及我们回显的代码/filter?category=Clothing, shoes and accessories
得到SQL语句
SELECT * FROM products WHERE category = 'Clothing, shoes and accessories' AND released = 1
d. 实验要求是显示隐藏的内容,因此我们让搜索的内容为全部
通过注释的方法,让 SQL 返回的结果为真,研究语法是单引号闭合构造Poyload如下:
/filter?category=adfad' or 1=1 -- qwe
SELECT * FROM products WHERE category = 'adfad' or 1=1 -- qwe' AND released = 1
从SQL语句结果的高亮可以发现 – 以及后面的内容都被注释掉了
服务器就会认为搜索结果为adfad,但是数据库里没有adfad结果为假,但是用或者连接,后面一句 1=1 必定为真,因此会显示所有category内的内容
5. 拼接/filter?category=adfad' or 1=1 -- qwe
成功显示了所有内容(包括隐藏的内容),完成了实验