专栏首页农夫安全Python 黑客——使用Python破解门禁系统

Python 黑客——使用Python破解门禁系统

如何使用Python破解门禁系统

前言

Solesec白帽团队楚轩大校原创文章

正文

说起黑客,从小的我就觉得黑客很炫酷,我以前经常看小说,说的一般就是一个黑客一下子就可以把监控啊啥的黑掉。还可以让所有的门一瞬间打开。和同学合作忙了好几天,终于做到了使用python让整栋楼的门一瞬间全部打开且都关不上。事情从头说起。

我们这学期有python课,期末考试说的是用python来做一个项目进行答辩。我们学校有一个信息安全工作室,我一般就在里面学习,但是经常有人来敲门,就觉得很麻烦,就想做一个开门的东西,点一下就开门。我这里先给大家讲一讲我自己一年以来对物联网的一些经验。

一般来说,学校啊,大企业啊都会有门禁系统,指纹系统,监控系统。这三个系统都是必备的,现在普遍大家都在搞web安全,但是会忽略很多其他地方的安全,我今天主要以门禁来讲。门禁系统现在一般都是用的物联网,也就是说那个门禁机是有ip地址的。先说一下开门的逻辑。刷卡——>门上的电磁铁断电——>断电之后电磁铁失去功效——>开门。大概理论就是这样,但是既然是物联网,管理员一般使用的是一个集成的门禁管理系统或者一个集成的监控系统来统一管理监控和门禁。但是忽略了一点,每一个摄像头,每一个门禁机,都会有一个独立的ip地址,管理员往往把集成管理平台的安全保障的很好,但是往往会忽略这一个个设备独立的ip地址。听不懂?没关系,我上两张图。

看到了吗?一图很明显是管理员用来管理的,这个的密码啊验证码啊啥的防护的非常非常严格。但是管理员往往忽略了这些单独的摄像头。单独的物联网设备也会有一个属于自己的独立的ip地址,当然这是在内网。

监控是这样,门禁系统也是如此。

这个图明显的是一个管理员用来管理的cs端,这是门禁系统,这个cs端管理了所有的门禁系统,但是管理员常常也会忽略这些单独门禁系统的bs端的安全,通过扫描80端口开放的方法大概花一周时间便可以找到这些存在于内网的单独的设备。

这便是单独的门禁机的ip的web管理界面。这些单独的机器设备一般在大企业的内网里面会有成百上千台。花一两天时间扫描一下端口便会把他们暴露出来。管理员常常只会注重集中管理的设备的安全而不会注重这些单独一个一个的设备的安全。

重点

这个时候正题来了。这篇文章的主题是python黑客。当然会用python来搞点好玩的东西用来期末答辩。思路如下。看到那个图里的远程开门没,要利用的东西就是这个。首先是知道这个单独的机器的登陆账号密码。密码很简单,就是默认的弱口令。进去之后使用python发http请求,就是python模拟登陆一下,然后模拟点击那个远程开门。门就可以开了。但是这肯定远远不够,可以来个大胆的想法,如果我们加一个循环呢?是不是门就一直开了关不掉了。再然后我们是不是可以把多个设备一起发http请求,让所有的门都一直开着关不掉?当然可以,但是物联网设备和普通的模拟登陆不一样。我们需要先分析他的逻辑工作过程,这个很重要很重要,我就是在这个问题上卡了好几天最后去问师兄才解决。

首先来分析一下这个门禁机的工作流程。使用burpsuite来分析他的请求,我这里就直接说我得出的结论了,大家如果要对不同的设备做操作一定要用burpsuite来分析逻辑流程。

首先来到登陆框,这里直接刷新

这个时候我没有登陆。只是单纯的刷新了一次。注意这里有一个cookie:sessionid=15xxxx,这是一个递增的数,我最开始没有注意他,所以一直导致模拟登陆失败。此时我输入正确的账号密码然后点击登陆,抓包。

这里可以知道/csl/check 这个文件处理我们传去的username和password。但是这个cookie依然是我们刚刚那个,这里我直接说大量测试之后的结论。在访问这个页面的时候就会给你一个sessionid,如果登陆成功,那么这个sessionid就会生效,如果登陆失败,那么这个sessionid就会无效。所以,一旦登陆成功,那么我们的请求里如果带有这个一进网页就给我们的,并成功登陆了的sessionid,就可以操作登陆后的操作,也就是开门。这句话有点绕,可以仔细多读几遍。

现在来验证一下得出的结论是不是真的。我刚刚图里的sessionid是1514067318。我刚刚登陆成功了,我现在退出登陆,重新乱输一个密码,然后直接访问一下登陆后的页面。

这账号密码很明显是乱输入的,但是注意观察,我们的sessionid并没有变化。这个web是用csl/check这个文件来验证账号密码是否正确的,刚刚我们用这个sessionid=1514067318已经成功登陆了一次,已经可以用这个sessionid来做登陆后的操作了,现在如果乱输入密码,再点登陆,sessionid没有变,但是密码是错误的,所以过不了check这一关。

但是,我刚刚说过了。我花了大量时间来验证这个网站的逻辑流程,当我们一访问这个网站的时候就会同时获取一个sessionid,如果登陆成功,sessionid便可以用来访问登陆后的界面,并保持一段时间都可以访问登陆后的界面。如果失败,那这个sessionid便没有用了。好了这个时候我们换一个浏览器来验证我的猜想。

看这里 menu是登陆后才能访问的界面。我直接换了浏览器去访问这个界面,sessionid已经变化,所以他直接给我谈回了登陆界面。但是,如果我把这个sessionid改成刚刚另一个浏览器成功登陆的sessionid 1514067318 呢?

看到没。我直接就进来了,然后此时刷新一下发现sessionid是我们后来重新获取的,这个sessionid是没有权限访问这个登陆后的界面的(因为这个sessionid没有用正确的账号密码登陆过)。所以一刷新他又会弹回登陆界面。

结论

好了说了这么多,最终的结论就是,这个网站在一访问的时候就会获取到一个sessionid,如果用这个sessionid成功登陆了,那么这个sessionid将被服务端认定为可以访问登陆后内容的sessionid,带上这个sessionid,就可以任意访问那些登陆后的界面。

这个web和其他登陆类网站最大的区别就是,其他很多登陆类网站在登陆成功后由服务端返回一个cookie给你。然后你就可以用这个cookie去访问登陆后的页面。但是这个网站就不一样了,这个网站在你一访问的时候就会给你一个cookie,如果登陆成功,那么这个cookie便会生效成为可以访问登陆界面之后的cookie。

所以这个python模拟登陆的代码 就不能和普通的模拟登陆一样,就要这样写,先访问一次网页直接获取cookie。然后把这个cookie放在header头里面。然后再用正确的账号密码登陆,此时这个header头的cookie就生效了,就可以使用这个sessionid来访问登陆后的界面了!自然可以做开门的操作了。然后无限循环,就可以让这个门关不了,然后把整栋楼的这个设备的ip都加进去。嘿嘿嘿。。。。。

代码如下,这个代码仅供参考,只能给我们这里的门禁机一直发开门请求,不同设备处理请求和验证cookie的方法是不一样的,所以我刚刚写了那么多来分析这个设备处理参数的逻辑流程,把逻辑流程弄懂了才能写出适合对应设备的代码

代码

python3环境,需要安装requests模块

import requests
import socketimport jsonfrom urllib import requestfrom http import cookiejardef get_cookie():                                        cookie = cookiejar.CookieJar()    h = request.HTTPCookieProcessor(cookie)    o = request.build_opener(h)    res = o.open('http://xx.xx.xx.xx')    c = requests.utils.dict_from_cookiejar(cookie)    a = c['SessionID']    the_cookie = 'SessionID=' + a    return the_cookiedef dl(headers,data):    url = 'http://xx.xx.xx.xx/csl/check'      #这个check是处理输入账号密码的文件    kaim_url = 'http://xx.xx.xx.xx/form/Device?act=9'                                             #这个是开门用的地址,就是一登陆进去点一下这个链接门就会开    s = requests.session()    r = s.post(url, headers=headers, data=data)    text_url = 'http://xx.xx.xx.xx/csl/menu'     #menu是登陆之后的那个界面    t = s.get(text_url, headers=headers)    q = s.get(kaim_url, headers=headers)if __name__=='__main__':        cookies = get_cookie()    headers = {'Host': 'xx.xx.xx.xx','Cookie': cookies}    data = {'username':'账号','userpwd':'密码'}    while True:     #一直发请求让门一直开        sss = dl(headers, data)        print('开门成功!')

本文分享自微信公众号 - 网络安全社区悦信安(yuexin_an),作者:楚轩大校

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-12-27

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【小技巧】获取到的cookie如何简便使用

    首先假设我们通过XSS或者前端某骚姿势拿到某人的cookie【必须是完整cookie,因为cookie不完整也时候不能成功登录该用户的】

    用户1467662
  • windows lnk漏洞复现过程

    前言 最近Windows出了一个lnk的漏洞,本着不复现不罢休的原则,自己搭建环境复现了一波,虽然没有这么顺利,但最后还是复现成功,哈哈哈哈,大牛就勿喷了,技术...

    用户1467662
  • 查找代理工具

    查找代理工具:ProxyBroker https://github.com/constverum/ProxyBroker.git 为了解决大家查找代理的问题,介...

    用户1467662
  • 美国黑帽子大会现场直击——万名黑客呼啦啦现身了

    杭州安恒信息技术有限公司团队参加黑帽子大会(中间为今年新晋的科技新浙商范渊) 2014世界黑帽子大会今天在美国拉斯维加斯启幕,钱报特派记者深入...

    安恒信息
  • 非插件实现WordPress分页导航

    本文参考资源:1.http://down.chinaz.com/try/201209/2188_1.htm 2.http://xiedandan.com/wo...

    汐楓
  • 解决stackoverflow打开慢不能注册登录

    问题原因:并不是stackoverflow被墙,而是因为stackoverflow用了google的api,而Google在天朝是用不了的,所以才导致像stac...

    王小雷
  • 微服务

    微服务架构技能图谱

    Albert陈凯
  • 物流自动化供应商德马科技登陆科创板,技术集成或为主要竞争力

    5月21日,物流自动化供应商浙江德马科技股份有限公司宣布其首次公开发行不超过2,141.9150万股人民币普通股(A股)的申请获得上交所科创板审议通过,并即日起...

    庄帅
  • 腾讯T派移动互联网创新创业大赛决赛启动 看顶尖团队大比拼

    为鼓励更多在校学生创新创业,并为高校学子提供更广阔的展示舞台,腾讯公司3月底启动T派移动互联网创新创业大赛,来自全国200余所高校的1200多支团队踊跃报名参加...

    腾讯高校合作
  • 在.Net Core中构建一个基本的区块链

    程序你好

扫码关注云+社区

领取腾讯云代金券