python渗透测试linux密码激活的示例
作者:Fly&L 发布时间:2023-06-25 16:57:41
上篇文章给大家介绍过 Python脚本破解Linux口令(crypt模块) 感兴趣的朋友点击查看。
linux密码破解
这段代码通过分别读取两个文件,一个为加密口令文件(cryptPass),另一个为用于猜测的字典文件(key.txt)。
在testPass()函数中读取字典文件,并通过crypt.crypt()进行加密,加密时需要一个明文密码以及两个字节salt(加密口令的前两个字母),通过salt和明文密码加密形成 cryptWord。
最后将cryptWord和cryptPass进行对比,如果相等,则这个word就是该用户的密码,否则不是。
先看crypt的示例:
可以看到盐是添加在密文的前两位的,所以将加密口令的前两位提取出来为salt即可。
在Linux系统中,用户的密码被加密存储在了 /etc/shadow 文件中
如下是 /etc/shadow中root用户的字段
密码部分的格式为:$id$salt$encrypted
id是指用的哈希算法,id为1是MD5,id为5是SHA-256,id为6是SHA-512
salt 为盐值
encrypted 为hash值,这里的hash值是密码和盐值一起加密之后得到的
编程之前准备:
1、创建密码字典key.txt 。
2、我们将 /etc/shadow 文件复制到python脚本所在目录,修改文件名为 shadow.txt
import crypt ##导入Linux口令加密库
def testPass(cryptPass):
salt=cryptPass[cryptPass.find("$"):cryptPass.rfind("$")] ##获得盐值,包含$id部分
dictFile=open('key.txt','r')
for word in dictFile.readlines():
word=word.strip("\n")
cryptWord=crypt.crypt(word,salt) ##将密码字典中的值和盐值一起加密
if (cryptWord==cryptPass): ##判断加密后的数据和密码字段是否相等
print "[+]Found Password:"+word+"\n" ##如果相等则打印出来
return
print "[-] Password Not Found.\n"
return
def main():
passFile=open('shadow.txt')
for line in passFile.readlines(): ##读取文件中的所有内容
if ":" in line:
user=line.split(":")[0] ##获得用户名
cryptPass=line.split(":")[1].strip(' ') ##获得密码字段
print "[*] Cracking Password for:"+user
testPass(cryptPass)
main()
参考文章
相关知识
1、split()方法以及关于str.split()[0]等形式内容的详细讲解
str.split(str="", num=string.count(str)).
参数:
str :分隔符,默认为所有的空字符,包括空格、换行(\n)、制表符(\t)等。
num : 分割次数。默认为 -1, 即分隔所有。
返回值:
Python split() 通过指定分隔符对字符串进行切片,如果参数 num 有指定值,则分隔 num+1 个子字符串,返回分割后的字符串列表。
代码示例:
输入
str = "Line1-abcdef \nLine2-abc \nLine4-abcd";
print str.split( ); # 以空格为分隔符,包含 \n
print str.split(' ', 1 ); # 以空格为分隔符,分隔成两个
输出
['Line1-abcdef', 'Line2-abc', 'Line4-abcd']
['Line1-abcdef', '\nLine2-abc \nLine4-abcd']
2、关于str.split()[0]等形式内容的详细讲解
•输入与输出
>>> str="hello boy<[www.doiido.com]>byebye"
>>> str.split("[")[1].split("]")[0]
'www.doiido.com'
>>> str.split("[")[1].split("]")[0].split(".")
['www', 'doiido', 'com']
解析:
str.split("[")[1]. split("]")[0]输出的是 [ 后的内容以及 ] 前的内容。 str.split("[")[1]. split("]")[0]. split(".") 是先输出 [ 后的内容以及 ] 前的内容,然后通过 . 作为分隔符对字符串进行切片。
下面再对上面的例子进一步操作加深理解:
str="hello boy<[www.doiido.com]>byebye"
str.split("o")[0]
得到:‘hell'
str="hello boy<[www.doiido.com]>byebye"
str.split("o")[1]
得到:' b'(这里b的前面有个空格!)
str="hello boy<[www.doiido.com]>byebye"
str.split("o")[3]
得到:‘iid'(这里得到的iid是第3个o后和第4个o前之间的内容)
str="hello boy<[www.doiido.com]>byebye"
str.split("[")[0]
得到:‘hello boy<'(这里得到的hello boy<是第一个[之前的内容)
解析:
str.split(“o”)[0]得到的是第一个o之前的内容
str.split(“o”)[1]得到的是第一个o和第二个o之间的内容
str.split(“o”)[3]得到的是第三个o后和第四个o前之间的内容
str.split("[")[0]得到的是第一个 [ 之前的内容
[n] 取值范围(n,n+1)
注意:[ ]内的数值必须小于等于split("")内分隔符的个数,否则会报错
3、补充
str="hello boy<[www.doiido.com]>byebye"
str.split("o")[0:2]
得到的结果:
['hell', ' b']
解析:
str.split(“o”)[0:2]得到的是第一个o之前的内容 + 第一个o和第二个o之间的内容,这里第三个o前内容取不到,是一个左闭右开区间。
[n:m]取值范围(n,n+1)^(n+1,m)
引申:
str="hello boy<[www.doiido.com]>byebye"
print(str.split("o")[0:-1])
print(str.split("o")[0:-2])
print(str.split("o")[0:-3])
运行结果:
['hell', ' b', 'y<[www.d', 'iid', '.c']
['hell', ' b', 'y<[www.d', 'iid']
['hell', ' b', 'y<[www.d']
`str.split("o")[1:3]`取得的结果为
[' b', 'y<[www.d']
注:注意空格!注意空格!注意空格!
来源:https://blog.csdn.net/weixin_45761101/article/details/117120991
猜你喜欢
- 一、桥接模式桥接模式,希望能够将一个事物的两个维度分离(解耦),使其都可以独立地变化,并通过桥梁连接起来。(类)抽象部分(Abstracti
- 1.简介 蒙特卡洛又称随机抽样或统计试验,就是
- 介绍我们在实际的开发工作中需要将django框架与swagger进行集成,用于生成API文档。网上也有一些关于django集成swagger
- 今日大致浏览了一下《High Performance Web Sites》。本书的中文版是《高性能网站建设指南》。本书另有对其中个别问题深入
- 本文实例讲述了Django中使用group_by的方法。分享给大家供大家参考。具体分析如下:在Django中怎样使用group_by语句呢?
- 网站域名一般都会选简短易记的,因为这对于网站宣传来说也可以省不少力。而被很多网站忽视的站内Url结构则在一定程度上反映出网站的整体架构。当设
- 1. 原地排序:采用sort()方法,按照指定的顺序排列数据后用排序后的数据替换原来的数据(原来的顺序丢失),如:>>>
- 在VBScript中,有一个On Error Resume Next语句,它使脚本解释器忽略运行期错误并继续脚本代码的执行。接着该脚本可以检
- Microsoft建立了一种既灵活又强大的安全管理机制,它能够对用户访问SQL Server服务器系统和数据库的安全进行全面地管理。按照本文
- 一、禁止计算局部梯度torch.autogard.no_grad: 禁用梯度计算的上下文管理器。当确定不会调用Tensor.backward
- jupyter介绍jupyter的全称为Jupyter Notebook,之前一度被称为(IPython notebook),是一种交互式的
- atan 和 atan2 都是反正切函数,返回的都是弧度对于两点形成的直线,两点分别是 point(x1,y1) 和 point(x2,y2
- 分享给大家一篇文章,教你怎样用Python画了一棵圣诞树,快来学习。如何用Python画一个圣诞树呢?最简单:height = 5stars
- 国外纷纷传言IE8将是Internet Explorer的最后一个版本,这个猜测来源于Microsoft的CEO Steve
- 前言动态生成表格是前端开发中非常重要的内容,常常是后端返回数据(大多是json类型),我们前端通过js循环来动态添加,所以这部分内容是十分重
- python中email模块使得处理邮件变得比较简单,今天着重学习了一下发送邮件的具体做法,这里写写自己的的心得,也请高手给些指
- 需求背景女朋友的论文需要爬取YouTube视频热评,但爬下来的都是外文。主要设计 读取一个表格文件,获取需要翻译的文本
- 说到网络产品,离不开的话题就是用户,就像传统行业的消费者。人是复杂的,网民的用户行为更加复杂,用户和用户是不一样的,或者说,每个用户都不一样
- 记录了Windows安装python3.7的详细过程,供大家参考,具体内容如下1. 在python的官网下载python对应版本:官网地址6
- 原文:http://www.smashingmagazine.com/ ... emarkable-favicons/翻译:Blank(怿飞