Cookie注入简介
什么是Cookie?
Cookie就是代表你身份的一串字符串,网站根据Cookie来识别你是谁,如果你获取了管理员的Cookie,你可以无需密码直接登陆管理员账号。Cookie的出现是为了给用户更好的体现,从安全的角度来讲,Cookie本身就是不安全的
为什么可以Cookie利用进行注入?
在动态脚本语言中存在超全局变量可以获取多种传参方式(基本上)
很多时候开发在开发的时候为了考虑到多种接受参数,在接受参数的时候都是用多种解释传参的方法
例如:
php中的$_REQUEST[] 可以获取POST|GET|COOKIE传参
如果说开发用了$_REQUEST[]来接受参数?然后我们的POST和GET传参被Waf拦截了怎么办?
那么也许Waf没有对Cookie进行检测,我们尝试用Cookie进行传参,然后不就可以绕过检测机制!!
注:php 5.4以上版本就不会接受Cookie传参了。
怎么设置Cookie
方法一:
使用burp抓取数据包直接修改数据包的值,添加一个Cookie字段在请求头里面。注意点:Cookie传参值需要URL编码
方法二:
用Javascript来设置Cookie
我们可以尝试使用Javascript来设置Cookie
我们先按F12调出浏览器的开发者工具
我们选择Console,打开浏览器的控制台,输入设置Js的语句就可以了
通过浏览器Document.cookie来设置Cookie
Cookie名字为 id,escape是一个编码函数,这个函数会进行一次URL编码
document.cookie="id="+escape("171")
方法三:
使用浏览器插件Modify Headers,如下图
谷歌插件下载地址:https://pan.baidu.com/s/1Vak4FaZVU5w4y9g-MxX81w 提取码:nt48
火狐插件可在扩展组件里面直接下载安装
Cookie注入实现
靶场简介:
最简单的联合查询,因为是Access数据库,我们没有系统自带表,而且Access数据库只有一个数据库,不用纠结库名。那么怎么获取Access数据库的表名和字段名,方法只有爆破
账号密码一般在盛行Access数据库的年代,都在admin表的username和password字段中
注意点: Cookie注入的时候一定要把GET类型的传参删除,不然优先执行GET类型传参。
如果不知道库名怎么办?
就一个库,没必要知道
如果不知道表名怎么办?
只能靠爆破了,and exists (select*from 表名) 如果页面正常,就是存在这个表
exists 这个函数就是检查子查询能否查询到数据,如果能会返回一个True
如果不知道字段怎么办?
可以使用偏移注入,来应对不知道字段名的情况,接下来文章会写
注入实现:
打开靶场所在位置,这是一篇新闻,尝试正常注入,如下
删除get传参,尝试使用Cookie传参,看能否正常打开页面,如下
判断注入点:
此处经过测试此处传参是整形,使用and 1和and 0,来观察页面变化,注意:插件中的空格要用+号代替,如下
猜测数据表:
通过exists函数判断admin数据表是否存在,如下图
猜测字段名:
这里除了偏移注入,剩下的就只能靠猜了,也可以使用exists函数,如下
判断字段数及回显点:
经过测试发现共10个字段,多个字段回显,payload:id=-171+union+select+1,2,3,4,5,6,7,8,9,10+from+admin,如下图
获取数据:
知道存在username字段,直接获取用户名,payload:id=-171+union+select+1,username,3,4,5,6,7,8,9,10+from+admin,如下图:
自动化工具
sqlmap:
就上述例子:
SQLmap如何跑Cookie注入
sqlmap.py -u "http://xxx.xxx.xx.xx/shownews.asp" --cookie "id=171" --level 2
注意只有level 2以上sqlmap才会跑cookie
暂时这些吧