由于微信公众号推送机制改变了,快来星标不再迷路!
01
本节重点快速预览
什么是“洋葱路由协议”?
Tor
是什么?
关于Tor
本身的一些选项用途的使用
如何通过 Tor + Proxychains-ng/Proxifier
的方式自动切换 ip ?
02
基础环境准备
Ubuntu 16.0假设为入侵者公网的一台 VPS,Tor 服务所在的机器
公网 ip: 198.13.44.217
Kali 假设为入侵者本地内网的一台 Linux 机器,Proxychains-ng 所在的机器
本地内网 ip: 192.168.122.131
03
具体实现
(1)什么是“洋葱路由协议”?其内部数据的创建,发送与加密过程的大致通信流程?
上世纪 90 年代初,美国海军研究实验室为了保护美国在线情报系统而开发了洋葱路由,之所以被称为洋葱路由是因为要发送的原始消息被一层一层加密包装成像洋葱一样的数据包。
至于被包裹的层数则取决于到达最终目的地中间所经过的总节点数,每经过一个节点就会将数据包的最外层解密,这样也使得中间所经过的任何一个节点都无法同时知晓这个消息最初与最终的目的地在哪儿,使发送者在一定程度上达到了匿名的效果。
对背景简单科普之后,我们开始发起一个匿名请求,为了组装洋葱数据包,原始消息发送者会从现有的Tor 节点中随机选出一部分,并用这些节点规划出一条线路,也就是该洋葱数据包,为尽可能隐匿原始消息的发送者,这条线路中间的任何一个节点都无法确定前一个节点是原始消息发送者还是同线路中的另一个节点。
同样,该线路中间的任何一个节点也无法确定下一个节点是最终的目的节点还是整条线路中的另一个节点,只有该线路中的最后一个节点才能确定自己是最终的目的节点,即所谓 "出口节点" ,与之相反的则是整条线路中的第一个节点,即所谓 "入口节点"。
另外,洋葱路由的所有节点使用的是非对称加密,也代表无法通过常规嗅探手段来获取节点中的敏感数据,大致的加密过程是这样:
首先,发送者会从目录节点中获取一个公钥,用此公钥把要发送的原始消息加密,然后传输给入口节点,并与入口节点建立连接和共享秘钥。此后,发送者可以通过这条连接把加密过的消息发送至线路上的第二个节点,此时发送的加密消息只有第二个节点可以解密,当第二个节点收到此消息后,便会立即与前一个节点,也就是入口节点,建立同样的连接。
这样一来,发送者的消息就可以顺利到达线路中的第二个节点,在前面我们也提到过,当前节点是无法确定上一个节点在当前线路中的具体身份的,发送者通过入口节点和第二个节点中间的这条连接将只有第三个节点能解密的消息发送给第三个节点。此时,第三个节点用和之前同样的方式与第二个节点继续建立连接,如此循环往复。
直到最后,线路上的所有节点的连接建立完成,消息最终达到出口节点,出口节点回传数据时也是以同样的方式对数据进行层层加密,只是顺序完全相反。
(2)了解完洋葱路由协议的基本运作模式之后,那么下面我们就来搭建tor服务。
首先到vps上安装tor,安装方法如下:
# vi /etc/apt/sources.list 添加源
deb http://deb.torproject.org/torproject.org bionic main
deb-src http://deb.torproject.org/torproject.org bionic main
# gpg --keyserver keyserver.ubuntu.com --recv-key A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89
# gpg --export A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89 | apt-key add -
# apt update
# apt install tor deb.torproject.org-keyring -y
# /etc/init.d/tor start 启动 tor 服务
# vi /etc/tor/torrc 编辑 tor 的主配置文件,对tor进行以下配置
Log notice file /var/log/tor/notices.log
RunAsDaemon 1
ORPort 443
Exitpolicy reject *:*
BridgeRelay 1
ServerTransportPlugin obfs4 exec /usr/bin/obfs4proxy
ExtORPort auto
PublishServerDescriptor 0
ContactInfo 88888
Nickname GentleNi
# /etc/init.d/tor restart 重启 tor 服务,让配置生效
(3)至此,tor服务基本算是搭建完成,那么下面我们就来通过tor访问外部网络。
因为我们要用 proxychains-ng
连接到 tor 的 socks 端口上,所以,事先装 proxychains-ng
,此处暂以 kali 为例进行安装,如下:
apt-get install proxychains4 -y
而后开始简单配置 proxychains-ng
,可以直接用-f 选项加载配置文件来执行。
# egrep -v "^$|^#" /etc/proxychains4.conf
# vi /etc/proxychains4.conf
strict_chain
proxy_dns
remote_dns_subnet 224
tcp_read_time_out 15000
tcp_connect_time_out 8000
# 设置代理链,此处 socks 协议类型要选择 socks5,ip 和端口务指向tor[vps]
# 这样一来,当再用 proxychains4 去启动指定程序时就会自动从 tor 网络走
[ProxyList]
SocksPort 0.0.0.0:8090
以下就是实际的代理效果:
proxychains4 -f /etc/proxychains4.conf firefox
(4)综上所述,我们应该已经差不多掌握了tor的基本应用,接下来就开始利用 tor 来实现分钟级切换 ip。
其实,非常简单,需要事先说明的是,在 torrc 的配置中,确实有换 ip 的选项,但多次测试,并无实用性,所以就得使用笨一点方法来搞。首先,tor 每次重启服务,因为内部会直接重新规划了一条线路,所以都会换切换ip,这样我们便可以简单写个脚本,定时重启服务就好,具体如下:
回到vps上。
# chmod +x tor.sh
# ./tor.sh
uto change ip
# by klionsec
tor=`which tor`
if [ ! -f $tor -a -z $tor ];then
apt install tor -y &>/dev/null
if [ $? -eq 0 ];then
echo "Tor is installed !"
fi
fiif [ ! -f /var/run/tor/tor.pid ];then
/etc/init.d/tor start &>/dev/null
if [ $? -eq 0 ];then
sleep 1;echo "Tor services is start succeed !"
fi
else
/etc/init.d/tor restart &>/dev/null
if [ $? -eq 0 ];then
sleep 1;echo "Tor services is restart succeed !"
fi
fi
而后,配置计划任务,定时执行即可实现频繁切换 ip 的效果,此处是每 2分钟重启一次。
# crontab -e
* * * * * (sleep 120;/root/tor.sh)
# crontab -l
注意看前后的时间,切 ip 的效果基本已经实现了。
(5)简单小结
不得不面对的现实是,即使使用 tor,也并不能完全做到在网络中的绝对匿名,况且 tor 本身也存在着诸多的设计缺陷,如:出口漏洞,节点监听等。
所以在使用 tor 时不要在网络中留下所有涉及到个人隐私信息相关的东西,且务必做好自己vps的防护。如果别人想在 tor 网络中找到你,比较好的办法就是社工,通过在 tor 的一些敏感特征,满世界的搜集和这些特征相关的信息,但如果反社工做的非常到位,问题基本都不会太大。
此次仅为 tor 的基本使用。值得注意的是,挂上 tor 以后,速度会稍微有些慢,这都很正常,因为它的速度取决于规划的这条链路中间的所有中继节点的网络状况。如果中继节点的网络状态都还不错,自然速度也不会太慢。另外,如果想拿 tor 访问国内的站点基本都是访问不了,因为 tor 本身就被墙掉了。
当然,除了这些外部原因,层层节点不停的加解密,对性能和速度肯定也是有一定损耗。顺便再强调一句,用 tor 来频繁切 ip 没问题,但频率不宜过快,大家在平时使用时也要尽量自己学着灵活应变。
文章来源:联想全球安全实验室
现在大家可以体验直接输入工具名称获取工具连接了!
比如“burp”“awvs”“nessus”“ladon”"Forfity"等获取最新版
微软 Word RCE (CVE-2023-21716)附PoC
更多内容查看公众号【2022HVV系列】