python数据库操作之解密浏览器自动保存的密码

关于浏览器自动保存的密码

当我们在网站的登录页面提交账号和密码进行登录时,浏览器会提示是否自动保存,如果选择自动保存,则在下次进入该登录页面时,浏览器会自动将账号和密码填入对应的选项框,我们只需点击登录即可,见下图,节省了很多时间。
在这里插入图片描述
实际上,浏览器在我们选择自动保存的时候,已经将登录页面、账号和密码保存到了本地数据库文件中,数据库文件的位置随着浏览器及系统当前登录用户的不同而有所差异,以 window10 操作系统、admin 用户、谷歌(chrome)浏览器为例,数据库文件的位置为:
C:\Users\admin\AppData\Local\Google\Chrome\User Data\Default\Login Data”,需要注意的是,该文件无扩展名。一般需要把浏览器关闭,然后将该数据库文件复制到其他路径,比如桌面,方便后续操作。使用 SQLite.exe 程序可以打开该数据库文件,进入 “浏览数据” 选项卡,可以看到 logins 表,该表就是存储登录信息的数据库表,其中比较关键的字段有:origin_urlusername_valuepassword_value,分别对应了登录页面,用户名和密码,但是密码处显示 BLOB,也就是二进制的加密数据。

在这里插入图片描述

对于自动保存的密码查看,比如时间久了,自己忘记密码的话,如果是最上图那种情况,就是可以看到页面保存信息的,只是密码以不可见形式存在,只需修改页面元素(input)属性即可,把type的值改为text,就可以看到明文密码了,如果无法进入登录页面,只能读取本地存储账号信息的数据库文件了,下面通过python代码实现账号信息的解密和读取。

代码实现

这部分用到的python库主要有:sqlite3,win32crypt。
代码(文件getpasswd.py)如下:

import sqlite3        # To access the Chrome SQLite DB
import win32crypt     # Used to call windows API CryptUnprotectData
import os,sys,time


fname="chrome_password.txt"


def fetchs(path2):
    if not os.path.isfile(path2):
        print('Invalid file!')
        return
    conn = sqlite3.connect(path2)  # Making a connection to copied database
    cursor = conn.cursor()
    cursor.execute('SELECT origin_url, action_url, username_value, password_value FROM logins')
    with open(fname,'w') as fp:
        for raw in cursor.fetchall():
            password = win32crypt.CryptUnprotectData(raw[-1])[1]
            store=raw[0]+'\n'+raw[1]+'\n'+raw[2]+'\n'+password+'\n\n'
            fp.write(store)
    conn.close()



if __name__=='__main__':
    try:
        path2=sys.argv[1].strip()
    except:
        print('Usage: %s d:\\dbfile.db' % sys.argv[0])
        exit()
    fetchs(path2)


用法:python getpasswd.py “C:\Users\Administrator\Desktop\Login Data”
运行脚本时,需要数据库文件路径(“C:\Users\Administrator\Desktop\Login Data”)作为参数,获得的登录信息保存在chrome_password.txt 文件中。

本脚本也可以用作渗透测试过程中的凭证获取,技术是把双刃剑,用者需谨慎。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值