事情是这样的
出生于2009年的高贵的CentOS7.9已经要停止维护了
大人,食大便了
然而作为牛马实习生的我,用惯了5.x和6.x内核的Debian和Ubuntu,但ld只会用CentOS7.9(他在口嗨),还是内核3.10那种,于是乎开始恶补相关知识
但是呢,在网上很多很多很多博客的源、教程都已经过时了,在折腾一天之后终于忍不住了,不行!我一定要拿小本本记下来,不然我下次还得找!
事情是这样的
出生于2009年的高贵的CentOS7.9已经要停止维护了
大人,食大便了
然而作为牛马实习生的我,用惯了5.x和6.x内核的Debian和Ubuntu,但ld只会用CentOS7.9(他在口嗨),还是内核3.10那种,于是乎开始恶补相关知识
但是呢,在网上很多很多很多博客的源、教程都已经过时了,在折腾一天之后终于忍不住了,不行!我一定要拿小本本记下来,不然我下次还得找!
V2更新了一些小东西
!!!NeedStar!!!Github-CTFd-docker
该版本的CTFd全部运行在docker中,并且通过映射unix在docker里面控制宿主机的docker,以管理docker动态容器。使用该项目可以在5-10min之内构建出支持动态容器的靶场。
旧的文章-【CTFd】靶场安装与配置(Docker一键配置版)
前面一段时间,想基于CTFd进行二开一下。有不少前辈给CTFd写过插件,例如赵总的Whale,H1ve的Owl,和支持AWD的glowworm。
他们写的插件各有好处,Whale支持swarm的部署,Owl支持docker-compose(暂时不支持swarm,后面可以改,不过暂时没空),glowworm是目前唯一一个AWD插件。其中Whale和Owl都以来与Frp进行流量转发,通过不断重载frpc的配置实现,但是他们两个插件并不是增量刷新,而是以直接覆盖的形式进行。于是我整合了两个插件的内容和,让他们共用一个frps模块(现在才想到为什么不能用两个呢,但是这就要两个域名了不是吗)。
然而事情不是一帆风顺的,在修改了插件的目录结构后,整个插件都不能正常初始化了,还得对他们进行依赖的修改。然后对旧版的owl插件进行一定的修改,使用了新版的docker-compose工具以支持swarm的使用。
TODO: owl插件更新swarm支持(已更新)
另外作为一个安全平台,不更新到最新版本的CTFd内核总是有点不太合适,于是更新到了CTFd 3.5.2版本,也修改了不少安装流程,优化了安装体验,可以在docker-compose里面自定义域名等,也会自动生成密钥不容易被攻击。
同时也测试了很多不同系统,也用该系统在本校新生赛中构建了一个全新的靶场,体验很棒。
小记而已,暂时就这样了。
Hyper-V,代号Viridian,旧称Windows Server Virtualization,是Microsoft的本地虚拟机管理程序,它可以在运行x86-64位的Windows上创建虚拟机。从Windows 8开始,Hyper-V取代Windows Virtual PC作为Windows客户端版本的硬件虚拟化组件。可以配置运行Hyper-V的服务器计算机能够将单个虚拟机公开到一个或多个网络。Hyper-V是与Windows Server 2008一起首次发布,自Windows Server 2012和Windows 8以来一直无需额外付费。独立的Windows Hyper-V Server是免费的,但仅具有命令行接口。
省流:Hyper-V是微软自己系统的虚拟化工具
Vmware是一家提供云计算和硬件虚拟化的软件和服务的公司。
下列的Vmware部分代指Vmware Workstation
VMware Workstation是VMware公司销售的商业软件产品之一。该工作站软件包含一个用于英特尔x86兼容电脑的虚拟机套装,其允许用户同时创建和运行多个x86虚拟机。每个虚拟机可以运行其安装的操作系统,如(但不限于)Windows、Linux、BSD变生版本。用简单术语来描述就是,VMware Workstation允许一台真实的电脑在一个操作系统中同时开启并运行数个操作系统,其它VMware产品帮助在多个宿主电脑之间管理或移植VMware虚拟机。免费版本为VMware Workstation Player。
VMware Fusion是VMware针对Mac电脑推出的一款虚拟机软件。
省流:Vmware是针对商业化使用的虚拟化软件
省流1:开了Hyper-V的Windows实际上的相当于是运行在Hyper-V中的虚拟化Windows,即Type1中的GuestOS VM。
省流2:使用VMware是在系统层上跑的虚拟化软件,实际上相当于Type2中的Hypervisor
所以开了Hyper-V后,Windows性能会有一定降低,而Vmware是运行在Host OS(宿主机系统)上的一个虚拟化软件,效率相对来说更高
(经过更新优化,现在Hyper-V性能降低感知不明显)
由于兼容性问题,两个Hypervisor层是不能共存的,这也就造成了Hyper-V系统和VMware不能同时使用。
于是VMware想了个招,将自己套在了Hyper-V中,再使用里面的资源虚拟化,这样就解决了Hyper-V和VMware共存的问题了。
(从Vmware15开始官方就解决了共存问题)
结构类似下图
由于现在Windows很多方便的功能如WSL(Linux 的 Windows 子系统),WSA(Android 的 Windows 子系统),Docker on desktop都需要用到Hyper-V技术,这也就让VMware嵌套一层Hyper-V变得无可厚非
更加详细的可以看Revercc’s Blog的内容
由于Hyper-V虚拟机再开启了Hyper-V的情况下,相对于VMware有更好的资源调度优势,运行需要高性能的应用时有一定优势,而VMware在用户界面、管理、体验上均优于Hyper-V,也成为平时使用的首选,可以经过设置在VMware和Hyper-V共享使用虚拟机
下列以Kali Linux为例
首先我们确保虚拟机的Secure Boot是关闭状态,并且磁盘格式为VHD格式,如果不是的话请用工具将其转化为VHD格式
Hyper-V Manager里面既可以实现VHD格式和VHDX格式的相互转换
记住这边的Firmware框起来的设置,后面会有用的
在转换之后记得将虚拟机的磁盘修改为VHD格式
在VMware新建虚拟机,并且选择挂载你刚刚转换的VHD磁盘
Version和Firmware Type要选对应的那个
如果是BIOS启动的话应该可以直接使用了,但是如果是UEFI要进行其他的设置
开机按F2进入Boot Manager
Enter setup->Configure boot options->Add boot option->选择你的磁盘和文件(找回上面你Hyper-V的图,一般为第一个)
找到你的EFI文件并且选择Commit changes and exit
再进入Configure boot options->Change boot order修改启动顺序,保存重启即可
然后两边都可以进入系统,两边都能正常使用了
在进入VMware后记得安装相关vmware-tools才能使用自动调节分辨率,调用GPU等一些相关功能
sudo apt update
sudo apt install open-vm-tools -y
开始快乐使用VMware的各种功能而又可以充分利用Hyper-V的高性能咯
其实不少开源镜像站给出了他们的开源代码,例如清华大学镜像管理器tunasync、中科大镜像Docker。
当时思考了很久,没有使用他们的代码,主要是认为,没什么必要,做一个简单的源没必要那么复杂,于是自己仿照着写了个Demo
Github-SZUmirrors
暂时来说,我们使用的仓库只有少部分几个,同步方式较为单一,pypi为bandersnatch同步,其余系统软件源为rsync同步,这里借用了ustcmirror-images的rsync镜像,其实就是一句rsync指令和一些配置了
守护进程采用service实现,能够开机启动,也能查看状态
流程如下
service(守护进程)->python(分配进程)->docker(工作单元)
这里还需要加上一些前端,一些数据库之类的同步信息,不过作为demo已经足够了,剩下的需要的交给各位自己完善了
TODO:增加Docker反代
[plugins]
enabled =
size_project_metadata
[size_project_metadata]
max_package_size = 100G
最近在折腾自己学校的镜像源,看到差不多20T的硬盘都被塞满了,我是很好奇系统是如何管理这些文件的,于是顺便就研究下APT源的工作原理
在Ubuntu/Debian等系统下,常见的应用安装方式为apt/apt-get
前者可以说是后者的升级版,提供了更友好的命令行界面,包含了apt-get和apt-cache等常用功能,本质上都是基于dpkg的高级包管理工具。
Ubuntu/Debian采用集中式的软件仓库机制,将各式各样的软件包分门别类地存放在软件仓库中,进行有效地组织和管理。由于网络环境的问题,我们可能无法正常访问官方的软件仓库,所以许多镜像服务器被建立,并且时刻保持与官方服务器的同步。在使用apt之前,我们一般都会进行换源处理【脚本】Linux换源汇总
换源主要是修改位于/etc/apt/source.list
的源文件,这个文件记录了可获取软件包的镜像站的站点地址。
我们将在其中加入自己的镜像源地址,下列是一个案例
deb http://mirrors.szu.moe/ubuntu jammy main restricted
# deb-src http://mirrors.szu.moe/ubuntu jammy main restricted
deb http://mirrors.szu.moe/ubuntu jammy-updates main restricted
# deb-src http://mirrors.szu.moe/ubuntu jammy-updates main restricted
deb http://mirrors.szu.moe/ubuntu jammy universe
# deb-src http://mirrors.szu.moe/ubuntu jammy universe
deb http://mirrors.szu.moe/ubuntu jammy-updates universe
# deb-src http://mirrors.szu.moe/ubuntu jammy-updates universe
deb http://mirrors.szu.moe/ubuntu jammy multiverse
# deb-src http://mirrors.szu.moe/ubuntu jammy multiverse
deb http://mirrors.szu.moe/ubuntu jammy-updates multiverse
# deb-src http://mirrors.szu.moe/ubuntu jammy-updates multiverse
deb http://mirrors.szu.moe/ubuntu jammy-backports main restricted universe multiverse
# deb-src http://mirrors.szu.moe/ubuntu jammy-backports main restricted universe multiverse
deb http://mirrors.szu.moe/ubuntu jammy-security main restricted
# deb-src http://mirrors.szu.moe/ubuntu jammy-security main restricted
deb http://mirrors.szu.moe/ubuntu jammy-security universe
# deb-src http://mirrors.szu.moe/ubuntu jammy-security universe
deb http://mirrors.szu.moe/ubuntu jammy-security multiverse
镜像源地址遵循以下格式
DebType AddressType://Hostaddress/ubuntu Distribution Component1 Component2.....
其中各字段含义如下所示。
1. DebType表示Deb软件包类型,使用deb表示二进制软件包,使用deb-src表示源码包;
对于大部分用户来说,二进制软件包即可完成安装,二进制软件包会被安装在系统的默认目录下(usr/share和usr/bin
)。而源码包需要自己编译安装,但可以自己指定安装位置。
源码可以通过apt-get source PackageName
获得,以下是源码安装的一个例子(g2o)
cd g2o
mkdir build && cd build
cmake ..
make -j8 -DCMAKE_INSTALL_PREFIX=/usr/local/g2o/
sudo make install
软件源配置文件只是告知系统可以访问的镜像站点地址,但那些镜像站点具体都拥有什么软件资源并不清楚。若每安装一个软件包,就在服务器上寻找一遍,效率是很低的。因而镜像源提供了索引文件,以便本地主机查询apt update
即更新索引文件
root@aurora-rsync:/home/aurora# apt update
Get:1 http://mirrors.szu.moe/ubuntu jammy InRelease [270 kB]
Hit:2 http://mirrors.szu.moe/ubuntu jammy-updates InRelease
Hit:3 http://mirrors.szu.moe/ubuntu jammy-backports InRelease
Hit:4 http://mirrors.szu.moe/ubuntu jammy-security InRelease
Fetched 270 kB in 1s (372 kB/s)
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
root@aurora-rsync:/home/aurora# cat /var/log/nginx/access.log
192.168.239.252 - - [13/Mar/2023:03:03:54 +0800] "GET /ubuntu/dists/jammy/InRelease HTTP/1.1" 200 270087 "-" "Debian APT-HTTP/1.3 (2.4.8) non-interactive"
192.168.239.252 - - [13/Mar/2023:03:03:54 +0800] "GET /ubuntu/dists/jammy-updates/InRelease HTTP/1.1" 304 0 "-" "Debian APT-HTTP/1.3 (2.4.8) non-interactive"
192.168.239.252 - - [13/Mar/2023:03:03:54 +0800] "GET /ubuntu/dists/jammy-backports/InRelease HTTP/1.1" 304 0 "-" "Debian APT-HTTP/1.3 (2.4.8) non-interactive"
192.168.239.252 - - [13/Mar/2023:03:03:54 +0800] "GET /ubuntu/dists/jammy-security/InRelease HTTP/1.1" 304 0 "-" "Debian APT-HTTP/1.3 (2.4.8) non-interactive"
对于update,会根据源的相关设置访问/ubuntu/dists/(设置的Distribution)/InRelease
的文件,这个也是一个索引,记录了有哪些相应平台的包存储在服务器上
b96c0cfe911414e1b7f2df5c88844369 1192665 main/binary-amd64/Packages.gz
84a735928def889314d9d28d0819425c 1068823 main/binary-arm64/Packages.gz
6a1ab8e4d5aa235c81e2e036e01e9926 775999 main/binary-armhf/Packages.gz
8d8471fdecfb661f6580df6096a53c6a 570121 main/binary-i386/Packages.gz
3a43d2dda28cf2e7e1d885484a1ce249 732797 main/binary-ppc64el/Packages.gz
8ac0edaecf66d4bd0631294a7908154b 690004 main/binary-riscv64/Packages.gz
fb78c7c1b05b2dba72b8ec6d99bb6462 717683 main/binary-s390x/Packages.gz
系统会根据自己的平台下载相应的包索引,本平台为amd64,所以访问main/binary-amd64/Packages.gz
下载
下列出的是其中的一部分,索引中包含如下信息
包名,优先级,类型,维护者,架构,源文件(source),版本号,依赖包,冲突性信息,包大小,文件的下载路径,MD5sum,SHA1,包描述,Xul-Appid—应用程序id,Bugs信息,Origin,Supported
......
Package: accountsservice
Architecture: amd64
Version: 22.07.5-2ubuntu1.3
Priority: optional
Section: gnome
Origin: Ubuntu
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Original-Maintainer: Debian freedesktop.org maintainers <pkg-freedesktop-maintainers@lists.alioth.debian.org>
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
Installed-Size: 500
Depends: dbus (>= 1.9.18), libaccountsservice0 (= 22.07.5-2ubuntu1.3), libc6 (>= 2.34), libglib2.0-0 (>= 2.63.5), libpolkit-gobject-1-0 (>= 0.99)
Recommends: default-logind | logind
Suggests: gnome-control-center
Filename: pool/main/a/accountsservice/accountsservice_22.07.5-2ubuntu1.3_amd64.deb
Size: 69728
MD5sum: a2acf0a225e2c30ccb985a66a4dfb848
SHA1: 1c2b73bc5c72bc44cade5ef6fa444dbea1ea69ec
SHA256: f8ed006eb680e9d8a9b55af88b3786f6892d6d2764586ec4853cf954da119596
SHA512: 9496d225169db5524f7bf9c0fb1cbdfac3ab6261b4725ed56c282d5865678881c8841c539a5b87182306ed66dcc9225a15986083dc72cf7433a30bf601507cc7
Homepage: https://www.freedesktop.org/wiki/Software/AccountsService/
Description: query and manipulate user account information
Task: ubuntu-desktop-minimal, ubuntu-desktop, ubuntu-desktop-raspi, kubuntu-desktop, xubuntu-core, xubuntu-desktop, lubuntu-desktop, ubuntustudio-desktop-core, ubuntustudio-desktop, ubuntukylin-desktop, ubuntu-mate-core, ubuntu-mate-desktop, ubuntu-budgie-desktop, ubuntu-budgie-desktop-raspi
Description-md5: 8aeed0a03c7cd494f0c4b8d977483d7e
......
然后apt再将Packages.gz里面的信息以某种数据结构形式导入本地数据库以便快速查找,即完成了
“`apt update“`的一系列操作
其后的`apt install`会借助上述Depends信息自动安装相关依赖,而源码安装则需要自己配置依赖了,所以现在十分不推荐使用
二进制安装好像是最近(2016年)才开始流行的,可能是因为计算和存储能力有了阶段性提升。Python也采用的是二进制安装与编译安装相结合的方式,二进制安装会从源上下载一个whl后缀的文件,whl格式本质上是一个压缩包,里面包含了py文件,以及经过编译的pyd文件。使得可以在不具备编译环境的情况下,选择合适自己的python环境进行安装。
二进制安装更加简单和快速,不需要用户花费时间和精力去编译源代码,处理编译过程中出现的错误和问题,考虑不同的编译器和命令,也不需要用户管理不同的依赖库。与之相对应的会占用服务器资源(编译源代码),以及存储不同平台的二进制文件。
根据上述结论,我们可以通过修改APT源中的Packages.gz文件,在其中添加/修改某些包地址,使其变成恶意文件,如果没有相关签名/校验环节,理论上我们可以完成一次供应链攻击。
所以一般来说要使用足够信任的源,具体实现有待测试。
Todo:APT源实现供应链攻击
书接上会,DASCTF由于我那天蹲24h麦当劳睡了一个晚上,到了酒店继续睡了一个下午,导致看到这题的时候已经只剩下一小时了。最后比赛结束后一个多小时才解出来,不过博客还是要有的。
此处省略KMS服务器搭建,有需要的自行研究,一般仅为企业使用
继续阅读【脚本】利用KMS服务器激活Windows
Anaconda是Python和Conda的组合包,里面附带了不少科学计算使用的Python依赖,并且可以通过Conda进行版本管理,能够便携获得管理包
Conda不仅支持Python,还支持R, Ruby, Lua, Scala, Java, JavaScript, C/C++, FORTRAN语言(虽然大部分都用不上)
本文仅作技术分享,提醒各位注意网络应用安全性,请勿用于其他用途,否则后果自负。
前几天写过一篇这样的文章,但是耐不住WgpSecBot总是崩溃,于是打算自己写一个
【脚本】基于WgpSecBot的比赛推送
但是问题又来了,自从腾讯封了Web和UOS协议后,就再也弄不到机器人了。
但是苍天不负有心人,我找到了这个Github-wechat-bot
这个版本是基于对Windows下的微信进行内存注入实现的
继续阅读【WechatBot】基于内存注入下的微信机器人