【Blog#0x02】个人博客搭建:基于hexo+github pages
你是否看到朋友开了微信公众号觉得很酷?你是否想分享自己的学习笔记、生活感想?你是否想拥有自己的个人主页?
那就一起来试试整个博客吧,反正是免费的不用花钱(<ゝω・)☆
方便起见,推荐在自己主系统上面配置博客,或者配置在WSL上。
软件安装请参考官方文档 | Hexo,Windows安装Git时,全程保持默认选项即可。
注意,其中命令行指令需要在你安装系统的shell上执行。如果是Windows系统的话,需要使用刚刚安装的Git所附带的Git Bash。
静态网站生成首先,在你电脑上挑一个喜欢的位置,我们会在这里存放博客的文件夹。
然后打开命令行,在这里输入(把 <folder> 替换成你想要的文件夹名):
123$ hexo init <folder>$ cd <folder>$ npm install
完成后,这个目录的文件树如下:
12345678.├── _config.yml├── package.json├── scaffolds├── source| ├── _drafts| └── _posts└── themes
其 ...
【Linux#0x00】Shell入门
本教程初次编写于六星2023CTF夏令营,升级后作为Linux系列教程的第零篇。欢迎对Linux毫无了解的读者通过本教程入门Linux命令行基础操作~
What is Shell?Shell的中文是壳,读者可能听说过一部叫做《Ghost in The Shell》(攻壳机动队)的作品。
在计算机的世界中,Shell指的是一类软件,允许用户和计算机进行交互。
In computing, a shell is a computer program that exposes an operating system‘s services to a human user or other programs. In general, operating system shells use either a command-line interface (CLI) or graphical user interface (GUI), depending on a computer’s role and particular operation. It is named a shell becau ...
【Tool#0x01】Linux(Kali) 环境配置
为了和之后的网络工具介绍环节联动,Linux常见指令教学将会使用Kali进行。
Windows首先需要装一个VMware。由于夏令营的安卓逆向部分会用到与hyper-V不兼容的安卓模拟器,因此这里不推荐WSL了 (`ε´)。
VMware Workstation Player官网下载链接:VMware Workstation Player | VMware | CN
VMware Workstation Pro可以自行找链接下载(然后网上搜一个注册码),但是我们不鼓励盗版!
在安装完毕之后,我们直接下载开箱即用的Kali虚拟机,下载链接:Get Kali | Kali Linux
下载完之后,找一个好地方解压(这个Kali虚拟机需要一直保存在那个地方),然后打开VMware,在左上角的文件菜单中点击打开,找到你刚刚解压出来的文件夹中的 kali-linux-...-amd64.vmx 打开,这一步之后你就拥有了一台Kali虚拟机!
默认的账号和密码都是 kali,开始你的Linux之旅吧!
MacOS(M1/M2)请看J3rry同学编写的教程
【Network#0x01】RDT协议实现(GBN和SR)
在这学期计网的PJ中,我被迫实现了GBN协议、基于连接的全双工可信传输协议,并在此基础上改造了SR协议版本,并为其添加了基础的拥塞控制机制(AIMD)。这是Github项目仓库。
主体是gbn.py以及sr.py,API接口模仿socket设计,均能连续通过200轮测试。下面是使用例(这就是全部API了):
1234567891011121314151617181920212223# sr_server.pyfrom sr import SRSocketHOST = 'localhost'PORT = 8000s = SRSocket()s.bind((HOST, PORT))s.listen()s.accept()print('Connected by', s.address)f = open('server/recv.jpg', 'wb')while True: data = s.recv() if data == b"": # 空的数据包标识文件结束 br ...
【Pwn#0x12】pwnable.tw seethefile writeup
这次借本题入门了glibc的FILE相关机制,果然一切涉及到函数指针的设计都是灵活但危险的。
本题相关:FILE伪造、vtable伪造、fclose
漏洞分析保护情况:
12345Arch: i386-32-littleRELRO: Partial RELROStack: No canary foundNX: NX enabledPIE: No PIE (0x8048000)
程序大致是一个menu,可以选择以下几种功能:
open:指定文件名打开文件,将FILE*保存到bss段的fp(不允许文件名中含有flag子字符串)
read:从fp中读取0x18F个字节,并保存到bss段的magic_buffer中
write:将magic_buffer中的内容打印到屏幕上(不允许内容中含有flag、})
close:关闭fp
exit:往bss读取一串字符串(name)后,尝试fclose(fp)并退出
程序漏洞点有两个:
main函数读取选项时,使用了 scanf("%s", buf),其中buf是一个栈变量。
m ...
【Pwn#0x11】TAMUctf 2023 Pwnme - linked ROP chain
当溢出长度过短无法完成完整的ROP时,一般会想到stack pivot,也就是在某个固定的、可控的地址处提前布置好ROP链,然后通过 leave; ret 或是 xchg eax, esp 等方法完成栈迁移。但在本题中,我们没有机会往已知地址写入数据,溢出大小又有限制。官方给出的方法是:通过 sub rsp, 0x18; call vul 这个非常规gadget,将提前布置好的ROP chain放在栈的高位,从而完成ROP chain的链接,我管它叫linked ROP chain。
比赛时和前辈两人看这题看了几个小时,找gadget找了很久也没做出来。比赛结束后发现了两个版本的做法,分别是官方的和Chovid99师傅的的。官方的做法比较一般,并且和我们比赛时的思路完全一致(只是我们傻了没发现那个关键gadget),因此本文主要分析官方的做法。
题目给了两个binary:
pwnme:什么函数都没有,只有一个main函数调用了libpwnme库的pwnme函数。12345Arch: amd64-64-littleRELRO: Partial RELROStack: ...
【PoRE#0x05】Proj1 指北
在上PoRE前,我是Android零基础小白,Java也没写过。刚刚接触那些Lab时,虽然挑战性也是有的,但终归是小打小闹的练习性质,只是助教出的题目。
然后那天,Proj1降临了。
真实软件逆向,而且参考目标还是微信。(微信是操作系统(雾))
开始前,前辈和我说过:没有做的时候都会以为这不可能,但其实你可以的。现在做完了PJ1,我也想对后来的同学说:虽然这可能会耗费非常多的时间、精力,但我认为这是值得的!这可是复杂度超高的真实软件、商用软件、以及操作系统软件,逆向成功就已经代表了——你已经有了在安卓世界中遨游的资格。
但是,我当然不会觉得耗费时间多是PJ1的优点。我想在这里总结一些做PJ1的经验,能帮后来者节省一些时间就最好了。
工具 & 环境在做PJ1时,我们需要准备一个好的调试环境。
最好的调试环境显然是真机,因为性能足够,可以提高调试的体验。如果你有一台备用手机的话,可以尝试网上查询root方法。我的备用手机是红米K30Ultra,使用root方法是Magisk。root成功之后,推荐LSPosed模块,这是一个支持Xposed模块的框架,在安卓高版本也可以运行。Ma ...
【PoRE#0x04】Frida & Android
Frida是一个几乎全平台(Windows、MacOS、GNU/Linux、IOS、Android)的代码插桩软件。它能够把谷歌的V8引擎(JavaScript、WebAssembly引擎,即解释器)注入到目标进程中,允许我们编写的JS脚本拥有对于整个进程内存空间的访问权、Hook进程里的代码、直接调用它们等……
Frida功能强大,且使用非常便捷、快速。比如在Android平台,Xposed模块也一样可以做到插桩,但调试起来麻烦得多,每次都要生成APK、安装APK、添加模块、重启环境。而Frida甚至不需要编译!官网对它的描述是 Scriptable,编辑后运行,直接就能够看到结果——你甚至不用重开目标进程!
如何使用Frida?Frida包括一个需要在目标机器上运行的Frida Server,同时,在本机上(用于写脚本的机器)提供了命令行工具(Frida CLI tool)、也可以用Python调用Frida API或直接编写JS脚本。
本笔记收集了一些安卓使用Frida的资源。
推荐食用方法是:
安装:如果你是PoRE学生,可以直接用助教给的方法,在虚拟机进行安装配置 ...
【Pwn#0x10】pwnable.tw Re-alloc writeup
相关:realloc、tcache2.29
借用了很多巧合,实在是特别“幸运”的一个利用。自己做出来之后,发现网上大部分wp都和我的解法不一样,但是更通用一些,不像我的那么极限(草)。
漏洞分析保护情况:
123456Arch: amd64-64-littleRELRO: Partial RELROStack: Canary foundNX: NX enabledPIE: No PIE (0x3fe000)FORTIFY: Enabled
程序是一个菜单,提供了alloc、realloc、free功能,来操作bss段的两个栏位,大致功能如下:
alloc:选中栏当前为NULL时,使用 realloc(NULL, size) 分配新的区块并读入数据;
realloc:选中栏当前非NULL时,将选中栏使用 realloc(ptr, size) 来调整大小并(如果realloc返回值非0)读入数据;
free:将选中栏使用 realloc(ptr, 0) 进行释放,并将指针置零。
主要的漏洞在于realloc的使用上,可以通过RTFM(在线m ...
【PoRE#0x03】Burp Extension
官方教程:Creating Burp extensions - PortSwiggerMontoya官方文档:MontoyaApiMontoya官方示例:PortSwigger/burp-extensions-montoya-api-examples: Examples for using the Montoya API with Burp Suite
Burp Suite过去插件开发使用的是Extender API,不过最近推出了一套新的API(今年1月刚刚发布),叫做Montoya API。新的API增加了Burp Suite插件开发的简便性,但是似乎并不完善,还有一些接口没有实现的样子。
对于Lab4中的任务,也就是自动处理HTTP包的插件,可以参考这个例子:burp-extensions-montoya-api-examples/proxyhandler/src/main/java/example/proxyhandler at main · PortSwigger/burp-extensions- ...