渗透测试:1-4天学习整理
假设压缩包文件上传成功,index.php中的代码会提取上传的文件名并生成一个随机数与md5的路径组合,生成一个目录,并将文件放在该目录下,由于随机数与md5加密的路径会导致这一关无法越过去,此处为第二个无解点,同时伴有伪协议无法使用的问题。生成一个phar文件,此时后缀名不重要,上传后通过,检测到phar的关键字,分析该phar文件内是何种压缩格式并自动解压,此时就被include包含,并执行该
·
第一天:
1.就业简介:
比赛,实习经历-真实的渗透经历
比赛不必花费太多经历
实习经历-真实的渗透测试经历是求职的加分项
2.环境搭建与AI辅助学习
debug
Python-PYCharm自带debug功能
java-idea 使用量很少
php-[phpstorm or vscode],VScode中需要插件“php debug”
js-前段调试,浏览器开发者模式
AI学习辅助
Claude code(claude opus4.5)、 codex(codex gpt-5.2)、 geminicli(gemini3pro)、glm-4.7、minimax2.1
3.debug调试与CTF比赛题目
baby-web例子:用include上传文件,文件包含类漏洞
upload.php:
<?php
session_start();
error_reporting(0);
$allowed_extensions = ['zip', 'bz2', 'gz', 'xz', '7z'];
$allowed_mime_types = [
'application/zip',
'application/x-bzip2',
'application/gzip',
'application/x-gzip',
'application/x-xz',
'application/x-7z-compressed',
];
function filter($tempfile)
{
$data = file_get_contents($tempfile);
if (
stripos($data, "__HALT_COMPILER();") !== false || stripos($data, "PK") !== false ||
stripos($data, "<?") !== false || stripos(strtolower($data), "<?php") !== false
) {
return true;
}
return false;
}
if (!isset($_SESSION['dir'])) {
$_SESSION['dir'] = random_bytes(4);
}
$SANDBOX = getcwd() . "/uploads/" . md5("supersafesalt!!!!@#$" . $_SESSION['dir']);
if (!file_exists($SANDBOX)) {
mkdir($SANDBOX);
}
if ($_SERVER["REQUEST_METHOD"] == 'POST') {
if (is_uploaded_file($_FILES['file']['tmp_name'])) {
if (filter($_FILES['file']['tmp_name']) || !isset($_FILES['file']['name'])) {
die("Nope :<");
}
// mimetype check
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mime_type = finfo_file($finfo, $_FILES['file']['tmp_name']);
finfo_close($finfo);
if (!in_array($mime_type, $allowed_mime_types)) {
die('Nope :<');
}
// ext check
$ext = strtolower(pathinfo(basename($_FILES['file']['name']), PATHINFO_EXTENSION));
if (!in_array($ext, $allowed_extensions)) {
die('Nope :<');
}
if (move_uploaded_file($_FILES['file']['tmp_name'], "$SANDBOX/" . basename($_FILES['file']['name']))) {
echo "File upload success!";
}
}
}
?>
<form enctype='multipart/form-data' action='upload.php' method='post'>
<input type='file' name='file'>
<input type="submit" value="upload"></p>
</form>
index.php:
<?php
session_start();
error_reporting(0);
if (!isset($_SESSION['dir'])) {
$_SESSION['dir'] = random_bytes(4);
}
if (!isset($_GET['url'])) {
die("Nope :<");
}
$include_url = basename($_GET['url']);
$SANDBOX = getcwd() . "/uploads/" . md5("supersafesalt!!!!@#$" . $_SESSION['dir']);
if (!file_exists($SANDBOX)) {
mkdir($SANDBOX);
}
if (!file_exists($SANDBOX . '/' . $include_url)) {
die("Nope :<");
}
if (!preg_match("/\.(zip|bz2|gz|xz|7z)/i", $include_url)) {
die("Nope :<");
}
@include($SANDBOX . '/' . $include_url);
?>
该代码会检测文件路径,文件内容关键字,文件格式
关键字检测:不能包含关键字
“<?” “__HALT_COMPILER();” “PK” “<?php”

文件格式检测:检测文件格式必须为压缩包类型

此时来看,压缩后的文件,文件内容存在“pk”,但又限制文件内容不能包含关键字“pk”,故此时来看是无解,此处为第一处无解点
该例子设计文件包含问题,“文件包含”可以将一切类型文件视为php代码执行
假设压缩包文件上传成功,index.php中的代码会提取上传的文件名并生成一个随机数与md5的路径组合,生成一个目录,并将文件放在该目录下,由于随机数与md5加密的路径会导致这一关无法越过去,此处为第二个无解点,同时伴有伪协议无法使用的问题。
此题的解法回归php底层调试
生成一个phar文件,此时后缀名不重要,上传后通过,检测到phar的关键字,分析该phar文件内是何种压缩格式并自动解压,此时就被include包含,并执行该php命令
debug调试与CTF比赛题目
第二天:
docker容器配置、VScode配置ssh连接
## 1.php底层后门调试
## 2.php底层c语言调试
## 3.php底层c语言解析phpzend虚拟机流程
## 4.zend编译函数解决问题
第三天:
## 1.php伪协议讲解
## 2.php伪协议相关漏洞
## 3.文件包含日志漏洞讲解
第四天:
## 1.文件包含的利用
更多推荐
所有评论(0)