注:本篇文章为个人学习笔记,仅供学习交流。
微信公众号:黑客帮。
参考:《Python绝技:运用Python成为顶级黑客》。
SSH连接
连接我们架在IP地址127.0.0.1上SSH的机器,应用程序首先会要求我们确认RSA密钥指纹。这时我们必须回答“是”,然后才能继续。接下来,在给我们一个命令提示符之前,应用程序要求我们输入密码,最后,我们执行uname-V命令来确定目标机器上系统内核的版本。
可以用python第三方模块–Pexpect实现交互
Pexpect模块安装
建议在Linux下安装运行,Windows上会出问题。
步骤:
1.到
https://pypi.python.org/pypi/pexpect/
下载压缩包
2.Linux切换到超级管理员,将压缩包解压,然后在终端打开
3.在终端输入“python ./setup.py install ”安装
4.第三步报错了,还需导入ptyprocess模块。同前三步,到
https://pypi.python.org/pypi/ptyprocess#downloads
下载压缩包,解压切换到管理员,在终端打开,执行命令“python ./setup.py install”
代码
#coding=utf-8
import pexpect
#SSH连接成功时的命令行交互窗口中前面的提示字符的集合
PROMPT = ['# ','>>> ','> ','\$ ']
def send_command(child,cmd):
#发送一条命令
child.sendline(cmd)
#期望有命令行提示字符出现
child.expect(PROMPT)
#将之前的内容都输出
print child.before
def connect(user,host,password):
#表示主机已使用一个新的公钥的消息
ssh_newkey = 'Are you sure you want to continue connecting'
connStr = 'ssh ' + user + '@' + host
#为ssh命令生成一个spawn类的对象
child = pexpect.spawn(connStr)
#期望有ssh_newkey字符、提示输入密码的字符出现,否则超时
ret = child.expect([pexpect.TIMEOUT,ssh_newkey,'[P|p]assword: '])
#匹配到超时TIMEOUT
if ret == 0:
print '[-] Error Connecting'
return
#匹配到ssh_newkey
if ret == 1:
#发送yes回应ssh_newkey并期望提示输入密码的字符出现
child.sendline('yes')
ret = child.expect([pexpect.TIMEOUT,'[P|p]assword: '])
#匹配到超时TIMEOUT
if ret == 0:
print '[-] Error Connecting'
return
#发送密码
child.sendline(password)
child.expect(PROMPT)
return child
def main():
host='192.168.1.16' #靶机IP
user='msfadmin'
password='msfadmin'
child=connect(user,host,password)
send_command(child,'uname -a') #命令
if __name__ == '__main__':
main()
测试
kalilinux上运行,与Metasploitable2靶机进行ssh交互
觉得不错欢迎关注