测试路由器:
- 中兴天翼网关 ZXHN F650A(GPON ONU)
- NETGEAR WNDR3800 - 刷OpenWRT 明月永在版本
- 小米WiFi3 R3
观察几款路由器登录方式,只是为了测试Python的urllib暴力破解的可能性,首先通过wireshark抓包依次检查每种路由器登录管理界面时的用户名和密码传送方式:
中兴网关:
用户名和密码的内容都是明文传输
NETGEAR:
官方原版已经不可测,明月永在的这版OpenWRT也是明文传输
小米:
小米路由器对口令竟然加了密,而且人家的服务内核竟然返回的是Nginx,感觉是不是很有爱!
好了,看完这三款路由器的登录密码传输方式,我们通过python的urllib模拟一下,看看能否自动实现,经过试验,ZTE的路由器没有cookies,可以直接post,OpenWRT版本需要cookies,否则一直返回302错误,如下是基本的测试代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
from urllib import request, parse, error import http.cookiejar url = 'http://192.168.10.1/cgi-bin/luci' headers = { 'Referer': 'http://192.168.10.1/cgi-bin/luci', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:61.0) Gecko/20100101 Firefox/61.0', 'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 'Upgrade-Insecure-Requests':'1', 'Connection': 'Keep-Alive' } post_tag = {} post_tag['luci_username'] = 'root' post_tag['luci_password'] = 'root' data = parse.urlencode(post_tag).encode('utf-8') cookie_filename = 'cookie.txt' cookie = http.cookiejar.LWPCookieJar(cookie_filename) handler = request.HTTPCookieProcessor(cookie) opener = request.build_opener(handler) req = request.Request(url, headers=headers, data=data) try: resp = opener.open(req) print(resp.read().decode('utf-8')) except error.HTTPError as e: print(e.code) |
执行效果如图所示:
使用正确的用户名和密码之后,如期的获取了登录之后的界面信息,根据这个方法,通过字典暴力验证这种口令未加密的路由管理后台,还是有可行性的。
本文受到《Python黑帽子》一书中暴力破解HTML表格认证的启发,所以用家用路由器一试,这种直接POST的方法应该比selenium方式要快速一些。关于python接口使用方式,python的文档描述的不是很多,参考了cnblog上的一些资料,都是收藏干货:
http://www.cnblogs.com/Lands-ljk/p/5447127.html
http://www.cnblogs.com/Yiutto/p/5889425.html