1. SQL注入

1.1 漏洞简介

结构化查询语言(Structured Query Language,缩写:SQL),是一种特殊的编程语言,用于数据库中的标准数据查询语言。1986年10月,美国国家标准学会对SQL进行规范后,以此作为关系式数据库管理系统的标准语言(ANSI X3. 135-1986),1987年得到国际标准组织的支持下成为国际标准。不过各种通行的数据库系统在其实践过程中都对SQL规范作了某些编改和扩充。所以,实际上不同数据库系统之间的SQL不能完全相互通用。

1.2 漏洞原理

可以通过网站存在的查询语句进行构造,为此开发者对其伤透了脑筋,漏洞不光是查询,可能还存在与API、隐藏链接、http头数据、写入数据等。需要对数据包的结构和传递函数比较了解,建议学习的时候把数据库的日志打开,就可以查看到传递到数据库的语句是什么样子的了。 需要记住的information_schema数据库的SCHEMATA、TABLES、COLUMNS。 SCHEMATA表中存放所有数据库的名,字段名为SCHEMA_NAME。 关键函数database() 当前数据库名、version() 当前mysql版本、user()当前mysql用户.

1.3 漏洞危害

危害较高的漏洞,可以获取敏感信息,修改信息,脱裤,上传 webshell,执行命令。

2. SQL漏洞类型

2.1 区分数字和字符串

数字上是不加单引号的如’2’+‘2’=‘22’而非’4’ 而2+2=4

2.2 内联SQL注入

sql注入主要是靠内联SQL来进行注入的 and or 与或非的判断来进行内联SQL注入,等于在原先的语句上扩展出来的语句

2.3 报错注入

报错注入顾名思义主要是利用数据库报错来进行判断是否存在注入点。如果不符合数据库语法规则就会产生错误。常用的特殊字符:’ \ ; %00 ) ( # "

2.4 盲注

2.4.1 常用函数

1)函数length() 计算数据库长度

id=1' and lengh(database())=8;

2)函数left(a)=b sql的left()函数如果式子成立返回1如果不成立返回0一般用来猜测库的名字 3)函数substr() substr()和substring()函数实现的功能是一样的,均为截取字符串。

select left(database(),1)='r';

substring(string, start, length) substr(string, start, length) length(可选)要返回的字符数。如果省略,则 mid() 函数返回剩余文本

select substr(database(),1,1)='a';

可进行单字符验证可进行全字符验证 4)函数mid() mid(string,start,length) string(必需)规定要返回其中一部分的字符串。 start(必需)规定开始位置(起始值是 1)。 length(可选)要返回的字符数。如果省略,则 mid() 函数返回剩余文本可进行单字符验证可进行全字符验证

select mid(database(),1)='testt';

5)函数ascii() 返回字符串str的最左字符的数值。返回0,如果str为空字符串。返回NULL,如果str为NULL。ASCII()返回数值是从0到255; 只会返回最左边字符的可以配合substr()

6)ord函数 ORD() 函数返回字符串第一个字符的 ASCII 值。

7)函数updatexml()

updatexml(XML_document, XPath_string, new_value);

第一个参数:XML_document是String格式,为XML文档对象的名称,文中为Doc 第二个参数:XPath_string(Xpath格式的字符串) ,如果不了解Xpath语法,可以在网上查找教程。 第三个参数:new_value,String格式,替换查找到的符合条件的数据 在当前数据库中演示
8)函数exp() exp是以e为底的指数函数。可能会存在溢出

mysql> select exp(1);
±------------------+
| exp(1) |
±------------------+
| 2.718281828459045 |
±------------------+
1 row in set (0.00 sec)

由于数字太大是会产生溢出。这个函数会在参数大于709时溢出,报错

mysql> select exp(709);
±----------------------+
| exp(709) |
±----------------------+
| 8.218407461554972e307 |
±----------------------+
1 row in set (0.00 sec)
mysql> select exp(710);
ERROR 1690 (22003): DOUBLE value is out of range in ‘exp(710)’

2.4.2 布尔类型注入

如果成功注入会正确显示内容,如果没成功会显示非正常内容。

2.4.3 无报错回显注入

没有任何报错显示,但是能根据页面是否正确显示来进行判断。如搜索注入没有内容,正常搜索应该是有内容的。

2.4.4 时间注入

如果exp1为true返回值为sleep,如果为假返回值为1。ps:前提是网络延迟较低的情况。。

if(length(database())>1,sleep(5),1)

2.5 堆叠查询注入

通过分号隔开执行多条语句。

2.6 Union注入

前面不存在才会执行后面的语句,一般配合的是布尔类型的盲注

2.7 二次注入

在存入数据库的时候做了过滤,但是取出来的时候没有做过滤,而产生的数据库注入。

2.8宽字节注入

数据库大多数为GBK才可以%df

2.9 cookie注入

cookie中的参数也有可能存在注入

2.10 编码注入

Base64

2.11 XFF注入攻击

X-Forwarded-for伪造客户端IP

2.12 DNS_log

dnslog

2.13 组合注入

通过上述所有的注入方式进行组合攻击,如union+盲注

Web安全Day1 - SQL注入、漏洞类型的更多相关文章

  1. [红日安全]Web安全Day1 - SQL注入实战攻防

    本文由红日安全成员: Aixic 编写,如有不当,还望斧正. 大家好,我们是红日安全-Web安全攻防小组.此项目是关于Web安全的系列文章分享,还包含一个HTB靶场供大家练习,我们给这个项目起了一个名 ...

  2. Nikto是一款Web安全扫描工具,可以扫描指定主机的web类型,主机名,特定目录,cookie,特定CGI漏洞,XSS漏洞,SQL注入漏洞等,非常强大滴说。。。

    Nikto是一款Web安全扫描工具,可以扫描指定主机的web类型,主机名,特定目录,cookie,特定CGI漏洞,XSS漏洞,SQL注入漏洞等,非常强大滴说... root@xi4ojin:~# cd ...

  3. WEB安全:XSS漏洞与SQL注入漏洞介绍及解决方案(转)

    对web安全方面的知识非常薄弱,这篇文章把Xss跨站攻击和sql注入的相关知识整理了下,希望大家多多提意见. 对于防止sql注入发生,我只用过简单拼接字符串的注入及参数化查询,可以说没什么好经验,为避 ...

  4. WEB安全:XSS漏洞与SQL注入漏洞介绍及解决方案

    对web安全方面的知识非常薄弱,这篇文章把Xss跨站攻击和sql注入的相关知识整理了下,希望大家多多提意见. 对于防止sql注入发生,我只用过简单拼接字符串的注入及参数化查询,可以说没什么好经验,为避 ...

  5. 利用SQL注入漏洞登录后台的实现方法

    利用SQL注入漏洞登录后台的实现方法 作者: 字体:[增加 减小] 类型:转载 时间:2012-01-12我要评论 工作需要,得好好补习下关于WEB安全方面的相关知识,故撰此文,权当总结,别无它意.读 ...

  6. 预处理prepareStatement是怎么防止sql注入漏洞的?

    序,目前在对数据库进行操作之前,使用prepareStatement预编译,然后再根据通配符进行数据填值,是比较常见的做法,好处是提高执行效率,而且保证排除SQL注入漏洞. 一.prepareStat ...

  7. WEB 安全之 SQL注入 < 三 > 提权

    SQL注入是一个比较“古老”的话题,虽然现在存在这种漏洞的站点比较少了,我们还是有必要了解一下它的危害,及其常用的手段,知己知彼方能百战不殆.进攻与防守相当于矛和盾的关系,我们如果能清楚了解 攻击的全 ...

  8. WEB 安全之 SQL注入 < 二 > 暴库

    SQL注入是一个比较"古老"的话题,虽然现在存在这种漏洞的站点比较少了,我们还是有必要了解一下它的危害,及其常用的手段,知己知彼方能百战不殆.进攻与防守相当于矛和盾的关系,我们如果 ...

  9. Web安全 之 SQL注入

    随着B/S模式应用开发的发展,使用这种模式编写的应用程序也越来越多.相当大一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患.用户可以提交一段数据库查询代码,根据 ...

  10. web安全之SQL注入

    一.sql注入是一种将sql代码添加到输入参数中 传递到sql服务器解析并执行得一种攻击手法 例: $sql = "SELECT * FROM goods WHERE Id = 1" ...

随机推荐

  1. 02-MyBatisPlus入门

    快速开始参考:https://baomidou.com/pages/226c21/ 测试项目: mybatis_plus 数据库:mybatis_plus 一.创建并初始化数据库 1.创建数据库: m ...

  2. 用compose安装tp框架提示警告putenv

    PHP Warning:  putenv() has been disabled for security reasons in phar://C:/ProgramData/ComposerSetup ...

  3. Django 之复制粘贴必备命令(补)

    一.Django 常用命令 pip install django==3.2 pip show django pip list django-admin startproject mysite pyth ...

  4. Django 之路由层

    一.Django 请求周期生命流程图 首先,用户在浏览器中输入URL,发送一个GET 或 POST 方法的request 请求. Django 中封装了socket 的WSGI 服务器,监听端口接受这 ...

  5. 解决nexus仓库只能拉取不能推送的问题

    当时正在使用jenkins自动构造镜像推送到nexus上的docker镜像仓库,突然间就报错如下,没法推送,超过重试次数后也是没法推送: ERROR: Build step failed with e ...

  6. ELK基于ElastAlert实现日志的微信报警 ---docker环境

    参考网址:https://github.com/anjia0532/elastalert-docker 1.拉取镜像: docker pull anjia0532/elastalert-docker: ...

  7. SonarQube 的安装、配置及 Maven 项目的使用

    转载自:https://cloud.tencent.com/developer/article/1010612 1.SonarQube 介绍 SonarQube 是一个用于管理源代码质量开放平台,它可 ...

  8. 记录一次Bitbucket鉴权的坑

    目录 发生了什么 什么原因 如何解决 总结 发生了什么 今天首次在Fedora上使用git,因为没有小王八(TortoiseGit)帮助,其过程异常焦灼-- 反正经过一系列折腾,我在本地新建了一个项目 ...

  9. 【Python+C#】手把手搭建基于Hugging Face模型的离线翻译系统,并通过C#代码进行访问

    前言:目前翻译都是在线的,要在C#开发的程序上做一个可以实时翻译的功能,好像不是那么好做.而且大多数处于局域网内,所以访问在线的api也显得比较尴尬.于是,就有了以下这篇文章,自己搭建一套简单的离线翻 ...

  10. POJ3311 Hie with the Pie(状压DP,Tsp)

    本题是经典的Tsp问题的变形,Tsp问题就是要求从起点出发经过每个节点一次再回到起点的距离最小值,本题的区别就是可以经过一个节点不止一次,那么先预处理出任意两点之间的最短距离就行了,因为再多走只会浪费 ...