SQL注入的原理及一般步骤
原理
SQL注入是一种攻击方式,在这种攻击方式中,恶意代码被插入到字符串中,然后该字符串传递到SQL Server的实例以进行分析和执行。任何构成SQL语句的过程都应进行注入检查,因为SQL Server将执行其接收到的所有语法有效的查询。
(摘自微软 SQL注入,但要注意的是,SQL注入并不限于SQL Server,几乎任何数据库引擎都存在这个问题)
一般利用步骤
1.判断注入点
判断注入点有方面的含义,一是找到可能存在注入的位置,二十判断该处能否进行注入。在靶场环境下,我们已经知道,GET的参数id是与数据库进行交互的点,接下来判断能够进行注入。
id为1,成功查询,回显正常
id为1',数据库报错,由报错信息猜测闭合方式为单引号
id为1' --+,成功查询,回显正常,印证猜测,
id分别为1' and 1=1 --+和1' and 1=2--+,通过回显情况,进一步判断能否注入
1=1为永真,当1成功查询,若1=1也成功查询,则页面返回正常,1=2为永假,因此若1=2得到执行,则页面必返回不正常。通过对比二者返回结果,可知改点能否进行注入。
2.判断查询字段数
为了将我们想要的结果能够显示在页面上,我们需要用到联合查询,联合查询的条件之一是必须保证前后查询语句的字段数相等,因此,我们需要判断查询的字段数。
一般采用order by或union select如下:
order by 大于3的数时页面返回不正常,小于等于3时返回正常,得知原查询语句的字段数为3。或
当我们联合查询4列时,得到了查询语句由不同的列的错误,查询3列时:
成功查询,得原查询语句只有三列。
3.查数据库名、版本号、用户名等信息
union联合查询的规则是当前一个查询失败时执行第二个查询,前面我们知道了查询有三个字段,接下来将传入id为0,判断是三个字段的回显位置。
再由数据库内置的version()
、database()
、user()
查询出版本号、数据库当前名和当前用户。
4.查询表名
前面我们查询得知,当前数据库版本为5.5.53,在MySQL5.5后版本都内置了数据库information_schema。它存储了数据库中所有的表名、字段名等信息。从而可以构造查询语句,获取表名。
payload:?id=0' union select 1,(select group_concat(table_name) from information_schema.tables where table_schema=database()),3--+
这里的group_concat()
为SQL语句内置的聚合函数,用来将查询的结果作为一个字符串输出。
(使用payload:?id=0' union select 1,(select group_concat(schema_name) from information_schema.schemata),3 --+
)
5.查询字段名
知道了所有的表名,接下来选择一个表,查询其中所有的字段名。
payload:?id=0' union select 1,(select group_concat(column_name) from information_schema.columns where table_name='users'),3--+
6.查询记录内容
有了表名和字段名,便可以爆出数据库中的记录了。
payload:?id=0' union select 1,group_concat(username),group_concat(password) from users --+
以上是一般SQL注入的流程,当然还有一些像报错注入,请求头注入、select into outfile 写入一句话木马等姿势未介绍。后续学习过程中再逐渐补充。
SQL注入的原理及一般步骤的更多相关文章
- Sql注入基础原理介绍
说明:文章所有内容均截选自实验楼教程[Sql注入基础原理介绍]~ 实验原理 Sql 注入攻击是通过将恶意的 Sql 查询或添加语句插入到应用的输入参数中,再在后台 Sql 服务器上解析执行进行的攻击, ...
- 【渗透课程】第五篇-SQL注入的原理
哈哈哈,讲到注入了.我想给大家讲注入的原理.这个我们前面的前言篇就说过,所谓的SQL注入就是,绕过数据库验证机制直接执行SQL语句.怎么说呢,我们先讲一个概念吧! 网站和网页的区别 单纯的网页是静态的 ...
- SQL注入的原理以及危害
SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令,比如先前的很多影视网站泄露VIP会员密码大多就是通过WEB表单递交查询字符 ...
- Java学习笔记47(JDBC、SQL注入攻击原理以及解决)
JDBC:java的数据库连接 JDBC本质是一套API,由开发公司定义的类和接口 这里使用mysql驱动,是一套类库,实现了接口 驱动程序类库,实现接口重写方法,由驱动程序操作数据库 JDBC操作步 ...
- 初级安全入门——SQL注入的原理与利用
工具简介 SQLMAP: 一个开放源码的渗透测试工具,它可以自动探测和利用SQL注入漏洞来接管数据库服务器.它配备了一个强大的探测引擎,为最终渗透测试人员提供很多强大的功能,可以拖库,可以访问底层的文 ...
- 使用JDBC分别利用Statement和PreparedStatement来对MySQL数据库进行简单的增删改查以及SQL注入的原理
一.MySQL数据库的下载及安装 https://www.mysql.com/ 点击DOWNLOADS,拉到页面底部,找到MySQL Community(GPL)Downloads,点击 选择下图中的 ...
- 简单说说mybatis是防止SQL注入的原理
mybatis是如何防止SQL注入的 1.首先看一下下面两个sql语句的区别: <select id="selectByNameAndPassword" parameterT ...
- 【荐】PDO防 SQL注入攻击 原理分析 以及 使用PDO的注意事项
我们都知道,只要合理正确使用PDO,可以基本上防止SQL注入的产生,本文主要回答以下几个问题: 为什么要使用PDO而不是mysql_connect? 为何PDO能防注入? 使用PDO防注入的时候应该特 ...
- SQL注入的原理与预防
1. 什么是SQL注入? SQL注入是常见的网络攻击方式之一,通过SQL语句实现无账号登录,非法获取甚至篡改数据库中的数据. 2. SQL注入的思路 (1)找到SQL注入位置: (2)判断服务器类型和 ...
随机推荐
- SpringBoot 之 扩展 SpringMVC
增加自定义视图解析器: # src/main/java/com/wu/config/MyMvcConfig.java @Configuration // 标注这个类是一个配置类 public clas ...
- Typescript Record的用法
Record<Keys,Type> 构造一个对象类型,其属性key是Keys,属性value是Tpye.被用于映射一个类型的属性到另一个类型 interface CatInfo { age ...
- solr -window 安装与启动
1.下载 官网路径 https://solr.apache.org/downloads.html 为了稳定,我用 5.4.1 版本的 , 这是下载地址 https://archive.apac ...
- 【填坑往事】使用Rxjava2的distinct操作符处理自定义数据类型去重的问题
最近碰到一个问题,自定义数据类型列表中出现了重复数据,需要去重.处理去重的办法很多,比如借助Set集合类,使用双重循环拿每一个元素和其他元素对比等.这里介绍一种简单而且比较优雅的方式:使用Rxjava ...
- Nginx日志通过Flume导入到HDFS中
关注公众号:分享电脑学习回复"百度云盘" 可以免费获取所有学习文档的代码(不定期更新) flume上传到hdfs: 当我们的数据量比较大时,比如每天的日志文件达到5G以上 使用ha ...
- 【Java】==与equals
==与equals 一. == 可以使用在基本数据类型变量和引用数据类型变量中 如果比较的是基本数据类型变量:比较两个变量保存的数据是否相等.(不一定类型要相同) 如果比较的是引用数据类型变量:比较两 ...
- XRecyclerView:实现下拉刷新、滚动到底部加载更多以及添加header功能的RecyclerView
介绍: 一个实现了下拉刷新,滚动到底部加载更多以及添加header功能的的RecyclerView.使用方式和RecyclerView完全一致,不需要额外的layout,不需要写特殊的adater. ...
- .Net Core依赖注入
一.配置文件的读取 利用Startup类中的configuration读取appsettings.json中的配置 { "Logging": { "LogLevel&qu ...
- ☕【Java深层系列】「并发编程系列」让我们一起探索一下CyclicBarrier的技术原理和源码分析
CyclicBarrier和CountDownLatch CyclicBarrier和CountDownLatch 都位于java.util.concurrent这个包下,其工作原理的核心要点: Cy ...
- 边带权并查集 学习笔记 & 洛谷P1196 [NOI2002] 银河英雄传说 题解
花了2h总算把边带权并查集整明白了qaq 1.边带权并查集的用途 众所周知,并查集擅长维护与可传递关系有关的信息.然而我们有时会发现并查集所维护的信息不够用,这时"边带权并查集"就 ...