SQL注入方法

文章目录

  • 前言
  • 如何测试与利用注入点
    • 手工
    • 注入思路
    • 工具
      • sqlmap
      • -r
      • -u
      • -m
      • --level
      • --risk
      • -v
      • -p
      • --threads
      • -batch-smart
      • --os-shell
      • --mobile
      • tamper插件
      • 获取数据的相关参数

前言

记录一些注入思路和经常使用的工具,后续有用到新的工具和总结新的方法再继续补充。

如何测试与利用注入点

手工

下面的现象是在说存在注入点后的现象,如果服务端有防护手段就需要另外的手段绕过。

老方法:

  • 单引号

    现象:出现数据库报错。

  • or 1=1–

    现象:正常访问页面或者跟多数据一起展现出来了。

  • and 1=1–

    现象:正常访问页面。

  • and 1=2–

    现象:不会显示任何内容或者会看到报错信息,这取决于服务端代码是如何写的。

  • order by n

    现象:判断该表的字段数量,直到没有报错即order by后面那个n就是字段数

  • union

    前提:知道表的字段数量,所以可以先使用上面的order by进行测试字段数

    payload:union select user(),database()–

    现象:若存在注入点,这里的union使用的地方通常是可以展示多个数据的地方,因为联合出来的数据会很多条,若存在注入点union注入的能力会十分强大。

    MySQL5.0以上有information_schema数据库信息

    • 获取所有数据库名:

      union select 1,group_concat(schema_name) from information_schema.schemata

    • 获取当前数据库所有表名:

      'union select 1,group_concat(table_name) from information_schema.tables where table_schema=database()

    • 获取某些表的所有列名:

      'union select 1,group_concat(column_name) from information_schema.columns where table_name=0x7573657273

      其中table_name=0x7573657273为十六进制,这个不转成十六进制也可以table_name=“users”

    • 获取某表的所有字段数据:

      ' union select 1,group_concat(user_id,0x7c,first_name,0x7c,last_name,0x7c,user,0x7c,password,0x7c,avatar,0x7c) from users

      0x7c表示 | 符号,其实就是用过|将所有字段数据拼接到一起进行显示

注入思路

  • 第一步:找注入点,寻报错

    单引号、双引号、单引号+括号、双引号+括号、单引号+双括号、双引号+双括号、数字型(不用闭合)、json等等类型注入(post数据)、http header注入…

  • 第二步:

    • 若第一步发现有回显报错信息出现,则可以进行sql注入语句的编写。

      • order by 、union select 等方法猜测后端代码中这条sql语句查询的属性列数是多少

        • 如果被拦下了:对数据进行编码、大小写混用、双写、字符串拼接等等
      • union select 1,2,3…,直到查询列数后,通过查询一个不存在的数据然后与union select联合查询配合回显显示位

        • 若有回显信息

          修改显示位为我们要获取的信息,比如:database()、version()等等,或者mysql5.0以上使用imformation_schema来快速拖库。

        • 若无回显信息

          尝试bool盲注、base on time时间型注入等等。这里也可以尝试报错注入。

    • 若第一步无回显信息出现。

      • 尝试报错注入。
      • dnslog注入拖库
      • bool盲注、base on time 时间型注入等等
      • http header 数据包中寻找注入点。
  • 第三步:

    • 编写能够通过前后端检查的sql注入语句
    • 使用工具拖库
    • 可尝试使用数据库自带的可执行系统命令进一步渗透。

工具

以下是一些工具注入手段。

  • Pongolin(穿山甲)

    在vstart50里面有

  • Havij(萝卜头)

    在vstart50里面有

    来自国外的,比较经典且实用,就是注册的时候有点麻烦,可以通过报错的信息发现缺少什么组件去网上直接找解决方法即可。

    可以执行后端数据库指纹识别,检索DBMS用户和密码哈希,转储表和列,从数据库获取

    数据,执行SQL语句甚至访问底层文件系统并发出操作系统级命令

sqlmap

下载地址:https://github.com/sqlmapproject/sqlmap

介绍:是一个开源的渗透工具。使用python2.7开发的,所以我们使用的时候需要用python2。或者直接去kali系统使用,kali自带了sqlmap工具。而且他的参数都是直接添加即可,没有顺序可言,就很方便。

执行命令后可能会提示,下面使用简单的-u对一个网址进行测试作为示例入门:

  • 1:sqlmap测试出来时哪个数据库的时候会提示你是否还继续测试其他数据库的payload注入语句,这里一般输入n,你不放心就可以y
    在这里插入图片描述
  • 2:没有设置level和risk的话就会询问你是否默认都为等级1
    在这里插入图片描述
  • 3:找到注入的参数后就会询问你是否还要继续找其他注入参数,这里就看自己需求
    在这里插入图片描述
  • 出结果:
    在这里插入图片描述

开始介绍参数使用与示例

-r

  • 介绍:万能参数,主要针对post注入,但是任何其他请求方法都是可以的,这个参数用的最多。该参数是将数据包文件中的数据发送出去测试sql注入点,所以测试网站中某个url是否有sql注入点就可以抓包,然后保存下来,使用-r参数进行对该url测试。

执行命令:python2 sqlmap.py -r 数据包文件
在这里插入图片描述
在这里插入图片描述

-u

  • 介绍:只针对get请求,并且参数url最好用双引号括起来。避免有些符号无法转义当成参数写进去了。

执行命令:python2 sqlmap.py -u "http://192.168.121.151/pikachu/vul/sqli/sqli_search.php?name=vince&submit=%E6%90%9C%E7%B4%A2"
在这里插入图片描述

-m

  • 介绍:上面的-u只能对一个url进行测试,那么肯定能够对多个url进行测试的参数,那就是-m了,需要注意的是-m的参数是指定文件,我们多个url是写在文件中,然后-m指定该文件

执行命令:sqlmap-master>python2 sqlmap.py --level 3 --risk 3 -m ./m.txt

注意:若你使用的url都是同一个ip地址下的网址的话,在测试过程中,会出现问你是否跳过同一个ip下的另一个url网址测试,这时候需要你选择否来继续测试你文件中的下一个url网址,如果不是同ip仅仅只是询问你确认该网址。如下图就是同一个ip下的两个网址进行测试,轮到下一个的时候会询问你是否跳过,我们要测试的肯定一般都不会跳过,所以选择否。
在这里插入图片描述

–level

  • 介绍:执行测试的等级(1-5,默认为1),使用–level 参数且数值**>=2的时候也会检查cookie里面的参数**,当>=3的时候将检查User-agent和Referer。

执行命令:按照上面的执行语句加一句 [–level 等级] 即可,如下

python2 sqlmap.py --level 3 -u "http://192.168.121.151/pikachu/vul/sqli/sqli_blind_b.php?name=vince&submit=%E6%9F%A5%E8%AF%A2"

注意:比如你写了level 3,那么在询问你的时候就会是 level 3,但是risk还是默认1,如下图
在这里插入图片描述

–risk

  • 介绍:执行测试的风险(0-3,默认为1),默认是1会测试大部分的测试语句,2会增加基于事件的测试语句,3会增加OR语句的SQL注入测试。

执行命令:python2 sqlmap.py --level 3 --risk 3 -u "http://192.168.121.151/pikachu/vul/sqli/sqli_blind_b.php?name=vince&submit=%E6%9F%A5%E8%AF%A2"

同理注意:比如你写了risk3,那么在询问你的时候就会是 risk3,但是level还是默认1,很容易发现,如多level 和 risk都定义了参数等级那就不会按照默认的等级来。


通常情况下使用level 3 risk 3就可以。


-v

显示详细信息的意思,ERBOSE信息级别: 0-6 (缺省默认1),其值具体含义:

  • “0”只显示python错误以及严重的信息;
  • "1"同时显示基本信息和警告信息(默认);
  • “2”同时显示debug信息;
  • “3”同时显示注入的payload;
  • “4”同时显示HTTP请求;
  • “5”同时显示HTTP响应头;
  • “6”同时显示HTTP响应页面;

如果想看到sqlmap发送的测试payload最好的等级就是3。设置为5的话,可以看到http相应信息,比较详细。

执行命令:python2 sqlmap.py --level 3 --risk 3 -u "http://192.168.121.151/pikachu/vul/sqli/sqli_blind_t.php?name=vince&submit=%E6%9F%A5%E8%AF%A2" -v 3

学到这里其实已经发现我们的参数逐渐完善了,基本的语句就是上面的例子↑

-p

-p就是指定你注入的参数,比如id是一个注入点,那我们在测试的时候就可以指定id参数,-p id,这样测试会让测试时间大大减少。不管是post数据包还是get的url都是可以使用-p 直接指定注入参数。

–threads

  • 介绍:指明发送请求的并发线程数量。线程数越低判断出来的sql注入准确率越高。

    • 注意:这个默认线程数量在 sqlmap文件夹\lib\core\setting.py 中,修改其中的MAX_NUMBER_OF_THREADS = 10,也就是说你使用–threads 指明的线程数最大也就10,想要指定更大的就修改配置文件。(一般不需要很大,不然对方服务器也顶不住这么大的请求数量。甚至还有可能封你ip)
      在这里插入图片描述

-batch-smart

智能判断测试,自行寻找注入点进行测试 (该命令很少用)

这个智能指令,会将所有数据库全部扒一遍,并且会将每一步的信息和数据全部给我们保存下来,在如下目录中

在这里插入图片描述

记住,这个参数测出来的信息会很多,数据库、表等等都会出来。

–os-shell

个人不推荐使用。(动静大不说,等待时间还比较久)

前提条件

  • 网站必须是root权限

  • 攻击者需要知道网站的绝对路径

  • GPC为off,php主动转义的功能关闭

该功能耗费时间比较长。

原理

就是用into outfile函数将一个可以用来上传的php文件写到网站的根目录下
然后利用tmpukjhb.php上传了一个tmpbezal.php的文件,tmpbezal.php这个文件可以用来执行系统命令,并且将结果返回出来
在这里插入图片描述

–mobile

直接加上–mobile即可,他会自动让你选择手机型号,不用自己输入手机型号(所以也有局限性,但是也不算局限性,市面这么多手机,只要能够让网站判断是手机访问的即可了)
在这里插入图片描述

tamper插件

使用方法:

sqlmap.py -u url --tamper "base64encode.py";

在这里插入图片描述

获取数据的相关参数

以下参数都是直接加上去即可,不用另外添加数据

例子:http://192.168.121.151/sql.php?id=1 --dbs

  • –dbs # 会获取所有的数据库
  • –current-user #显示当前用户
  • –current-db #当前连接数据库名
  • –is-dba #判断当前的用户是否为管理员
  • –users #列出数据库所有所有用户

暂时了解这么多,后面继续进阶了再继续学习补充…


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/867068.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

windows下使用编译opencv在qt中使用

记录一下:在windows下qt使用opencv 1、涉及需要下载的软件 CMake 下载地址opecnv下载地址mingw(需要配置环境变量) 这个在下载qt的时候可以直接安装一般在qt的安装路径下的tool里比如我的安装路径 (C:\zz\ProgramFiles\QT5.12\Tools\mingw730_64) 2、在安装好CMake…

【IT领域新生必看】探索Java中的对象创建:深入理解`new`与`clone`的对比

文章目录 引言什么是new关键字?使用new关键字的基本语法示例: 什么是clone方法?使用clone方法的基本语法示例: new与clone的区别内存分配与初始化调用方式适用场景性能 new关键字的优缺点优点缺点 clone方法的优缺点优点缺点 深入…

大华设备接入GB28181视频汇聚管理平台EasyCVR安防监控系统的具体操作步骤

智慧城市/视频汇聚/安防监控平台EasyCVR兼容性强,支持多协议接入,包括国标GB/T 28181协议、GA/T 1400协议、部标JT808协议、RTMP、RTSP/Onvif协议、海康Ehome、海康SDK、大华SDK、华为SDK、宇视SDK、乐橙SDK、萤石云SDK等,并能对外分发RTMP、…

Pseudo-Label : The Simple and Efficient Semi-Supervised Learning Method--论文笔记

论文笔记 资料 1.代码地址 https://github.com/iBelieveCJM/pseudo_label-pytorch 2.论文地址 3.数据集地址 论文摘要的翻译 本文提出了一种简单有效的深度神经网络半监督学习方法。基本上,所提出的网络是以有监督的方式同时使用标记数据和未标记数据来训练的…

加法器的基本操作

基本单元 与门(AND) 全1为1,有0为0 或门(OR) 全0为0,有1为1 非门(NOT) 为1则0,为0则1 异或门(XOR) 两个输入端,相同为0,不同为1 与非门(NADD) 全1为0,有0为1 或非门(NOR) 全0为1,有1为0。刚…

redis 如何使用 scan, go语言

建议用方案乙 文章目录 场景方案方案甲方案乙 拓展 场景 redis 中存在大量 key。 其中有一部分是用户登陆的 session_id, 结构是 : session_id:1session_id:2session_id:3需求: 有多少用户在线 方案 方案甲 keys session_id:*这种方式简…

项目部署_持续集成_Jenkins

1 今日内容介绍 1.1 什么是持续集成 持续集成( Continuous integration , 简称 CI )指的是,频繁地(一天多次)将代码集成到主干 持续集成的组成要素 一个自动构建过程, 从检出代码、 编译构建…

数据结构——单向循环链表

文章目录 1. 概念 2. 区别 2.1 结构区别 2.2 访问方式区别 2.3 优缺点对比 3. 流程 4. 基本操作 5. 代码示例 1. 概念 单向循环链表是一种特殊的单链表,其中最后一个节点的后继指针指向头节点,形成一个环。单向循环链表适合用于需要循环访问数据…

Spring Boot集成jacoco实现单元测试覆盖统计

1.什么是jacoco? JaCoCo,即 Java Code Coverage,是一款开源的 Java 代码覆盖率统计工具。支持 Ant 、Maven、Gradle 等构建工具,支持 Jenkins、Sonar 等持续集成工具,支持 Java Agent 技术远程监控 Java 程序运行情况…

【鸿蒙学习笔记】Stage模型工程目录

官方文档:应用配置文件概述(Stage模型) 目录标题 FA模型和Stage模型工程级目录模块级目录app.json5module.json5程序执行流程程序基本结构开发调试与发布流程 FA模型和Stage模型 工程级目录 模块级目录 app.json5 官方文档:app.j…

STM32学习历程(day3)

通过GPIO点灯 首先先创建工程 这步比较繁琐 可以去参考江协科技[3-2]章节 想要驱动LED灯 要先使能时钟、然后再初始化、GPIO模式、引脚、以及输出速率 可以查看RCC的头文件 能看到三个使能函数 使能AHB、APB2、APB1 ,GPIO用APB2这个函数、 通过看RCC库函数的源码…

给我的 IM 系统加上监控两件套:【Prometheus + Grafana】

监控是一个系统必不可少的组成部分,实时,准确的监控,将会大大有助于我们排查问题。而当今微服务系统的话有一个监控组合很火那就是 Prometheus Grafana,嘿你别说 这俩兄弟配合的相当完美,Prometheus负责数据采集&…

【MySQL系列】VARCHAR 类型详解及其使用策略

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

MySQL---事务管理

1.关于事务 理解和学习事务,不能只站在程序猿的角度来理解事务,而是要站在使用者(用户)的角度来理解事务。 比如支付宝转账,A转了B100块前,在程序猿的角度来看,是两条update操作,A …

浅谈反射机制

1. 何为反射? 反射(Reflection)机制指的是程序在运行的时候能够获取自身的信息。具体来说,反射允许程序在运行时获取关于自己代码的各种信息。如果知道一个类的名称或者它的一个实例对象, 就能把这个类的所有方法和变…

【贪心 堆 优先队列】502. IPO

本文涉及知识点 贪心 堆 优先队列 LeetCode502. IPO 假设 力扣(LeetCode)即将开始 IPO 。为了以更高的价格将股票卖给风险投资公司,力扣 希望在 IPO 之前开展一些项目以增加其资本。 由于资源有限,它只能在 IPO 之前完成最多 k…

ORB-SLAM3源码分析(案例分析)

一、ORB-SLAM3简介 ORB-SLAM3 (Oriented FAST and Rotated BRIEF SLAM 3) 是一种视觉SLAM(Simultaneous Localization and Mapping,同时定位与地图构建)系统,用于机器人和计算机视觉领域。它是ORB-SLAM系列的第三个版本&#xff…

非参数检测2——定义

定义:若研究二判定问题(即判断有无信号)的检测问题, 检测器的虚警概率可以由对输入数据统计特性提出微弱假设确定假设中不包含输入噪声的统计特性 则称该检测器为非参数检测器。 设计目标 在未知或时变环境下,有最…

【自动驾驶仿真在做什么——初学者总结(陆续补充)】

文章目录 基础概念自动驾驶级别再稍提一下ODD是什么? 自动驾驶仿真分类软件在环仿真硬件仿真 仿真究竟难在哪?关于lidar和radar区别一些名词解释 最近也是学习自动驾驶仿真相关知识,习惯去总结一下,方便自己回顾和总结&#xff0c…

【多媒体】富客户端应用程序GUI框架 JavaFX 2.0 简介

JavaFX 最初是由 Oracle 推出的一个用于开发富客户端应用程序的框架,它提供了丰富的用户界面控件、布局容器、3D图形绘制、媒体播放和动画等功能,旨在取代较旧的 Swing 框架。JavaFX 于 2007 年推出,2011 年 10 月发布了2.0 版本。JavaFX 2.0…