色字当头一把刀,看我如何用Python针对裸聊渗透测试

2023-11-10

本篇文章由知柯™️信息安全&CSDN博主鸿渐之翼联合发布,转载请标明出处!
深圳市狩猎者网络安全技术有限公司旗下安全团队
在这里插入图片描述

CSDN:@知柯信息安全
知柯信息安全,用心呵护您的安全!Professional in Software Security
关于我们:知柯信息安全简介
在这里插入图片描述

⚠️:色字当头一把刀,切勿沾上黄赌毒,发现诈骗,赶紧报警!⚠️

基于长安杯的例题,本文结合裸聊APP
网络配置:
将所有的虚拟机运行在vmnet1中,将Vmnet1网卡改成192.168.110.1这样就可以不用修改主机IP
检材二,负载均衡服务器:192.168.110.110
检材三,web3:192.168.110.113
2021年4月25日,上午8点左右,警方接到被害人金某报案,声称自己被敲诈数万元;经询问,昨日金某被嫌疑人诱导裸聊,下载了某“裸聊”软件,导致自己的通讯录和裸聊视频被嫌疑人获取,对其进行敲诈,最终金某不堪重负,选择了报警;警方从金某提供的本人手机中,定向采集到了该“裸聊”软件的安装包–zhibo.apk(检材一),请各位回答下列问题:(题目中需要通过分析出来的答案对检材二三四五解压,解压密码为IP的情况,需要在密码后增加-CAB2021,例:192.168.100.100-CAB2021)

PART A:apk分析

1 请计算检材一Apk的SHA256值
在这里插入图片描述
2.该APK的应用包名为:
这里不是软件名称,需要用手机取证软件来分析。
3.该APK程序在封装服务商的应用唯一标识(APPID)为
这个其实是第三方的调证值
4.该APK具备下列哪些危险权限(多选题):ABCDE
A.读取短信.B.读取通讯录.C.读取精确位置.D.修改通讯录.E.修改短信.
在这里插入图片描述
5.该APK发送回后台服务器的数据包含一下哪些内容(多选题):
A.手机通讯录.B.手机应用列表.C.手机号码.D.验证码.E.GPS定位信息.
6.该APK程序回传通讯录时,使用的http请求方式为()
将apk文件放到模拟器里,对fiddler进行配置,然后在手机上下载安全证书进行抓包

在这里插入图片描述
可以看抓到了目标服务器的地址
在这里插入图片描述
并且可以看到是用post的方式进行传参
在这里插入图片描述
7.该APK程序的回传地址域名为【标准格式:www.abc.com】 :www.honglian7001.com
在这里插入图片描述
8.该APK程序代码中配置的变量apiserver的值为【标准格式:www.abc.com/abc】
9.分析该APK,发现该程序还具备获取短信回传到后台的功能,短信上传服务器接口地址为【标
准格式:www.abc.com/abc】
10.经分析,发现该APK在运行过程中会在手机中产生一个数据库文件,该文件的文件名为
11.经分析,发现该APK在运行过程中会在手机中产生一个数据库文件,该数据库的初始密码为

PART B 检材二,负载均衡服务器:

12.检材二的原始硬盘的SHA256值为:
这个没什么好做的
13.查询涉案于案发时间段内登陆服务器的IP地址为【标准格式:111.111.111.111】
这个题的重点是得先知道案发时间是啥时候,已知的时间点是报案时间为4月25日,而根据金先生所述他是昨天下的裸聊软件
所以我们基本可以确定案发时间是4月24
在这里插入图片描述
14.请对检材二进行分析,并回答该服务器在集群中承担的主要作用是(负载均衡服务器)【格式:文件存储】
通过查看history查看命令(通过仿真软件或者仿真都可以看到)
在这里插入图片描述
在这里插入图片描述
通过对历史命令的分析可以发现,使用者在疯狂的使用这个文件夹,所以cd过去看他的readme
在这里插入图片描述
通过读他的rm可以了解到const大概就是端口号配置文件所在的地方,而ADProxy.js是反向代理目标地址的配置文件
在这里插入图片描述
15.上一题中,提到的主要功能对应的服务监听的端口为:80
进入配置文件可以直切看到这些信息
在这里插入图片描述
16.上一题中,提到的服务所使用的启动命令为:
在history中可以发现app.js在被平凡的运行,而且它占用的是80端口
node app.js & //node是nodejs运行代码的代码的命令,&是在后台运行
使用netstat -napt就可以只看到80端口正在被node占用
在这里插入图片描述
17.经分析,该服务对于请求来源IP的处理依据是:根据请求源IP地址的第(三)位进行判断


/**
 * 反向代理
 *
 */
module.exports = function(_brain, _app) {
    /* INCLUDE */
    const path = _brain.A.path;
    const async = _brain.A.async;
    const proxy = require('http-proxy-middleware');
    const net = require('net');
    /* DEFINE */
    const _tag = path.basename(__filename, ".js");
    var _isBanned = false;
    var _isStarted = false;
    if(!_brain.A.checkIsNull(_brain.C.autorun_config[_tag], _tag)){
        _isStarted = _brain.C.autorun_config[_tag];
    }
    /* DEFINE PROXY */
    const _proxy50 = {
        protocol: 'http:',
        host: '192.168.110.111',
        port: 80
    }
    const _proxy100 = {
        protocol: 'http:',
        host: '192.168.110.112',
        port: 80
    }
    const _proxy100p = {
        protocol: 'http:',
        host: '192.168.110.113',
        port: 80
    }                                            //18行到33行的代码定义了三个对象
    /* Private Function */
    /**
     * Service Running
     */
    var service = function (){
        if(!_isStarted) return;
        // proxy middleware options
        const _proxyer_chronus = proxy({
            target: '/', // target host
            changeOrigin: true,               // needed for virtual hosted sites
            ws: true,                          // proxy websockets
            router: function(req) {
                var clientIP = req.get("x-forwarded-for")          //46行是一个关键点,程序通过返回的IP数据包的XFF字段来获取IP地址
                if (clientIP == undefined) {
                    clientIP = req.connection.remoteAddress
                }                                                 //49行将接收到的IP以点分割成四段,进入下面的判断
                var clientIPArr = clientIP.split(".")
                if (clientIPArr.length == 4) {
                    var clientIP3Int = parseInt(clientIPArr[2])         //52定义一个变量,值从分段后的第三段获得
                    global.logger.warn('[Proxy_RequestHeader] -> ' + JSON.stringify(req.headers));
                    global.logger.warn('[Proxy_ClientIP] -> ' + clientIP);
                    if (clientIP3Int <= 50) {
                        global.logger.warn('[Proxy_Destination] -> ' + JSON.stringify(_proxy50));
                        return _proxy50
                    } else if (clientIP3Int <= 100) {
                        global.logger.warn('[Proxy_Destination] -> ' + JSON.stringify(_proxy100));
                        return _proxy100
                    } else {
                        global.logger.warn('[Proxy_Destination] -> ' + JSON.stringify(_proxy100p));
                        return _proxy100p
                    }
                }
            }
        })

        _app.all('/*', _proxyer_chronus);
    };

    /**
     * Service Killing
     */
    var serviceKiller = function (){
    };


    /* Public Function */
    /* 返回_tag */
    var getTag = function (){
        return _tag;
    };
    /* 判断服务是否开启 */
    var isStarted = function (){
        return _isStarted;
    };
    /* 判断服务是否被意外禁止 */
    var isBanned = function (){
        return _isBanned;
    };

    /* 服务开关 */
    var startServer = function (callBack){
        _isStarted = true;
        service();
        if(callBack)
            callBack(100, _tag + ' Started');
    };

    var stopServer = function (callBack){
        _isStarted = false;
        serviceKiller();
        if(callBack)
            callBack(100, _tag + ' Stopped');
    };

    /* Service AutoRun */
    if(_isStarted){
        startServer();
    }else{
        stopServer();
    }

    return{
        getTag             : getTag,
        isStarted          : isStarted,
        isBanned           : isBanned,
        startServer        : startServer,
        stopServer         : stopServer,
    };
}

从这里我们就可以判断此程序是通过源地址的第三位来进行判断
18.经分析,当判断条件小于50时,服务器会将该请求转发到IP为()的服务器上【标准格式:
111.111.111.111】
这里依旧是对上述代码进行分析,小于50对应的是对象“_proxy50”,对应的IP是’192.168.110.111’
19.分析,该服务器转发的目标服务器一共有几台【标准格式:9】
根据上述代码的条件可以得出目标服务器是三台
20.请分析,受害者通讯录被获取时,其设备的IP地址为【标准格式:111.111.111.111】
如果仔细观察history的历史命令可以发现honglianjingsai目录下是有日志文件的并且还被查看过
在这里插入图片描述
已知案发时间实在4月24日,我们cd过去,ls可以发现当天的日志只有一个
在这里插入图片描述
查看日志后发现当天被转发的IP总共有三个,
192.168.110.142
在这里插入图片描述
192.168.110.252
在这里插入图片描述
192.168.110.203
在这里插入图片描述
一开始这个题是做不了的,但做到后面,我们一旦确定了案发的准确时间(精确到分秒)就可以找到ip
21.请分析,受害者的通讯录被窃取之后,经由该服务器转发到了IP为()的服务器上【标准格
式:111.111.111.111】
这题无论是通过查日志
在这里插入图片描述
还是根据之前的代码进行分析,我们都可以知道转发的服务器是:192.168.110.113

PART C:网站服务器:

22.检材三的原始硬盘的SHA256值为:
不想算,但这里有坑,这三个服务器是负载均衡转发的三个目标服务器,目前已知服务器所转发的对象,是第三个服务器,所以我们要算的是第三台服务器的ip
23.请分析第21题中,所指的服务器的开机密码为:
通过火眼证据分析可以看到shell,里面有密码的记录
24.嫌疑人架设网站使用了宝塔面板,请问面板的登陆用户名为:hl123
确定是web3镜像之后,直接仿真按照之前的配网方法拿到虚拟局域网vmnet1,就可以直接用了
在这里插入图片描述
直接在真是机输入内网面板地址,在登录界面会遇到一个问题,其密码是错误的,这里有两种方法:
方法一:bt,输入5,输入想要修改的密码
方法二:输入命令

cd /www/server/panel && python tools.py panel 123456

25.请分析用于重置宝塔面板密码的函数名为 set_panel_pwd
这题的分析思路在于tool.py这个脚本,可以看到上一题的方法二中修改密码的命令调用的起始页是tools.py这个脚本导出来做代码审计
在这里插入图片描述

在这里插入图片描述
可以发现tools.py里面对应的是bt命令下的所有功能,下面是import包含的库

import sys,os                   
panelPath = '/www/server/panel/'
os.chdir(panelPath)                          //将当前工作目录切换到指定路径
sys.path.insert(0,panelPath + "class/")          //sys.path模块可以动态修改系统路径
import public,time,json
if sys.version_info[0] == 3: raw_input = input

我们主要需要关注的是设置面板密码的部分:
在第5行可以看到明文password被md5加密后传到public.password_salt函数中

#设置面板密码
def set_panel_pwd(password,ncli = False):
    import db                   //这里调用了在class目下db模块
    sql = db.Sql()           
    result = sql.table('users').where('id=?',(1,)).setField('password',public.password_salt(public.md5(password),uid=1))
    username = sql.table('users').where('id=?',(1,)).getField('username')
    if ncli:
        print("|-用户名: " + username)
        print("|-新密码: " + password)
    else:
        print(username)

class下的public模块,在tools.py中被调用的模块代码

def md5(strings):
    return Md5(strings)
def password_salt(password,username=None,uid=None):
    '''
        @name 为指定密码加盐
        @author hwliang<2020-07-08>
        @param password string(被md5加密一次的密码)
        @param username string(用户名) 可选
        @param uid int(uid) 可选
        @return string
    '''
    chdck_salt()
    if not uid:
        if not username:
            raise Exception('username或uid必需传一项')
        uid = M('users').where('username=?',(username,)).getField('id')
    salt = M('users').where('id=?',(uid,)).getField('salt')
    return md5(md5(password+'_bt.cn')+salt)

public中的调用的函数

def chdck_salt():                 //此函数描述了盐的生成方式
    '''
        @name 检查所有用户密码是否加盐,若没有则自动加上
        @author hwliang<2020-07-08>
        @return void
    '''

    if not M('sqlite_master').where('type=? AND name=? AND sql LIKE ?', ('table', 'users','%salt%')).count():
        M('users').execute("ALTER TABLE 'users' ADD 'salt' TEXT",())
    u_list = M('users').where('salt is NULL',()).field('id,username,password,salt').select()
    if isinstance(u_list,str):
        if u_list.find('no such table: users') != -1:
            rep_default_db()
            if not M('sqlite_master').where('type=? AND name=? AND sql LIKE ?', ('table', 'users','%salt%')).count():
                M('users').execute("ALTER TABLE 'users' ADD 'salt' TEXT",())
            u_list = M('users').where('salt is NULL',()).field('id,username,password,salt').select()

    for u_info in u_list:
        salt = GetRandomString(12) #12位随机
        pdata = {}
        pdata['password'] = md5(md5(u_info['password']+'_bt.cn') + salt)
        pdata['salt'] = salt
        M('users').where('id=?',(u_info['id'],)).update(pdata)

调用了rep_default_db模块,里面调用了文件

def rep_default_db():
    db_path = '/www/server/panel/data/'
    db_file = db_path + 'default.db'
    db_tmp_backup = db_path + 'default_' + format_date("%Y%m%d_%H%M%S") + ".db"

    panel_backup = '/www/backup/panel'
    bak_list = os.listdir(panel_backup)
    if not bak_list: return False
    bak_list = sorted(bak_list,reverse=True)
    db_bak_file = ''
    for d_name in bak_list:
        db_bak_file = panel_backup + '/' + d_name + '/data/default.db'
        if not os.path.exists(db_bak_file): continue
        if os.path.getsize(db_bak_file) < 17408: continue
        break

    if not db_bak_file: return False
    ExecShell("\cp -arf {} {}".format(db_file,db_tmp_backup))
    ExecShell("\cp -arf {} {}".format(db_bak_file,db_file))
    return True

26.请分析宝塔面板登陆密码的加密方式所使用的哈希算法为 md5
分析上述代码可知
27.请分析宝塔面板对于其默认用户的密码一共执行了几次上题中的哈希算法
三次
28.请分析当前宝塔面板密码加密过程中所使用的salt值为【区分大小写】v87ilhAVumZL
通过SQLite查看文件写入的db文件的users表可以获得答案
在这里插入图片描述
29.请分析该服务器,网站源代码所在的绝对路径为/www/wwwroot/www.honglian7001
在这里插入图片描述
30.请分析,网站所使用的数据库位于IP为(192.168.110.115)的服务器上(请使用该IP解压检材五,并重构网
站)【标准格式:111.111.111.111】
在这里插入图片描述
31.请分析,数据库的登陆密码为【区分大小写】 wxrM5GtNXk5k5EPX
看上图
题目要求重构网站,我们直接在宝塔上运行发现没有连接数据库,所以我们主要目标是连接数据库,而数据库的文件可以看到是三个raid文件,raid重组:
通过ufs可以快速算出raid的参数,操作如下:
在这里插入图片描述
打开文件选中那三个原始镜像文件:
在这里插入图片描述
open就行:
在这里插入图片描述
open就行:
在这里插入图片描述
在这里插入图片描述
依次选中加入raid
在这里插入图片描述
在这里插入图片描述
导出后就可以直接用仿真软件做成虚拟机文件
重构成功后我们打开网址进行测试,可以发现已经连接成功
在这里插入图片描述
但是当我们用premium连接数据库的时候却报错了,这里是出题人设置的坑,他建了一个空用户导致我们连接异常,但我们可以直接进入服务器后台修改my.cnf。在后面加上命令

skip-grant-tables 

作用是跳过密码检验
在这里插入图片描述
接着重启数据库:

systemctl restart mysqld

在这里插入图片描述
此时直接用数据库软件连接就可以了,根据之前做题可以知道
账号:www_honglian7001
密码:wxrM5GtNXk5k5EPX
32.请尝试重构该网站,并指出,该网站的后台管理界面的入口为/admin【标准格式:/web】
在这里插入图片描述
可以尝试对审计网站源代码,也可以查看取证软件中的历史记录或日志看该网页的访问记录
33.已该涉案网站代码中对登录用户的密码做了加密处理。请找出加密算法中的salt值【区分大
小写】lshi4AsSUrUOwWV
在这里插入图片描述
34.请分析该网站的管理员用户的密码为:
这个题目的做法有点怪异官方的出题人是说把整个目录都导出来,然后直接用vs对整个目录进行搜索,索索的关键字为“password”。
首先xftp导出整个目录
在这里插入图片描述
然后丢到vscode里面
在这里插入图片描述
然后直接用搜索功能,可以看到有好几个日志,修改了很多次密码,但最后一次改成了,security

在这里插入图片描述
此时我们可以知道
账号:admin
密码:security
补充知识点:
当我们找不到密码时也是可以登入后台的,方法是通过数据库软件找到admin对应的密码位置
在这里插入图片描述

投稿&加入团队:
CPO:白羽 baiyu@anyeziyuan.com
关注微信公众号:知柯信息安全获得更多咨询
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

色字当头一把刀,看我如何用Python针对裸聊渗透测试 的相关文章

  • Gunicorn 工作人员无论如何都会超时

    我正在尝试通过gunicorn运行一个简单的烧瓶应用程序 但是无论我做什么 我的工作人员都会超时 无论是否有针对应用程序的活动 工作人员在我设置任何内容后总是会超时timeout值到 是什么导致它们超时 当我发出请求时 请求成功通过 但工作
  • 如何在 __init__ 中使用await设置类属性

    我如何定义一个类await在构造函数或类体中 例如我想要的 import asyncio some code class Foo object async def init self settings self settings setti
  • 在 Python 中将列表元素作为单独的项目返回

    Stackoverflow 的朋友们大家好 我有一个计算列表的函数 我想单独返回列表的每个元素 如下所示 接收此返回的函数旨在处理未定义数量的参数 def foo my list 1 2 3 4 return 1 2 3 4 列表中的元素数
  • 嵌套列表的重叠会产生不必要的间隙

    我有一个包含三个列表的嵌套 这些列表由 for 循环填充 并且填充由 if 条件控制 第一次迭代后 它可能类似于以下示例 a 1 2 0 0 0 0 0 0 4 5 0 0 0 0 0 0 6 7 根据条件 它们不重叠 在第二次迭代之后 新
  • 从Django中具有外键关系的两个表中检索数据? [复制]

    这个问题在这里已经有答案了 This is my models py file from django db import models class Author models Model first name models CharFie
  • 为什么 web2py 在启动时崩溃?

    我正在尝试让 web2py 在 Ubuntu 机器上运行 所有文档似乎都表明要在 nix 系统上运行它 您需要下载源代码并执行以下操作 蟒蛇 web2py py 我抓住了source http www web2py com examples
  • MongoEngine 查询具有以列表中指定的前缀开头的属性的对象的列表

    我需要在 Mongo 数据库中查询具有以列表中任何前缀开头的特定属性的元素 现在我有一段这样的代码 query mymodel terms term in query terms 并且这会匹配在列表 term 上有一个项目的对象 该列表中的
  • GUI(输入和输出矩阵)?

    我需要创建一个 GUI 将数据输入到矩阵或表格中并读取此表单数据 完美的解决方案是限制输入表单仅允许float 例如 A 1 02 0 25 0 30 0 515 0 41 1 13 0 15 1 555 0 25 0 14 1 21 2
  • 使用 python/numpy 重塑数组

    我想重塑以下数组 gt gt gt test array 11 12 13 14 21 22 23 24 31 32 33 34 41 42 43 44 为了得到 gt gt gt test2 array 11 12 21 22 13 14
  • 嵌套作用域和 Lambda

    def funct x 4 action lambda n x n return action x funct print x 2 prints 16 我不太明白为什么2会自动分配给n n是返回的匿名函数的参数funct 完全等价的定义fu
  • 通过Python连接到Bigquery:ProjectId和DatasetId必须非空

    我编写了以下脚本来通过 SDK 将 Big Query 连接到 Python 如下所示 from google cloud import bigquery client bigquery Client project My First Pr
  • Python GTK+ 画布

    我目前正在通过 PyGobject 学习 GTK 需要画布之类的东西 我已经搜索了文档 发现两个小部件似乎可以完成这项工作 GtkDrawingArea 和 GtkLayout 我需要一些基本函数 如 fillrect 或 drawline
  • 找到一个数字所属的一组范围

    我有一个 200k 行的数字范围列表 例如开始位置 停止位置 该列表包括除了非重叠的重叠之外的所有类型的重叠 列表看起来像这样 3 5 10 30 15 25 5 15 25 35 我需要找到给定数字所属的范围 并对 100k 个数字重复该
  • 为什么 csv.DictReader 给我一个无属性错误?

    我的 CSV 文件是 200 Service 我放入解释器的代码是 snav csv DictReader open screennavigation csv delimiter print snav fieldnames 200 for
  • Python:Goslate 翻译请求返回“503:服务不可用”[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我们不允许提出寻求书籍 工具 软件库等推荐的问题 您可以编辑问题 以便用事实和引文来回答 这个问题似乎不是关于主要由程序员使用的特定编程问
  • 每当使用 import cv2 时 OpenCV 都会出错

    我在终端上使用 pip3 install opencv contrib python 安装了 cv2 并且它工作了 但是每当我尝试导入 cv2 或运行导入了 cv2 的 vscode 文件时 在 python IDLE 上它都会说 Trac
  • Firebase Firestore:获取文档的生成 ID (Python)

    我可以创建一个新文档 带有自动生成的 ID 并存储对其的引用 如下所示 my data key value doc ref db collection u campaigns add my data 我可以像这样访问数据本身 print d
  • 如何将 Django 中的权限添加到模型并使用 shell 进行测试

    我在模型中添加了 Meta 类并同步了数据库 然后在 shell 中创建了一个对象 它返回 false 所以我真的无法理解错误在哪里或者缺少什么是否在其他文件中可能存在某种配置 class Employer User Employer in
  • 等待子进程使用 os.system

    我用了很多os system在 for 循环内调用创建后台进程 如何等待所有后台进程结束 os wait告诉我没有子进程 ps 我使用的是Solaris 这是我的代码 usr bin python import subprocess imp
  • 如何在 Flask 中的视图函数/会话之间传递复杂对象

    我正在编写一个 Web 应用程序 当 且仅当 用户登录时 该应用程序从第三方服务器接收大量数据 这些数据被解析为自定义对象并存储在list 现在 用户在应用程序中使用这些数据 调用不同的视图 例如发送不同的请求 我不确定什么是最好的模式在视

随机推荐

  • Linux使用4g模块拨号上网

    imux6ull 串口连接移远的4g模块EC200N 使用pppd拨号上网 1 设置内核支持pppd 打开pppd下的所有项 编译内核 Device Drivers gt Network device support gt PPP poin
  • Git出现无法同步问题的解决方式

    在我们使用git同步至github服务器上去时 可能会出现 the request URL returns error 403 Forbbidden while accessing 权限不够 此项目为私有 没有权限 输入用户名和密码 或远程
  • 高级面向对象技术

    封装 三种方式 工厂函数模式 构造函数模式 构造函数模式和原型结合 工厂函数模式代码示例 function factory name var obj new Object obj name name obj sayName function
  • 9_1 ArrayList 初始化 (elementData.getClass() != Object[].class)

    第一个知识点 数组也有自己 class 表示维度 Lxxx表示数组的元素类型 package 集合类 ArrayList类 import java util ArrayList import java util Arrays public
  • 实现高效的并行计算:使用Fork/Join框架和并行流

    要实现高效的并行计算 可以使用Java中的Fork Join框架和并行流 这两个工具都是Java提供的用于并行处理任务的机制 可以充分利用多核处理器的能力 1 Fork Join框架 Fork Join框架是Java中用于并行任务处理的一个
  • 有向图邻接矩阵c语言编程,邻接矩阵有向图(一)之 C语言详解

    本章介绍邻接矩阵有向图 在 图的理论基础 中已经对图进行了理论介绍 这里就不再对图的概念进行重复说明了 和以往一样 本文会先给出C语言的实现 后续再分别给出C 和Java版本的实现 实现的语言虽不同 但是原理如出一辙 选择其中之一进行了解即
  • vue-i18n 的使用

    一 安装 安装 Vue i18n 插件 您可以使用以下命令进行安装 npm install vue i18n next save 安装 npm install vue i18n next save legacy peer deps adde
  • 微软Kinect:谁还要控制器?

    体感控制游戏 Kinect谁还要控制器 这是XBoxKinect系统背后最重要的思想 微软的新玩具在10天内卖出了100万台 记者陈赛简单说 Kinect是嵌入XBox的三个小镜头 一个RGB摄像头 一个红外投影仪和一个远程感应器 这些镜头
  • 火狐浏览器插件

    All in one sidebar 侧栏控制 Firebug 在浏览网页的同时 具备丰富开发的功能 LastPass 在线密码管理器 gtranslator 翻译 Xmarks 书签 ColorZilla 颜色复制 Adblock Plu
  • 北京大学肖臻老师《区块链技术与应用》公开课笔记20——ETH中GHOST协议篇

    北京大学肖臻老师 区块链技术与应用 公开课笔记 以太坊GHOST协议 对应肖老师视频 click here 全系列笔记请见 click here About Me 点击进入我的Personal Page BTC系统中出块时间为10min 而
  • AntdPro项目前端测试的探索

    测试规范 测试工具的选择 在本项目中以 ant design pro 项目为测试项目 测试工具最终选型为 jest javascript的常用测试框架 enzyme 支持react的jest测试库 react test renderer 快
  • ftp服务器收集信息,用VBScript收集系统信息并上传到ftp空间

    之前无聊整理出来了一份这个东西 因为在单位给新入职的员工配电脑时 需要登记一遍设备 可每次总要查感觉挺麻烦 结果下面的这份VBS脚本就诞生了 只可惜这个脚本做好了却没派上用场哎 这个脚本的功能是运行后自动将查询到的计算机相关信息记录到一个文
  • 详解 Neo4J 出现问题

    项目启动报错提示如下错误 org springframework data mapping PropertyReferenceException No property selectMenuPage found for type Menu
  • 传输层--UDP协议

    传输层的功能 传输层一个很重要的功能就是复用和分用 应用层不同进程的报文通过不同端口向下交到传输层 再往下就共用网络层提供的服务 具体功能 1 传输层是为应用进程之间提供端到端的逻辑通信 网络层是为主机之间提供逻辑通信 2 传输层要对收到的
  • 使用mysql

    使用mysql 语句来解决复杂逻辑问题 select id SUBSTRING INDEX name 1 from test where parent SUBSTRING INDEX使用方法 name字段 是标识符 1代表是第一个出现的 U
  • Python pyi文件

    当用nn conv2d 函数的时候 发现它内部其实是调用的F conv2d 而F conv2d 的定义是在 init pyi文件里 那么 pyi到底是什么文件呢 pyi文件是Python 的存根文件 用于代码检查时的类型提示 pyi文件是P
  • linux下执行shell脚本调用sql文件,传输到远程服务器

    1 编写sql 2 编写shell shell里用sqlplus调用sql文件生成csv文件 还要编写对端服务器的相关信息 3 将写好的sql和shell文件传输到linux服务器上 4 切换到文件存放目录下 使用以下命令执行shell s
  • Elasticsearch删除文档

    根据id删除 例如删除id为110的文档 DELETE ffbf doc 110 返回信息 index ffbf type doc id 110 version
  • 网络地址转换NAT原理及应用

    这是做路由器的时候 学习网络地址转换Network Address Translation后的一些理解整理 主要通过实例和图表的方式展示了NAT的工作原理和每个阶段的状态 本文的NAT是基本于Linux下的iptables命令实现 1 概述
  • 色字当头一把刀,看我如何用Python针对裸聊渗透测试

    本篇文章由知柯 信息安全 CSDN博主鸿渐之翼联合发布 转载请标明出处 深圳市狩猎者网络安全技术有限公司旗下安全团队 CSDN 知柯信息安全 知柯信息安全 用心呵护您的安全 Professional in Software Security