1、什么是cookie?
cookie就是代表你身份的一串字符串,网页根据cookie来识别你是谁,如果你获得了管理员的cookie,你可以无需密码直接登录管理员账号。
2、cookie注入原理:
在动态脚本语言中存在超全局变量可以获取多种传参方式(基本上)
很多时候开发在开发的时候为了考虑到多种接受参数,在接受参数的时候都是用多种解释传参的方法
例如:
php中的$_REQUEST[] 可以获取POST|GET|COOKIE传参
注:php 5.4以上版本就不会接受Cookie传参了。
如果说开发用了$_REQUEST[]来接受参数?然后我们的POST和GET传参被Waf拦截了怎么办?
那么也许Waf没有对Cookie进行检测,我们尝试用Cookie进行传参,然后不就可以绕过检测机制!!
3、cookie设置方法:
1、通过浏览器设置
2、burp抓包修改
3、浏览器插件修改
4、浏览器自带js进行修改 => document.cookie
cookie注入=>特殊的传参方式产生注入 cookie跟数据库没有关联
当POST-GET被拦截的时候可以尝试使用cookie传参
::
注意点: Cookie注入的时候一定要把GET类型的传参删除,不然优先执行GET类型传参
:::
什么网站存在cookie注入
asp的网站存在可能性较大
php低于5.3的版本可能性较大
4、Access数据库
Access数据库结构 => 表、字段、 不存在库
——
最简单的联合查询,因为是Access数据库,我们没有系统自带表,而且Access数据库只有一个数据库,不用纠结库名。那么如何获取Access数据库的表名和字段名。
依靠爆破,and exists (select*from 表名) 如果页面正常,就是存在这个表
exists 这个函数就是检查子查询能否查询到数据,如果能会返回一个True
5、实战练习
网站:asp站
发现页面存在: id =171
当id 171-1后 页面反回170页面 ,存在sql注入
输入and 1=2 页面都被拦截
当页面被拦截后我们通过浏览器插件来设置cookie,设置好后在插件写入我们要输入能被执行的sql语句
先判断字段数,cookie注入一般都需要进行一次url编码,这是编码后的样子,order by 11页面数据库出错,order by 10 页面正常 这里存在10个字段 ,我这里显示的是11的截图
查询表名 Access数据库 只有表和字段 没有库名 需要满足条件才能够正确查询 (因为Access没有库的原因,只能靠瞎猜表名)
构造语句:171+and+exists(select*from+admin) 查询存不存在admin这个表,如果存在页面正常,反之页面出错
当存在admin这个表,我们构造语句让页面出现回显点,这是构造的语句:171 union select 1,2,3,4,5,6,7,8,9,10 from admin,图下面是编码后的样子,页面有3个回显点
页面有回显点后继续瞎猜admin表里有没有 userna、password这两个字段,有这两个字段,页面出现admin和b9a2a2b5dffb918c数据
(因为Access没有库的原因,只能靠瞎猜字段名)
5、SQLmap工具跑cookie注入
这里使用的是burp抓取数据包跑法
burp抓到数据 在cookie值哪里打个*
输入指令 python sqlmap.py -r 32.txt ##( 32.txt是抓到的数据包)
-T admin -C password --dump直接拿数据
有工具辅助事半功倍 (第一次跑拿kali虚拟机跑的,第二次本机跑)
6、登录后台管理
御剑直接扫描后台,得到后台管理
拿刚才得到的账号密码来尝试登录你会发现一直死活登不进去,一直显示密码错误
最终拿去MD5解密才能登录上去拿到Flag
附测试链接:http://59.63.200.79:8004/shownews.asp?id=171