故事的起因:
没有想到我为了一张SSC安全峰会的门票,义无反顾的走进上了一条不归路,不是一般的坑...
首先打开网站首页是这样子咳咳~为了和谐接下来都会打上重码
我总觉得布局很像是某影视cms,所以打算先识别一下cms。
唔,不知道为什么bugscan的在线指纹识别并不能访问,或许是waf,又或许是bugscan自己的黑名单。本地cms识别。
没有结果,接下来多地ping一下。
发现cdn,并且发现似乎是美国的服务商,可能bugscan不能识别跟这个有关。绕过cdn找真实ip的方法,我在前面的文章有提到过,这里由于网站不存在注册功能,并且cdn服务商为美国,dns解析记录又没有找到真实ip(由于av域名经常换),所以这里就搁下了,不过到最后我还是拿到了,那是后话了。整个网站都加了waf,扫描起来很难受,而且这种类型的网站不做支持爬虫机制,不能从搜索引擎中获取敏感信息。端口开放信息如下:
端口开放很有限。目录扫描结果如下:
意料之中,因为上面的url基本样式都是这样子的:
可以肯定的是基于某影视cms二次开发,并且很有良心,把注册功能去掉了。子域名我并没有打算扫,因为一个如此类型的网站,会经常换域名,不太现实。
经过一番测试,我并没有找到sql注入,并且waf太过严格,大多数时间都只能用手测,实在太痛苦了,但是让我找到了一个很有意思的东西。
首先点开第一个,这里有一个友情链接的申请提交表单,我在第一时间想到了xss盲打,然而存在一个问题,如果不成功,会打草惊蛇,导致接下来的渗透变得异常艰难。
第二个广告联系,这个链接非常坑,首先我点开的时候发现是这样子的:
我??
查看页面源代码看看:
这不按照套路出牌啊?难道联系站长还得黑科技???在这里我琢磨了很久,查看链接跳转的确没啥毛病,但我总觉得不对劲,然后脑子一抽想起了那个美国的cdn,掏出了我珍藏多年的翻墙梯,重新点了一次广告联系。
??这年头,连找站长都必须不是国内ip了吗...我没有先着急加qq。继续点开第三个视频删除,没想到还能删除视频?
唔,事实证明我还是太年轻了。也算是有收获,得到了一个邮箱。整站做了静态处理,没有交互的参数,整个渗透似乎到这里就陷入了死路,我甚至写了个爬虫,递归性的爬了一整个网站,然而没有发现...突然想起可以扫c段,但是我又发现没有找到真实ip,所以压根不存在C段这个东西。吃个辣条整理一下思路,ssh可以尝试爆破一波,直接上神器
然后,我就被banip了有waf的爆破比较麻烦,但没关系,我有代理池,时间我也有的是。然后就在折磨中爆破了三天...,并没有啥结果...。
在失落中点开了目标站点,让我脑子顿时清醒了起来,他居然又换网址了,并且贴心的给了提示。
我看了一下源代码
是一个跳转链接,不过很奇怪没有写成超链接的形式,而是直接服务端跳转。测试一下是否存在url跳转漏洞,直接在index.php上get传值过去。
很尴尬并没有跳转成功,而是正常跳转到了目标新的网址。由于所有的错误都会正常跳转,导致无法通过错误信息调整payload,所以在这里我进行了大量关于url跳转漏洞的绕过尝试:首先去掉协议:
无果,去掉www:
将域名换成ip地址:
更换协议
尝试通过添加多余的"/"(%2F)符号,再对"."两次url编码成"%252E"绕过代码中对域名后".com"的切割
尝试";","/", "\", "?", ":", "@","=", "&", "."特殊字符绕过
经过了非常消磨耐性与想象力的过程,我成功测试成功payload
https://www.xxx.com/index.php?link=https://www.xxxx.com\\?https://www.baidu.com/..
实在很迷,关于url跳转漏洞的测试,有机会可以总结一下。但我突然发现一个问题,url跳转成功似乎也没啥卵用,我总不能拿去钓鱼站长,因为不知道站点的后台地址,无法模仿出钓鱼页面。我内心:
Link参数是采用服务端跳转的方式,并且没有引用js脚本,所以基本可以肯定没有xss漏洞,但是在这时候我又发现了一个信息。
他更新了,我在他这个版本里面没有发现搜索功能,但是先前的版本很可能会存在,而且更新的一般都是框架型的更新,比如说模板之类的,实际的底层代码很多都没变,既然index.php存在link参数,那么跟搜索相关的参数比说:?s,?search,?sou等等。掏出珍藏已久的关键字执行字典,丢进在自己写的扫描脚本,加上代理池,坐等结果。
s参数存活我们去看看究竟是个什么功能。
确定是搜索功能,并且为什么我搜我id会有一个不可描述的视频...我们可以尝试能否挖到反射型xss或者搜索型文本框注入。
首先是xss:
查看源码,可知我们在strong标签。
过滤了相应的关键字,尖括号等,尝试关键字大小写与尖括号重复绕过。(失败)
发现并没有过滤双引号,单引号,\
尝试未递归绕过
这个输出点并没有在标签内,并且过滤了<>尝试各种编码没办法绕过,也就是无法逃匿<strong>标签,遂放弃此输出点。但是我们还有另一个输出点
先右键源码看一下
<inputid="wd" name="wd" class="search-inputacInput" value="moza" type="text">
思路很清楚,由于没有过滤”我们可以闭合value属性,然后通过一些事件去触发弹窗。但是让我始料未及的是
Input的小括号被过滤了。我们来构造一下原始payload
moza"autofocus onfocus=alert(1)a="
代码很简单插入一个事件与一个属性,其中onfocus事件在对象获得焦点时发生,autofocus属性规定当页面加载时input元素应该自动获得焦点。
简单来说,就是它会自动获取焦点然后执行onfocus=xxxx中的xxxx。
但是()被过滤,采用location=url模式,可以将括号写为%28%29所以payload变成这个样子
moza"autofocus onfocus=location='javascript:alert%25281%2529'a="
其中%25为”%”的url编码。然而由于此处输出点过滤单引号
所以我们换一种方式传入,用this.name进行传值,所以最后的payload变成了
moza"autofocusname=javascript:alert%25281%2529 onfocus=location=this.name a="
令人窒息的是过滤了script却没有过滤javascript,故这里就不用在做编码绕过。然后我们就成功弹窗了。
这里有两个思路。第一个是加他qq然后骗他点击。第二个就是友链申请,直接丢上去。第一种感觉有点难套路,我们用第二种
然后我就去吃辣条了。两小时后收到邮件。
并且在这里拿到了真实的ip,说实话这后台地址我不想吐槽...
/h0ut4is_admin/ 不得不服
最后登陆后台
还是打码吧,要和谐,没有打算getshell,太累了。最后我的门票也到手了。
在渗透测试过程中,注意收集信息,并且需要有足够的耐心,共勉。
文章仅用于普及网络安全知识,提高小伙伴的安全意识的同时介绍常见漏洞的特征等,若读者因此作出危害网络安全的行为后果自负,与合天智汇以及原作者无关,特此声明!