zoukankan      html  css  js  c++  java
  • SQL注入:#和--的作用

    前言

    最近在学习SQL注入,处于入门状态,发现有些注入语句在后面会加上#或者--,可能是搜索姿势不对,百度找不到,因此就根据个人的想法记录一下#和--的作用

    正题

    看一下正常的SQL语句

    select * from table where id='1'

    假设id=‘1’处存在SQL注入漏洞,1是我们唯一可以进行操作的参数,既然都已经知道存在SQL漏洞(假设),我们就不再使用and 1=1啥的去验证了,直接进入正题

    如果我们需要查询数据库信息,我们可能会想到联合查询union select 1,database(),因此会这样子输入

    1 union select 1,database()

    确实,如果不好好分析,输入的时候想,不就是查询id=1时联合一条语句查询吗?但是转换成SQL语句就知道为什么了

    select * from table where id='1 union select 1,database()'

    可以看到,1 union select 1,database()会被当做条件字符串来查询,因此我们需要给1用单引号’闭合

    select * from table where id='1' union select 1,database()'

    现在已经非常接近了,但是会发现,这条语句执行会报错(可以数据库控制台执行看看,或者navcat软件等等),大概报错是这样

    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''' at line 1

    原因就是语句后面多出了单引号',因此我们需要想办法去掉,这时候使用#或者--就可以解决

    select * from table where id='1' union select 1,database()#'

    或者

    select * from table where id='1' union select 1,database()--'

    #号和--号在数据库里面起到单行注释的作用(每个数据库可能不一样,需要按照数据库的特性去决定使用那个符号),这里用#号或者--号,就是把后面的语句注释掉,从而达到按照攻击者意图去执行SQL指令的目的

    换成攻击者输入,就是下面这样子

    1' union select 1,database()#

    或者

    1' union select 1,database()--

    结束...

  • 相关阅读:
    Hologres如何支持亿级用户UV计算
    飞猪基于 Serverless 的云+端实践与思考
    高德打车构建可观测性系统实践
    程序员写好技术文章的几点小技巧
    配置审计(Config)变配报警设置
    进入中国内地第31年的麦当劳 ,为什么还能不断吸引新消费人群?
    OceanBase再破纪录!核心成员陈萌萌:坚持HTAP就是坚持我们做数据库的初心
    找出有序数组中缺失的数字
    删除值重复的结点
    想交链表----若有缘 必相见
  • 原文地址:https://www.cnblogs.com/ludadong/p/12792526.html
Copyright © 2011-2022 走看看