一、cookie注入
什么是Cookie?
Cookie就是代表你身份的一串字符串,网站根据Cookie来识别你是谁,如果你获取了管理员的Cookie,你可以无需密码直接登陆管理员账号。
cookie注入满足什么条件?
1.满足的条件[]
2.网站会获取cookie传参然后和原有sql语句拼接在传入数据库。
为什么Cookie和注入擦出了爱情的火花?(原理部分)
在动态脚本语言中存在超全局变量可以获取多种传参方式(基本上)
很多时候开发在开发的时候为了考虑到多种接受参数,在接受参数的时候都是用多种解释传参的方法
例如:
php中的$_REQUEST[] 可以获取POST|GET|COOKIE传参
注:php 5.4以上版本就不会接受Cookie传参了。
如果说开发用了$_REQUEST[]来接受参数?然后我们的POST和GET传参被Waf拦截了怎么办?
那么也许Waf没有对Cookie进行检测,我们尝试用Cookie进行传参,然后不就可以绕过检测机制!
http被称为无状态,无连接
cookie通过字符串来确定你的身份[本身就是不安全的]当别人获得你的cookie就可以登录你的账号。
安全不是绝对的, 用户的体验 是一个对立面
cookie注入在什么情况下使用:
post get传参情况下产生了拦截所使用的
遇到拦截需要思考怎么解决
1.找个不拦截的东西{get post cookie head里面的传参}
2.寻找规则。知道他为什么拦截然后绕过
cookie注入满足什么条件?
1.注入满足的条件 [用户的输入必须得到控制/输入的东西会被当做代码执行]
2.网站会获取cookie传参然后和原有的语句拼接在传入数据库。
二、怎么设置cookie
我们知道了Cookie注入的原理~那么下一步我们该学习的就是如何修改网站原有的Cookie
我们可以使用很多方法设置Cookie
方法一:
抓取数据包直接修改数据包的值,添加一个Cookie字段在请求头里面
注意点:Cookie传参值需要URL编码,大家记得传参的值URL编码下
在线URL编码地址:http://tool.chinaz.com/Tools/urlencode.aspx
方法二:用Javascript来设置Cookie
我们可以尝试使用Javascript来设置Cookie
我们先按F12调出浏览器的开发者工具
我们选择Console,打开浏览器的控制台,输入设置Js的语句就可以了
document.cookie="id="+escape("171")
通过浏览器Document.cookie来设置Cookie
Cookie名字为 id escape是一个编码函数,这个函数会进行一次URL编码
三、Cookie注入靶场讲解
最简单的联合查询,因为是Access数据库,我们没有系统自带表,而且Access数据库只有一个数据库,
不用纠结库名。那么怎么获取Access数据库的表名和字段名,方法只有爆破账号密码一般在盛行Access数据库
的年代,都在admin表的username和password字段中.
注意点: Cookie注入的时候一定要把GET类型的传参删除,不然优先执行GET类型传参。
如果不知道库名怎么办?
就一个库,没必要知道
如果不知道表名怎么办?
只能靠爆破了,and exists (select*from 表名) 如果页面正常,就是存在这个表
exists 这个函数就是检查子查询能否查询到数据,如果能会返回一个True
如果不知道字段怎么办?
下节课我们将教你偏移注入,来应对不知道字段名的情况
SQLmap如何跑Cookie注入
sqlmap.py -u "http://59.63.200.79:8004/shownews.asp" --cookie "id=171" --level 2
Cookie注入常见问题汇总
1.Cookie注入常见吗?
老一点的ASP网站常见,PHP看版本,因为高于5.2以上的php版本他的$_REQUEST将不再接受cookie传参
2.COOKIE注入时为什么要删除URL内的id传参
因为它传参进去会有一个输出,cookie里我们也传参了一个id数值,他会优先接受GET的传参,具体也是要看语言的,我测试过,PHP会优先接受Cookie传参
3.为什么可以cookie注入
因为在这里接受参数的时候使用了REQUEST,他可以接受get 和POST 和 COOKIE的传参
4.为什么没用到information_schema
access数据库里没有系统自带表,只能猜
5.不能查information_schema怎么得知表名
可以靠爆破和尝试一些常用表名(例如:news、admin、user)
6.为什么cookie注入里查找回显点语句后要加上from admin
因为access数据库不支持select 1,2,3 这样的语句,他必须要跟表名
7.为什么cookie注入语句后面不用加注释
这个和SQL语句的组成部分有关,你注入的地方语句如果是
Select*from news where id=1 然后注入点在id=这里自然可以不加注释
8.为什么cookie注入可以绕过验证
因为早期网站防护只检测GET和POST传参,没有检测COOKIE
9.sqlmap如何进行cookie注入
Sqlmap可以提高检测等级来进行cookie注入(检测等级3及以上,要指定参数)
还可以抓包,在Cookie后面打个*就可以了
10.在无法查询系统自带库的时候如何获取表名
可以burp抓包爆破查询表名,因为表名的命名一般都有规则
and exist(select * from xxx)
11.cookie注入和显错注入,盲注这些有什么不同
我们课堂演示的Cookie注入属于显错注入,凡事都是讲究对应,例如大对小 胖对瘦 高对矮。Cookie注入的核心是传参方式,他对应的应该是POST注入之类的。显错注入的分类很明显核心看是否是显错,那么对应的就是盲注或者报错注入之类的。
12.什么是cookie
一种储存在用户本地上的数据,指某些网站为了辨别用户身份、进行 session 跟踪而储存在用户本地终端上的数据(通常经过加密)
13.如何去修改cookie
可以抓包修改(burp)
可以在浏览器里打开f12控制台通过JS修改,还可以在存储里修改cookie
可以使用插件修改(modify headers)
14.Cookie注入中可以用盲注的方式去判断表名吗
可以呀,不过能用显错就用显错,这里即使是用盲注还是得暴力猜解表名
15.Cookie注入只能在Access数据库上面使用吗?
并不是呀,基本上所有数据库都能呀,Cookie注入核心是传参方式,传参方式和数据库类型没有关系呀,是动态脚本语言干的事,这个锅数据库他不背。
16.Cookie注入仅仅在ASP站点有吗?
Cookie注入在PHP中也有,但是最多得还是ASP,因为PHP在5.4的版本$_REQUEST就不会再接受Cookie传参了。
17.为什么我写的语句放入Cookie无效,SQL注入无效
因为Cookie需要进行一次URL编码才会有效果
18.为什么我谷歌直接修改Cookie没有效果
建议使用火狐浏览器,不要使用谷歌
19.如果用Sqlmap直接跑Cookie注入
sqlmap.py -u "http://59.63.200.79:8004/shownews.asp" --cookie "id=171" --level 2