如何搭建一个高匿名的内部论坛

入职腾讯的时候,同学们给我推荐了一个App:同事, 这个App 为同事之间提供了匿名交流的平台,各种高压线、污秽色情的信息络绎不绝,相当刺激。
这个App 17年后期就出现HTTPS 证书过期、短信通道欠费收不到短信等问题,看起来要倒闭。有时候在想如果要搭建一个替代品,该如何平衡匿名性,又能验证是腾讯员工,我会怎么做,最后想了一个折中的办法。
前提:员工不信任论坛管理员。

 邮件列表

一开始的想法是通过邮件列表,因为邮箱还能匿名注册,而且有各种各样的移动客户端。怎么验证员工身份?无论是工作邮箱发验证码还是什么,只要涉及员工工作邮箱,服务端就有可能记录对应关系。或者通过邀请制度?又感觉不够收敛。做一个网站,只有内网可以访问,然后每日生成邀请码?Bingo,突然想到可以限制注册的来源,限制内网注册即可。

 Flarum

没做邮件列表,基于Flarum开始搭建。
域名:免费的.tk 域名玩一玩,开隐私保护,tongshi.tk。
服务器地址隐藏:cloudflare 免费CDN,全站开启。
收集腾讯内网出口的IP 地址范围,三个段:
14.17.22.0/24
103.7.28.0/22
103.7.29.0/24
开启HTTPS 支持,防止在公司内网访问,被中间人监听 🙈 。
由于使用了CloudFlare 做全站CDN,遇到一个问题,没法校验客户端IP,2个解决方法:
map $http_cf_connecting_ip $allowed {
    default deny;
    ~\s*14.17.22.*$ allow;
    ~\s*103.7.28.*$ allow;
    ~\s*103.7.29.*$ allow;
}
测试了一下,客户端自己伪造这个头,无效,还是会被CloudFlare 重写为正确的客户端IP。
安装插件reflar/user-management,关闭邮箱注册。
Disable email registration
在注册接口上限制一下:
location /api/reflar/usermanagement/register {
    if ( $allowed = 'deny' ) {
        return 403;
    }
    try_files $uri $uri/ /api.php?$query_string;
}
搞定~
tongshi-tk
试验一下想法,过三天这台机器就到期,关了。
总结一下思路,通过办公网出口IP 做注册限制,较宽松的员工认证手段,又保证了一定的匿名性。
当然如果公司自己愿意做的话,在内网搭就非常简单了。然而这东西对于公司来说是洪水猛兽,审查还来不及。腾讯内网的乐问有匿名发帖功能,然而又有几个人信任匿名的安全性呢。

宿主机使用VM的代理

虚拟机使用宿主机代理,不用设置额外VMware的转发,只需添加代理的地址与端口
手机也能使用虚拟机所配置的本机代理服务器,不需要同宿主机设置专属的VMware转发
除默认配置的仅主机模式外,宿主机使用VPN会影响全局网络,虚拟机可以直接访问互联网
虚拟机采用的是非全局性的独立网络,也因此在虚拟机使用VPN并不能使宿主机也能够访问互联网

在NAT模式中,虚拟机通过宿主机器所在的公网网络来访问互联网(目前在墙内),vm使用代理软件转发端口监听任意地址,主机在代理中配置同一公网内的局域网IP与端口,完成网络之间的互联共享。以下是具体实例:

在NAT模式中不考虑使用VPN或代理的情况下,IP地址是完全一致的

在vm中开启v2ray以及配置privoxy相关参数0.0.0.0:8118监听任意地址开启的8118端口,将所有http流量再转发至本机代理

在vm设置代理本机地址与privoxy代理的监听端口

查看vm局域网地址

VMware设置端口映射

宿主机中设置代理,填入vm的IP地址与端口

测试

对 Cobalt Strike DNS隧道的理解与实战

0x01 开始之前,有必要先稍微理解下基于dns beacon的大致通信过程,其实,非常非常简单,前提是你对dns的解析过程早已经烂透于心,不熟悉的朋友可以先去参考前段时间写的 [DNS 深度理解 一] ,把基础打扎实了,再回过头来理解这些东西自然就易如反掌了

1
2
3
-> beacon shell会向指定的域名发起正常的dns查询
-> 中间依然是经过一些列的常规dns迭代及递归查询,大致过程就是,一直从根开始找,直到找到我们自己的ns服务器,最后再定位到团队服务器ip,仅此而已
-> 也就是说,第一次通信可能会慢点,后续就会稍微快些,不过说实话,dns再快也快不到哪里去,毕竟,我们要的是足够的隐蔽,而不一味追求速度,不然容易露点

 

0x02 废话说完,我们就开始来尝试在实战中应用,首先,你要先买台vps,亚马逊或者vultr都挺不错的,自己也一直在用,之后装好系统,推荐用ubuntu,此处演示用的是ubuntu 16.04.2,具体的系统安装方法直接一路点点点就好了,全程傻瓜化,大概等个六七分钟,待系统初始化完成就可以用ssh连上去了
  

0x03 成功连到vps上以后,接着就开始配置jdk,关于对jdk版本的选择需要稍微注意下,jdk版本和cobalt strike版本务必要保持兼容,因为演示的用的是cobalt strike 3.8,所以此处就用的jdk1.8,如下,则是jdk在Ubuntu中的具体配置过程

1
2
3
4
5
6
7
8
9
10
wget http://enos.itcollege.ee/~jpoial/allalaadimised/jdk8/jdk-8u152-linux-x64.tar.gz
tar xf jdk-8u152-linux-x64.tar.gz
mv jdk1.8.0_152/ /usr/local/
ln -s /usr/local/jdk1.8.0_152/ /usr/local/jdk
# vi /etc/profile
export JAVA_HOME=/usr/local/jdk/
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
export CLASSPATH=.$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar
# source /etc/profile
# java -version

 

0x04 搞定vps,再紧接着就要去准备域名了,推荐直奔 godaddy,别问我为什么,以后你就会明白的,注册域名时切记千万不要用真实的个人信息,别用太扎眼的字符,如,hack,sec,fuck,rootkit,backdoor 之类,不然,别人一眼就看出来了,可以选择注册一些非常常规的,如 shop,book,之类……相对还容易蒙混过关,域名搞定以后,就可以来配置解析了,如下,首先,你要创建一条A记录,A记录务必要指向我们自己团队服务器的ip,而后再创建几条ns记录,此处创建了三个ns记录,实际中还可以更多些,然后再把所有ns记录的A记录指向刚刚创建的A记录,也就是说,让解析可以准确的找到我们的团队服务器位置,此处是整个过程最核心的一步,务必要好好理解

0x05 域名解析配置完成后,我们可以拿 dig +trace 域名先来简单跟踪下域名解析过程,看看我们的ns最后是不是被解析到了之前指定的A记录上,如果解析不到,也就意味着你的payload回连时很可能就定位不到团队服务器,后果就是无法正常上线,此处务必成功,再往后继续,否则都是徒劳

0x06 一切准备就绪,在本地用cobalt strike客户端连到我们的团队服务器上,创建监听器和payload,注意,这里的payload要选择beacon_dns,host要用A记录的域名,端口随意,最好用一些穿透性比较强的端口

此处是用于解析上述A记录的ns服务器域名,把我们之前创建的那三个ns域名全部加进去,用逗号隔开即可

最后,再基于此listener创建payload,丢到目标机器上执行,稍微等一下,即可看到目标成功上线后的效果,如下

此时,再回到目标机器上看看都发生了什么,首先,是目标机器不停发送针对我们域名的dns请求,因为它最终要定位到团队服务器把封装在里面的数据传给它

再来看看目标机器的进程端口,我们发现只有进程,似乎没端口,其实并不是没端口,而是在睡眠,我们暂时看不见而已



后话:
    俗称 域名上线,只不过底层用的是dns协议,而非http,https,或者udp…使用dns的好处,想必就不用再多说了,大家应该早都熟透了,域名相对于ip有更强的隐蔽性,而且它相对比较固定,只要没被发现,解析到的ip是可以随便换的,也就是说,不用担心你的权限再因为这样的原因掉了,这样也给了我们更多的灵活性,另外,cobalt strike也非常轻量,在目标机器上几乎是感觉不到的,在你自己团队没有很强的RAT能力时,Cobalt Strike将会是个非常不错的替代品,因为一些原因,没法说的很详细,大家如果有问题,可以随时在公众号中私信交流 ^_^

from 

https://klionsec.github.io/2017/12/28/cobalt-strike-dns/