这四篇啥都讲到了

https://mp.weixin.qq.com/s/PuejwrbCi8y81mHHkKITjw

https://mp.weixin.qq.com/s/KPr1uyaksp0C_BUlJ9VzXA

https://mp.weixin.qq.com/s/fM626MkP5iKCyRDNwKhUKA

https://mp.weixin.qq.com/s/GgingD4BnRg2CAN2NyQoVg

实验准备

DNS服务器

域名有现成的,证书直接从阿里云搞,服务器从野草云搞。

然配置域名解析

tlstest

NS

默认

dns.xxx.xxx

10 分钟

启用

dns

A

默认

149.104.xxx.xxx

10 分钟

启用

为什么非要搭一个域名服务器,不能直接在控制台改解析,因为免费的云解析DNS TTL最小是10分钟,也就是说如果有缓存的话A记录改完可能要10分钟才能生效,而NS记录交给自己的服务器解析,A记录的TTL就没有最小限制。

然后在防火墙开放udp的53端口,控制台里有预设,点一下DNS就完了。

然后nslookup测试一下,发现总是返回公网ip,可能本地DNS服务器有缓存。到网络和Internet->属性->DNS服务器分配里改成手动,开启IPv4,首选DNS改成8.8.8.8,再测试就随机返回了。

TLS服务器

tls服务器除了文章里的那些之外,还有两点:

  1. 编译报错unnecessary qualification,本地vscode装个远程插件和rust语法插件,连到服务器上一顿快速修复就完了。

  2. 我的redis一直连不上,不知道为什么,所以直接改了main.rs下的三个函数不再从redis里读了,直接写死

fn get_payload() -> Vec<u8> {
    let payload_str = "\r\nset foo 0 0 12\r\ntls session \r\n";
    payload_str.as_bytes().to_vec()
}
​
fn get_redirect_location() -> String {
    "https://tlstest.xxx.xxx:11211".to_string()
}
​
fn get_sleep_duration() -> u32 {
    2000
}

这俩我都搭一个服务器上了,主要是不想多花钱

报错plaintext read failed是因为curl没加-L跟随重定向

本地靶机

ubuntu20.04,上面是curl 7.68.0,curl7.73.0之后修复了。

装个memcache开起来。

实验过程

开启本机的wireshark抓VMNet8的包,虚拟机上执行tcpdump -i lo -v -w daemon.out抓本地的包

访问站点:

curl https://tlstest.xxx.xxx:11211/ -Lv

第一次DNS查询返回tls服务器IP

然后由于curl自身的dns缓存,等一分钟后发起第二次DNS查询

中间的流量已经带payload了,甚至已经被wireshark识别为MEMCACHE流量了

一分钟后发起DNS查询,返回127.0.0.1

可以看到DNS查询后向127.0.0.1:11211发送了payload

连接memcache查看


懒狗一条