续之前的系列,这里php开发的文件操作的内容读取以及文本写入的部分
本系列的php博客都是这个css,名字都是index.css
/* css样式初始化 */
* {
font-family: 'Poppins', sans-serif;
margin: 0;
padding: 0;
box-sizing: border-box;
outline: none;
border: none;
text-decoration: none;
text-transform: capitalize;
transition: .2s linear;
}
html {
font-size: 62.5%;
}
/* header样式初始化*/
.header {
position: fixed;
top: 0;
left: 0;
right: 0;
z-index: 1000;
background: #3F3D56;
display: flex;
align-items: center;
justify-content: space-between;
}
.header .logo {
color: white;
padding: 0 1rem;
}
/* 导航样式 */
.navbar ul{
display: flex;
}
.navbar ul li{
font-weight: bold;
width: 128px;
list-style: none;
text-align:center;
}
.navbar ul li a {
width: 128px;
line-height: 45px;
font-size: 1.7rem;
color: white;
}
.navbar ul li a:hover{
color: #009933;
}
/* 二级菜单样式 */
.navbar ul li ul{
position: absolute;
display: none;
width: 128px;
line-height: 45px;
}
.navbar ul li ul li{
background-color: #3F3D56;
}
/* 悬浮展开二级菜单 */
.navbar ul li ul li a:hover{
color: white;
}
.navbar ul li ul li:hover{
background-color: #009933;
}
.navbar ul li:hover ul{
display: block;
}
/* 网站内容*/
.content{
margin-top:50px;
}
/*让文件下载的文件列表居中显示*/
.download-links {
text-align: center; /* 使链接居中 */
font-family: 'LiSu', 'STLiti', cursive; /* 尝试使用隶书字体,如果不可用则退回到通用草书字体 */
font-style: italic; /* 设置字体为斜体 */
}
.download-links ul {
list-style: none;
padding: 0;
margin: 0;
display: inline-block; /* 使 内容居中对齐 */
}
.download-links li {
margin: 10px; /* 添加一些间距 */
}
.download-links a {
font-size: 18px; /* 可以根据需要调整大小 */
text-decoration: none;
color: #000;
}
.download-links a:hover {
text-decoration: underline;
}
新建一个文件file_read.php
Head
下面是运行效果
随意读取一个文件进行测试
成功读取当前文件的文件内容,尝试读取其他文件
http://localhost:63342/wushiyiwuzhong.com/file_read.php?filename=../test.txt
这里主要使用到的函数是$_SERVER
和file_put_contents
$_SERVER 是一种超全局变量,在 PHP 中用于收集有关服务器和执行环境的信息。它包含了很多索引,每个索引都有关于服务器或者当前执行脚本的信息。这些信息是由 Web 服务器提供的,因此具体可用的信息取决于服务器软件本身。
以下是一些常用的 $_SERVER 数组索引及其含义:
注意:不是所有的服务器都会提供所有这些信息,有些服务器可能会省略一些信息或者提供额外的信息,并且某些值可能在命令行运行 PHP 时不可用。这取决于你的服务器配置和 PHP 的安装方式。
file_put_contents() 是 PHP 中一个非常有用的函数,用于写入数据到文件。该函数是 fopen(),fwrite(),和 fclose() 函数的简单一次性替代。
这是基本语法:
file_put_contents($file, $data, $flags, $context);
参数解释:
$file = 'example.txt';
$data = 'Hello, World!';
file_put_contents($file, $data); // 写入数据到文件
$file = 'example.txt';
$data = 'Hello, again!';
file_put_contents($file, $data, FILE_APPEND); // 追加数据到文件
使用file_put_contents函数时你需要确保有适当的文件权限来写入或修改文件,否则此函数会执行失败
下面我们来具体实现文件写入,这里模拟的是直接写入到一个php文件中,至于为什么不加一个用户自定义文件是因为懒想让大家更容易理解。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Head</title>
<link rel="stylesheet" href="index.css">
</head>
<body>
<div class="header">
<a href="index.html" class="logo">
<h1>wushiyiwuzhong</h1>
</a>
<nav class="navbar">
<ul>
<li><a href="file_index.php">文件功能导航</a></li>
<li><a href="file_upload.php">文件上传</a></li>
<li><a href="file_downlaod.php">文件下载</a></li>
<li><a href="#">文件删除</a></li>
<li><a href="file_read.php">文件读取</a></li>
<li><a href="file_write.php">文件写入</a></li>
</ul>
</nav>
</div>
<div>
<div class="content">
<form action="file_write.php" method="post" enctype="application/x-www-form-urlencoded">
<textarea name="fileContent" rows="4" cols="50" placeholder="请输入文件内容"></textarea><br>
<input type="submit" value="写入文件" name="submit">
</form>
</div>
</div>
</div>
</body>
</html>
<?php
// 检查是否有 POST 请求,并且 'fileContent' 字段是否已经设置
if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['submit'])) {
// 定义要写入的文件名,可以是相对路径或绝对路径
$filePath = '1.php';//模拟写入文件可控的情况
// 从表单获取内容
$content = $_POST['fileContent'];
// 尝试将内容写入文件
if (file_put_contents($filePath, $content) !== false) {
echo "文件写入成功!"."
";
} else {
echo "文件写入失败,请检查文件路径及权限。";
}
}
运行效果如下
我们这里直接模拟攻击者写入木马从而控制服务器
访问我们写入的后门文件
成功访问我们的后门文件,如果是真实情况的话我们已经成功获取到了目标服务器的权限
文件的读取、写入还是比较简单的