色字当头一把刀,看我如何用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针对裸聊渗透测试 的相关文章

  • Lighttpd 和 cgi python

    我正在尝试通过 lighttpd 执行一些 python 脚本 但是当我尝试运行它时 我只得到一个要求我下载的空白文件 lighttpd conf server modules mod access mod alias mod access
  • python:查找围绕某个 GPS 位置的圆的 GPS 坐标的优雅方法

    我有一组以十进制表示的 GPS 坐标 并且我正在寻找一种方法来查找每个位置周围半径可变的圆中的坐标 这是一个例子 http green and energy com downloads test circle html我需要什么 这是一个圆
  • 保存为 HDF5 的图像未着色

    我目前正在开发一个将文本文件和 jpg 图像转换为 HDF5 格式的程序 用HDFView 3 0打开 似乎图像仅以灰度保存 hdf h5py File Sample h5 img Image open Image jpg data np
  • 中断 Select 以添加另一个要在 Python 中监视的套接字

    我正在 Windows XP 应用程序中使用 TCP 实现点对点 IPC 我正在使用select and socketPython 2 6 6 中的模块 我有三个 TCP 线程 一个读取线程通常会阻塞select 一个通常等待事件的写入线程
  • 元组有什么用?

    我现在正在学习 Python 课程 我们刚刚介绍了元组作为数据类型之一 我阅读了它的维基百科页面 但是 我无法弄清楚这种数据类型在实践中会有什么用处 我可以提供一些需要一组不可变数字的示例吗 也许是在 Python 中 这与列表有何不同 每
  • Python 中的哈希映射

    我想用Python实现HashMap 我想请求用户输入 根据他的输入 我从 HashMap 中检索一些信息 如果用户输入HashMap的某个键 我想检索相应的值 如何在 Python 中实现此功能 HashMap
  • 安装了 32 位的 Python,显示为 64 位

    我需要运行 32 位版本的 Python 我认为这就是我在我的机器上运行的 因为这是我下载的安装程序 当我重新运行安装程序时 它会将当前安装的 Python 版本称为 Python 3 5 32 位 然而当我跑步时platform arch
  • 处理 Python 行为测试框架中的异常

    我一直在考虑从鼻子转向行为测试 摩卡 柴等已经宠坏了我 到目前为止一切都很好 但除了以下之外 我似乎无法找出任何测试异常的方法 then It throws a KeyError exception def step impl contex
  • 使用 Python 从文本中删除非英语单词

    我正在 python 上进行数据清理练习 我正在清理的文本包含我想删除的意大利语单词 我一直在网上搜索是否可以使用像 nltk 这样的工具包在 Python 上执行此操作 例如给出一些文本 Io andiamo to the beach w
  • 使用字典映射数据帧索引

    为什么不df index map dict 工作就像df column name map dict 这是尝试使用index map的一个小例子 import pandas as pd df pd DataFrame one A 10 B 2
  • YOLOv8获取预测边界框

    我想将 OpenCV 与 YOLOv8 集成ultralytics 所以我想从模型预测中获取边界框坐标 我该怎么做呢 from ultralytics import YOLO import cv2 model YOLO yolov8n pt
  • 在Python中连接反斜杠

    我是 python 新手 所以如果这听起来很简单 请原谅我 我想加入一些变量来生成一条路径 像这样 AAAABBBBCCCC 2 2014 04 2014 04 01 csv Id TypeOfMachine year month year
  • datetime.datetime.now() 返回旧值

    我正在通过匹配日期查找 python 中的数据存储条目 我想要的是每天选择 今天 的条目 但由于某种原因 当我将代码上传到 gae 服务器时 它只能工作一天 第二天它仍然返回相同的值 例如当我上传代码并在 07 01 2014 执行它时 它
  • 如何使用 Mysql Python 连接器检索二进制数据?

    如果我在 MySQL 中创建一个包含二进制数据的简单表 CREATE TABLE foo bar binary 4 INSERT INTO foo bar VALUES UNHEX de12 然后尝试使用 MySQL Connector P
  • 如何使用python在一个文件中写入多行

    如果我知道要写多少行 我就知道如何将多行写入一个文件 但是 当我想写多行时 问题就出现了 但是 我不知道它们会是多少 我正在开发一个应用程序 它从网站上抓取并将结果的链接存储在文本文件中 但是 我们不知道它会回复多少行 我的代码现在如下 r
  • Docker 中的 Python 日志记录

    我正在 Ubuntu Web 服务器上的 Docker 容器中测试运行 python 脚本 我正在尝试查找由 Python Logger 模块生成的日志文件 下面是我的Python脚本 import time import logging
  • 如何通过 TLS 1.2 运行 django runserver

    我正在本地 Mac OS X 机器上测试 Stripe 订单 我正在实现这段代码 stripe api key settings STRIPE SECRET order stripe Order create currency usd em
  • 如何在 Windows 命令行中使用参数运行 Python 脚本

    这是我的蟒蛇hello py script def hello a b print hello and that s your sum sum a b print sum import sys if name main hello sys
  • Pandas 每周计算重复值

    我有一个Dataframe包含按周分组的日期和 ID df date id 2022 02 07 1 3 5 4 2022 02 14 2 1 3 2022 02 21 9 10 1 2022 05 16 我想计算每周有多少 id 与上周重
  • 使用随机放置的 NaN 创建示例 numpy 数组

    出于测试目的 我想创建一个M by Nnumpy 数组与c随机放置的 NaN import numpy as np M 10 N 5 c 15 A np random randn M N A mask np nan 我在创建时遇到问题mas

随机推荐

  • 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