127-隧道搭建&穿透上线&FRP&NPS&Ngrok

使用了几种工具将会一一介绍

  • ngrokru

项目地址:Sunny-Ngrok内网转发内网穿透 - 国内内网映射服务器

这个网站现在要实名认证(还得花2元解锁)

用这种在线的网站怎么说呢,真不如自己买个云服务器用下面的frp,毕竟流量由其他人转发不安全的还是

  • frp

内网穿透-frp简单的使用:

工具地址:https://github.com/fatedier/frp/

在发行版本里面可以下载对应的文件

使用例子:

我这里下载的使用Linuxamd64版本,解压后里面的文件

frpc 和 frp.toml 是客户端 需要配置的文件

frps 和 frp.toml 是服务端 需要配置的文件

一般修改这两个.toml配置文件

用这个frp需要一台云服务器做跳板,frps.toml文件bindport就是云服务器开放的端口

frpc.toml的设置上面两个就是服务器的ip和前面设置的开放端口,然后name随便取,type有多种可以选,常见的tcp,HTTP,udp好像都可以的,localip一般就是127,端口也是自定义,remoteport的意思是服务器又开放一个端口,然后这个端口可以让其他主机来连接到内网中之前和云服务器建立连接的那个主机

kali配置一下frpc.toml,上面那个图是云服务器,就开放了个7000端口

简单画个图来解释一下

可以看到左边内网和云服务器是互通的,就是用正反向木马这里没有影响的,看正反向全看右边这个是正向连的还是反向连的,当然一般是内网的反弹出来,不过也有同样是公网ip的可以正向去连接嘛

服务端运行 ./frps -c ./frps.toml

客户端运行 ./frpc -c ./frpc.toml

使用frp的简单cs上线实验

实际上kali和win7 在一个内网,不过反弹的木马绑定的端口是云服务器的就没有什么问题

云服务器开放7000端口(实例记得在安全组那里也要开启端口的限制)

kali攻击机配置客户端

云服务器先运行 ./frps -c ./frps.toml

在运行kali上的客户端 ./frpc -c ./frpc.toml

因为没有没有其他内网也没有其他的云服务器了只能简单的用一个我的另一台虚拟机来上线一下,毕竟只要走的是这个转发的管道成功上线了那就没有问题

kali上面生成一个木马,这里绑定的是云服务器和对外开放连接的6000端口

然后将生成的木马放到靶机中,这里我用的是一台win7的,kali开run,win7 点击木马,可以看到正常上线了

这个工具需要自己有云服务器,用起来还是很方便的很容易上手

  • nps

前面的ngroku就是仿照这个nps项目来的,这个项目也有一个网页版的控制台,用起来非常的舒服感觉

nps简单的使用方式:

这个工具好像很久没有更新了,最后的发布版本也是2021年的时候

使用演示云服务器乌班图和客户机kali,所以下的都是amd64位的客户端和服务端

服务器先./nps install 第一次先安装一下

nps的默认端口:

nps默认配置文件使用80,443,8080,8024端口

主机模式默认端口的 80 和 443 端口

8080 Web管理访问端口

8024为网桥端口,用于服务器和客户端之间的通信

这些都可以在conf中的nps.conf文件中进行修改

启动./nps 或者./nps start 关闭./nps stop 但是我试了下start好像端口被占用的时候会卡着

然后会开启一个网站,通过服务器ip地址和8080端口访问,默认admin 123 修改可以去前面说的那个nps.conf文件进行修改(不对这里我尝试修改了没有用怎么回事。。。)

然后设置客户端,备注取个名字就可以了

添加成功机会生成一个密钥

然后点击右边的隧道,这里就可以进行添加对内网主机的一些设置,如开放本服务器上的哪个端口和内网做映射,使用什么协议,填写内网的主机的ip和端口

比如这里我使用tcp协议并且

然后记录一下之前生成的那个密匙

然后再客户端那里进入npc目录输入命令

./npc -server=服务器ip:8024 -vkey=前面生成的密匙

再次在服务端上刷新页面会发现状态变成了在线状态了,并且会显示客户端使用的公网ip地址

此时内网的7777端口已经映射到服务器上的6666端口了

这里我也做了相关的木马上线的实验有道云笔记

使用tcp不太明显可以将内网的web映射到公网比较明显

新生成一个客户端

点击隧道新增,我这里使用的是8888端口

然后再Windows上面运行一样的命令就可以上线了

nps内网穿透简单上线木马:

新建一个客户端,然后添加一个tcp隧道并且开放8899端口

使用kali与服务器建立连接

然后使用kali生成木马,这里设置的接受ip是云服务器的ip,端口我这里是8899

然后开启msfconsole,设置好监听器后run之后靶机运行木马可以看到确实上线了

这个工具相比其他的工具长处在于支持了udp协议,并且拥有网页界面进行管理很方便

  • spp

项目地址:https://github.com/esrrhs/spp

和前面的相比他拥有隧道技术,可以转换各种协议功能更加强大

目前此工具持续更新中还是很香的

spp隧道技术的简单复现:

因为是做的隧道技术所以不需要云服务器也可以

服务器开启监听

./spp -type server -proto ricmp -listen 0.0.0.0:8888 可以指定ip和开启的端口,也可以不指定端口表示监听所有的端口

客户端开启,将本地的8082弹到服务器的8081上面(将tcp封装为ICMP协议)

spp -name "test" -type proxy_client -server 服务器IP地址 -fromaddr :8082 -toaddr :8081 -proxyproto tcp -proto ricmp

本次实验通过cs来实现上线一个木马

建立两个监听器

spp-1:服务器ip :8082

spp-2:127.0.0.1:8081

将spp-2木马放入靶机,启动木马后会将tcp协议的流量转到本地的8081端口,因为运行了spp,在这个8081端口会被转为icmp协议弹到服务器的8082端口,然后spp-1监听就是本机的8082,并且服务端也运行了spp会先将这个8082的协议由icmp转为tcp再返回给服务器的8082端口

两个监听器都是http协议的

先开启服务器的spp

靶机上开启spp

连通了就是这样的

然后运行木马,可以看到执行的是spp-2生成的木马但是是由监听器spp-1收到的会话

不过虽然收到了会话但是不知道为什么在cs这里无法执行命令。。。第一次用还不怎么会用,不过这里的实验防火墙规则确实是开启了确实实现了通过隧道上线的操作。。。

附:此笔记为当时学习的笔记,如果有什么讲错的地方也很正常,里面出现的云服务器的ip地址都是临时买的。

<think>嗯,用户想了解如何使用subprocess.run来执行nohup ./nps &这样的后台命令。首先,我得回忆一下subprocess模块的基本用法,尤其是subprocess.run的参数设置。记得subprocess.run默认会等待子进程结束,所以如果直接执行带有&的shell命令,可能需要使用shell=True参数。不过,使用shell=True可能会有安全风险,如果用户输入不可信的话需要提醒。 然后,nohup的作用是忽略SIGHUP信号,让进程在终端关闭后继续运行。而&是将进程放到后台执行。这两个组合起来通常用于启动后台服务。但问题在于,当通过subprocess.run执行时,即使加上&,父进程(也就是Python脚本)可能会等待子进程结束,因为shell可能会立即返回,但实际进程可能还在运行。这时候可能需要处理标准输入输出,因为nohup默认会输出到nohup.out,或者需要重定向。 接下来考虑具体的代码实现。用户可能想用类似subprocess.run(["nohup", "./nps", "&"])的方式,但这样不行,因为&是shell的操作符,不是命令参数。所以必须通过shell=True来执行整个命令字符串。正确的写法应该是subprocess.run("nohup ./nps &", shell=True, check=True)。不过,这里可能需要处理输入输出,比如关闭stdin、stdout、stderr,或者重定向到文件,否则subprocess可能会因为管道问题而挂起。 另外,使用shell=True时,要注意命令注入的风险。如果./nps的路径或参数是用户可控的,可能会有安全问题。但用户这里的情况是固定的命令,所以问题不大,不过还是应该提醒这一点。 还需要注意subprocess.run的选项,比如detach进程。可能需要设置start_new_session参数,类似于nohup的效果,但这里已经用了nohup,所以可能不需要。不过,有时候双重保障可能更好,但需要测试。 还有,当使用shell=True时,子进程的PID可能不是nps的PID,而是shell的PID,所以如果需要获取子进程的PID,可能需要使用其他方法,比如pgrep,但用户的问题可能不需要这个。 总结步骤应该是:使用shell=True执行整个命令字符串,处理输入输出重定向,确保进程正确后台运行,并且Python脚本不会等待。同时,提醒安全注意事项可能需要的错误处理。</think>在Python中使用`subprocess.run`执行`nohup ./nps &`这类后台命令时,需注意以下关键点: --- ### 1. 直接执行的问题 ```python subprocess.run("nohup ./nps &", shell=True) ``` - **表面可行但存在隐患**:虽然能启动后台进程,但`subprocess.run`默认会等待子进程结束。若`nps`进程未完全脱离,可能导致Python脚本阻塞 --- ### 2. 推荐解决方案 ```python subprocess.run( "nohup ./nps >/dev/null 2>&1 &", shell=True, check=True, stdin=subprocess.DEVNULL, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL ) ``` - **关键参数说明**: - `>/dev/null 2>&1`:重定向输出,防止nohup生成默认的`nohup.out` - `stdin/stdout/stderr=subprocess.DEVNULL`:关闭文件描述符,避免父进程挂起 - `check=True`:检查命令执行是否成功 --- ### 3. 更安全的替代方案(推荐) ```python with open(os.devnull, 'w') as devnull: subprocess.Popen( ["./nps"], stdout=devnull, stderr=devnull, stdin=devnull, start_new_session=True # 替代nohup的作用 ) ``` - **优势**: - 避免使用`shell=True`,降低安全风险 - `start_new_session=True`等效于`nohup`的防SIGHUP功能 - 更规范的输入输出处理 --- ### 4. 注意事项 1. **安全警告**: - `shell=True`存在命令注入风险,若参数含用户输入内容需严格过滤 - 推荐优先使用`Popen`+参数列表方式 2. **环境依赖**: - 确保执行目录正确(可通过`cwd`参数指定工作目录) - 注意环境变量继承问题,必要时使用`env`参数 3. **日志管理**: ```python with open("nps.log", "w") as logfile: subprocess.Popen(... , stdout=logfile, stderr=subprocess.STDOUT) ``` 可自定义日志输出位置 --- ### 5. 验证进程状态 执行后可通过以下命令验证: ```bash ps aux | grep nps # 查看进程是否存在 lsof -p <PID> # 检查文件描述符是否正常关闭 ``` 通过以上方法,即可安全可靠地实现后台进程的启动与管理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值