i春秋作家:凉风有信

Hi , 我是凉风 半年不见了啊,我又回来了因为太菜都不好意思发文章了

0×00 目录

0×01 前言
0×02 利用fd分析与实战
0×03 Python+burp简易搭建代理服务器
0×04 实现自动化exp
0×05 结束语

0×01 前言    本文只是对某校园热水服务app做个测试,其实本人并没有做大坏事,并未传播相关技术,文章以下内容的敏感部分会打码,并且相关厂商已经正在进行漏洞修复,大家看看就好。文章后会提供“Python简易搭建代理服务器”的关键代码,代码简单而且开源,我自己也加了点注释。最后的exp只针对本app,感兴趣的朋友可以看看。以下内容包含个人见解,轻喷。若有误导恳请指出。

0×02 利用fd分析与实战

要对这app做测试,首先了解下app的运作流程。

登录后,app主界面如下

逻辑简单,步骤如下:

1.app使用蓝牙连接水表。

2.先扣你10块余额,转到预扣款里(不够10元扣除所有)

3.水表上显示10块钱,也就是你的预扣款(我只有6元所有会显示6元),水表出水

4.用水,水表上的金额随着用水量而减少

5.停止用水,水表上显示的金额就是余额,将返还给余额

这样分析还不够,我们利用fiddler看看app向服务器的HTTP请求内容

怎么抓手机包看这,讲的比我好我就不多说了:如何用Fiddler对Android应用进行抓包

app启动时的HTTP数据请求截图:

一共请求了5次,没发现什么地方有问题。要想知道这些请求都是做什么的,可以看看请求的get的内容以及post的内容,还可以看看网站的响应内容。从截图中fiddler右下角的“Message=未发现版本”就可以猜想这个http请求可能是检查更新的请求。

我们用的是“fiddler”,大家都知道的,许多利用都是改金额,现在还没用水,还没发生金额的变化,咱们现在用水试试。

点击“点击开始用水”按钮,看看app截图以及fiddler的http请求

app扣除了6块,转到了预扣款里,水表上显示6.00元,<img>假装有水表照片.jpg</img>

看fiddler截图,一共有4个http请求,注意红框,“00A3AAAF”是本次用水的订单号,之后会用到。

看了下这些http请求,发现并未和服务器发生有关金额的信息交互。

我们进行下个步骤,停止用水让它退还余额。

app截图,以及fiddler抓取到的金额数据截图:

可以看到之前红框框起来的订单号在结账返还金额的时候用到了,不用改。bal的值明显就是退还金额,将他改为6,也就是我的预扣款试试。成功退还所有预扣款!(这app有两次http请求返回的余额,内容都相同,都需要改为6,另一次就不贴截图了)

点击确认结账就余额就能变回6元了,这个“确认结账”按钮实际上是个刷新命令。

0×03 Python+burp简易搭建代理服务器

之前已经用fd实现漏洞利用,但是每次都需要手动改,如果写个脚本会比较快一些。正巧我在某同性交友网看到了“Python搭建代理服务器”的代码,就想试试能不能通过这个代码稍加更改实现自动化Exp。

贴出原代码:

关键部分我写了注释,还有代码不清楚格式是否会乱,我在文后以附件的形式贴出来吧

这次配合burpsuite来使用,使用方法:第90行(倒数第二行)写入之前用fiddler改包时手机wifi设置的代理,以及端口号,用来监听手机发出的http请求。第44行写burpsuite监听的地址,从手机上获取的http请求都会转发给burpsuite,burpsuite设置我也贴出来吧:

设置好后,只要运行代码,就可以实现代理服务。虽然想要代理直接连burp就好,但是这提供了一个可以使用PY代码进行一定程度的中间人操作的环境。

0×04 实现自动化exp
PS:看到这里就可以不看了,因无法提供app与蓝牙水表,以下内容多半无法看明白。。
  之前实现了代理,那么现在就要开始改代码了,将代码改成漏洞app的漏洞利用工具。
因为这个不是通用型漏洞,漏洞利用工具也只能针对这个app,所以以下内容不存在干货,感兴趣的可以看下去。
思路:通过这个代理,将停止用水后“结账”请求中返还的金额替换为预扣款的金额,即返还所有金额。
还有个:对app的http请求分析的越透彻,exp就可能写的越简单思路越清晰。

漏洞利用程序方法众多,以下将按我自己的思路

从之前的fd测试可以知道,“用水”与“结账返还金额”是两个独立的http请求部分,根据常识“结账”肯定要在“用水”之后,那我们可以在app执行“用水”之后就马上向服务器请求伪造的“结账”http请求,因伪造的“结账”请求只是PC机跳过app与服务器交互,所以执行结账后不会影响蓝牙水表的供水。这种思路有个前提,就是能成功伪造“结账”请求,如果无法伪造,也可以在“结账”请求发出时拦截并改包,这样理论上是不会出问题的。
伪造“结账”需要在“用水”之后,那怎么判断“用水”请求?
用 if 判断数据的特征,简单明了。因为只是判断,不是拦截,所以只需要在conn_destnation函数的结尾,也就是destnation.send() 执行后,添加 if 判断即可,如果是“用水”便开始伪造“结账”。因为结账需要订单号,所以可以用re模块正则表达式匹配“用水”请求的特征时顺带取出订单号,见截图:

订单号正好包含在URL中,真方便。

用if判断不为空就可以刚刚获取的订单号进行伪造的“结账”了

伪造“结账”请求需要类似cookies的凭证,凭证存在header里,可以直接使用“用水”请求的header。

可是!!我发现用水、结账、查余额等一系列操作是使用的header中的凭证永不过期,若重登会给予新的凭证,但旧凭证依旧可以使用!所以就可以偷懒直接贴一份header使用。

有了凭证就可以为所欲为了,伪造“结账”请求除了订单号还需要知道预扣款,前面提到过,预扣款一般为10元,但有时候余额不足预扣款就不足10元,所以为了程序兼容性,还需要获取下预扣款。既然有了凭证为所欲为,那么可以再伪造下一个能让服务器返回预扣款的请求即可。

见上图:有了凭证,并且正好服务器返回的是json形式的,直接用Python 的 eval,再获取对应键值就行。

然后就是执行伪造的“结账”请求:

0×05 结束语

终于结束了,感谢看我这篇文章的人,更感谢从头到尾看完的人,不枉我写这篇文章,毕竟对于你们来说是没见过的app,这太抽象了,并且文章内容无聊,而且读代码远比写代码困难,遗憾的是不能提供实验环境。要是有人看完我会很开心,谢谢啦QAQ

PS:感觉今晚丞相的支持

Python建代理配合burp实现自动免费用水的更多相关文章

  1. 疫情在校学生之——用python对某校园热水服务app进行测试,实现自动免费用水(仅供参考)

    写在前面的过场话: 本文只是对某校园热水服务app做个测试,其实本人并没有做大坏事,并未传播相关技术,文章以下内容的敏感部分会打码,并且相关厂商已经正在进行漏洞修复,大家看看就好.文章后会提供&quo ...

  2. Python爬虫代理IP池

    目录[-] 1.问题 2.代理池设计 3.代码模块 4.安装 5.使用 6.最后 在公司做分布式深网爬虫,搭建了一套稳定的代理池服务,为上千个爬虫提供有效的代理,保证各个爬虫拿到的都是对应网站有效的代 ...

  3. 《精通Python网络爬虫》|百度网盘免费下载|Python爬虫实战

    <精通Python网络爬虫>|百度网盘免费下载|Python爬虫实战 提取码:7wr5 内容简介 为什么写这本书 网络爬虫其实很早就出现了,最开始网络爬虫主要应用在各种搜索引擎中.在搜索引 ...

  4. casperjs配合phantomjs实现自动登录百度,模拟点击等等操作 - 怕虎在线www.ipahoo.com图文教程 - 怕虎在线

    微信支付取消2万元保证金门槛,这是全民电商来袭!-观点-虎嗅网 微信支付取消2万元保证金门槛,这是全民电商来袭! casperjs配合phantomjs实现自动登录百度,模拟点击等等操作 - 怕虎在线 ...

  5. python通过代理刷网页点击量

    python通过代理刷网页点击量 更新异常处理情况 @time 2013-0803 更新循环里计数问题和随机等待时间问题 #!/usr/bin/python #-*- coding:utf-8 -*- ...

  6. Electron应用使用electron-builder配合electron-updater实现自动更新(windows + mac)

    发客户端一定要做的就是自动更新模块,否则每次版本升级都是一个头疼的事.下面是Electron应用使用electron-builder配合electron-updater实现自动更新的解决方案. 1.安 ...

  7. Python自学编程开发路线图(文中有免费资源)

    Python核心编程 免费视频资源<Python入门教程>:http://yun.itheima.com/course/145.html Python 基础学习大纲 所处阶段 主讲内容 技 ...

  8. python使用代理访问服务器

    python使用代理访问服务器主要有一下3个步骤: 1.创建一个代理处理器ProxyHandler: proxy_support = urllib.request.ProxyHandler(),Pro ...

  9. [转载]python实现带验证码网站的自动登陆

        原文地址:python实现带验证码网站的自动登陆作者:TERRY-V 早听说用python做网络爬虫非常方便,正好这几天单位也有这样的需求,需要登陆XX网站下载部分文档,于是自己亲身试验了一番 ...

随机推荐

  1. IIS Web服务器日志、日志服务器分析

    IIS Web服务器日志.日志服务器分析 EventLog Analyzer是一款全面的工具,用于审计.管理和跟踪您的Microsoft Internet Information Services(I ...

  2. Flex布局(CSS Flexbox)

    参考:Flex 布局语法教程 Flex布局是什么? Flex是Flexible Box的缩写,意为”弹性布局”,用来为盒状模型提供最大的灵活性. 任何一个容器都可以指定为Flex布局 注意:设为Fle ...

  3. GPS 编程笔记

    1.在GPS系统内,经纬度的显示方式一般都可以根据自己的爱好选择,一般有"hddd.ddddd"(度.度),"hddd*mm.mmm"(度.分. 分),&quo ...

  4. 快速排序 JavaScript 实现

    作为算法目录下的第一篇博文,快速排序那是再合适不过了.作为最基本最经典的算法之一,我觉得每个程序员都应该熟悉并且掌握它,而不是只会调用库函数,知其然而不知其所以然. 排序算法有10种左右(或许更多), ...

  5. iptables简单应用

    可以修改/etc/rc.d/boot.local让规则重启后也能生效,如: /sbin/iptables -F /sbin/iptables -A INPUT -i eth0 -p tcp --spo ...

  6. C#时间操作总结

    命名空间:System.Diagnostics Stopwatch 实例可以测量一个时间间隔的运行时间,也可以测量多个时间间隔的总运行时间.在典型的 Stopwatch 方案中,先调用 Start 方 ...

  7. Eclipse添加servlet-api.jar库的引用

    右键Application-->Properties-->Java Build Path-->Libraries-->Add External JARs-->servle ...

  8. (最优m个候选人 和他们的编号)Jury Compromise (POJ 1015) 难

    http://poj.org/problem?id=1015   Description In Frobnia, a far-away country, the verdicts in court t ...

  9. 20155326 2017-2018-1 《信息安全系统设计基础》课下加分项mypwd实现

    20155326 2017-2018-1 <信息安全系统设计基础>课下加分项mypwd实现 pwd命令能做什么 在虚拟机中输入pwd查看其返回的是什么 通过上图得知pwd命令用来显示目录. ...

  10. python_运算符与表达式

    运算符与表达式 python运算符 运算符 功能说明 + 算术加法,列表.元组.字符串合并与连接,正号 - 算术减法,集合差集,相反数 * 算术乘法,序列重复 / 真除法 // 求整商,但如果操作数中 ...