前言:我完全知道,如果不是在试验机上,这可能是非法的。我这样做是为了学习python的安全性和渗透性测试。这只能在我拥有并完全控制的linux机器上完成。在
我正在学习python作为我的第一种脚本语言,希望能在安全性方面得到应用。在询问脚本的想法来帮助我自学时,有人建议我为用户创建一个脚本枚举想法很简单,从一个没有sudo特权的帐户中找出/etc/passwd中的用户名,并尝试使用我拥有的一个密码“su”进入这些帐户。这是一种逆向蛮力,Im使用一个带有用户列表的密码,而不是一个拥有密码列表的用户。在
我的问题是,无论我如何处理这个问题,脚本在“Password:”提示符处挂起或停止。我尝试了多种方法,从操作系统将密码作为变量传入,并使用pexpect模块。似乎什么都没用。在
当我搜索它时,所有的建议都指向使用sudo,在这个场景中,sudo不是一个有效的选项,因为我有权访问的用户没有sudo特权。在
我已经不顾一切了,只是为了完成挑战。我问过reddit,在IRC和我所有编程向导的朋友,除了echo“password”| sudo-su之外,它不能工作,因为用户不在sudoers文件中,我就来不及了。当我尝试同样的事情只是回显“密码”| su我得到su:必须从终端运行。这是在#和$提示符处。在
这有可能吗?在
如果您只是想学习,那么可以使用自己伪造的passwd文件轻松地构建一个假的环境。您可以使用一些内置的python加密方法来生成密码。这有适当测试用例的优势,你知道你在寻找什么,你应该在哪里成功或失败。在
问题是} module 来实现这一点。试试看。在
su
和朋友直接从进程的控制终端读取密码,而不是从stdin读取。解决这个问题的方法是启动您自己的“伪终端”(pty
)。在python中,可以使用the ^{编辑:python的
pty
模块的文档并没有真正解释任何东西,因此下面是pty
设备的Unix手册页中的一些上下文:让pty工作的最简单的方法是使用
pty.fork()
,它可以像普通的fork一样使用。下面是一个简单(非常简单)的例子。请注意,如果读取的字符超过可用字符数,则进程将死锁:它将尝试从打开的管道中读取,但另一端的进程生成输出的唯一方法是,如果这个进程向它发送一些东西!在如果一切顺利,您应该看到:
^{pr2}$由于这是一个学习练习,我建议您阅读以下内容:}模块(因为您已经在运行子进程,所以您可能已经知道了其中的一些内容)。请记住,在Unix和python中,文件描述符(它只是一个数字)和
man fork
,man execl
,以及python的subprocess
和{file
对象之间的区别,后者是一个带有方法的python对象(在C中是一个结构或类似的)。玩得高兴!在相关问题 更多 >
编程相关推荐