kernel stack
commit_creds(prepare_kernel_cred(0))最常见的,主要就是看SMAP/SMEP/KPTI等保护是否开启 1.开启SMEP第一种方法:内核提权然后返回用户态123456789101112131415161718192021222324void shell(void) { if(!getuid()) { printf("SUCCESS"); system("/bin/sh"); } else { printf("ERROR"); }}unsigned long sh = (unsigned long)shell;size_t rop[32];rop[i++] = pop_rdi_ret; rop[i++] = 0x0;rop[i++] = prepare_kernel_cred_k; rop[i++] = pop_rdx;rop[i++] = commit_creds_k;rop...
kernel技巧
基操拿到一个core.cpio,一般得到的都是压缩包,先将其回归到正常的名字,mv core.cpio core.cpio.gz,然后将其解压,gunzip core.cpio.gz,解压后的状态就是运行起仿真所需要的core.cpio; 然后我们将exp放入重新生成一个core.cpio要怎么办呢,先生成一个空的文件夹,mkdir core;cd core,cpio -idmv <core.cpio,就得到了core.cpio的东西了,然后编译exp,gcc exp..c -static -masm=intel -g-o exp,将其放入core文件夹,在core文件夹中执行find . | cpio -o --format=newc >core.cpio,会在该文件夹中获取到一个core.cpio,放回start.sh目录下,运行期环境然后执行就可以了 泄露地址一般开启KASLR的时候寻找地址 1.Dmesg在启动内核后可以查看内核的信息,如dmesg | grep -i "kernel可以查看内核的地址信息 但是,在init.sh文件中有 echo 1...
kernel常见保护
常见保护一.KPTIkpti简介简单说就是内核页表隔离:可以访问用户空间内存,但是不能执行用户空间代码;即无法直接通过构造swapgs_iretq的ROP来返回用户态。 PGD:出现用于处理中断 所以有一个CR3寄存器 PGD:当CR3[12]为1时为用户态,为0时为内核态,所以关键是要看怎么切换CR3[12]。 ASID:当CR3[11]为1时为用户态,为0时为内核态,所以关键是要看怎么切换CR3[11]。一般CR4开启PCIDE时CR3的低12位才有意义,正常情况下都是置为0 所以一旦开启kpti就不能使用ret2user,因为内核态无法确认用户态页表 kpti绕过swap CR3在一个开启 KPTI内核中会调用SWITCH_KERNEL_CR3_NO_STACK函数来从用户态进入内核态,关键代码如下所示: 12345678mov rdi, cr3nopnopnopnopnopand rdi, 0xFFFFFFFFFFFFE7FFmov cr3, rdi 这个作用就是将CR3[11]=CR3[12]=0; 而从内核态返回到用户态调...
DIR-815
首先:123wget https://unzip 文件名binwalk -Me .bin IDA:漏洞函数123456789101112131415161718192021222345行 v0是请求方式,发现是post方式if ( strcasecmp(v0, "POST") ){ v1 = "unsupported HTTP request"; goto LABEL_7;}50行 进入这个函数cgibin_parse_request(sub_409AC4, 0, 0x20000);50/22行 输入两个环境变量,getenv为查找变量的值 if ( getenv("CONTENT_TYPE") && (v6 = getenv("CONTENT_LENGTH")) != 0 ) 50/32 v10 = getenv("REQUEST_URI"); 回到hedwigcgi_main: 67行 进入这个函数 sess_get_uid(v4...
IOT前置知识
基础溢出:常见的就是shellcode和Rop技术 HTTP协议:http是一种超文本传输协议,是web上进行任意数据交换的基础,也是一种客户端-服务器协议。 它由请求和响应组成,三部分:请求行,消息报头,请求正文。 请求行:1Method Request-URI HTTP-Version CRLF 消息报头:包含各个字段,通常以key: value格式表示: 12Content-Length: 348Content-Type: application/x-www-form-urlencoded 请求正文:HTTP请求正文是请求消息中可选的部分,通常用于在 POST、PUT 或其他需要传递数据的请求中,携带客户端向服务器发送的数据。它是位于请求头之后的实际数据内容。可由多种数据组成,如表单、二进制、JSON等,如 12345678910POST /api/v1/user HTTP/1.1 # 请求行Host: api.example.com # 消息报头(开始)Content-Type: application/jsonContent-Length: 55 ...
2021春秋杯-core
准备工作1.先来个vmlinux12./extract-vmlinux ./bzImage > vmlinux file vmlinux #要看看有没有extract-vmlinux的文件 2.解包:给的是一个rootfs.img.gz的文件123456gunzip rootfs.img.gzfile rootfs.imgmkdir rootfs_extractedcd rootfs_extractedcpio -idv < ../rootfs.img输出一大串成功了 注意搞完后要再来个gunzip,不然./start.sh所在目录找不到rootfs.img 3.看start.sh:开启smep和kaslr12345678910#!/bin/shqemu-system-x86_64 \-m 256M \ #要改256-cpu kvm64,+smep \-kernel ./bzImage \-initrd rootfs.img \-nographic \-s \-append "console=ttyS0 kaslr quiet noap...
qwb2018-core
qwb2018-core给了四个文件(bzImage,core.cpio,start.sh,vmlinux),vmlinux是bzImage压缩前的文件,pop段全,若题目没给vmlinux,通过 12./extract-vmlinux ./bzImage > vmlinux file vmlinux 先看start.sh:发现开启了kaslr,启动一下,若无法启动,将-m后的参数调大 12345678qemu-system-x86_64 \-m 256M \-kernel ./bzImage \-initrd ./core.cpio \-append "root=/dev/ram rw console=ttyS0 oops=panic panic=1 quiet kaslr" \-s \-netdev user,id=t0, -device e1000,netdev=t0,id=nic0 \-nographic \ 再看看init文件:很好,将kallsyms保存到tmp目录,所以可以通过打开/tmp/kallsyms目录...
kernel basic
linux kernel一.基础知识1.操作系统内核 2.分级保护环通过硬件实现 **用户态:**CPU属于ring 3级别,运行平常写的代码(C/C++) **内核态:**CPU属于ring 0级别 3.状态切换CPU 在不同的特权级间进行切换主要有两个途径: (1)中断与异常(interrupt & exception):当 CPU 收到一个中断 / 异常时,会切换到 ring0,并 根据中断描述符表索引对应的中断处理代码以执行。 (2)特权级相关指令:当 CPU 运行这些指令时会发生运行状态的改变,例如 iret 指令(ring0->ring3)或是 sysenter 指令(ring3->ring0)。 基于这些特权级切换的方式,现代操作系统的开发者包装出了系统调用(syscall),作为由 “用户态” 切换到 “内核态” 的入口,从而执行内核代码来完成用户进程所需的一些功能。当用户进程想要请求更高权限的服务时,...
linux用户层pwn
基础指令打通了cat flag没有该文件,find / -name flag会列出flag所在地方,cat一下就好了 当文件中没有/bin/sh时,可以用sh来替代,在linux中前者时文件,后者时环境变量 IDA:shift+F12;ctrl+f jg大于则跳转,jl小于则跳转,jump无条件跳转 encode与decode区别 gdb:ctrl+c,p &printf, 直接查看该地址所存储的东西:x/x addr, 查看got表:got disass main:查看main函数的汇编 查看事务: 1234567gef➤ x/a 0xffffd0d00xffffd0d0: 0x80484b0gef➤ x/10c 0x80484b00x80484b0: 0x68 0x65 0x6c 0x6c 0x6f 0x20 0x77 0x6f0x80484b8: 0x72 0x6cgef➤ x/s 0x80484b00x80484b0: "hello world!" 查看寄存器: info registers 接收数据:64位canary...
指南
1.hexo g 2.hexo s 3.hexo d 4.hexo new post “title”