python Trojan 模組(我忘記幾了)—— 通訊隧道建立

pwn2web發表於2019-07-02

0X01  SSH的建立 

我想,第一步先實現簡單的ssh通訊再說,類似其他那種高階的C&C將逐步研究

對於ssh,python有個module叫paramiko,對沒錯看起來像日語單詞

The introductions of some modules are as follow:

 

1、SSHClient類
SHClient類是SSH服務會話的高階表示,封裝了傳輸、通道以及SFTPClient的校驗、建立方法,通常用於執行命令。
 
1)connect方法
connect(self,hostname,port=22,username=None,password=None,pkey=None,key_filename=None,timeout=None,allow_agent=True,look_for_keys=True,compress=False)
引數說明:
hostname:連線目標的主機地址
port:連線目錄的埠,預設為22
username:使用者名稱
password:密碼
pkey:私鑰方式使用者驗證
key_filename:私鑰檔名
timeout:連線超時時間
allow_agent:是否允許使用ssh代理
look_for_keys:是否允許搜尋私鑰檔案
compress:開啟時是否壓縮
 
2)exec_command方法
exec_command(self,command,bufsize=-1)
引數說明:
command:執行的的指令
bufsize:檔案緩衝區大小,-1不限制
 
3)load_system_host_keys方法
load_system_host_keys(self,filename=None)
引數說明:
filename:指定遠端主機的公鑰檔案,預設為.ssh目錄下的known_hosts檔案
 
4)set_missing_host_key_policy方法
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
引數說明:
AutoAddPolicy:自動新增主機名及金鑰到本地並儲存,不依賴load_system_host_keys()配置,即如果known_hosts裡沒有遠端主機的公鑰時,預設連線會提示yes/no,自動yes
RejectPolicy:自動拒絕未知主機名和金鑰,依賴load_system_host_keys()
WarnningPlicy:功能與AutoAddPolicy相同,但是未知主機會提示yes/no
 
2、SFTPClient類
根據SSH傳輸協議的sftp會話,實現遠端檔案上傳、下載等操作。
 
1)from_transport方法
 
classmethod from_transport(cls,t)
引數說明:
t:一個已通過驗證的傳輸物件
 
示例:
>>> import paramiko
>>> a = paramiko.Transport((“127.0.0.1″,2222))
>>> a.connect(username=”root”, password=’123456′)
>>> sftp = paramiko.SFTPClient.from_transport(a)
 
2)put方法
 
put(self,localpath,remotepath,callback=None,confirm=True)
引數說明:
localpath:上傳原始檔的本地路徑
remotepath:目標路徑
callback:獲取接收與總傳輸位元組數
confirm:上傳完畢後是否呼叫stat()方法,以便確認檔案大小
 
示例:
>>> localpath=’ftp-test.log’
>>> remotepath=’/data/ftp-test.log’
>>> sftp.put(localpath,remotepath)

 

 
3)get方法
 
get(self, remotepath, localpath, callback=None)
引數說明:
remotepath:需要下載的遠端檔案
localpath:本地儲存路徑
callback:同put方法
 
4)其他方法
 
mkdir:用於建立目錄
remove:刪除目錄
rename:重新命名
stat:獲取檔案資訊
listdir:獲取目錄列表
 
瞭解完模組,我們先嚐試實現一下連線ssh:
import paramiko
import datetime
import os

hostname = "47.10.84."
port=22
username = "root"
password = ""

ssh = paramiko.SSHClient()       #建立一個ssh連線
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())  #目的是接受不在本地已知主機檔案下的主機。missing host key很明顯可以看出是指在丟失主機金鑰的情況下做出什麼動作,
                                    即自動新增相應的策略
ssh.connect(hostname
=hostname,port=22,username=username,password=password) stdin,stdout,stderr = ssh.exec_command('ls')    #傳送指令 res,err = stdout.read(),stderr.read() result = res if res else err print(result) ssh.close()

很不幸的是,這種方式只能分次傳送指令,下面我介紹一下另一種方式

 

相關文章