分类目录归档:技术

分享一个快捷内网、漏洞扫描工具 fscan

fscan 是一款 go 语言写成 “一款内网综合扫描工具,方便一键自动化、全方位漏扫扫描”。是我在刷 kon9chunkit 发起的 GitHub中文排行榜 时发现的。

该工具支持主机存活探测、端口扫描、常见服务的爆破、ms17010、redis批量写公钥、计划任务反弹shell、读取win网卡信息、web指纹识别、web漏洞扫描、netbios探测、域控识别等功能。

用来快速扫描局域网主机存活也是很好的,下面简单介绍使用方法:

安装很简单,装好 go 环境编译一下就行:

$ git clone https://github.com/shadow1ng/fscan.git
$ cd facan
$ go build -ldflags="-s -w " -trimpath

之后就可以进行扫描了,快速进行局域网段扫描:

$ ./fscan -h 192.168.123.0/24 

   ___                              _    
  / _ \     ___  ___ _ __ __ _  ___| | __ 
 / /_\/____/ __|/ __| '__/ _` |/ __| |/ /
/ /_\\_____\__ \ (__| | | (_| | (__|   <    
\____/     |___/\___|_|  \__,_|\___|_|\_\   
                     fscan version: 1.6.3
start infoscan
已完成 0/0 listen ip4:icmp 0.0.0.0: socket: operation not permitted
The current user permissions unable to send icmp packets
start ping
(icmp) Target '192.168.123.9' is alive
(icmp) Target '192.168.123.4' is alive
...
icmp alive hosts len is: 7
192.168.123.3:443 open
...
alive ports len is: 19
start vulscan
[*] WebTitle:http://192.168.123.1      code:401 len:140    title:401 Unauthorized
.....

完整支持参数如下:

    -c string
        ssh命令执行
  -cookie string
        设置cookie
  -debug int
        多久没响应,就打印当前进度(default 60)
  -domain string
        smb爆破模块时,设置域名
  -h string
        目标ip: 192.168.11.11 | 192.168.11.11-255 | 192.168.11.11,192.168.11.12
  -hf string
        读取文件中的目标
  -hn string
        扫描时,要跳过的ip: -hn 192.168.1.1/24
  -m string
        设置扫描模式: -m ssh (default "all")
  -no
        扫描结果不保存到文件中
  -nobr
        跳过sql、ftp、ssh等的密码爆破
  -nopoc
        跳过web poc扫描
  -np
        跳过存活探测
  -num int
        web poc 发包速率  (default 20)
  -o string
        扫描结果保存到哪 (default "result.txt")
  -p string
        设置扫描的端口: 22 | 1-65535 | 22,80,3306 (default "21,22,80,81,135,139,443,445,1433,3306,5432,6379,7001,8000,8080,8089,9000,9200,11211,27017")
  -pa string
        新增需要扫描的端口,-pa 3389 (会在原有端口列表基础上,新增该端口)
  -path string
        fcgi、smb romote file path
  -ping
        使用ping代替icmp进行存活探测
  -pn string
        扫描时要跳过的端口,as: -pn 445
  -pocname string
        指定web poc的模糊名字, -pocname weblogic
  -proxy string
        设置代理, -proxy http://127.0.0.1:8080
  -user string
        指定爆破时的用户名
  -userf string
        指定爆破时的用户名文件
  -pwd string
        指定爆破时的密码
  -pwdf string
        指定爆破时的密码文件
  -rf string
        指定redis写公钥用模块的文件 (as: -rf id_rsa.pub)
  -rs string
        redis计划任务反弹shell的ip端口 (as: -rs 192.168.1.1:6666)
  -silent
        静默扫描,适合cs扫描时不回显
  -sshkey string
        ssh连接时,指定ssh私钥
  -t int
        扫描线程 (default 600)
  -time int
        端口扫描超时时间 (default 3)
  -u string
        指定Url扫描
  -uf string
        指定Url文件扫描
  -wt int
        web访问超时时间 (default 5)

总之是一款很实用的工具,平时有很多场景可以使用到。

参考文献

Windows 禁用 AppXSVC 解决 CPU 占用高问题

在一台虚拟机上安装了 Windows 10 lstc 2021 版,启动后发现 CPU 占用率一直居高不下,查看任务管理器发现是一个叫 wsapp 的系统服务服务占用 CPU 过高,搜索后发现对应的是 AppX Deployment Service 系统服务,是用来提供 微软应用商店服务服务的。

这就很奇怪了,lstc 没有预装微软应用商店呀,因此也不能使用常规方法将其关闭,实测在服务管理器中也无法直接关闭。

解决方法

后面我发现其实可以通过修改注册表的方式去禁用该服务,方法很简单:

Step1 打开注册表编辑器

两种方法可以打开:

  1. 在任务栏上的搜索框中,键入regedit,然后选择”注册表编辑器 (桌面应用) 结果。
  2. 右键单击”开始”, 然后选择”运行”。 在“打开:”框中键入 regedit,然后选择”确定“。

Step2 禁用服务

首先在注册表编辑器中找到这一项:

HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\AppXSvc

之后在右侧找到 Start 将值由原本的 3 改为 4 即可。

https://imagehost-cdn.frytea.com/images/2021/12/16/image46a917cd3ecedee5.png

大概像图片中这样。

最后重启即可!

Step3 查看效果

重启后查看任务管理器,发现再也没有长期占用 CPU 50% 以上的 AppXSVC 服务了。

https://imagehost-cdn.frytea.com/images/2021/12/16/image0e48aeaeec65f56a.png

结束。

参考文献

Git 常用操作

记录常用 git 操作命令,方便速查.


# 注:若没有标记“远程”,则默认为操作本
 <a href="https://blog.frytea.com/archives/1233#more-1233" class="more-link">继续阅读 <span class="meta-nav">&rarr;</span></a>

更换 PVE7 软件仓库源和 CT模板(LXC)源为国内源

PVE7 安装后默认配置的 apt 软件源和 CT(LXC)容器模板源均是官方默认的,国内使用性能不佳,建议替换为 清华 Tuna 提供的国内镜像源,速度将有一个较大的提升。

如果 pve 官网 iso 镜像下载较慢,也可在 tuna 提供的镜像站下载:https://mirrors.tuna.tsinghua.edu.cn/proxmox/iso/

注:本文以 pve 7.0.2 (debian 11 bulleye) 为例,其他版本请自行在镜像网站寻找对应地址。

替换 apt 软件源

替换前建议先更新下证书,否则可能由于证书不可用导致 https 无法使用,进而无法下载所有软件。

$ sudo apt install apt-transport-https ca-certificates

首先替换通用软件源, Debian 的软件源配置文件是 /etc/apt/sources.list,备份后将其中内容修改为以下即可。

# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye main contrib non-free
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye main contrib non-free
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-updates main contrib non-free
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-updates main contrib non-free

deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-backports main contrib non-free
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-backports main contrib non-free

deb https://mirrors.tuna.tsinghua.edu.cn/debian-security bullseye-security main contrib non-free
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian-security bullseye-security main contrib non-free

之后替换 pve 软件源,pve 镜像默认的 pve 软件源配置文件是 /etc/apt/sources.list.d/pve-enterprise.list ,备份后将其中内容替换为以下即可:

deb https://mirrors.tuna.tsinghua.edu.cn/proxmox/debian bullseye pve-no-subscription

最后更新下,速度很快:

sudo apt-get update

修改 CT Templates (LXC容器)源

将 /usr/share/perl5/PVE/APLInfo.pm 文件中默认的源地址 http://download.proxmox.com 替换为 https://mirrors.tuna.tsinghua.edu.cn/proxmox 即可。

可以使用如下命令修改:

cp /usr/share/perl5/PVE/APLInfo.pm /usr/share/perl5/PVE/APLInfo.pm_back
sed -i 's|http://download.proxmox.com|https://mirrors.tuna.tsinghua.edu.cn/proxmox|g' /usr/share/perl5/PVE/APLInfo.pm

针对 /usr/share/perl5/PVE/APLInfo.pm 文件的修改,重启后生效。

systemctl restart pvedaemon.service

之后在 pve 网页端下载 CT Templates 速度就很快了。

参考文献

Git 修改提交过的邮箱和用户名

内网提交需要校验企业邮箱,但有时邮箱设置错误导致 commit 的邮箱有问题,此时可以通过修改已提交记录中的邮箱来修复,无需重新提交。

经过检索,发现两种方法,分别适用于修改一次和修改多次,引文在最后都有注明。

修改最近一次提交的邮箱

git commit --amend --author="NewAuthor <NewEmail@address.com>"

批量修改邮箱

使用该脚本,替换其中 [Your Old Email] [Your New Author Name] [Your New Email] 之后在 git 目录中执行即可。

#!/bin/sh

git filter-branch --env-filter '

an="$GIT_AUTHOR_NAME"
am="$GIT_AUTHOR_EMAIL"
cn="$GIT_COMMITTER_NAME"
cm="$GIT_COMMITTER_EMAIL"

if [ "$GIT_COMMITTER_EMAIL" = "[Your Old Email]" ]
then
    cn="[Your New Author Name]"
    cm="[Your New Email]"
fi
if [ "$GIT_AUTHOR_EMAIL" = "[Your Old Email]" ]
then
    an="[Your New Author Name]"
    am="[Your New Email]"
fi

export GIT_AUTHOR_NAME="$an"
export GIT_AUTHOR_EMAIL="$am"
export GIT_COMMITTER_NAME="$cn"
export GIT_COMMITTER_EMAIL="$cm"

Q&A

  • A previous backup already exists in refs/original/
Cannot create a new backup.
A previous backup already exists in refs/original/
Force overwriting the backup with -f

出现这一句说明之前曾经执行过 git filter-branch ,在 refs/original/ 有一个备份,这个时候只要删掉那个备份即可,删除备份命令为:

$ git update-ref -d refs/original/refs/heads/master
# 或
$ git filter-branch -f --tree-filter -f 'rm -f test' -- --all

参考文献

使用 LeanCloud 云引擎部署 React Web 应用

最近在探索 KubeSphere 和 K8s,东西毫无疑问是好东西,学了在未来也很有用,但是用在个人开发上实在是费用有点高,当然也不太敢用在个人开源项目上,因此我再次开始探索适用于个人全栈应用托管平台。

提供这类 PaaS 云平台服务的公司有一些,比如 2007 年就开始开发的 Heroku,也有 Vercel 这类现代化的 Web 应用托管平台,在国内则有 Leancloud 这种 BaaS 平台也可实现类似功能。

背景资料

之前做移动端开发就使用过 Leancloud,绝对是国内少数几个能提供给部分免费资源做开发学习使用的良心平台了,使用它来做数据托管非常好用,再也不用担心自己的软件数据库没有保障了。

后来做博客以及一些简单的 Web 单页应用,直接使用 Github Pages 服务即可完成托管。当然,动态类型网站我则是使用自己比较平价的服务器完成的,如今我的两台 1C1G 服务器都长年托管着10个左右 Web 应用。

比如之前的个人财务看板 BJ-PFD ,个人博客 Frytea‘s Blog,随机壁纸生成器 GRW 等等。

再往前推几年,虚拟主机的概念非常盛行,也有不少提供虚拟主机服务的厂商,但是大都限制网站数量,当时我也正是因为这个原因才开始自己服务器。自己服务器的好处在于灵活,只要资源够用,几乎可以部署任何想要部署的服务,个人开发的作品一般流量也不会特别大,完全够用。

但是到现在,自己开发的作品需要一些持久化数据了,这就让我不敢随便找个服务器一扔,害怕哪一天一个不小心就没了。

于是今天我探索出一种完全使用 leancloud 进行全栈应用托管的方法,后面会进行详细介绍。

发展的过程

任何事物的发展和学习过程都要遵循一定规律,否则就容易空转。这是我自己在长期自学中总结出来的,也许不适用于大多数人,至少我自己是这样子的。

学习和发展需要循序渐进,就以软件开发为例,可以先做不依赖网络的本地小软件,再做前后端分离的某一端,再到全栈。做计算机系统开发时,则是需要自顶向下,先了解整体结构,再慢慢的向底层掘进。

如果一上来就全部负责,要学的面铺的太开,就容易放弃。必须学会将一个复杂的任务分解为一个个小任务,再去一点点完成。分解、完成,每一步都是技术活,必须慢慢积累才行。

部署方法

说了这么多,今天先来讲讲如何在 Leancloud 的云引擎中部署我们的 React 单页应用,并附带一个接口的转发。

Step1: 源码及项目预备

在该步骤需要完成 leancloud项目创建、Github 项目创建、React 项目创建。

前两个创建自行完成即可,没什么好说的,React 则使用现成的项目或 create-react-app 来创建项目。

npx create-react-app react-for-engine --use-npm

之后将创建好的项目上传 Github 仓库中,后面来配置 Github action 自动部署脚本以及 Leancloud 的配置文件。

Step2: 部署脚本和配置文件

在该步骤需完成项目执行脚本配置、leancloud 配置文件配置以及 Github action 部署流程配置。

  • 项目脚本额配置

至于执行脚本,由于我的项目中需要用到一个接口的重写,因此使用一个简单的 node 程序来完成,内容如下:

const express = require('express');
const path = require('path');
const { createProxyMiddleware } = require('http-proxy-middleware')//反向代理
const app = express();

app.use(express.static(path.join(__dirname, '/build')));
app.use('/api', createProxyMiddleware({
    target: 'https://source.unsplash.com',
    changeOrigin: true,
    pathRewrite: { //路径替换
        '^/api': '/random', // axios 访问/api == target + /random
    }
}));

app.get('*', function (req, res) {
    res.sendFile(path.join(__dirname, 'build', 'index.html'));
});

const port = process.env.LEANCLOUD_APP_PORT || 3010;
app.listen(port);

console.log('App is listening on port ' + port);

这里用到了 http-proxy-middleware ,如果没有安装记得安装下:

npm install http-proxy-middleware --save

如果无需处理跨域请求,直接使用 npm run start 即可运行的话则无需使用该脚本。需要注意的是其中监听端口需要使用 leancloud 提供的环境变量 LEANCLOUD_APP_PORT 指定的端口,如果用错了则无法正常访问服务。

如果直接使用 npm run start 启动的话则需修改 package.json 中 start 部分的声明:

"start":"set PORT=$LEANCLOUD_APP_PORT && react-scripts start",
  • leancloud 配置文件

项目准备好后,需要告诉 leancloud 如何执行,就需要在根目录下创建 leanengine.yaml 来说明。

build: npm run build
#run: $(npm bin)/serve -c static.json -l ${LEANCLOUD_APP_PORT}
run: node app.js

作用大概不用我说了吧,由于我使用了一个 http-proxy-middleware 程序来执行项目,则直接将该程序命名为 app.js,启动时直接执行即可。

  • Github action 部署脚本

对于 github 仓库的提交无法直接触发 leancloud 构建,因此需要提交时发出一个 webhooks 来触发,创建一个新的 workflow .github/workflows/main.yml:

# Controls when the action will run. Triggers the workflow on push request for the master branch
on:
  push:
    branches: [ master ]

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
    - name: Deploy to LeanEngine
      uses: enflo/curl-action@v1.2
      with:
        curl: -X POST https://cn-n1-console-api.leancloud.cn/1.1/engine/groups/web/production/version?gitTag=${{ github.sha }}&token=${{ secrets.DEPLOY_TOKEN }}

记得在 github 仓库中将 leancloud 部署后台提供的 DEPLOY_TOKEN 声明在 github 中,方可完成触发。

Step3: 部署和后续

完成上面的流程,开启 github 仓库中的 action 开关,提交上面的改动,如果一切顺利,即可触发部署。

对了,在最后,还需要在 leancloud 绑定一个备案过的域名,才能正常访问服务。

总结

至此,简单的 Leancloud 部署 react 单页应用的方法介绍完毕,由于 Leancloud 是一个 BaaS 平台,可直接当作简单后端和数据存储服务器来使用,做开发测试使用很好,等后期有流量了再升级付费套餐即可获取更好的服务体验。

总之,这样一个辅助快速开发的平台对于开发者来讲好处多多,无需关注更多技术细节即可将自己的规划实现,快速上线,如果效果可以,再去考虑升级和改造即可,避免了前期资源的浪费。

最后,还是希望各位珍惜这样的好资源,好好使用,未来可能的情况下都是用付费套餐,只有有利可图了,那些真心愿意做好服务的人们才能提供更好的服务。

参考文献