WSL

简介 基本命令: WSL 的基本命令 | Microsoft Docs 位置迁移 先导出再导入即可实现迁移。 1 关闭系统 确认系统运行情况: wsl --list --verbose # 或 wsl -l -v 关闭系统: wsl --shutdown 2 迁移 导出到事先创建好的D:\Kali目录: # wsl --export <系统名> <导出文件路径> wsl --export kali-linux D:\Kali\Kali.tar 导入: # wsl --import <系统名> <安装位置> <导入文件位置> <WSL版本号> wsl --import Kali D:\Kali D:\Kali\Kali.tar --version 2 删除迁移前的系统: wsl -l -v # 结果如下 NAME STATE VERSION * kali-linux Stopped 2 Kali Stopped 2 # 删除第一个,即迁移前的系统 wsl --unregister kali-linux 完成迁移。...

Created: 2022-06-13 · Updated: 2022-06-13 · 0opsdc

MD5

简介 MD5,即Message-Digest Algorithm 5,MD5信息摘要算法。 这是一种典型的哈希函数/散列函数,会将任意消息内容变为长度固定的散列值,任何输入内容都将被输出一个长度固定为128bit的MD5值,同一个输入消息的输出结果始终相同。 MD5数据的128bit散列值分为4部分,用4个幻数设定其初始值,4个幻数在内存地址上从低到高为: 幻数 内存地址 A 01 23 45 67 B 89 ab cd ef C fe dc ba 98 D 76 54 32 10 标准幻数总共为4*32=128bit。 MD5算法生成散列值的过程总共分为三步:1、填充对齐;2、分块;3、多轮压缩。 1、填充补齐:需要将数据补充为512bit的整数倍,在补齐数据中采用小端格式,最后64bit固定用于表示原始数据大小,中间剩下的bit第一个填1,其余均为0。若数据为1000bit,不足够存放64bit表示原始数据大小的数据,则补齐到512的三倍即可。 2、分块:分为512bit的数据块。 3、多轮压缩:将当前散列值的4部分各复制一份,分别用a、b、c、d表示,压缩共有4轮,每轮压缩过程使用数据块和a、b、c、d进行一系列与、或、非、循环移位的位操作,将a、b、c、d各自更新4次,4轮压缩一共更新16次。完成4轮压缩后,将最后得到的a、b、c、d分别加回到当前散列值的4个部分,散列值被更新。之所以叫压缩,是因为这个过程实际上在使用512bit的数据块来更新128bit的散列值,信息被压缩了,然后再使用后续大块进行相同操作,唯一不同点在于此时散列值初始值为前一个大块的最终值。 在所有大块上完成多轮压缩后,散列值更新为最终输出的MD5值,将这4部分合起来并变换为大端数即为最终输出的MD5值。 MD5信息摘要算法于1992年公开,其主要目的在于取代MD4算法,1996年后MD5算法被证实存在弱点,可以被加以破解,2004年MD5算法被证实无法防止碰撞,不适用于SSL公开密钥、数字签名等安全性认证。 应用场景 文件校验 数据库字段加密 如何攻击 MD5只是一个产生消息摘要的散列函数,而非加密算法,这个过程有信息损失且不可逆推。举例:1 | 1 = 1,但是不能倒推原始数据。 以鸽笼原理举例,一定会有同一个笼子至少有两只鸽子,引申出碰撞的概念。 原像攻击 这是对MD5的第一个基本安全要求,即找到任意一个能产生这个MD5值的消息,不过到今天也没有一个通用的可行方案。 暴力穷举:MD5值的范围在0~2^128^之间,理论上可行,但工程上不现实。 第二原像攻击 如果给定一个消息,能不能再找到另外一个MD5值相同的消息呢? 抗第二原像攻击(抗弱碰撞性)是对MD5的第二个基本安全性要求,除了在MD4弱消息上可行,对于MD5目前并没有有效的可行方案。 抗碰撞性(最不具安全性) 也叫抗强碰撞性,是对MD5的第三个基本安全性要求。 这个特性继续放宽了攻击标准,不指定MD5值和消息,只要找出两个MD5值相同的消息即可。 之前的研究很长时间都困在“伪碰撞”的范围,真正的突破在2005年山东大学王小云团队的"How to Break MD5 and Other Hash Functions"论文,研究思路为基于模块化差分,大体思路为先找到局部碰撞,然后分析差分如何传播,找到差分路径,再利用消息修改技术得到能产生碰撞的消息对。 和MD5算法本身相比,寻找碰撞的方法要抽象、复杂得多,但这也正是信安领域的魅力。 这个方法在大约15~60min内找到了碰撞,从学术角度看,MD5大势已去,但从工程角度而言,虽然可以快速找到大量MD5碰撞,但这两个碰撞的消息是根据差分路径和消息修改精心构造而来,基本上都是没有实际意义的乱码,很难想象会对MD5的工程应用造成什么直接影响。 在王小云团队的研究基础上,2007年Marc Stevens在硕士论文中交付了两项新成果:1、用一个内容在几秒钟内生成另外两个MD5值一样,但内容不同的消息,重要的是生成的内容可以有意义,该成果有一个叫fastcoll的软件,可通过该软件生成MD5值相同且可以正常打开的图片,但仔细观察文本就会发现其结尾数据并不相同,这被称为相同前缀碰撞,原始内容作为前缀,然后不断尝试构造两个不同的后缀数据,直到最后两者MD5相同,前缀数据保留了内容本身的意义。换个概念来讲,若用可执行程序作为前缀,攻击者可绕过审核发布钓鱼软件,只需让软件内部做一个判定,如本程序最后1bit为1执行正常行为,0执行恶意行为,正常版本通过检测后再用恶意版本进行替换,若只依赖于MD5值判断的话将无法检测到替换的发生。相同前缀生成的可执行文件代码一样,只是触发条件不同,但是在杀毒过程中还是有可能发现可疑行为,所以最好情况是正常版本和恶意版本为两个不相干的程序;2、自由选择前缀消息内容,生成两个MD5值一样但前缀内容不同的文件,称之为选择前缀碰撞,其还会对使用MD5的数字签名产生巨大威胁。 文章许可:本文采用CC BY-NC-SA 4.0许可协议,转载请注明出处。

Created: 2022-05-13 · Updated: 2022-05-13 · 0opsdc

LxRunOffline使用手册

一、简介 WSL有多香就不介绍了,但其原生命令较为简陋、默认安装在C盘,稍有不足。而LxRunOffline能够安装任意发行版系统到任意目录,且具备转移已安装WSL目录、备份等功能,是一个极好的WSL管理软件。 项目地址:GitHub - DDoSolitary/LxRunOffline: A full-featured utility for managing Windows Subsystem for Linux (WSL) 二、安装LxRunOffline 常规安装:下载项目,手动安装 通过Chocolatey安装: choco install lxrunoffline 通过Scoop安装: scoop bucket add extras scoop install lxrunoffline LxRunOffline参数介绍: l , list - 列出所有已安装的发行版。 gd , get-default - 获取 bash.exe 使用的默认发行版。 sd , set-default - 设置 bash.exe 使用的默认发行版。 i , install - 安装新的发行版。 sd , set-default - 设置 bash.exe 使用的默认发行版。 ui , uninstall - 卸载发行版。 rg , register - 注册现有的安装目录。 ur , unregister - 取消注册发行版但不删除安装目录。 m , move - 将发行版移动到新目录。 d , duplicate - 在新目录中复制现有发行版。 e , export - 将发行版的文件系统导出到....

Created: 2021-08-28 · Updated: 2021-08-28 · 0opsdc

Scoop使用手册

Scoop简介 Scoop是一个包管理工具,类似Ubuntu的apt和Mac的homebrew,只需通过一条命令即可快速完成软件的下载、安装和配置等步骤。 项目地址:GitHub - lukesampson/scoop: A command-line installer for Windows. Scoop安装 没什么问题的话,大部分的电脑都能直接安装scoop,有问题的话请参考官方文档和网络资料自行解决,本文仅描述scoop的安装过程及实际安装遇到的问题。 注:请确保自身有代理环境,也可自行查找镜像源安装。 默认安装 官方给出的安装命令如下,只需打开powershell粘贴并执行即可,scoop将被默认安装在C:\User\<username>\scoop目录: Invoke-Expression (New-Object System.Net.WebClient).DownloadString('https://get.scoop.sh') # 或下述命令,任一条均可 iwr -useb get.scoop.sh | iex 安装完成后,可通过输入scoop help命令查看命令帮助,确认是否安装成功。 更改scoop安装位置 在安装scoop前,可先通过配置环境变量改变scoop安装路径: $env:SCOOP='D:\<dirname>' [Environment]::SetEnvironmentVariable('SCOOP', $env:SCOOP, 'User') 若已经安装scoop,则仅需在执行上述命令后,将原目录所有文件复制到新指定的目录即可。 更改scoop全局程序安装位置 $env:SCOOP_GLOBAL='D:<dirname>' [Environment]::SetEnvironmentVariable('SCOOP_GLOBAL', $env:SCOOP_GLOBAL, 'Machine') 如果直接执行上述命令可能会报错,原因在于权限不够,使用Windows+X,选择以管理员身份打开powershell,再次运行命令即可。 多线程下载 查阅资料的时候,大部分文章都推荐安装aria2实现多线程下载,提高下载速度,命令如下: scoop install aria2 安装Typora 以下是通过scoop安装Typora的流程,先使用命令搜索一下软件信息: scoop search typora 会有一个报错,大意为typora在extras软件库中,要求我们先安装对应软件库。按照要求执行命令添加软件库: scoop bucket add extras 此时却又报错,提示需要从GitHub拉取项目,需要我们先安装git。安装git: scoop install git 下载失败并报错,但之前都能正常下载,目前只安装了一个aria2,先禁用了看看: scoop config aria2-enabled false aria2默认配置: aria2-enabled (默认值: true) aria2-retry-wait (默认值: 2) aria2-split (默认值: 5) aria2-max-connection-per-server (默认值: 5) aria2-min-split-size (默认值: 5M) 然后再下载git,成功下载,但是在安装软件库时又报错了,显示无法访问GitHub仓库,这可是个老问题了,项目部署经常遇到,检查代理没问题,那么就给git配个代理试试:...

Created: 2021-08-23 · Updated: 2021-08-23 · 0opsdc

如何拥有多个GitHub Pages并配置子域名

文章背景 突发奇想能不能配置多个GitHub Pages,然后分别给它们绑定一个子域名,说干就干。 博客搭建文章:博客搭建 | Atmet (oopsdc.tk) GitHub Pages有三种类型:项目、用户和组织,项目站点连接到GitHub托管的特定项目,后两者连接到特定GitHub账户。用户只能创建一个用户主站,但可以有多个项目站点。 创建项目 创建一个新的名称为test的公开仓库。 进入仓库主页,点击Settings,点击左侧的Pages,选择Launch automatic page generator>Continue to layouts>Pubulish Page。(注:此处选择一个喜欢的主题即可) 搭建完成后可通过<usernmae>.github.io/test访问。 绑定子域名 一般而言,在购买一个域名后,我们可以使用它的子域名,如本博客的域名为oopsdc.tk,现在我想给新创建的test仓库绑定一个test.oopsdc.tk的子域名。 1.进入DNS服务商的控制台,此处以CloudFlare为例,点击新建一个CNAME,设置如下: 保存后进入第二步。 2.在test仓库中新建一个CNAME文件,内容如下: test.oopsdc.tk 也可通过仓库中的Settings进行设置,选择Pages后,修改下面的Custom domain并保存即可。 文章许可:本文采用CC BY-NC-SA 4.0许可协议,转载请注明出处。

Created: 2021-08-21 · Updated: 2021-08-21 · 0opsdc

Vulhub环境搭建

安装环境 Ubuntu 20.04 环境配置 docker docker-compose 更换系统源 备份原文件: mv /etc/apt/source.list /etc/apt/source.list.bak 使用以下任一命令创建并编辑source.list文件: gedit /etc/apt/source.list vi /etc/apt/source.list vim /etc/apt/source.list // 需使用 apt install vim 命令安装 文件内容如下: # 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释 deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse deb https://mirrors....

Created: 2021-08-20 · Updated: 2021-08-20 · 0opsdc

GitHub不再支持密码验证解决方案

问题描述 在更新博客push本地资源时遇到如下报错: remote: Support for password authentication was removed on August 13, 2021. Please use a personal access token instead. 大意就是GitHub从13号起不再支持密码验证,需要使用个人token,官方解释是为了安全。 解决方案 进入GitHub首页后点击右上角的个人头像,选择Settings,在左侧选择Developer settings,然后选择Personal access tokens,选中之后点击Generate new token,我们可以设置token名、有效期及token的权限范围。仅需要仓库部署的话,我们就只需勾选repo,翻到最下面点击Gererate token。 然后保存好生成的token,因为退出页面后将不再显示,可以通过重新生成来重新获取。然后在push项目时,将输入的密码改为我们生成的token即可。 文章许可:本文采用CC BY-NC-SA 4.0许可协议,转载请注明出处。

Created: 2021-08-19 · Updated: 2021-08-19 · 0opsdc

Kali安装Parallels Tools

环境配置 本文环境信息如下: Parallel Desktop 16 Business 16.5.0 (49183) Kali Linux 2021.2 64-Bit 系统安装 安装配置 安装Kali Linux的时候Parallels Desktop无法识别操作系统,需要我们手动选择Other Linux下的Kali Linux。 配置选项因人而异,此处不细讲。 在安装过程中可选择GNOME作为桌面环境,避免后面的踩坑。 更换国内源 # 备份原文件 mv /etc/apt/source.list /etc/apt/source.list.bak # 更换为清华源 vim /etc/apt/source.list # 输入以下内容 "deb http://mirrors.tuna.tsinghua.edu.cn/kali kali-rolling main contrib non-free" "deb-src https://mirrors.tuna.tsinghua.edu.cn/kali kali-rolling main contrib non-free" 安装Parallels Tools 把鼠标移到窗口的右上,有一个黄色的感叹符号,点击即可安装Parallels Tools。 # 检测光盘是否挂载成功 mount | grep iso9660 # 将安装文件拷贝至本地,此处的dirname为自己创建的目录名称 mkdir ~/<dirname> && cp -r /media/cdrom0/* ~/<dirname> # 安装Parallels Tools cd ~/<dirname> && ....

Created: 2021-08-18 · Updated: 2021-08-18 · 0opsdc

ATT&CK实战一

一、环境搭建 1.1 下载虚拟机文件 自行搜索。 1.2 环境介绍 开机密码:hongrisec@2019. 本次实验共3台主机,Win7作为Web服务器,是最先攻击点,Win2k3为内网域成员主机,Win2k8 R2为内网域控主机。 Kali:自主搭建,配置与Web服务器同一网段的IP,使用命令ifconfig eth0 <ip>即可。 Win7:双网卡,即存在内外网IP。外网网卡通过DHCP自动获取IP,内网网卡配置静态IP:192.168.52.143。服务器存在yxcms。分别与Kali(NAT模式)和内网两台主机(自定义VMnet2)连通。 Win2k3:只有内网网卡,IP:192.168.52.138,使用VMnet2。 Win2k8 R2:只有内网网卡,IP:192.168.52.141,使用VMnet2。 拓扑图如下: 安装完成之后在Win7主机上打开phpstudy开启Web服务。 二、信息收集 2.1 探测存活主机 命令: nmap -sS -sV -O 192.168.106.0/24 # 此处的IP为NAT模式下Win7和Kali自动获取到的IP # 参数说明 sS : SYN半连接扫描,只进行前两次握手 sV : 显示服务器详细版本 O : 显示服务器操作系统(不太准确) 结果: Nmap scan report for 192.168.106.150 Host is up (0.00044s latency). Not shown: 998 filtered ports PORT STATE SERVICE VERSION 80/tcp open http Apache httpd 2.4.23 ((Win32) OpenSSL/1.0.2j PHP/5.4.45) 3306/tcp open mysql MySQL (unauthorized) MAC Address: 00:0C:29:33:16:84 (VMware) Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port Device type: general purpose Running: Microsoft Windows 2008|7|8....

Created: 2021-07-21 · Updated: 2021-07-21 · 0opsdc

浅析APNs推送机制

APNs简述 Apple Push Notification server(APNs),即苹果推送通知服务。 APNs出现需求 由于移动设备内存、CPU、电池容量等各种因素,iOS不允许APP进程常驻后台(时限大概为10min)。 当用户主动关闭APP或后台APP进入后台达到限定时长后,意味着该APP进程的结束,在一定程度上保证了手机的流畅度与使用时长。但这也同时意味着服务器无法主动和用户交互(如实时推送消息),为了解决这个限制,苹果推出了APNs,允许设备和服务器分别与苹果的推送服务器保持长连接状态。 iOS通知 iOS通知分为本地通知和远程通知两类,APNs是远程通知功能的核心。 本地通知 由本地应用触发,一般是基于时间的通知形式,如闹钟、日历、待办事项等。 远程通知 通过自建服务器推送消息的通知形式。 APNs推送流程 苹果官方APNs概述:Local and Remote Notification Programming Guide: APNs Overview (apple.com) 以下为APNs推送流程图: Provider:自建应用服务器 APNs:苹果APNs推送通知服务器 Device:苹果设备 Client App:应用 大致流程可分为以下4点: 苹果设备安装应用后会向APNs服务器进行注册,注册成功后APNs服务器返回一个deviceToken,且二者之间会维持一个基于SSL协议的TCP流通讯的长连接。 拿到deviceToken后设备会将其发送至自建应用服务器 有消息需要被推送时,自建服务器会将消息按指定格式结合deviceToken一并打包发送给APNs。 APNs将新消息推送至设备,并在设备屏幕上显示出来(因为设备和服务器之间维持了一个长连接) 结合上述过程可以发现,真正完成推送的是APNs服务器,消息一定是由APNs服务器推送给我们的设备,自建应用服务器只是将需要推送的消息告诉APNs服务器。至于如何维护消息队列或如何保证消息能被推送到指定设备上,这些功能都是由APNs实现的。 deviceToken deviceToken是一个APP安装在设备上的唯一标识符,一个APP在不同设备上的deviceToken不同,同一台设备重新安装同一个APP后deviceToken也会不同。 项目代码AppDelegate中有一个回调方法,当APNs注册成功后通过该回调方法可以获取到返回的deviceToken。 - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken APNs拿到这个包之后会验证包结构是否正确,验证无误后会提取其中的消息,再将消息推送至指定设备。 消息体结构如下: { "aps":{ "alert":{ // 显示在用户设备上的推送标题内容 "title":"Test Request", "body":"This is a test msg.", }, "badge":5, // 显示的数量(整形类型),是在应用icon右上角显示的数量,提示有几条未读信息 "sound":"default" // 推送消息声 } } 其实这就是一个JSON结构体,上述代码只是一种简单消息体,详情可见苹果官方文档:Local and Remote Notification Programming Guide: Creating the Remote Notification Payload (apple....

Created: 2021-07-20 · Updated: 2021-07-20 · 0opsdc