菜鸟详细解析Cookie注入原理

一、SQL注入原理

我以aspx为例,现在我们来研究下Cookie注入是怎么产生的,在获取URL参数的时候,如果在代码中写成Request[“id”],这样的写法问题就出现了。我先普及下科普知识,在aspx中Request.QueryString[“id”]用于接收get提交的数据,Request.Form[“id”]用于接收post提交的数据。如果不指定使用QueryString还是Form接收数据,WEB服务是怎样读取数据的呢,他是先取GET中的数据没有取到,再取POST中的数据如果还没有,在去取Cookies中的数据。这样Cookie注入就产生了。

二、测试环境

ASP.NET+SQL server

ASP.NET代码:

Aspx文件有两个。

Default,aspx页面代码

protected void page Load(object sender,EwentArgs e)

{

 string id=Request{"id"}.ToString();

string connuser=@"Data Source=;lnitial

Catalog=CookieDemo;lntegrated Sccurity=True";

string xx=Server.UrlDecode(id);

steing sql="select*from Cookie where id="=xx

SqlConncction conn=new

SqlConnection(connuser);

conn Open();

Sqlcommand comm""new

Sqlcommand(sql,conn);

SqlDataReader datare=comm,ExecureReader();

while(datare.Read())

{

Response.Write(datare{"name"}

}

conn.Close();

}

Test页面代码

<body>

<form id = "forml"runat="server">

<div>

<a href="test.aspx?id=2">Cookie测试</a>

</div>

</form>

</body>

数据库:

数据库建库建表代码我就不写出来了,为了节省点版面。 

三、实战演习

我们先访问Default.aspx。点击“Cookie测试”跳转到test.aspx?id=2页面,参数为id值为“2”,test.aspx页面中显示出了数据库中id为“2”相应的值。    

现在我们把地址栏中的?id=2删除掉就成了,然后在浏览,出错了。

返回了错误页面什么数据也没有,这是必然的学过脚本语言的同学很容易理解这个问题,我们没有在浏览器传达id的值,所以Request在接收id的值的时候就什么也没有获取到。这样sql语句就会出现错误,必然会返错误页面,现在我们在把地址栏中的url删除掉,在地址栏输入“javascript:alert(document.cookie="));”浏览一下弹出个提示框。

现在我们在来访问一下这个不带参数的链接,就出来了id=3的相应的值。

为了方便不懂javascript的朋友我简单介绍下。

javascript:alert(document.cookie=")就是把3保存到Cookies的id中。这样在过滤了Form,QueryString提交而没有过滤Cookie的时候,就能够Cookie注入了…基本原理就是这些了,现在实战操作下……

在地址栏输入“javascript:alert(document.cookie="))”浏览一下弹出现在在刷新下页面出现了空白页面。

两次返回不一样证明可以注入,我用Cookie注入演示怎么爆破出管理员账号密码,和常规的sql注入一样只不过是要用到Javascript,还是先判断字段然后在地址栏输入“javascript:alert(document.cookie="))”提交以后刷新返回正常。

然后在地址栏输入“javascript:alert(document.cookie="))”,返回错误。

确定字段数为2个javascript:alert(document.cookie="))刷新下页面密码就出来了。

账号密码都有了剩下的就是想办法后台拿Webshell了,由于我没有写后台测试页面,文章就到这了。这就是Cookie注入,希望对大家有帮助,SEE YOU。