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. KingbaseES R6 集群修改物理IP和VIP案例

    在用户的实际环境里,可能有时需要修改主机的IP,这就涉及到集群的配置修改.以下以例子的方式,介绍下KingbaseES R6集群如何修改IP. 一.案例测试环境 操作系统: [KINGBASE@nod ...

  2. Redis变慢?深入浅出Redis性能诊断系列文章(一)

    (本文首发于"数据库架构师"公号,订阅"数据库架构师"公号,一起学习数据库技术)   Redis 作为一款业内使用率最高的内存数据库,其拥有非常高的性能,单节点 ...

  3. python 模块、原始字符串

    模块 三种方法: import from 模块 import 成员,成员 from 模块 import * *代表所有的成员 隐藏成员: 模块中以下划线_开头的属性 隐藏成员不会被from 模块 im ...

  4. es日志配置,只保存最近3天的日志

    Elasticsearch使用Log4j 2进行日志记录.可以使用log4j2.properties文件配置Log4j2. Elasticsearch公开三个属性 ${sys:es.logs.base ...

  5. NSIS检测并统计字符串中某个字符个数

    !include "LogicLib.nsh" OutFile "检查找字符串中c出现的次数.exe" Name "test" Sectio ...

  6. 聊聊SQL注入

    SQL注入问题 概述: 首先SQL注入是一个非常危险的操作,很可能被一些不怀好意的人钻空导致我们系统出现异常等状况,比如数据库遭到破坏或被入侵. 原因:使用JDBC的Statement语句添加SQL语 ...

  7. 使用 Spring Security 手动验证用户

    1.概述 在这篇快速文章中,我们将重点介绍如何在 Spring Security 和 Spring MVC 中手动验证用户的身份. 2.Spring Security 简单地说,Spring Secu ...

  8. Jquery关于checkbox选中第二次失效的问题。

    $(".selector input[type='checkbox']").attr("checked",true); $(".selector in ...

  9. Goland Socket 服务

    客户端发送消息 并接收服务端消息 package main import ( "fmt" "net" ) func main() { // conn, err ...

  10. 故障复盘究竟怎么做?美图SRE结合10年经验做了三大总结(附模板)

    美图崇尚的故障文化是 "拥抱故障,卓越运维",倡导的基准是 No-Blame, 即「不指责,重改进」.今年 9 月 TakinTalks 社区曾经分享过美图的三段式故障治理方法(美 ...