记一次食堂外卖自动下单工具的编写过程

by LauCyun 6 days ago 1,929 views

又双叒叕周五啦Face Screaming in FearFace Screaming in FearFace Screaming in Fear又是一个为了周末口粮而战斗的周五Flexed BicepsFlexed BicepsFlexed Biceps

公司食堂每周五下午2点会供应少量外卖(部分菜单如下图所示),价格便宜又实惠,热销商品基本都是秒抢,手慢的我基本抢不上,所以准备写个自动化工具。


图1 食堂外卖菜单

0x1 抓包

首先二话不说,操起burp就开始抓包,如下图所示:

说明:至于如何用Burp抓手机数据包,请移步https://laucyun.com/525396b1a6c32ca2b39675cde88f4fba.html


图2 burp抓包

接着,写个自动请求脚本,如下所示:

提示:如下代码中关键信息使用了...隐去处理。

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import requests

url = 'https://{ip}:{port}/foodBookingPlan/today'
headers = {
    'ks-branchPark': 'ZH_001',
    'Accept': '*/*',
    'ks-partner': 'KS...',
    'Accept-Language': 'zh-cn',
    'ks-sign': 'f1e2e2c400fce6d97efaba7a85eb03d7',
    'Accept-Encoding': 'gzip, deflate',
    'Content-Type': 'application/json;charset=UTF-8',
    'ks-email': 'ks...',
    'ks-apiType': 'openapi',
    'ks-timestamp': '1573189775000',
    'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_1_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/7.0.8(0x17000820) NetType/WIFI Language/zh_CN',
    'Referer': 'https://www.laucyun.com',
    'Cookie': 'SESSION=e2614...',
    'Connection': 'close',
}
try:
    r = requests.get(url, headers=headers)
    if r.status_code != requests.codes.ok:
        print('错误: 服务不可达')
    else:
        rd = r.json()
        print(rd)
except Exception as e:
    print('错误:', str(e))

可怕的事情发生了,5分钟后就提示clock is not available,从请求头中发现一个奇怪的字段ks-sign,由此可以猜测它应该是一个签名。

虽然签名的时效为5分钟完全可以自动下单,但是实用性不高啊~

0x2 反编译微信小程序

通过分析可以猜测签名算法应该写在微信小程序前端代码中,为此接下来需要对微信小程序进行反编译。

1 环境

  • 1) Node.js

    反编译脚本是基于Node.js编写,如果没有安装需要先安装。
    Node.js官网:https://nodejs.org/

2 安装反编译工具

通过git clonewxappUnpacker克隆到本地,命令如下:

git clone https://git.laucyun.com/security/wxappUnpacker.git

接着进行安装项目依赖,命令如下:

npm install
# 或使用淘宝NPM镜像
cnpm instaall

推荐使用淘宝 NPM 镜像,它使用 cnpm (gzip 压缩支持) 命令行工具代替默认的 npm:

npm install -g cnpm --registry=https://registry.npm.taobao.org

安装依赖后开始进行最复杂的操作,提取小程序包。


图3 安装反编译工具wxappUnpacker

3 提取微信小程序包

首先,下载并安装夜神模拟器,然后安装微信、文件管理器等工具。

接着,登录你的微信账号,打开一个小程序,让它加载显示后就可以关闭了(此时小程序文件包已经存储于手机某一位置中)。

那在手机中哪个位置呢?打开文件管理工具(此时会提示需要root权限,如图4所示),接着访问根目录(非存储) > data > data > com.tencent.mm > MicroMsg > 3e148db98e4097593ffcc4aabfbe0e57(诸如此类文件夹)> appBrand > pkg,即可看到后缀名为.wxapkg的文件:

  • _-842756125_75.wxapkg
  • _1123949441_320.wxapkg

将其打包成tar.gz,然后拷贝出来即可。

提示:如果MicroMsg中32位hash类文件夹多的话,可通过文件夹时间进行筛选。


图4 提示需要root权限


图5 小程序包

此时,微信小程序包已成功提取出来。

4 反编译

进入工具目录wxappUnpacker,建一个名为pkg的文件夹,将刚才提取到.wxapkg文件拷贝到此处。

接下来,对小程序包_-842756125_75.wxapkg进行反编译,命令如下:

node wuWxapkg.js ./pkg/_-842756125_75.wxapkg

此时,提示错误如下图所示:


图6 提示SyntaxError错误

根据https://github.com/qwerty472123/wxappUnpacker/issues/88的说法是小程序内含插件暂不支持解包,故此错误可忽略。

同样对小程序文件包_1123949441_320.wxapkg进行反编译,命令如下:

node wuWxapkg.js ./pkg/_1123949441_320.wxapkg


图7 反编译_1123949441_320.wxapkg

根据反编译后文件名等信息,可以推断出_1123949441_320.wxapkg是微信小程序的官方组件包。

5 审计源码

下载并安装微信开发者工具,然后打开微信开发者工具,导入项目(如下图所示),如果没有AppID的话,请选择游客模式。


图8 导入项目

导入成功后,即可看到项目结构和源码

通过阅读代码,在app-service.js中找到签名过程,如下图所示:


图9 签名过程

由此,签名明文包含三部分:

  • 字符串ks...RK
  • 长度为13位的时间戳
  • 密钥

深入分析后,分别得到签名算法和密钥,如下图所示:


图10 签名算法和密钥

故此签名算法为MD5(ks...RK+时间戳+h8cmc18oupezmopm)

0x3 提交订单

要获取下单的请求数据包,有两个方法:

  • 通过阅读小程序源码
  • 通过抓提交订单时数据包

通过阅读小程序源码,在/foodBookingPlan/today接口下面找到下单方法,如下图所示:


图11 提交订单方法

然后在43391行找到它调用了下单方法,订单数据如下图所示:


图12 订单数据

所以,订单数据为{'foodBookingPlanId': 185, 'items': [{'planItemId': '1004'}, {'planItemId': '1009'}]}

继续完善Python脚本,脚本地址:https://git.laucyun.com/myweb/blog-files/raw/master/kswm/kswm.py

提示:脚本代码中关键信息已用...隐去处理。

0x4 工具演示

执行python3 kswm.py -h获取工具帮助信息,如下图所示:

提示:请使用Python 3运行本工具。


图13 帮助信息

执行python3 kswm.py -c SESSION=e2.. -l查看商品清单,如下图所示:

提示:Cookie需通过抓包软件提取。至于如何提取,请移步https://laucyun.com/525396b1a6c32ca2b39675cde88f4fba.html


图14 可售商品

执行python3 kswm.py -c SESSION=e2.. -b 1014,1019即可购买,如下图所示:

提示:如果需购买多样商品的话,请以,分隔。


图15 下单成功

0x5 参考

...

Tags Read More..


三菱FX5U系列PLC存在拒绝服务漏洞

by LauCyun Nov 6 16:43:06 2,899 views

三菱FX5U系列PLC存在拒绝服务漏洞,攻击者可通过发送特制的数据包利用该漏洞造成设备进入无法恢复运行,需要注意的是通过Gx Works也无法正常启动,只能通过硬件断电恢复。

0x0 前言

三菱电机小型可编程控制器MELSEC iQ-F系列(三菱FX5U系列),以基本性能的提升、与驱动产品的连接、软件环境的改善为亮点,作为FX3U系列的升级产品FX5U系列精益求精现隆重问世。


图1 三菱FX5U系列PLC

FX5U延续了FX的综合灵活性传统,提供超大范围的新增和现有附加选项,进一步增强标配的内置功能,包括以太网、模拟输入/输出、数据记录、位置控制、安全通信和网络功能。

FX5U使用户能够指定更强大的系统,但只需较少的整体组件,节省时间和成本。

0x1 漏洞描述

攻击者可通过发送特制的数据包利用该漏洞造成设备进入无法恢复运行,需要注意的是通过Gx Works也无法正常启动,只能通过硬件断电恢复。

0x2 漏洞等级

中危

0x3 漏洞编号

CNVD-C-2019-131492

0x4 漏洞详情

通过组件PLC_RUN命令帧时,将数据长度改为比正常的数据长度大2的PLC启动数据包,并将数据包发送给PLC,如下图所示:


图2 执行攻击

此时PLC无法恢复运行,通过Gx Works也无法正常启动,如下图示:


图3 PLC无法运行

最终只能通过硬件断电恢复。

...

Tags Read More..


红蓝对抗中HTTP分块传输攻击实战

by LauCyun Oct 28 23:35:23 3,440 views

说明:文章编写于2019年6月10日。

分块传输绕过 WAF 的技能是在年初时从《利用分块传输吊打所有WAF》中学到的,不过没有深入研究。

最近 HW 行动中看到红方有人使用该技能过 WAF,所以总结了对分块传输进行防御的一些心得和方法。

0x0 分块传输

分块传输编码(Chunked transfer encoding)是 HTTP 中的一种数据传输机制,允许 HTTP 由网页服务器发送给客户端应用( 通常是网页浏览器)的数据可以分成多个部分。分块传输编码只在 HTTP 协议 1.1 版本(HTTP/1.1)中提供。

通常,HTTP 应答消息中发送的数据是整个发送的,Content-Length 消息头字段表示数据的长度。数据的长度很重要,因为客户端需要知道哪里是应答消息的结束,以及后续应答消息的开始。然而,使用分块传输编码,数据分解成一系列数据块,并以一个或多个块发送,这样服务器可以发送数据而不需要预先知道发送内容的总大小。通常数据块的大小是一致的,但也不总是这种情况。

估计都没完全明白啥意思,举个栗子加以说明,如下图所示:


图1 HTTP分块编码(请求)

如图1所示,将数据id=119631509进行分块编码,分成3块:

  • 块1:长度为2,内容是id
  • 块2:长度为0xA(16进制),内容是=119631509
  • 块3:结束块,长度为0(表示编码结束),内容为两个空行(表示数据包结束)。

如果黑客通过分块传输的方式把 Payload 发送至服务器,使得 WAF 无法识别出 Payload,从而达到绕过的效果,如下图所示:


图2 分块传输绕过WAF的原理图 

0x1 红队攻击

1 环境

介绍一下具体攻击环境,具体如下:

  • 靶机(Web服务器)
    • 系统:Windows 2008 r2
    • IP地址:192.168.0.109
    • phpStudy:phpStudy 2018版
      • 中间件:Apache 2.4
      • 数据库:MySQL 5.5.53
      • PHP:5.4.45
    • WAF
      • 名称:网站安全狗
      • 版本:V4.0(Apache版)
    • 注入点:http://192.168.0.109/sqlinject.php
  • 攻击机
    • IP地址:192.168.0.102
    • 工具:
      • HackBar
      • BurpSuite

sqlinject.php源码如下:

<html>
<head>
    <title>SQL Injection Demo</title>
</head>
<body>
    <?php
    if ($_REQUEST['id']) {
        $id = $_REQUEST['id'];
        // Setup the connection to the database
        $mysqli = new mysqli('localhost', 'root', 'root', 'sql_injection_example');
        // Check connection before executing the SQL query
        if ($mysqli->connect_errno) {
            echo "Connect failed: %s\n" . $mysqli->connect_error;
            exit();
        }
        // SQL query vulnerable to SQL injection
        $sql = "SELECT username FROM users WHERE id = $id";
        // Select queries return a result
        if ($result = $mysqli->query($sql)) {
            while ($obj = $result->fetch_object()) {
                echo "<p>Hello " . $obj->username . "! </p>";
            }
        }
        // If the database returns an error, print it to screen 
        elseif ($mysqli->error) {
            echo "Error: " . $mysqli->error;
        }
    }
    ?>
</body>
</html>

数据库sql_injection_exampleusers表的结构和数据如下:

DROP TABLE IF EXISTS `users`;
CREATE TABLE `users` (
  `Id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(50) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `password` varchar(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `first_name` varchar(50) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `last_name` varchar(50) CHARACTER SET utf8 NOT NULL DEFAULT '',
  PRIMARY KEY (`Id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

INSERT INTO `users` VALUES (1,'laucyun','$2a$10$SakFH.Eatq3QnknC1j1uo.rjM4KIYn.o8gPb6Y2YBnNNNY.61mR9K','Lau','Cyun'),(2,'maryjohnson','$2a$10$hA/hwCzhr6F23BsbRZBjdOA5eqTgV01cv30sy/O2EcL2/zG9k0aGy','Mary','Johnson'),(3,'jameswilliams','$2a$10$OkV5tCMMsy91pkkMXHa94OgcunNtuhxsQcxaOW6tJimuaCO0FMDZm','James','Williams'),(4,'lindabrown','$2a$10$2NgAjstT9NcN58zMcF/Rq.pYt5bg3iQ6OmdRgR3YWfT.ZVgmJR4FK','Linda','Brown');

WAF 配置为拦截 URL 和 POST 的and  or注入,如下图所示:


图3 WAF的检测规则

2 SQL注入攻击

利用 HackBar 工具发送 POST 请求 Payload 均被拦截,如下图所示:


图4 WAF成功拦截SQL注入

3 利用分块传输绕过waf

先在 POST 请求头中加入Transfer-Encoding: chunked,然后将数据部分id=1 or 1=1进行分块编码(注意:长度值必须为十六进制数),而且每块里长度值独占一行,数据占一行,如下图所示:

注意:
 1. 分块编码传输需要将关键字andorselectunion等关键字拆开编码,不然仍会被 waf 拦截。
 2. 最后用0表示编码结束,并在0后空两行表示数据包结束,不然点击提交按钮后会看到一直处于 waiting 状态。


图5 分块传输绕过WAF

从上图可知通过对id=1 or 1=1进行分块传输,可以绕过 WAF 检查。

但有一些较好的 WAF(比如:Imperva、360等)可以防御分块传输类攻击,它是把所有的块组合成一个完整的 HTTP 数据包,那上面的方法就会被 WAF 识别并阻断。

正所谓“道高一尺,魔高一丈”,可以通过在每个分块长度标识处加上分号;作为注释即可绕过,如下图所示:


图6 加注释的分块传输

几乎所有能识别分块传输的 WAF,都没处理分块数据包中长度标识处的注释,所以也可以绕过。

推荐使用 @c0ny1 大佬的工具,工具地址:http://github.com/c0ny1/chunked-coding-converter

0x2 蓝队防御

站在防御者的角度,如何检测分块传输呢?

首先,该插件利用的请求是post方法。如果是服务器是get方法的,需要把get请求改为post请求,同时要满足服务器能接受post请求并正确响应。

再者,请求包中消息头带有Transfer-Encoding: chunked,这是分块传输的标志。目前web应用很少能见到分块传输,更多的是断点续传,如果我们没有利用分块传输的web应用,而IDS、IPS或者流量分析系统检测到http请求头有Transfer-Encoding: chunked,则说明有人尝试利用分块传输发动攻击。

最后,消息主体其特征值是分块传输的规则。基本格式是第一行表示下一行内容的长度,第二行则是内容,最末尾倒数第三行为0,然后最后两行为空行。所以要把传输的块拼接起来就是,偶数行拼接。而加入的注释干扰项是在表示下一行长度的这行尾部添加;(数字+字母大小写随机字符串)。

0x3 参考

...

Tags Read More..


【漏洞预警】PHP-FPM远程代码执行漏洞(CVE-2019-11043)

by LauCyun Oct 24 09:43:46 3,727 views

2019年10月22日,大牛@ahack_ru在Twitter上公开了一个PHP-FPM中新修补漏洞的RCE。

0x1 漏洞详情

Nginx上fastcgi_split_path_info在处理带有%0a的请求时,会因为遇到换行符\n导致PATH_INFO为空。而php-fpm在处理PATH_INFO为空的情况下,存在逻辑缺陷。攻击者通过精心的构造和利用,可以导致远程代码执行。

1 漏洞等级

中危(注:因需要在特定的环境配置下才能代码执行,漏洞覆盖面有限。)

2 影响范围

PHP 5.6-7.x

3 漏洞类型

代码执行

4 漏洞编号

CVE-2019-11043

5 漏洞复现

经分析确认,漏洞确实存在,PHP 5.6以上版本存在Crash, PHP 7.X版本存在RCE。

使用POC发送数据包,如下图所示:

可见,这里已经执行成功。

访问http://localhost:8080/index.php?a=id即可查看到命令已成功执行,如下图所示:

0x2 修复方案

请结合实际业务场景,在不影响正常业务的情况下,在 Nginx 的配置文件中删除如下配置:

fastcgi_split_path_info ^(.+?\.php)(/.*)$;
fastcgi_param PATH_INFO $fastcgi_path_info;

0x3 时间轴

  • 2019/9/14    安全研究员Andrew Danau发现该漏洞。
  • 2019/9/26    PHP官方发布漏洞通告。
  • 2019/10/22   POC在github公开。

0x4 参考

...

Tags Read More..


【PPT】王喜文:5G为人工智能与智能制造赋能

by LauCyun Sep 26 12:02:34 8,923 views

上个月,任正非在一份内部邮件中,号召供公共关系、接待经理、非市场与技术人员学习《认识5G,发展5G》,PPT是根据王喜文[1]博士的文章缩编的。


图1 邮件内容

为此今天给大家分享一下王喜文博士的PPT——《5G为人工智能与智能制造赋能》。

1 PPT内容

这个课件是王喜文博士给地方政府和企业家讲座的完整内容,通过对5G、人工智能、智能制造等未来科技的分享,希望有助于大家头脑风暴、拓展思路、开拓视野。

2 参考资料

[1] 王喜文,九三学社中央科技委委员,工信部国际经济技术合作中心信息主任,工业经济研究所所长。工学博士,博士后,高级工程师。他出版专著有:

  • 《工业4.0:最后一次工业革命》
  • 《工业4.0(图解版):通向未来工业的德国制造2025》
  • 《中国制造2025解读:从工业大国到工业强国》
  • 《工业互联网:中美德制造业三国演义》
  • 《世界机器人未来大格局》
  • 《机器人+:战略行动路线图》
  • 《工业机器人2.0:智能制造时代的主力军》
  • 《智能制造:中国制造2025的主攻方向》
  • 《中国制造2025思维:从两化融合到互联网+工业》
  • 《新产业政策》
  • 《工业4.0:第四次工业革命全景图》等

...

Tags Read More..