时间从来不语,却回答了很多问题


post @ 2024-11-10

目前主力机是一台 macbookpro,搭载 apple silicon 芯片,需要运行 x86 的虚拟机。

安装 QEMU

使用 brew 安装(官方推荐):

1
brew install qemu

创建磁盘

qcow2是 linux 世界中使用最广的一种磁盘格式(虽然我们是在 macos 上,但是 QEMU 起源于 linux 平台),我们选择该格式作为我们虚拟磁盘的格式。然后linux_hd.qcow2是虚拟磁盘文件名,自己更改。最后就是磁盘大小,小 linux 系统设置成 20G 即可。

1
qemu-img create -f qcow2 linux_hd.qcow2 20G
阅读此文


某相安全平台加密,除Main类外,其他class文件均被加密,熵值非常高

1696662684475-29457599-b862-4054-a8fd-1b906f7dfba1.png

除jar外,还有一个.so文件。在启动时,需要指定-agentpath:./.so命令行参数。由于未确定其加固方案(比如xjar),于是手动逆向其流程。

基本启动流程

jvm在指定-agentpath:./.so后,会先加载此so文件,然后运行此入口函数:

1
JNIEXPORT jint JNICALL Agent_OnLoad(JavaVM *vm,char *options,void *reserved)

参考:Java Agent机制 · 攻击Java Web应用-[Java Web安全]
容易推测,jvm会先通过此入口函数进行初始化,包括实现一个Loader,其在运行时会对Class文件进行解密。

阅读此文


从凌晨23:50开始研究这个问题,现在4:00成功

问题起因

朋友玩服务器,发现从6.8日9:00开始1.16.5客户端无法进入多人模式
1.png
搜索发现好像是当天8号才出现这个问题
2.png

摸索

对mc不太熟,觉得是微软搞了什么动作,抓包啥的,没抓到。
在语言资源里找到这串字符串
3.png
简单说就是玩的离dao线ban模式,没权限给你多人模式。那为啥以前离线模式可以玩呢?不懂,研究一下Minecraft源代码

Minecraft逆向

一开始我是直接jadx打开主程序,发现没什么东西。通过上面字符串引用的签名,直接搜索,发现有个引用的地方调用了账号验证方法,然后抛出异常:
1686255043040-1e022800-970b-4e60-802c-1c845d237abd.png
找到jar包:
1686255114746-1a97ed41-ef6c-41f6-bc7c-0e3f4c8ea68f.png
1686255163452-d3b50b0f-e88e-4f60-8e91-c8e7d3ecf159.png
发现有个传统验证方法,但是应该已经弃用了:
1686255203621-b27b5fb8-3c7f-4d1e-a76f-77fb146ed616.png

阅读此文


post @ 2023-05-15

AWD(Attack With Defense,攻防兼备)是一个非常有意思的模式,你需要在一场比赛里要扮演攻击方和防守方,攻者得分,失守者会被扣分。也就是说,攻击别人的靶机可以获取 Flag 分数时,别人会被扣分,同时你也要保护自己的主机不被别人得分,以防扣分。
这种模式非常激烈,赛前准备要非常充分,手上要有充足的防守方案和 EXP 攻击脚本,而且参赛越多,积累的经验就越多,获胜的希望就越大。

常见形式

常见的形式是这样:
每个队伍拥有四台服务器。其中三台服务器运行了一个Web服务,即网站服务。剩余一台(通常被称为Pwn服务器)运行一个网络服务,通常是一个在后台运行的二进制程序,通过TCP的某个端口对外提供服务。并且,每个队伍拥有的四台服务器都是一样的。
在三台Web服务器中,比赛主办方会在每个主机上预置一个或多个后门/漏洞。同样的,在剩下的一台服务器上的二进制程序里也会被预置二进制漏洞(跟Pwn题一样)。

比赛方法

在开始比赛前,通常会有一段时间(一般是30分钟)的加固时间。选手们要在这段时间内备份网站、安装防火墙、加固服务器,以防后续比赛时间被对手打穿。另外,队伍需要分工明确,在其他队友加固服务器的同时,另外的队友应该将备份的服务器文件下载,然后对其进行代码审计和漏洞挖掘(Web手)、逆向与二进制漏洞分析(Pwn手)。在发现漏洞后,及时对自身网站进行漏洞修补与加固。
比赛开始后分为两种情况,一种是主办方给出所有队伍服务器的IP地址,另一种情况是给一个网段,对手的服务器IP需要通过扫描等方法进行发现。
比赛将分为很多轮(一般可能是10分钟)。每轮开始,在每台服务器的某个地方(一般是根目录)会放置一个flag文件(每个队伍每台主机都不一样)。选手们需要通过挖掘到的漏洞编写漏洞利用代码(Exp),然后对其他队伍的服务器进行攻击并最终获取shell执行权限(getshell)或者通过文件读漏洞来读取对手服务器根目录下的flag文件,并向比赛平台提交flag。当攻击方成功攻击对手服务器并提交flag后,攻击方将获得一定的分数,同时防守方将丢失一定的分数(一般来讲,同一台机器被攻击会被扣除固定分数,而所有对这台服务器攻击成功的队伍将平分这些分数)。
在攻击的同时,也要注意自身服务器的防护。当自己的服务器被对手攻击提交flag后,队伍将被扣分。并且要防止服务器不要被破坏,因为每轮(一般是结束时)比赛时比赛平台会对所有队伍的服务器进行check,即检查服务是否正常运转。若出现服务被对手或自己破坏以至于无法提供正常服务的情况,平台将对其队伍进行扣分,同时其他队伍获得相应的加分。
每轮结束后将开始新一轮,此时所有flag文件将刷新,以开始新一轮的攻击和得分。若队伍发现自己服务器服务被破坏,此时可以刷新服务器回到初始状态。否则在比赛途中手动进行刷新服务器操作将导致扣分。
一般的比赛平台为了让比赛保持激烈的状态,会开放自动提交flag的API。即可以通过脚本更加方便地向比赛平台提交flag。

通用技巧

Web漏洞扫描可以使用例如D盾这样的工具,可以快速发现明显的Web后门。代码审计可以用Seay或者Fortify这样的工具。
一般AWD比赛禁止联网,所以队友间文件共享和通信可以使用FeiQ这样的内网通讯工具来进行。
当网站文件被修改,例如被植入木马的情况下,我们可以使用DiffMerge、Beyond Compare这样的工具来对比源文件进行检查。

阅读此文


项目地址:https://github.com/e-m-b-a/emba
本次分析对象的最后一次提交:https://github.com/e-m-b-a/emba/commit/de9dc53980962c8a62ea1239c9039e87962b32e5
克隆项目

1
git clone https://github.com/e-m-b-a/emba.git

介绍

EMBA 被设计为渗透测试人员的中央固件分析工具。它支持完整的安全分析过程,从固件提取过程开始,通过仿真进行静态分析和动态分析,最后生成 Web 报告。EMBA 自动发现固件中可能存在的弱点和漏洞。例如不安全的二进制文件、旧的和过时的软件组件、可能易受攻击的脚本或硬编码密码。EMBA是一个命令行工具,可以选择生成易于使用的 Web 报告以供进一步分析。

EMBA 结合了多种成熟的分析工具,可以通过一个简单的命令启动。之后,它会测试固件是否存在可能的安全风险和感兴趣的区域以进行进一步调查。无需手动安装所有帮助程序,执行集成安装脚本后,您就可以测试固件了。
EMBA 旨在协助渗透测试人员,而不是作为一个没有人工交互的独立工具。EMBA 应该提供尽可能多的关于固件的信息,测试人员可以决定重点领域,并负责验证和解释结果。

官方视频:
https://youtu.be/_dvdy3klFFY

项目采用纯Shell编写,非常适合这种需要结合许多外部工具并执行大量命令的工具。

阅读此文


post @ 2023-03-31

官网angr(不够详细,想要用来做一些事情还是要看angr的代码,至少得看python实现的接口)

开始

Project

angr从加载二进制文件到Project中开始。从此以后的object基本上都围绕它展开。

1
proj = angr.Project('/binary_file')

项目基本属性:

1
2
3
proj.arch
proj.entry
proj.filename
阅读此文


post @ 2023-03-13

一般是在Unix-Like系统上安装pyenv,windows好像用的比较少

为什么放弃pyenv

这本质上是一个python管理软件,如果你想使用类似虚拟空间的东西,不建议使用这个,依然会造成混乱。

另外在windows上pyenv好像会让第三方调用python的工具出现权限问题,例如idapython。暂不确定是否有关。

删除pyenv

把安装过程反过来就行了。删除~/.pyenv路径,删除环境变量,就ok了

阅读此文


本章回顾人们对UNIX标准化做出的努力与影响,并说明标准化工作中对每种实现必须定义的各种限制。

UNIX标准化

ISO C

ANSI即American National Standards Institute,美国国家标准学会,它是International Organization for Standardization即国际标准化组织ISO中代表美国的成员。IEC是国际电子技术委员会International Electrotechnical Commission的缩写。
ISO C标准:由ISO/IEC中的专门工作组维护和开发,该工作组简称WG14。此标准是为了C的可移植性。它定义了C的语法和语义和标准库。如今所有UNIX系统都提供C标准中定义的库函数,所以此标准库非常重要。
restrict关键字:告诉编译器那些指针引用可以优化,添加自ISO/IEC 9899:1999。
1676471478997-ba38269e-4fb0-43a1-85bb-98b9d0853424.png

IEEE POSIX

POSIX(Portable Operating System Interface,可以指操作系统接口)标准族最初由IEEE(Institute of Electrical and Electronics Engineers,电气和电子工程师学会)制订。现在由Austin Group开放工作组维护。
POSIX 1003.1操作系统接口标准,它定义了符合此标准的操作系统必须提供的各种服务。
同时所有标准中的例程都被称为函数而不会区别系统调用和库函数。
POSIX.1:指的是IEEE正式出版的1003.1标准。后面又发了很多1003.1的更新。

Single UNIX Specification

阅读此文


本章对一些术语进行简要说明并给出实例。

文件和目录

stat和fstat函数返回包含所有文件属性的一个信息结构。第四章将详细说明文件的各种属性。
目录项的逻辑视图与实际上的磁盘存放方式是不同的。UNIX文件系统大多数实现并不在目录项中存放属性,这是权衡于硬连接带来的一些问题。第四章将讨论。

文件名

只有斜线和空字符不能出现在文件名中。斜线用来分割路径名,空字符终止一个路径名。
opendir函数与readdir函数,包含于dirent.h中,并且包含对dirent结构的定义。
opendir函数返回只想DIR结构的指针。将指针传送给readdir函数,使用循环读取每个目录项,返回指向dirent结构的指针,如果没有了则返回null指针。此目录项顺序非首字母排序。

工作目录

working directory,或current working directory。进程可以使用chdir函数更改工作目录。
登陆时cwd设置为起始目录home directory。该目录从口令文件(通常是/etc/passwd)中相应用户的登录项中取得。

阅读此文


post @ 2023-01-09

一套极简的GIT工作流,帮助开发者在项目中快速开始

快速开始

GIT有三部分:

  1. 远端的仓库,可以是github,也可以是自建git服务器,称作remote
  2. 本地的git仓库,称作local
  3. 最后是本地的仓库文件,被称作disk

假设云端有一个git仓库,有一个主分支main,我们可以使用命令:

1
git clone repository-url

将它克隆到本地。此时remotelocaldisk是一样的。

阅读此文
⬆︎TOP