Access数据库---Cookie注入

一.什么是cookie?

Cookie就是代表你身份的字符串,网站根据Cookie来识别你是谁!假如你获取了管理员的Cookie,你可以无需密码直接登录管理员账号。但是有的网站开发人员考虑到安全问题,会给cookie上时限。
例如:有的网站我们在第一次输入密码登录后,即使你把游览器关闭了,在cookie未失效期间登陆网站都是不需要输入密码的!一般是半个小时,有的会更短(10分钟的也遇到过)!

二.注入原理

基本上在动态脚本语言中存在超全局变量可以获取多种传参方式,而开发为了考虑到多种接受传参,在接受传参的时候都是用多种解释传参的方法,比如:
php中的$_REQUEST[]可以获取到POST/GET/COOKIE传参
但是:php5.4以上版本就不会接受Cookie传参。

三.注入步骤(细节满满)

1.常见的cookie修改方式

  • a.利用游览器
    游览器一般都是默认在你第一次登陆网站后将你的cookie本地进行缓存,你也可以设置关闭次功能。Access数据库---Cookie注入_第1张图片
    可以自己添加cookie
  • b.游览器+js函数
    我们可以在游览器的控制台输入js函数document.cookie=“1=”+escape(“666”)Access数据库---Cookie注入_第2张图片
    这里发现网站的cookie没有修改成功,这是因为这里的传参存在一个优先级,当同时存在GET和cookie时,他会优先运行get,所以为了让我们输入的先运行,就得把GET传参去掉,即:去掉”?1=111“
    Access数据库---Cookie注入_第3张图片
    js函数document.cookie=“1=”+escape(“666”)中的各含义:
    document.cookie:表示当前页面的cookie变量(cookie注入中固定格式)
    escape:对字符串进行特定编码(提高代码与游览器的兼容性)
  • c.burp抓包手动修改

2.判断是否存在注入
主要判断网站是否接受cookie传参,例如:
https://127.0.0.1/11.php?1=111正常访问后去掉?1=111,直接在URL栏或者在控制台document.cookie=“1=”+escape(“111 and 1=1”)页面回显正常,但当我们输入document.cookie=“1=”+escape(“111 and 1=2”)页面报错,这说明我们输入的1=1/1=2被当作做代码执行了,所以极大可能存在注入。接着尝试获取内容!
3.猜字段
利用 order by 函数逐个递增字段数直到页面报错位置,假如order by 3时报错,说明总共有3个字段。

因为access数据库没有系统自带库,无法利用information_schema来查询库名,表名等,另外js函数的缘故,我们要在知道库名后才能判断网站显错位,所以注入步骤与SQL注入有点区别!
4.爆破库名
因为没有系统自带库的缘故,我们不能利用常规办法使用SQL代码查询库名,只能靠猜或者burp爆破。
在控制台输入document.cookie=“1=”+escape(“111 and exists(select *from 6666)”)抓包选择‘6666’添加字典爆破库名,字典可以上网查,或者是使用sqlmap自带的tables字典Access数据库---Cookie注入_第4张图片
exists()的作用:
exists(子查询)如果子查询为空,返回false,反之则返回true,函数原理与SQL注入中的布尔盲注类似!

5.判断显错位
在access盛行的年代,一般在admin表中都有username和password字段,所以我们可以直接查看显错位,在爆破得到库名后输入
document.cookie=“1=”+escape(“111 union select 1,username,password from 库名”)判断显错位

我们不能让SQL注入的固定步骤来限制我们挖注入漏洞的思维,要学会变通,多思考!

6.sqlmap跑cookie注入
常规方式指定参数即可,例如:

python sqlmap.py -u "URL" --cookie"1=111" --level 3 --risk 2 

四.防御方法

1.加防篡改验证码,加个登录随机验证码
2.使用转义函数对$_COOKIE[‘’]进行转义
3.使用MYSQLi参数化查询

你可能感兴趣的:(你我的开始,数据库,php,安全)