Finger
拎着烈酒背着孤独踟蹰的代码狗

圈子文章 by根生仔finger

装逼犯与树莓派#

目录
装逼犯与树莓派序
树莓派
装逼与渗透
装逼与内核FUZZ
装逼与智能语音

注 本文合适读者:渴望装逼者∪成功装逼者∪若无其事装逼者
注 本文阅读时BGM 郭德纲小曲 https://www.bilibili.com/video/av27879833/



第一章 装逼犯与树莓派序#

此文来源:一日 智障LEADER 问我能不能在平时生活中,用语音来进行挖内核漏洞,我当时的表情。

file

心想:你交给乙方的人做不行么...但是没办法,毕竟转职的鉴定和推荐还得这大爷写,那就乖乖想吧。

我:可以直接ssh操作机器,需要个公网IP,就能执行一些预设的指令。
LEADER:小伙子,公网IP是没有的,能省则省,我们也要响应党的八项...(一万字),而且也没有用语音啊
我:是不是这样,用微信去给电脑发送一些命令,是不需要公网ip的。
LEADER: 小伙子你还年轻,想法极客些,要随身点。能放包里。
我:那微信操作嵌入式,嵌入式执行挖掘,结果反馈回微信?
LEADER: 嗯~,要随身而且要简单就能快速挖到内核漏洞。
我:(心中mmp 表面还呵呵笑,笑中带着cnm)好的~~

当时的想法是怎么做出个样式给这大爷,混到明年就不关我的事啦,那就开始吧,当时限制条件是没有公网ip,随身携带,装逼语音等,那就选择微信机器人加树莓派及语音套件,如果还有时间的话,可以训练一个深度学习框架,用于识别渗透和内核指令日志之类的。别问我这玩意有啥用,渗透和fuzzing就不是几个树莓派能解决的事。

树莓派及套件树莓派系统
一个神奇的双肩包win/kali等
RESPEAKER套件AFL/syzkaller/自行骚改版等fuzz工具
PM3 EASY一堆py
想要什么功能加什么硬件软件不算什么难题
比如偷拍模块配合写个一键上传91x先生脚本
......

第二章 树莓派#

硬软件准备好,那就开始。网上一堆帖子讲怎么操树莓派,我就简单讲下。

首选是系统选择上,比较推荐官方最新系统,Raspbian

https://www.raspberrypi.org/downloads/

二选就是推荐我编译打包后kali

https://www.offensive-security.com/kali-linux-arm-images/

file

也可以等我上传到百度网盘,也可以自己调试着玩,毕竟我们的目的就是折腾。

file

其他可以装着玩玩比如win10mate ubuntu mate,都不错。
安装系统前需要格式化SD卡,软件可以使用 SD CARD FORMATTER 安装镜像软件可以用 Etcher

file

图4

我是没有显示器和网线的,所以还得准备好配置默认启动ssh和wifi。
默认启动ssh ,安装完镜像后拔插卡,后新建一个ssh文件,无后缀名+小写的。放在卡目录boot分区下
配置wifi,也是在卡boot分区下新建一个文件 wpa_supplicant.conf.内容如下:

country=CN
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1

network={
ssid="你的无线网络名称(ssid)"
key_mgmt=NONE
}

network={
ssid="你的无线网络名称(ssid)"
key_mgmt=NONE
wep_key0="你的wifi密码"
}

network={
ssid="你的无线网络名称(ssid)"
key_mgmt=WPA-PSK
psk="你的wifi密码"
}
file

这三个network对应三种加密模式,无密码 WEP加密 WPA/WPA2加密
配置好之后,就可以将SD卡插入树莓派,通电之后就可以ssh连接配置了。推荐 MobaXterm
展示下

file

图6

接下来就是微信机器人,原理的话很简单,有个项目叫itChat框架,借鉴了人家了写法,大致是
.利用网页版微信通信协议向树莓派发送指令,类似一个非实时的终端交互
.相比其它微信远程而言,这个脚本可以适用于普通微信号
.适用于无公网IP的情况下远程发送命令

itchat代码快速指南见本章最后

remote_command.py代码如下

#!/usr/bin/env python
#coding=utf-8
#根据需要删除增加代码,此处只是基本代码,但是也能完成功能

import os
import sys
import itchat
import time

if os.name == 'posix' and sys.version_info[0] < 3:
    import subprocess32 as subprocess
else:
    import subprocess

help = '''\
WeChat remote:
* this is helpful menu for test
* input:help(show this message)\
'''

@itchat.msg_register('Text')
def remote(msg):

    #if not msg['FromUserName'] == msg['ToUserName']: return  
  # comment this line if you can't send message to yourself
    if msg['Text'] in ['help', u'帮助']:
        return help
    else:
        commands = msg.get('Content', '')
        args = commands.split()

        # Custom aliases
        # if args[0] == 'dis':
            # args[0] = '/home/pi/bluetoothcve/discovery.py'

        # if args[0] == 'gb':
            # args[0] = '/home/pi/bluetoothcve/get_base.py'

        # if args[0] == 'gs':
            # args[0] = '/home/pi/bluetoothcve/exp_reserse_shell.py'

        # if args[0] == 'MM':
            # args[0] = '/home/pi/bluetoothcve/showwxqrcode.py'

        try:
            proc =  subprocess.Popen(args,
                                    # shell=True,
                                    # executable='/bin/bash',
                                    # stderr=subprocess.PIPE,
                                    stdout=subprocess.PIPE)
            return proc.communicate()[0].strip()
        except OSError as e:
            return u'Commands/Files not found'

itchat.auto_login(enableCmdQR = True, hotReload = True)
itchat.run()

怎么使用呢?come on
1 安装必备环境

sudo apt-get install python-dev python-pillow//必备环境
sudo pip install subprocess32
sudo pip install itchat
sudo apt-get install screen//这个玩意好一点

2 将上述文件保存为remote_command.py(随意命名)
3 执行

screen bash
python remote_command.py

第一次运行会有有二维码,微信骚一骚即可。如图。我们接下来测试下

file
file
发送指令响应内容实际操作
helphelp test响应成功
echo 123123echo成功
touch 123.txt创建文件成功
apt-get update
kill $pid
file

后两个指令不成功原因:占用进程subprocess need to Wait for process to terminate; subprocess原理:https://docs.python.org/3/library/subprocess.html#subprocess.Popen.communicate 尽量通过 wrapper来执行。

接下来演示下一个场景: 场景漏洞 CVE-2017-0781
假设团长带着这个设备背着一个神奇的双肩包走在街上不对团长有奥迪在街上骚,发现一个小妹妹用Android手机某为 蓝牙耳机打电话,心中不免骚动~
好,掏出手机 打开微信。
团长微信操作:树莓派后台操作
1 发送指令dis到finger:启动discovery.py 扫描到小妹妹蓝牙mac地址。
2 发送指令gb 'B4:0B:44:32:B0:87'到finger:启动get_base.py B4:0B:44:32:B0:87,获得蓝牙漏洞通过两次堆喷得到两个so的加载基址:并写入成新的exp.py文件。
3 发送指令gs 到finger:执行新的exp.py和reverse_shell.py并监听本地等待shell回连。
4 发送指令MM 到finger:执行mm.py并echo 团长的微信号到小妹妹的手机... (暂时不知道怎么实现,我的想法是adb shell 获得活动的activity,在pull 一个apk上去...)
5 二八少女夜笙歌,床上翻腾戏黑客。 然后就是马赛克了...知道之前我照片中的偷拍模块干啥用了吧
至此,团长全垒打并上传91x先生...

一些演示截图们

file
file
file
file
file

这里其实有个bug ,就是nc监听后,如果不能在短时间回来shell,(前面的reserve_shell是反复执行5-10次,而且是无论成功与否都继续打...这个逻辑我写的像是屎),那就会nc占用进程了,不另外起ssh就kill不掉,这个我暂时没解决。。。当然这个漏洞只是演示大家脑补团长和小妹妹画面就好了其他的都不重要。

如果有时间研究下一键偷拍上传到91porn/草榴社区
也欢迎各位大佬帮我写写,帮助圈子的少儿们健康快乐成长

file
附录:关于itchat 熟悉或不敢兴趣也看跳到下一章#

登录
itchat.auto_login() 这种方法将会通过微信扫描二维码登录,但是这种登录的方式确实短时间的登录,并不会保留登录的状态,也就是下次登录时还是需要扫描二维码,如果加上hotReload==True,那么就会保留登录的状态,至少在后面的几次登录过程中不会再次扫描二维码,该参数生成一个静态文件itchat.pkl用于存储登录状态

退出及登录完成后调用的特定的方法
这里主要使用的是灰调函数的方法,登录完成后的方法需要赋值在 loginCallback 中退出后的方法,需要赋值在 exitCallback中.若不设置 loginCallback 的值, 将会自动删除二维码图片并清空命令行显示.

import itchat, time
def lc():
    print("Finash Login!")
def ec():
    print("exit")

itchat.auto_login(loginCallback=lc, exitCallback=ec)
time.sleep()
itchat.logout()    #强制退出登录

回复消息
send

send(msg="Text Message", toUserName=None)

参数:

msg : 文本消息内容

@fil@path_to_file : 发送文件

@img@path_to_img : 发送图片

@vid@path_to_video : 发送视频

toUserName : 发送对象, 如果留空, 将发送给自己.

返回值

True or False

实例代码

# coding-utf-8
import itchat
itchat.auto_login()
itchat.send("Hello World!")
ithcat.send("@fil@%s" % '/tmp/test.text')
ithcat.send("@img@%s" % '/tmp/test.png')
ithcat.send("@vid@%s" % '/tmp/test.mkv')

send_msg

send_msg(msg='Text Message', toUserName=None)
#其中的的msg是要发送的文本,toUserName是发送对象, 如果留空, 将发送给自己,返回值为True或者False

实例代码

import itchat
itchat.auto_login()
itchat.send_msg("hello world.")

send_file

send_file(fileDir, toUserName=None) 
#fileDir是文件路径, 当文件不存在时, 将打印无此文件的提醒,返回值为True或者False

实例代码

import itchat

itchat.auto_login()
itchat.send_file("/tmp/test.txt")

send_image

send_image(fileDir, toUserName=None) #参数同上

实例代码

import itchat

itchat.auto_login()
itchat.send_img("/tmp/test.txt")

send_video

send_video(fileDir, toUserName=None) #参数同上

实例代码

import itchat

itchat.auto_login()
itchat.send_video("/tmp/test.txt")

注册消息方法

itchat 将根据接受到的消息类型寻找对应的已注册的方法.
如果一个消息类型没有对应的注册方法, 该消息将会被舍弃.
在运行过程中也可以动态注册方法, 注册方式与结果不变.

注册方法

不带具体对象注册, 将注册为普通消息的回复方法.
import itchat
from itchat.content import *
@itchat.msg_register(TEXT)   #这里的TEXT表示如果有人发送文本消息,那么就会调用下面的方法
def simple_reply(msg):
    #这个是向发送者发送消息
    itchat.send_msg('已经收到了文本消息,消息内容为%s'%msg['Text'],toUserName=msg['FromUserName'])
    return "T reveived: %s" % msg["Text"]     #返回的给对方的消息,msg["Text"]表示消息的内容

带对象参数注册, 对应消息对象将调用该方法,其中isFriendChat表示好友之间,isGroupChat表示群聊,isMapChat表示公众号

import itchat
from itchat.content import *

@itchat.msg_register(TEXT, isFriendChat=True, isGroupChat=True,isMpChat=True)
def text_reply(msg):
    msg.user.send("%s : %s" % (mst.type, msg.text))

消息类型

向注册方法传入的 msg 包含微信返回的字典的所有内容.itchat 增加 Text, Type(也就是参数) 键值, 方便操作.

itcaht.content 中包含所有的消息类型参数, 如下表

参数l类型Text 键值
TEXT文本文本内容(文字消息)
MAP地图位置文本(位置分享)
CARD名片推荐人字典(推荐人的名片)
SHARING分享分享名称(分享的音乐或者文章等)
PICTURE下载方法  图片/表情
RECORDING语音下载方法
ATTACHMENT附件下载方法
VIDEO小视频下载方法
FRIENDS好友邀请添加好友所需参数
SYSTEM系统消息更新内容的用户或群聊的UserName组成的列表
NOTE通知通知文本(消息撤回等)

附件的下载与发送

itchat 的附件下载方法存储在 msg 的 Text 键中.
发送的文件名(图片给出的默认文件名), 都存储在 msg 的 FileName 键中.
下载方法, 接受一个可用的位置参数(包括文件名), 并将文件响应的存储.
注意:下载的文件存储在指定的文件中,直接将路径与FileName连接即可,如msg["Text"]('/tmp/weichat'+msg['FileName'])
@itchat.msg_register([PICTURE, RECORDING, ATTACHMENT, VIDEO])
def download_files(msg):
    #msg.download(msg['FileName'])   #这个同样是下载文件的方式
    msg['Text'](msg['FileName'])      #下载文件
    #将下载的文件发送给发送者
    itchat.send('@%s@%s' % ('img' if msg['Type'] == 'Picture' else 'fil', msg["FileName"]), msg["FromUserName"])

消息内容

注意:所有的消息内容都是可以用键值对来访问的,如msg["FromUserName]就是查看发送者,itchat.search_friends(userName=msg['FromUserName'])['NickName']查看的是当发送者昵称

一般消息

一般的消息都遵循以下的内容:

{
    "FromUserName": "",
    "ToUserName": "",
    "Content": "",
    "StatusNotifyUserName": "",
    "ImgWidth": 0,
    "PlayLength": 0,
    "RecommendInfo": {},
    "StatusNotifyCode": 0,
    "NewMsgId": "",
    "Status": 0,
    "VoiceLength": 0,
    "ForwardFlag": 0,
    "AppMsgType": 0,
    "Ticket": "",
    "AppInfo": {},
    "Url": "",
    "ImgStatus": 0,
    "MsgType": 0,
    "ImgHeight": 0,
    "MediaId": "",
    "MsgId": "",
    "FileName": "",
    "HasProductId": 0,
    "FileSize": "",
    "CreateTime": 0,
    "SubMsgType": 0
}

初始化消息

 MsgType: 51
    FromUserName: 自己ID
    ToUserName: 自己ID
    StatusNotifyUserName: 最近联系的联系人ID
    Content:
        <msg>
            <op id='4'>
                <username>
                    # 最近联系的联系人
                    filehelper,xxx@chatroom,wxid_xxx,xxx,...
                </username>
                <unreadchatlist>
                    <chat>
                        <username>
                        # 朋友圈
                            MomentsUnreadMsgStatus
                        </username>
                        <lastreadtime>
                            1454502365
                        </lastreadtime>
                    </chat>
                </unreadchatlist>
                <unreadfunctionlist>
                # 未读的功能账号消息,群发助手,漂流瓶等
                </unreadfunctionlist>
            </op>
        </msg>

文本消息

MsgType: 1
    FromUserName: 发送方ID
    ToUserName: 接收方ID
    Content: 消息内容

图片消息

itchat 增加了 Text 键, 键值为 下载该图片的方法.

MsgType: 3
    FromUserName: 发送方ID
    ToUserName: 接收方ID
    MsgId: 用于获取图片,用于表示每一条消息
    Content:
        <msg>
            <img length="6503" hdlength="0" />
            <commenturl></commenturl>
        </msg>

语音消息

*itchat增加了Text键,键值为下载该语音文件的方法,下载下来的是MP3的格式

MsgType: 34
    FromUserName: 发送方ID
    ToUserName: 接收方ID
    MsgId: 用于获取语音
    Content:
        <msg>
            <voicemsg endflag="1" cancelflag="0" forwardflag="0" voiceformat="4" voicelength="1580" length="2026" bufid="216825389722501519" clientmsgid="49efec63a9774a65a932a4e5fcd4e923filehelper174_1454602489" fromusername="" />
        </msg>
下载方法:msg['Text'](msg['FileName'])

以上 实现了微信指令执行问题,结合itchat再写出更合适的脚本们


第三章 装逼与渗透#

后两章正在录制视频中


第四章 装逼与内核FUZZ#


正在写代码

file

这篇文章有2人发言了呢.

  1. 好久没来了, 根生,身体好点儿了吗?

    流沙

    2018/12/31

    @Ta
    #1
    • @

      流沙

      已经能上山打野了

      finger 扁担w

      2019/1/3

      @Ta

发表评论