前言

SQL注入是web安全中最常见的攻击方式,SQL注入有很多方法,但如果只知道payload或只用用sqlmap,不知道原理,感觉也很难掌握,这次就总结一下我所遇到的SQL注入方法,原理分析+题目实战。

  1. Xpath报错注入

涉及函数

updatexml(): 对xml进行查询和修改

extractvalue():对xml进行查询和修改

1.报错语句构造

select extractvalue(1,concat(0x7e,user(),0x7e));

select updatexml(1,concat(0x7e,version(),0x7e),1);

原理分析

extractvalue(xml_str , Xpath) 函数,按照Xpath语法从XML格式的字符串中提取一个值,如果函数中任意一个参数为NULL,返回值都是NULL。

其实就是对XML文档进行查询的函数,相当于HTML文件中用

等标签查找元素一样,第一个参数传入目标xml文档,第二个参数使用Xpath路径法表示的查找路径

updatexml()函数与extractvalue()类似,是更新xml文档的函数

updatexml()函数有三个参数,分别是(XML_document, XPath_string, new_value)

第一个参数:XML_document是String格式,为XML文档对象的名称 

第二个参数:XPath_string (Xpath格式的字符串) 

第三个参数:new_value,String格式,替换查找到的符合条件的数据

题目实战

sqli-labs17关,涉及到xpath报错注入

uname尝试发现没有任何变化,尝试下passwd,发现单引号报错,且有报错信息,可以使用xpath报错注入 尝试下爆出数据库

uname=admin&passwd=1' or updatexml(1,concat(0x7e,database(),0x7e),1)# &submit=Submit

既然xpath报错注入可以,那就来一一爆出表、字段、值即可

2. 宽字节注入

涉及函数

addslashes() 函数返回在预定义字符之前添加反斜杠的字符串

mysql_real_escape_string() 函数转义SQL语句中使用的字符串中的特殊字符

mysql_escape_string() 转义一个字符串

原理分析

先了解一下什么是窄、宽字节已经常见宽字节编码:

一、当某字符的大小为一个字节时,称其字符为窄字节.

二、当某字符的大小为两个字节时,称其字符为宽字节.

三、所有英文默认占一个字节,汉字占两个字节

四、常见的宽字节编码:GB2312,GBK,GB18030,BIG5,Shift_JIS等

题目实战

http://chinalover.sinaapp.com/SQL-GBK/index.php?id=1%27

返回结果

发现被转义了,使用最经典的%df

?id=1%df' and 1=1%23

返回结果为:

%df和后面的\变成了一个汉字“运” ,所以单引号就可以不被转义,从而发挥闭合作用

爆出数据库,下面就很简单了,相当于知道了闭合符号,常用的payload更改一下即可

3. 叠堆注入

涉及字符

;,在SQL语句中用来表示一条sql语句的结束

原理分析

堆叠注入可以执行任意的语句,多条sql语句一起执行。在MYSLQ命令框中,常以;在位结束符,那我们边便可以在一句SQL语句结束后再紧跟一句SQL语句。

查询数据表

1';show databases;#

4. 二次注入

涉及函数

addslashes() 函数返回在预定义字符之前添加反斜杠的字符串

mysql_real_escape_string() 函数转义 SQL 语句中使用的字符串中的特殊字符

mysql_escape_string() — 转义一个字符串

二次注入原理

看到涉及到的函数是不是感觉很熟悉,这是因为大多数网站都会对用户输入的语句进行对特殊符号的过滤,例如:恶意用户构造的插入语句为1',经过这些函数的处理则变为1',这样便可以防止用户向服务器插入数据时引发的一些恶意操作,但这只是中途过滤了一下,最终返回到数据库里面的数据还是1',如果管理者对取出的数据没有进行进一步的检验处理,服务器从数据库取出恶意数据,未经过滤就直接拼接SQL语句进行查询,就会发生了SQL二次注入。

https://xzfile.aliyuncs.com/media/upload/picture/20191030191521-8fffd9ea-fb06-1.png

总结起来 二次注入其实是分为两个步骤:

  1.插入恶意数据
2.引用恶意数据

题目实战

SQL-labs24关便涉及到二次注入

注册用户源码

修改密码源码

我们先注册一个用户admin'#,密码设置为123,注册好之后查看一下数据库

注册成功,这时其实我们就可以修改管理员admin,为什么那,来看下修改密码的sql语句

我们用户名为admin'#,调用该用户时,SQL语句则变为了

我们将admin密码更改为123456,测试一下

更改成功,这便是二次注入的简单利用

从原理—实战分析SQL注入的更多相关文章

  1. web安全原理分析-SQL注入漏洞全解

    简介 靶场:榆林学院信息安全协会--入侵榆大实验靶场 数字型注入 1 字符型注入 1 布尔注入 1.布尔注入简介 mysql bool注入是盲注的一种.与报错注入不同,bool注入没有任何报错信息输出 ...

  2. [转载]mysql绑定参数bind_param原理以及防SQL注入

    假设我们的用户表中存在一行.用户名字段为username.值为aaa.密码字段为pwd.值为pwd.. 下面我们来模拟一个用户登录的过程.. <?php $username = "aa ...

  3. mysql绑定参数bind_param原理以及防SQL注入

    假设我们的用户表中存在一行.用户名字段为username.值为aaa.密码字段为pwd.值为pwd.. 下面我们来模拟一个用户登录的过程.. <?php $username = "aa ...

  4. 【攻防实战】SQL注入演练!

    这篇文章目的是让初学者利用SQL注入技术来解决他们面临的问题, 成功的使用它们,并在这种攻击中保护自己. 1.0 介绍 当一台机器只打开了80端口, 你最依赖的漏洞扫描器也不能返回任何有用的内容, 并 ...

  5. 什么是简单的分析SQL注入漏洞

    如今非常多人在入侵的过程中基本都是通过SQL注入来完毕的,可是有多少人知道为什么会有这种注入漏洞呢?有的会随口说着对于字符的过滤不严造成的. 可是事实是这样吗?我们学这些.不仅要知其然.更要知其所以然 ...

  6. [靶场实战]:SQL注入-显错注入

    SQL注入的本质:就是将用户输入的数据当作代码带入执行. 注入条件: 1.用户能控制输入 2.能够将程序原本执行的代码,拼接上用户输入的数据进行执行 首先检查是否存在注入点 Rank1: 构造语句 ? ...

  7. 【实战】SQL注入小脚本

    1.ORACLE布尔型盲注 import urllib import urllib2 import requests payloads = '_ABCDEFGHIJKLMNOPQRSTUVWXYZ' ...

  8. sql注入实例分析

    什么是SQL注入攻击?引用百度百科的解释: sql注入_百度百科: 所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令.具 ...

  9. sql注入攻防 以php+mysql为例

    随着Web应用的高速发展和技术的不断成熟,对Web开发相关职位的需求量也越来越大,越来越多的人加入了Web开发的行列.但是由于程序员的水平参差不齐或是安全意识太低,很多程序员在编写代码时仅考虑了功能上 ...

随机推荐

  1. WEB漏洞——文件上传

    有关文件上传的知识 为什么文件上传存在漏洞 上传文件时,如果服务端代码未对客户端上传的文件进行严格的验证和过滤就容易造成可以上传任意文件的情況,包括上传脚本文件(asp.aspx.php.jsp等格式 ...

  2. 第04课:使用 VS 管理开源项目

    本节课将介绍 Redis 项目在 Linux 系统中使用 gdb 去调试,这里的调试环境是 CentOS 7.0,但是通常情况下对于 C/C++ 项目我一般习惯使用 Visual Studio 去做项 ...

  3. C#中的文本到语音

    本演示说明了如何使用c#.net Windows Forms应用程序中的system.speech库将文本转换为语音.Microsoft .NET框架提供System.Speech.Synthesis ...

  4. ES6:使用解构赋值仅用一行定义多个相同的数组,且指向堆不同(解构赋值)

    在开发过程中我们经常要用到一些临时变量对数据进行一些特殊处理,由于良好的编码习惯要在临时变量用完后释放内存,所以当临时变量数量较多时,整体代码会变得冗余. let a = [] let b = [] ...

  5. Vue开发多人聊天室 复盘总结

    前言 在上个月初,接到一个需求,要开发一个 聊天通讯 模块 并且 集成到 项目中的多个 入口,实现业务数据的记录追踪. 接到需求后,还挺开心,这是我第一次 搞 通讯 类的需求,之前一直是 B 端 的业 ...

  6. java版gRPC实战之六:客户端动态获取服务端地址

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  7. 机器学习——支持向量机SVM

    前言 学习本章节前需要先学习: <机器学习--最优化问题:拉格朗日乘子法.KKT条件以及对偶问题> <机器学习--感知机> 1 摘要: 支持向量机(SVM)是一种二类分类模型, ...

  8. Sentry 监控 - Environments 区分不同部署环境的事件数据

    系列 1 分钟快速使用 Docker 上手最新版 Sentry-CLI - 创建版本 快速使用 Docker 上手 Sentry-CLI - 30 秒上手 Source Maps Sentry For ...

  9. 学习PHP中的高精度计时器HRTime扩展

    不知道大家还记得在学校的时候体育测试时老师带的秒表吗?当枪声想起时,我们开始跑步,这时秒表启动,当我们跑过终点后,老师会按下按扭记录我们的成绩,这就是一个典型的定时器的应用.今天我们要学习的内容其实就 ...

  10. css宽度+字体+颜色+边框+文本+光标+伪类选择器

    常用属性: width:宽 height:高 min-width:最小宽度 :可以设置如果宽度变小了,有个滑动效果(常常在我们布局的过程中需要去设置) min-height;最小高度 max-widt ...