我试图理解为什么我的脚本打印cat /etc/shadow | grep root
为空字符串('')
。即使我的脚本可以访问[email protected]
...,也会发生这种情况。
我正在研究 Violent Python 并创建一个简单的 SSH 蠕虫。
当我运行上述命令时,我可以看到我的加密密码,既有 as[email protected]
也有 with sudo
。显然该命令有效。
我是不是漏掉了什么?我是不是漏掉了什么特殊情况?
脚本如下:
import pexpect
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'
strcon = 'ssh ' + user + '@' + host
child = pexpect.spawn(strcon)
ret = child.expect([pexpect.TIMEOUT, ssh_newkey,\
'[P|p]assword:'])
if ret == 0:
print('[-] Error connecting')
return
if ret == 1:
child.sendline('yes')
ret = child.expect([pexpect.TIMEOUT,\
'[P|p]assword:'])
if ret == 0:
print('[-] Error Connecting...')
return
child.sendline(password)
child.expect(PROMPT)
return child
child.sendline(password)
child.expect(PROMPT)
return child
def main():
host = 'localhost'
user = 'root'
password = 'toor'
child = connect(user, host, password)
send_command(child, 'cat /etc/shadow | grep root')
if __name__ == '__main__':
main()
答案1
好的,所以在这种情况下,似乎一切都归结为child.before
印刷send_command
。
打印出该child
对象后,我发现有几个键值对我应该抓取,其中一个 ( buffer
) 保存了 的最后 100 个字符grep
。这不是完整的加密密码,但至少是其中的一部分。
因此,如果您确实发现自己遇到了类似的问题,只需打印child
并检查输出是什么!