过waf总结

怼了几天waf,简单总结下。

  • 第一类waf,像安全狗,云锁此类,直接安装在目标服务器上。首先,需要注意的是,这类东西一旦触发警报,就会立刻短信通知站长,所以盲测动静是很大的。从防护方式上来说,以安全狗为例,就是简单粗暴的去匹配HTTP报文里的危险字符串,所以我们以只需要简单粗暴的绕过他的正则就行了。这就需要结合具体的语言特性和各种tricks了。
    另一种绕过思路,就是构造畸形的HTTP报文,由于waf和中间件对HTTP报文的认知不统一,造成绕过。往往waf对HTTP报文的格式要求比较严格,而中间件对报文格式要求比较松散。

最后就是攻击waf本身,例如请求一些畸形数据或者发送大量垃圾数据来使waf挂掉或者失效。

  • 云waf,这类waf的原理是先把流量引入waf服务器,经过过滤再发往目标服务器。当然上面的绕过思路可以借用到这里。另外,最简单的办法就是让流量不经过waf服务器。找真实IP是比较简单的办法。

云锁,安全狗此类都采用了cs架构,所以,上述两类waf其实还有个共同点,就是他们都能在远端进行管理,如果能社到客户端的登陆账号......

暑假第一个站

懒得截图,简单文字记录,最后没拿到shell,算一次失败的渗透。
暑假准备找套四级视频来看看,在一个论坛看到一套还不错的视频,但是注册还nm要买邀请码,然后就打算搞一搞。

信息收集

  • 架构: Linux + nginx + php5.3 + discuz x 3.2

  • 端口: 3306, 22, 80

  • CDN: cloudflare

既然有CDN,第一步自然就是找到真实IP,这样后面会方便许多。这里还是比较好找的,下面几处都泄露了真实IP:

  • 右键查看源码,网站静态文件泄露

  • 注册时,查看邮箱头

  • 查DNS历史解析记录

  • http://crimeflare.com

  • 利用DZ的SSRF
    成功找到了真实IP,继续收集信息。

fuzz一下目录,扫到了几个压缩包:

  • 1.rar

  • 666.zip

  • 888.rar
    ......

看来管理员挺喜欢用压缩包备份文件,于是用dirbbuster再fuzz一遍rar和zip,得到了大概10个左右压缩包,并且有phpmyadmin。
从中提取出一些有用的信息:

  • 几台ftp服务器和密码

  • 数据库连接账号和密码

  • uc_key

  • 一台3389及账号密码

似乎服务器已近在咫尺....

初步尝试

首先,我拿得到的ftp和3389登陆,发现没一个登陆得上,crying。可能是时间太长,密码已经更换。而且,他的密码不带重样的,也看不出来明显的规则。还好,phpmyadmin登陆进去了,但是不是root,也没有任何文件操作权限。dz的数据库,讲真作用不是很大,密码解不了。
我从数据库里提取的唯一有用的信息就是,网站有两个管理员:
创始人---admin
副站长---admin888
但是拿不到密码,我试了按网上的重置也不行,不清楚dz的加密算法到底是怎样的。
数据库这里就到此为止了。

寻求突破

第一步失败后,按优先级整理下思路:

  • 利用uc_key重置管理员密码,进后台尝试getshell

  • 利用SSRF探测内网端口

  • 整理字典,爆破22

  • 社工

从网上的资料来看,这个uc_key很有用。一说是可以直接getshell,二说是能重置任意密码。首先尝试了getshell,失败告终。重置密码动静较大,于是我挑了个天干物燥的夜晚,按照这个姿势重置了admin888的密码,先搞到了我要的那套视频hhhh
进去之后,首先查看了更新时间 Discuz! X3.2 Release 20150609
dz后台getshell主要有以下几种常见方式:

  • 缓存包含

  • 图片包含

  • 第三方插件

  • ImageMagick

  • 大牛的0day

我本地搭了个同样版本的dz,尝试了前三种方法,全部失败。利用imagemagic需要知道物理路径,划掉。
进了后台,搞了很久也没有拿到shell,又陷入了江局。这时想起来还有个SSRF,赶紧在后台看了下redis和memcache,尴尬的是,都关了。

社工

dz后台有一个插js的地方,于是我想利用它来劫持网页,利用社工传shell。大致的思路是:
劫持网页,显示网站出错需要修复,修复的方法就是传一个指定文件到目录。最后的效果是这样的:

1.png

这个错误页面是有来源的,有些时候安装插件就会遇到这个错误页面,只不过我把修复文件里插入了我的马。
劫持代码:

<script>
function myFunction()
{
var str = '......';
document.write(str);
}
setTimeout(function(){ myFunction(); }, 1000);
</script>

然后就浏览器开自动刷新一直等啊等,直到phpmyadmin被删,数据库密码被改......是的,穿帮了。当我再次尝试重置密码,似乎也补了。

总结

虽然这次渗透以失败告终,但也算拿到我要的东西了,没有白搞一场。反思一下,没拿下的原因,一是很少搞dz,没有收集过EXP,二是没什么耐心,跳过了爆破,而直接尝试社工这种冒险快捷的方式。其实我是收集了蛮多密码的,并且还有几台其他相关服务器的IP,有耐心的话,完全可以尝试挨个爆破,说不定能在其他机器上找到有用的信息。后续如果再搞的话,一是我上面说的爆破,二就是社他的空间商,直接拿到文件管理系统或者ftp之类的。

更新

经朋友提示,dz的密码可以解的,我昨天找错库了,没看到salt,正确的库应该是pre_ucenter_members