一般的WEB架构

SQL注入成因:

  用户开启浏览器并连接http://www.xxx.com。位于逻辑层的Web服务器从文件系统中加载脚本将其传递给脚本引擎,脚本引擎负责解析并执行脚本。

脚本使用数据库连接程序打开存储层连接并对数据库执行SQL语句。数据库将数据返回给数据库连接程序,后者将其传递给逻辑层的脚本引擎。逻辑层再将WEB页面以HTML格式返回给表示层的用户的浏览器之前,先执行相关的应用或业务逻辑规则。用户的WEB浏览器呈现HTML并借助代码的图形化表示展现

给用户。整个过程数秒内完成,并且对用户是透明的。

  简单来说,WEB浏览器(表示层)向中间层(逻辑层)发送请求,中间层通过查询更新数据库(存储层)响应请求。

  从用户请求到在数据库中执行SQL语句,服务器未经过任何过滤校验,就把用户的请求直接在数据库中执行,导致数据库内的数据发生泄漏、更改等。

SQL注入在哪里:

  · get

  · post

  · 数据包头部注入

  · cookie注入

  · 搜索注入

  · ......等

  1.任何客户端可控,传递到服务器的变量;

  2.必须带有参数传递,参数值带入到数据库查询;

  3.服务器没有进行过滤或过滤的不严格。

SQL注入的分类:

  根据注入语法分类:

    · Error-based SQL injection (报错型注入)

    · Boolean-based blind SQL injection (布尔型注入)

    · UNION query SQL injection (可联合查询注入)

    · Stacked queries SQL injection (可多语句查询注入)sql server中使用

    · Time-based blind SQL injection (基于时间注入)

  根据SQL数据类型分类:

    · 整形注入

    · 字符串类型注入

    · 搜索类型注入

判断是否存在注入:

  and 1=1 / and 1=2 根据回显页面不同(整型)

  单引号判断 ' 显示数据库错误信息(整型,字符串类型)

  \ 是否报错

  随机输入判断

  -1 / +1 回显上个页面(整型)

  and sleep(5) 返回时间是否变化

判断注入类型:

  布尔类型:

    当一个页面,存在注入,但是没有显示位,而且没有数据库出错信息,只能通过页面返回正常/不正常进行判断,即为布尔型注入

    优点:不需要显示位,不需要代码输出mysql_error()信息

    缺点:速度慢

  报错注入:

    因为传递参数不正常引起数据库执行语句发生错误,脚本输出错误信息,即为报错注入

  联合查询注入:

    页面根据参数值改变而改变,即有显示位的条件下,没有过滤单引号、双引号等特殊字符,及SQL命令;可以对SQL语句截断,使用UNION 添加

查询语句来进行注入。UNION两边列的数量相同,可使用order by 猜测获取列的数量

  基于时间的注入:

    当一个页面,存在注入,但是没有显示位,而且没有数据库出错信息,页面的返回信息不会改变,可以在布尔语句上使用sleep(),猜解获取信息

构造注入语句: 

  • exists()

  • ascii()

  • substr()

  函数的使用

  • select exists(select user());
  • select substr((select user()), 1, 1);
  • select substr((select user()), 2, 1);
  • select ascii(“a”);
  • select ascii(“abc");
  • select ascii(substr((select user()), 3, 1));
  • select ascii(substr((select user()), 3, 1)) > 100;
  • select ascii(substr((select user()), 3, 1)) > 120;

  在mysql5.0版本之后,就存在一个information_schema数据库,可以在该库的tables表和columns表中获取脚本连接数据库的账号-可以控制的数据

库的结构

举例: 

• ?id=1' and exists(select * from information_schema.tables) --+

• ?id=1' and (select length(version()))=6 --+ #判断 version()返回字符串长度

• ?id=1' and (select count(distinct+table_schema) from information_schema.tables) > 10 --+ #判断有多少个数据库

• ?id=1' and (select ascii(substr((select distinct table_schema from information_schema.tables limit 0,1), 1 ,1))) > 100 --+ 

#判断第一个库的第一个字符

SQL注入基础入门的更多相关文章

  1. SQL注入攻防入门详解

    =============安全性篇目录============== 本文转载 毕业开始从事winfrm到今年转到 web ,在码农届已经足足混了快接近3年了,但是对安全方面的知识依旧薄弱,事实上是没机 ...

  2. SQL注入攻防入门详解(2)

    SQL注入攻防入门详解 =============安全性篇目录============== 毕业开始从事winfrm到今年转到 web ,在码农届已经足足混了快接近3年了,但是对安全方面的知识依旧薄弱 ...

  3. [转]SQL注入攻防入门详解

    原文地址:http://www.cnblogs.com/heyuquan/archive/2012/10/31/2748577.html =============安全性篇目录============ ...

  4. Sql注入基础原理介绍

    说明:文章所有内容均截选自实验楼教程[Sql注入基础原理介绍]~ 实验原理 Sql 注入攻击是通过将恶意的 Sql 查询或添加语句插入到应用的输入参数中,再在后台 Sql 服务器上解析执行进行的攻击, ...

  5. 【转载】SQL注入攻防入门详解

    滴答…滴答…的雨,欢迎大家光临我的博客. 学习是快乐的,教育是枯燥的. 博客园  首页  博问  闪存    联系  订阅 管理 随笔-58 评论-2028 文章-5  trackbacks-0 站长 ...

  6. 【转载】sql注入之入门

    原文在:https://smelond.com MySql基础语法 mysql无非就是增删改查 mysql数据库结构: 数据库 test,test1 表名 admin,manage 数据 id,use ...

  7. 通过sqli-labs学习sql注入——基础挑战之less1-3

    首先,先看一些基础知识吧!!!!本人只是初学者,记录一下自己的学习过程,有什么错误之处请指出,谢谢!大佬请绕过!!!! url编码:一般的url编码其实就是那个字符的ASCII值得十六进制,再在前面加 ...

  8. 通过sqli-labs学习sql注入——基础挑战之less1

    环境准备: Phpstudy  (PHP+Apache+Mysql) Sql-lab 首先了解下基础知识: URL编码: 因为在浏览器中,当我们访问一个网址的时候,浏览器会自动将用户输入的网址进行UR ...

  9. Sqli-labs之sql注入基础知识

    (1)注入的分类 基于从服务器接收到的响应  ▲基于错误的SQL注入 ▲联合查询的类型 ▲堆查询注射 ▲SQL盲注 •基于布尔SQL盲注 •基于时间的SQL盲注 •基于报错的SQL盲注 基于如何处理输 ...

随机推荐

  1. L-Gap Substrings(uva 10829)

    题意:有一种形如uvu形式的字符串,其中u是非空字符串,且V的长度正好为L,那么称这个字符串为L-Gap字符串 给出一个字符串S,以及一个正整数L,问S中有多少个L-Gap子串. /* 这道题用到一个 ...

  2. [LeetCode] Convert Sorted List to Binary Search Tree DFS,深度搜索

    Given a singly linked list where elements are sorted in ascending order, convert it to a height bala ...

  3. 《Linux命令行与shell脚本编程大全 第3版》Linux命令行---23

    以下为阅读<Linux命令行与shell脚本编程大全 第3版>的读书笔记,为了方便记录,特地与书的内容保持同步,特意做成一节一次随笔,特记录如下:

  4. 有道词典中的OCR功能:第三方库的变化

    之前有点好奇有道词典中的OCR功能,具体来说就是强力取词功能.我知道的最有名的OCR库是tesseract,这个库是惠普在早些年前开源的. 在用python做爬虫处理验证码的时候,就会用到这个库,对应 ...

  5. (一)python 简单网页爬虫

    1.基于window环境,使用的工具是 Anaconda 下载地址 https://www.anaconda.com/download/ 2.所使用的包 BeautifulSoup,用来解析html代 ...

  6. Java编程风格学习(一)

    最近在看一本有关Java编程规范的书,书中精炼阐述了使用java语言时应该遵循的一些原则.接下来的一段时间我将在这里总结我的学习内容,也希望这一系列文章能够对有需要的人有所帮助.不考虑任何编码规范的代 ...

  7. BZOJ1088(SCOI2005)

    枚举第一行第一个格子的状态(有雷或者无雷,0或1),然后根据第一个格子推出后面所有格子的状态.推出之后判断解是否可行即可. #include <bits/stdc++.h> using n ...

  8. 10.1综合强化刷题 Day3 afternoon

    竞赛时间:????年??月??日??:??-??:?? 题目名称 a b c 名称 a b c 输入 a.in b.in c.in 输出 a.out b.out c.out 每个测试点时限 1s 1s ...

  9. 10.1综合强化刷题 Day7

                                                                                       noip提高组模拟赛       ...

  10. luogu P1579 哥德巴赫猜想(升级版)

    题目描述 一个等差数列是一个能表示成a, a+b, a+2b,..., a+nb (n=0,1,2,3,...)的数列. 在这个问题中a是一个非负的整数,b是正整数.写一个程序来找出在双平方数集合(双 ...