关于 CTF 中 php 考点与绕过那些事的总结
warning:
这篇文章距离上次修改已过201天,其中的内容可能已经有所变动。
在CTF(Capture the Flag)中,PHP是一种常见的考点和绕过方式。以下是一些关键点和技巧的概述:
代码执行:
- 使用
eval()
,exec()
,system()
,shell_exec()
,passthru()
,shell_exec()
等函数执行PHP代码。 - 绕过:使用花括号
{}
,单引号'
,双引号"
,注释//
或#
,以及函数调用如base64_encode()
和base64_decode()
。
- 使用
文件包含:
- 使用
include()
,require()
,include_once()
,require_once()
等函数包含文件。 - 绕过:使用
.
(点)进行路径拼接,使用php://input
或data://
协议,利用auto_prepend_file
和auto_append_file
指令。
- 使用
文件上传:
- 检查文件上传的扩展名和内容类型。
- 绕过:改变文件扩展名(例如,将
.jpg
改为.php
),使用图片处理软件嵌入PHP代码,使用POST请求中的Content-Type
伪造文件类型。
会话文件损坏:
- 使用会话文件进行用户身份验证。
- 绕过:修改会话文件的内容或路径,使用PHP会话配置漏洞。
代码审核:
- 检查代码中的漏洞如RCE、SQL注入、XSS等。
- 绕过:手动审查代码、使用工具如
seay-pcaudit
、RIPS
等进行自动化审计。
密码学:
- 使用密码哈希函数如
md5()
,sha1()
,crypt()
等进行密码验证。 - 绕过:使用散列密码字典、使用rabbit-hole算法、尝试暴力破解。
- 使用密码哈希函数如
权限提升:
- 通过PHP脚本获取服务器上的敏感信息。
- 绕过:使用
sudo
提权、编写特殊的PHP脚本或利用PHP配置错误。
以下是一个简单的PHP代码执行绕过的例子:
原始代码(可能存在漏洞):
<?php
$cmd = $_GET['cmd'];
eval($cmd);
?>
绕过方法:
http://example.com/vulnerable.php?cmd=echo%20"Hello%20World";
在这个例子中,使用了URL编码后的echo
语句,绕过了直接执行代码的限制。
评论已关闭