*本文作者:0d9y;本文属 FreeBuf 原创奖励计划,未经许可禁止转载。
一直想发一些渗透过程的东西和大家分享,可是渗透成功呢要过很久才能发布,然后就忘记了,最近遇到了两次和前端JS对抗的渗透过程。虽然最终没有成功,不过蛮有意思的,和大家分享一下。
ONE
看到url中有一个css链接加上css这个关键属性字眼,于是等待网页加载结束后,直接右键查看源代码。
一上来就看到了一段JS代码,getArgs 再看到window.location.search就觉得这段代码需要看一看,很简单的一段代码,就是第一个函数事先获取问号以后的所有字符串,然后分割开存到args字典后返回,第二个函数把所有的特殊符号用html编码了,可以看到接下来还用了一个isinstyle的函数,没有在源代码中找到,说明他引用了外部的文件就在第五行,跟进去后看到是这样的
js代码很简洁简单就不多加介绍,就是看URLcss的参数链接里是不是没有特殊符号且域属于173和wanmei,有的话就不应用url中的css,用其自带的一个style。至此,感觉是过滤的非常严格了,如果没有\反斜杠过滤还可以构造xxx.xxx\.173.com/1.css,可是它过滤了除/意外的任何特殊字符,于是我便想,如果在173或者wmei上传一个含有恶意代码css代码的话,那是不是就可以无视这套规则了呢?可是上传一个css文件肯定是很困难的,那如果后缀是jpg的文件呢?浏览器会不会解析呢?于是先本地测试了一下,是成功解析了的。背景已经被换成了我们想要的颜色,css文件是jpg结尾的
然后去找173或者wanmei的上传点,发现对jpg的头部二进制标志有着很严格的限制,只改后缀是不行的,这时候又有一个新的问题,如果说用了二进制标志,那么css样式文件就会出错,一开始是想在头尾加上/**/注释掉再在尾巴加上style样式,可是现在头部写死了必须要用jpg的标示开头,这就陷入了一个死结。找了几个图片上传点,发现都是严格测试了jpg的头部,突然又想到另外一个版本,如上图,在头部标示后加上{}表示这是一个正常的css代码,前面的表示是其选择器的属性,然后再加上/*的注释符号尾部加上*/来结束并且写入我们要构造的恶意style代码,在本地构造参数测试成功后上传,却发现style文件并没有执行。浏览器解析后发现是0个规则,打开控制台发现错误报告,说返回的类型不是css,所以本地可以而上传到了网站就失效的原因。因为要控制返回头的类型不是很容易,所以这条路子基本上难以往下,不过构造payload和一些大胆的猜测其实还是有必要的,虽然这次疏忽了返回头这个点,至少下次就可以记住不能疏忽这个地方(tip:ie8是可以的。。。)
Two
这是一个注册页面,随便输入一个的昵称,可以看到如下图所示的界面,burpsuit没有任何的ajax请求,直接弹出了不正确
所以这个验证肯定是前端方面的验证,先构造一个符合标准的数据进行提交看看他的POST包长什么样
可以看到所有的数据都进行了加密,一开始我以为是都进行了md5加密,然后去md5加密网站把密码加密对比了一下,发现并不是md5,而是一种前端的验证。感觉游戏,因为前端验证严格的后段可能就忽略了,所有用浏览器审计一下
先全局查找一下按钮的id看看绑定的是什么事件,可以看到是validateregisterfrom事件,跟进去查找一下就出来了这个函数
发现他在前端设置flag,然后最后提交的时候眼flag是不是为true,是的话就利用加密函数加密所有信息,然后提交表单。
这里有两种办法可以绕过去,一种是浏览器打断点,把flase改成true就可以绕过这个验证,或者先输入正确的最后在上传的那个ajax语句前打断点修改表单数据,如下图
还可以把加密的函数拉出来写在自己本地的html里面或者本地html应用js文件通过调用encrypt函数,获得某个字符串加密后的数据,直接修改post数据包。
之后就是去找输出点了,这种昵称可以写数据的危害比较大,因为输出点比较多 一旦有一个地方没过滤好就GG不过我还没有找到。
总结
很多时候基础才是最重要的,基础决定你少走的不必要的弯路的让你找漏洞更加猥琐,想必那些大佬们基础一定磅礴到我们无法相信的地步了。
如果每天都坚持,心中有信仰,有目标,并且沉淀下来,不断的打牢固基础,最后一定可以成为你心中的那个人,那个独当一面的人。
*本文作者:0d9y;本文属 FreeBuf 原创奖励计划,未经许可禁止转载。