目 录CONTENT

文章目录

人力资源管理系统搭建-信息安全管理评估

天阁创客official
2024-12-12 / 0 评论 / 4 点赞 / 215 阅读 / 0 字
温馨提示:
作者:天阁创客official 作者承诺教程免费,拒绝盗版搬运,复制转发请指明出处! 让天下没有难学的技术!

环境搭建

实验系统环境:

  • 系统:Fedora39

  • 架构:X86_X64

  • 用户:root用户环境

如果觉得文章可以的,请打赏作者喝一瓶矿泉水,感谢!!!

docker安装

注意:操作前请先关闭防火墙和SELINUX策略

操作如下:

1、关闭防火墙

systemctl stop firewalld.service

2、关闭SELINUX

vim /etc/selinux/config

修改内容如下:

# SELINUX=enforcing 主食掉原来的内容
SELINUX=disabled

然后重启Linux。


安装docker和docker-compose

sudo dnf install -y docker docker-compose

查看docker状态

systemctl status docker

如果处于运行之中,如下:Active: active (running) since Thu 2024-11-28 12:52:19 CST; 1 week 6 days ago

● docker.service - Docker Application Container Engine
     Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; preset: disabled)
    Drop-In: /usr/lib/systemd/system/service.d
             └─10-timeout-abort.conf
     Active: active (running) since Thu 2024-11-28 12:52:19 CST; 1 week 6 days ago
TriggeredBy: ● docker.socket
       Docs: https://docs.docker.com
   Main PID: 1211 (dockerd)
      Tasks: 251 (limit: 4584)
     Memory: 264.3M
        CPU: 5min 5.416s
     CGroup: /system.slice/docker.service

那么直接添加开机自启动即可

systemctl enable docker

添加成功返回如下:

Created symlink /etc/systemd/system/multi-user.target.wants/docker.service → /usr/lib/systemd/system/docker.service.

如果没有处于运行中,请使用如下命令启动

systemctl start docker

1panel安装

执行以下命令进行安装

curl -sSL https://resource.fit2cloud.com/1panel/package/quick_start.sh -o quick_start.sh && sh quick_start.sh

安装成功后,控制台会打印面板访问信息,可通过浏览器访问 1Panel:

http://目标服务器 IP 地址:目标端口/安全入口
  • 如果使用的是云服务器,请至安全组开放目标端口。

  • ssh 登录 1Panel 服务器后,执行 1pctl user-info 命令可获取安全入口(entrance)

安装成功后,可使用 1pctl 命令行工具来维护 1Panel

mongodb安装与搭建

拉取mongodb数据库镜像

root@fedora:~/emails# docker pull mongo:latest

可能会出现下载超时的错误:

Get "https://registry-1.docker.io/v2/": dial tcp 192.133.77.59:443: i/o timeout

使用国际网络解决该问题,或者切换docker镜像源地址或者docker代理。

使用curl测试网络:

curl -v https://registry-1.docker.io/v2/
* processing: https://registry-1.docker.io/v2/
*   Trying 75.126.115.192:443...
*   Trying [2a03:2880:f10d:183:face:b00c:0:25de]:443...
* Immediate connect fail for 2a03:2880:f10d:183:face:b00c:0:25de: 网络不可达
* connect to 75.126.115.192 port 443 failed: 拒绝连接
* Failed to connect to registry-1.docker.io port 443 after 21050 ms: Couldn't connect to server
* Closing connection
curl: (7) Failed to connect to registry-1.docker.io port 443 after 21050 ms: Couldn't connect to server

安装成功如下:

Digest: sha256:4f93a84f7d4d8b1b6cb7e0c172d8a44b0bed9b399f207165ea19473bdb5a36b0
Status: Image is up to date for mongo:latest
docker.io/library/mongo:latest

运行容器

docker run -d --name my-mongo -p 27017:27017 -v mongo:latest

1panel安装mongodb

如果你有运维管理面板,那么搭建就是很容易的,例如宝塔、1panel。

我这里使用1panel面板来进行安装:

安装成功如下:

然后进入容器中进行配置,查看容器名称:

docker ps -a

返回如下:

使用ID的方式进入

或者使用1panel运维面板进入

在MongoDB的test 数据库,我们这里默认进入了test数据库中,现在要创建一个 users 集合并插入文档数据:

db.createCollection('users')

中途可能会出现如下问题,这是权限的问题

MongoServerError[Unauthorized]: Command create requires authentication

推荐使用mongo-express,这是一个基于 Web 的 MongoDB 管理界面,进行一个方便的安装操作:

创建test数据库


再次创建集合users

创建成功如图:


创建文档

添加如下内容,依次添加

{username: 'mo60', password: '123456'}
{username: 'Juneha', password: '624522'}
{username: 'Jack', password: '468052'}
{username: '06om', password: '965379'}

添加完成如下:

PHP环境搭建

拉取PHP镜像

docker pull bigtruedata/php-mongodb

pull成功如下:

Digest: sha256:00126ccae2bf8748b9f66e5b2a164a1d1a610ad345f7079559aa6967fcb8c945
Status: Downloaded newer image for bigtruedata/php-mongodb:latest
docker.io/bigtruedata/php-mongodb:latest

运行容器

docker run -itd --name php-mongodb -v  ./php-www:/var/www/html -p 80:80  bigtruedata/php-mongodb 

成功如下:

中途可能遇到的错误

容器地址网段不一样导致无法访问,如果你使用1panel搭建环境,推荐直接用1panel搭建php-mongodb环境,使用命令搭建就都使用命令,这样可以保证IP地址段在一个地方。

解决办法:

查看php-mongodb容器名称

docker ps -a 

删除容器

docker stop c0525275c2b8 && docker rm c0525275c2b8

然后在1panel中去创建

挂载到系统的路径位置随意,自己知道就好,容器地址是/var/www/html

搭建靶场

创建setup.sh文件

vim setup.sh

文件内容如下:

#!/bin/bash

read -p "请输入 MongoDB IP 地址: " mongodb_ip
if [[ ! $mongodb_ip =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
    echo "无效的 IP 地址!请重新运行脚本,并输入有效的 IP 地址。"
    exit 1
fi
f1og="not is flag..."
fl0g="flag{MjAyNHdlbGMwbQ==}"
robots_content="User-agent: *\nDisallow: nosql.php\nDisallow: f1og.txt\nDisallow: fl0g.txt"
log_content="<?php \$o = intval(\$_GET['o']);   \$hint = \$_POST['hint']; ?>"
php_content="<!DOCTYPE html>
<html>
<head>
  <title>登录</title>
  <style>
    body {
      font-family: Arial, sans-serif;
      background-color: #f2f2f2;
      margin: 0;
      padding: 0;
    }
    .container {
      display: flex;
      justify-content: center;
      align-items: center;
      height: 100vh;
    }
    .card {
      width: 450px;
      padding: 20px;
      border-radius: 5px;
      box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
      background-color: #fff;
    }
    .card h2 {
      text-align: center;
      color: #333;
      margin-bottom: 20px;
    }
    .card table {
      width: 100%;
      border-collapse: collapse;
      margin-bottom: 20px;
    }
    .card table td {
      padding: 10px;
      border: 1px solid #ccc;
      font-size: 14px;
    }
    .card form input[type=\"text\"],
    .card form input[type=\"password\"] {
      width: 97%;
      padding: 10px;
      margin-bottom: 10px;
      border: 1px solid #ccc;
      border-radius: 3px;
      font-size: 14px;
    }
    .card form button {
      width: 100%;
      padding: 10px;
      border: none;
      background-color: #4CAF50;
      color: #fff;
      font-size: 14px;
      cursor: pointer;
    }
    .card form button:hover {
      background-color: #45a049;
    }
  </style>
    <!-- https://blog.mo60.cn/index.php/archives/2023-China-Skills-Security-web1.html -->
</head>
<body>
  <div class=\"container\">
    <div class=\"card\">
<?php 
if (isset(\$_REQUEST['username']) && isset(\$_REQUEST['password'])) {
    \$manager = new MongoDB\Driver\Manager(\"mongodb://$mongodb_ip:27017\");
    \$username = \$_REQUEST['username'];
    \$password = \$_REQUEST['password'];

    \$query = new MongoDB\Driver\Query(array(
        'username' => \$username,
        'password' => \$password
    ));

    \$result = \$manager->executeQuery('test.users', \$query)->toArray();
    \$count = count(\$result);
    
    if (\$count > 0) {
        echo '<h2>用户信息</h2>';
        echo '<table>';

        foreach (\$result as \$user) {
            \$user = ((array)\$user);
            echo '<tr><td>用户名:</td><td>' . \$user['username'] . '</td></tr>';
            echo '<tr><td>密码:</td><td>' . \$user['password'] . '</td></tr>';
        }

        echo '</table>';
        \$o = intval(\$_GET['o']);
        \$hint = substr(\$_POST['hint'], 0, 4);
        \$file = 'nosql.log';

        if (!empty(\$o) && !empty(\$hint)) {
            \$contents = file_get_contents(\$file);
            \$part1 = substr(\$contents, 0, \$o);
            \$part2 = substr(\$contents, \$o + strlen(\$hint)); 
            \$newContents = \$part1 . \$hint . \$part2;
            file_put_contents(\$file, \$newContents);
        }

        if (file_exists(\$file)) {
            echo file_get_contents(\$file);
            include \$file;
        }
    } else {
        echo 'Login Failed';
    }
} else {
    echo '<h2>登录</h2>';
    echo '<form action=\"\" method=\"get\">';
    echo '<input type=\"text\" name=\"username\" placeholder=\"用户名\" required><br>';
    echo '<input type=\"password\" name=\"password\" placeholder=\"密码\" required><br>';
    echo '<button type=\"submit\">登录</button>';
    echo '</form>';
}
?>

    </div>
  </div>
</body>
</html>"
html_content="<!DOCTYPE html>
<html>
<head>
  <meta charset=\"UTF-8\">
  <title>人力资源管理系统</title>
  <style>
    body {
      font-family: Arial, sans-serif;
      margin: 0;
      padding: 20px;
      background-color: #f2f2f2;
    }
    
    h1 {
      text-align: center;
    }
    
    .container {
      max-width: 600px;
      margin: 0 auto;
      background-color: #fff;
      padding: 20px;
      border-radius: 5px;
      box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
    }
    
    p {
      line-height: 1.5;
    }
  </style>
</head>
<body>
  <div class=\"container\">
    <h1>欢迎来到人力资源管理系统!</h1>
  </div>
</body>
</html>"
echo "https://blog.mo60.cn/index.php/archives/2023-China-Skills-Security-web1.html"
echo -e "$robots_content" > robots.txt

if [ -e robots.txt ]; then
    echo "robots.txt 写入成功!"
else
    echo "robots.txt 写入失败!"
fi

echo -e "$f1og" >f1og.txt
if [ -e f1og.txt ]; then
	echo "f1og.txt 写入成功"
else
	echo "f1og.txt 写入失败"
fi

echo -e "$fl0g" >fl0g.txt
if [ -e fl0g.txt ]; then
	echo "fl0g.txt 写入成功"
else
	echo "fl0g.txt 写入失败"
fi

echo "$log_content" > nosql.log

if [ -e nosql.log ]; then
    echo "nosql.log 写入成功!"
    chmod 777 nosql.log
else
    echo "nosql.log 写入失败!"
fi

echo -e "$html_content" > index.html

if [ -e index.html ]; then
    echo "index.html 写入成功!"
else
    echo "index.html 写入失败!"
fi

echo "$php_content" > nosql.php

if [ -e nosql.php ]; then
    echo "nosql.php 写入成功!"
else
    echo "nosql.php 写入失败!"
fi

将文件复制到php-www目录

docker cp ./setup.sh c9502f60f1d4:/var/www/html

成功如下:

Successfully copied 6.66kB to c9502f60f1d4:/var/www/html

然后进入当前目录下的php-www目录,创建.sh文件内容如下运行即可生成所需文件

docker exec -it php-mongodb /bin/bash

赋予文件执行权限

chmod +x setup.sh

执行文件

./setup.sh

注意:如何查看 MongoDB IP 地址?

我们需要去1panel去修改文件:

地址如下:mongodb://mongodb:mongo_ypcjkW@172.18.0.2

填写内容为mongdb用户:密码@容器

修改之手传到docker容器中:

docker cp /opt/php-mongodb/nosql.php b73f9e4a8930:/var/www/html

成功返回如下:

Successfully copied 5.12kB to b73f9e4a8930:/var/www/html

访问网站:


4
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin

评论区