diff --git a/.github/workflows/gh-pages.yml b/.github/workflows/gh-pages.yml new file mode 100644 index 0000000..8c61eb8 --- /dev/null +++ b/.github/workflows/gh-pages.yml @@ -0,0 +1,19 @@ +name: github pages + +on: + push: + branches: + - main # default branch + +jobs: + deploy: + runs-on: ubuntu-18.04 + steps: + - uses: actions/checkout@v2 + - run: npm install + - run: npm run docs:build + - name: Deploy + uses: peaceiris/actions-gh-pages@v3 + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + publish_dir: ./dist diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..4342ff2 --- /dev/null +++ b/.gitignore @@ -0,0 +1,26 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/npm-debug.log* +/yarn-error.log +/yarn.lock +/package-lock.json + +# production +/es +/dist + +# misc +.DS_Store +/coverage + +# umi +.umi +.umi-production +.umi-test +.env.local + +# ide +/.vscode +/.idea diff --git a/CNAME b/CNAME new file mode 100644 index 0000000..aeb46f0 --- /dev/null +++ b/CNAME @@ -0,0 +1 @@ +prismx.io diff --git a/README.md b/README.md index b1b7161..3e7c915 100644 --- a/README.md +++ b/README.md @@ -1 +1,205 @@ -init +# Prism X · 单兵渗透系统 + +## 特性 + +- 集渗透前置、后置于一体的轻量型跨平台系统 + +![pc_home](/static/pc_home.jpg) + + +## 系统结构 + +系统功能如下: + + + + + + +## 启动 + + +本工具仅面向合法授权的企业资产风险检测,请严格遵守法律规定,不得危害国家安全、公共利益,不得损害个人、组织的合法权益,否则应自行承担所引起的一切法律责任。 + + +下载对应 OS ARCH 的软件包 [Prism X releases](https://github.com/yqcs/heartsk_community/releases/) +,解压之后赋予可执行权限之后直接运行即可。 + +Linux amd64 运行示例: + +```bash +$ wget https://github.com/yqcs/prismx/releases/download/1.0.10/prismx_linux_amd64.zip +$ unzip prismx_linux_amd64.zip +$ cd prismx_linux_amd64 +$ chmod +x prismx +$ ./prismx +``` + +### WEB 模式 + +为了方便使用,系统提供了 CLI 命令行以及更具交互性的 WEB 模式两种运行方式。WEB 模式需提供 License 文件,运行`./prismx` +命令即可启动。 LOW BUG 版本已经签发了 WEB 模式需要的 License 及公钥文件。 + +运行之后访问`http://yourIP:80`即可进入登录页,使用-port 参数可指定端口。 系统默认账号`prismx/prismx@passw0rd` +,首次使用请修改账户名与密码! + +login Page + +### CLI 命令行 + +命令行模式无需授权及公钥文件,但是只具有基础的扫描模块,无法使用 WEB 模式的扫描配置以及信息收集等高级功能。执行-h +命令可获取相关帮助。 + +```bash +$ ./prismx -h +$ ./prismx -t 127.0.0.1 -p 1-500,3000-6000 +``` + +cli Page + +### Linux For ARM(Android) + +#### 具有 Root 权限可以避免百分之九十的问题! + +安卓设备为例,直接使用 adb push 推送到 `/data/local/tmp/`目录,然后使用`chmod +x `赋予可执行权限即可直接运行。该方案不便随时运行,可使用终端软件 +Termux 支撑。 + +下载终端工具[Termux](https://termux.com/) ,打开软件之后更新软件包然后安装 wget,再下载二进制程序。 + +```bash +$ pkg update +$ pkg upgrade +$ pkg install wget +$ wget https://github.com/yqcs/prismx/releases/download/1.0.10/prismx_linux_arm64.zip +$ unzip prismx_linux_arm64.zip +$ cd prismx_linux_arm64 +$ chmod +x prismx +$ ./prismx +``` + +未授予 Root 权限会出现错误:` listen tcp 0.0.0.0:80: bind: permission denied`,使用-port 参数切换绑定端口即可。 + +执行扫描任务时出现错误:`xx on [::1]:53: read udp [::1]:37606->[::1]:53: read: connection refused` + +> 有 ROOT 权限:在手机根目录的 /etc/ 文件夹下新建一个名为 resolv.conf 的文件,内容为`nameserver 8.8.8.8`(DNS 服务器),然后重启 +> Termux 之后再次运行即可。 +> +> 无 ROOT +> 权限:执行`pkg install proot resolv-conf && proot -b $PREFIX/etc/resolv.conf:/etc/resolv.conf ./prismx -port 8000` +> (运行参数) +> 至此,便可成功启动,在手机浏览器访问首页:http://127.0.0.1:8000 但是并不代表可以完整使用了,以非 ROOT 权限执行任务时切记将存活检测切换为 +> Ping 模式!! + +phone Page + + +## 主机管理 + + +一键生成Agent,点击获取载荷即生成客户端。 + +home Page + +## 增效工具 + +> 模糊搜索:结果基于Hunter平台,使用该功需配置Hunter Api Key +> +> 子域名:该功能基于互联网系统,需确保能正常访问公网 +> +> 目录扫描:扫描指定 URL 可能存在安全风险的资源地址。 + +![img_1.png](/static/guide/infoGet.png) + +## 任务管理 + +无障碍创建向导,高级设定: + +> - 存活检测:ICMP 模式速度更快,但是需要 ROOT 身份运行,在无 ROOT 权限时请手动切换为 PING。 +> - 告警级别:默认选择了中危,在执行扫描任务时如检测到等级大于等于中危的漏洞时会向用户邮箱发送告警通知。通报等级:严重>高危>中危>低危>信息>无 +> - 模糊存活:部分主机开启禁 PING,导致常规检测无法验证存活,此时可以启用该选项进行深度检测,默认已选中。 +> - 扫描子域:此功能基于互联网系统,此选项需可访问公网。 + +![img_1.png](/static/guide/creatTask.png) + +## 扫描配置 + +### JNDI 服务器 + +通常启动后首页会提示:JNDI +监控服务未启动,一些检测功能将会受到限制。解决方式:管理员账户前往 `扫描配置 —> 扫描参数 —> 外连设置`,有两种方案 + +> 自定义 JNDI 服务器:可在本机启动一个监听,服务器地址应当是本机内网/公网 IP 端口 +> +> CEYE:配置 CEYE 平台的 Identifier 和 API Token 即可 + +然后选中对应的服务器模式,保存即可。未正确配置该选项会导致 log4j2 RCE 和 Fastjson RCE 等插件无法使用! + +### 第三方平台 + +在执行子域名扫描以及信息收集的模糊搜索任务时,会依赖外界平台。请配置相关平台的身份验证信息,以保证数据的完整性。 + +![img.png](/static/guide/other.png) + +### 字典配置 + +系统内置默认账户、密码组合。如果密码列里出现{user}占位符,则会被替换成用户名。 + +![img.png](/static/guide/dict.png) + +## 插件编写 + +### 流程可视化创建插件 + +请确保程序具有读写权限以及根目录存在 lib\exploits 文件夹,插件名即是漏洞名称.yaml + +![img.png](/static/guide/plugininfo.png) + +#### 规则及语法 + +- Request 可视化编辑器,支持多套请求。 +- 支持 CEL 函数语法,语法见教程。 +- AND/OR 按钮:如果选中 AND,需要每个请求的响应均符合所设定的响应规则,如果为 OR 则只需符合其中一项即判定为具有该漏洞。 + +**注**:如果发送的请求是 Post Form 请求,Params 参数须先以 URL Encoded 编码转换。 + +![img.png](/static/guide/pluginRule.png) \ No newline at end of file diff --git a/config/config.js b/config/config.js new file mode 100644 index 0000000..3a3e5ae --- /dev/null +++ b/config/config.js @@ -0,0 +1,25 @@ +import { defineConfig } from "dumi"; + +export default defineConfig({ + sitemap: { + hostname: "https://prismx.io", + }, + hash: true, + title: "Prism X", + mode: "site", + logo: "/static/scan.png", + runtimePublicPath: true, + favicon: "/static/scan.svg", + exportStatic: {}, + extraBabelPlugins: [ + [ + "import", + { + libraryName: "antd", + libraryDirectory: "es", + style: true, + }, + ], + ], + mfsu: {}, +}); diff --git a/docs/change/index.md b/docs/change/index.md new file mode 100644 index 0000000..60a4772 --- /dev/null +++ b/docs/change/index.md @@ -0,0 +1,32 @@ +--- +nav: + title: 更新记录 + order: 2 +sidemenu: false +--- + +# 更新日志 + + +系统可能会有部分功能不稳定,请谨慎使用;如果体验后对系统有任何建议或合作想法,欢迎在讨论群中进行反馈和交流(issues)❤ + + +#### LOW BUG(1.0.1)-2022-06-09: + +- 新增 favicon.ico 显示 +- 新增插件 +- 优化手机尺寸 UI +- 优化目录扫描 UI +- 优化 Linux 低权限扫描逻辑 + +#### LOW BUG(1.0.0)-2022-06-01: + +- UI 更新,兼容不同尺寸显示、黑暗皮肤、英、繁体文本 +- 信息收集初版上线,支持从互联网检索子域名、关键词数据 +- 脆弱性检测上线,支持扫描子域名、脆弱性目录、资产信息收集、基线检测、Nday 验证 +- 支持自定义 JSON、YAML、GO 三种类型插件 +- 内置测试版 License 及公钥文件 + +### 联系 + + diff --git a/docs/guide/index.md b/docs/guide/index.md new file mode 100644 index 0000000..001f153 --- /dev/null +++ b/docs/guide/index.md @@ -0,0 +1,215 @@ +--- +title: 介绍 +order: 1 +toc: menu +nav: + title: 文档 + order: 1 +--- + +# Prism X · 单兵渗透系统 + +## 特性 + +- 集渗透前置、后置于一体的轻量型跨平台系统 + +![pc_home](/static/pc_home.jpg) + + + +## 系统结构 + +系统功能如下: + + + + + + +## 启动 + + +本工具仅面向合法授权的企业资产风险检测,请严格遵守法律规定,不得危害国家安全、公共利益,不得损害个人、组织的合法权益,否则应自行承担所引起的一切法律责任。 + + +下载对应 OS ARCH 的软件包 [Prism X releases](https://github.com/yqcs/heartsk_community/releases/) +,解压之后赋予可执行权限之后直接运行即可。 + +Linux amd64 运行示例: + +```bash +$ wget https://github.com/yqcs/prismx/releases/download/1.0.10/prismx_linux_amd64.zip +$ unzip prismx_linux_amd64.zip +$ cd prismx_linux_amd64 +$ chmod +x prismx +$ ./prismx +``` + +### WEB 模式 + +为了方便使用,系统提供了 CLI 命令行以及更具交互性的 WEB 模式两种运行方式。WEB 模式需提供 License 文件,运行`./prismx` +命令即可启动。 LOW BUG 版本已经签发了 WEB 模式需要的 License 及公钥文件。 + +运行之后访问`http://yourIP:80`即可进入登录页,使用-port 参数可指定端口。 系统默认账号`prismx/prismx@passw0rd` +,首次使用请修改账户名与密码! + +login Page + +### CLI 命令行 + +命令行模式无需授权及公钥文件,但是只具有基础的扫描模块,无法使用 WEB 模式的扫描配置以及信息收集等高级功能。执行-h +命令可获取相关帮助。 + +```bash +$ ./prismx -h +$ ./prismx -t 127.0.0.1 -p 1-500,3000-6000 +``` + +cli Page + +### Linux For ARM(Android) + +#### 具有 Root 权限可以避免百分之九十的问题! + +安卓设备为例,直接使用 adb push 推送到 `/data/local/tmp/`目录,然后使用`chmod +x `赋予可执行权限即可直接运行。该方案不便随时运行,可使用终端软件 +Termux 支撑。 + +下载终端工具[Termux](https://termux.com/) ,打开软件之后更新软件包然后安装 wget,再下载二进制程序。 + +```bash +$ pkg update +$ pkg upgrade +$ pkg install wget +$ wget https://github.com/yqcs/prismx/releases/download/1.0.10/prismx_linux_arm64.zip +$ unzip prismx_linux_arm64.zip +$ cd prismx_linux_arm64 +$ chmod +x prismx +$ ./prismx +``` + +未授予 Root 权限会出现错误:` listen tcp 0.0.0.0:80: bind: permission denied`,使用-port 参数切换绑定端口即可。 + +执行扫描任务时出现错误:`xx on [::1]:53: read udp [::1]:37606->[::1]:53: read: connection refused` + +> 有 ROOT 权限:在手机根目录的 /etc/ 文件夹下新建一个名为 resolv.conf 的文件,内容为`nameserver 8.8.8.8`(DNS 服务器),然后重启 +> Termux 之后再次运行即可。 +> +> 无 ROOT +> 权限:执行`pkg install proot resolv-conf && proot -b $PREFIX/etc/resolv.conf:/etc/resolv.conf ./prismx -port 8000` +> (运行参数) +> 至此,便可成功启动,在手机浏览器访问首页:http://127.0.0.1:8000 但是并不代表可以完整使用了,以非 ROOT 权限执行任务时切记将存活检测切换为 +> Ping 模式!! + +phone Page + + +## 主机管理 + + +一键生成Agent,点击获取载荷即生成客户端。 + +home Page + +## 增效工具 + +> 模糊搜索:结果基于Hunter平台,使用该功需配置Hunter Api Key +> +> 子域名:该功能基于互联网系统,需确保能正常访问公网 +> +> 目录扫描:扫描指定 URL 可能存在安全风险的资源地址。 + +![img_1.png](/static/guide/infoGet.png) + +## 任务管理 + +无障碍创建向导,高级设定: + +> - 存活检测:ICMP 模式速度更快,但是需要 ROOT 身份运行,在无 ROOT 权限时请手动切换为 PING。 +> - 告警级别:默认选择了中危,在执行扫描任务时如检测到等级大于等于中危的漏洞时会向用户邮箱发送告警通知。通报等级:严重>高危>中危>低危>信息>无 +> - 模糊存活:部分主机开启禁 PING,导致常规检测无法验证存活,此时可以启用该选项进行深度检测,默认已选中。 +> - 扫描子域:此功能基于互联网系统,此选项需可访问公网。 + +![img_1.png](/static/guide/creatTask.png) + +## 扫描配置 + +### JNDI 服务器 + +通常启动后首页会提示:JNDI +监控服务未启动,一些检测功能将会受到限制。解决方式:管理员账户前往 `扫描配置 —> 扫描参数 —> 外连设置`,有两种方案 + +> 自定义 JNDI 服务器:可在本机启动一个监听,服务器地址应当是本机内网/公网 IP 端口 +> +> CEYE:配置 CEYE 平台的 Identifier 和 API Token 即可 + +然后选中对应的服务器模式,保存即可。未正确配置该选项会导致 log4j2 RCE 和 Fastjson RCE 等插件无法使用! + +### 第三方平台 + +在执行子域名扫描以及信息收集的模糊搜索任务时,会依赖外界平台。请配置相关平台的身份验证信息,以保证数据的完整性。 + +![img.png](/static/guide/other.png) + +### 字典配置 + +系统内置默认账户、密码组合。如果密码列里出现{user}占位符,则会被替换成用户名。 + +![img.png](/static/guide/dict.png) + +## 插件编写 + +### 流程可视化创建插件 + +请确保程序具有读写权限以及根目录存在 lib\exploits 文件夹,插件名即是漏洞名称.yaml + +![img.png](/static/guide/plugininfo.png) + +#### 规则及语法 + +- Request 可视化编辑器,支持多套请求。 +- 支持 CEL 函数语法,语法见教程。 +- AND/OR 按钮:如果选中 AND,需要每个请求的响应均符合所设定的响应规则,如果为 OR 则只需符合其中一项即判定为具有该漏洞。 + +**注**:如果发送的请求是 Post Form 请求,Params 参数须先以 URL Encoded 编码转换。 + +![img.png](/static/guide/pluginRule.png) \ No newline at end of file diff --git a/package.json b/package.json new file mode 100644 index 0000000..e111e3f --- /dev/null +++ b/package.json @@ -0,0 +1,50 @@ +{ + "private": true, + "name": "dumi-site", + "version": "1.0.0", + "scripts": { + "start": "set NODE_OPTIONS=--openssl-legacy-provider&&dumi dev", + "docs:build": "dumi build", + "docs:deploy": "gh-pages -d dist", + "build": "father-build", + "prettier": "prettier --write \"**/*.{js,jsx,tsx,ts,less,md,json}\"", + "test": "umi-test", + "test:coverage": "umi-test --coverage", + "prepublishOnly": "npm run build" + }, + "module": "es/index.js", + "typings": "es/index.d.ts", + "gitHooks": { + "pre-commit": "lint-staged" + }, + "lint-staged": { + "*.{js,jsx,less,md,json}": [ + "prettier --write" + ], + "*.ts?(x)": [ + "prettier --parser=typescript --write" + ] + }, + "dependencies": { + "@ant-design/icons": "^4.7.0", + "@types/node": "^17.0.38", + "antd": "^4 .20.7", + "flex.css": "^1.1.7", + "prettier-plugin-organize-imports": "^2.3.4", + "react": "^18.1.0" + }, + "devDependencies": { + "@testing-library/jest-dom": "^5.16.4", + "@testing-library/react": "^13.3.0", + "@types/jest": "^27.5.1", + "@umijs/fabric": "^2.10.0", + "@umijs/test": "^3.5.24", + "babel-plugin-import": "^1.13.5", + "dumi": "^1.1.42", + "father-build": "^1.22.2", + "gh-pages": "^4.0.0", + "lint-staged": "^12.5.0", + "prettier": "^2.6.2", + "yorkie": "^2.0.0" + } +} diff --git a/public/CNAME b/public/CNAME new file mode 100644 index 0000000..dd304ba --- /dev/null +++ b/public/CNAME @@ -0,0 +1 @@ +prismx.io \ No newline at end of file diff --git a/public/payload/xml/active_mq_rce.xml b/public/payload/xml/active_mq_rce.xml new file mode 100644 index 0000000..6e63f8a --- /dev/null +++ b/public/payload/xml/active_mq_rce.xml @@ -0,0 +1,21 @@ + + + + + + + + yv66vgAAADQAtgoAKgBhCABiCABjCgBkAGUKAA0AZggAZwoADQBoCABpCABqCABrCABsBwBtBwBuCgAMAG8KAAwAcAoAcQByBwBzCgARAGEKAHQAdQoAEQB2CgARAHcKAA0AeAcAeQoAFwB6CgB7AHwIAH0KAH4AfwgARAoAfgCACgCBAIIKAIEAgwcAhAgAhQgASgcAhgoAIwCHCACICgANAIkKAIoAiwoAigCMBwCNBwCOAQAGPGluaXQ+AQADKClWAQAEQ29kZQEAD0xpbmVOdW1iZXJUYWJsZQEAEkxvY2FsVmFyaWFibGVUYWJsZQEABHRoaXMBAA1MQ01EUmVzcG9uc2U7AQAEdGVzdAEAFShMamF2YS9sYW5nL1N0cmluZzspVgEADnByb2Nlc3NCdWlsZGVyAQAaTGphdmEvbGFuZy9Qcm9jZXNzQnVpbGRlcjsBAAVzdGFydAEAE0xqYXZhL2xhbmcvUHJvY2VzczsBAAtpbnB1dFN0cmVhbQEAFUxqYXZhL2lvL0lucHV0U3RyZWFtOwEAFWJ5dGVBcnJheU91dHB1dFN0cmVhbQEAH0xqYXZhL2lvL0J5dGVBcnJheU91dHB1dFN0cmVhbTsBAARyZWFkAQABSQEAAWUBABVMamF2YS9sYW5nL0V4Y2VwdGlvbjsBAAZ0aHJlYWQBABJMamF2YS9sYW5nL1RocmVhZDsBAAZhQ2xhc3MBABFMamF2YS9sYW5nL0NsYXNzOwEABnRhcmdldAEAGUxqYXZhL2xhbmcvcmVmbGVjdC9GaWVsZDsBAAl0cmFuc3BvcnQBADBMb3JnL2FwYWNoZS9hY3RpdmVtcS90cmFuc3BvcnQvdGNwL1RjcFRyYW5zcG9ydDsBAAdhQ2xhc3MxAQALc29ja2V0ZmllbGQBAAZzb2NrZXQBABFMamF2YS9uZXQvU29ja2V0OwEADG91dHB1dFN0cmVhbQEAFkxqYXZhL2lvL091dHB1dFN0cmVhbTsBAANjbWQBABJMamF2YS9sYW5nL1N0cmluZzsBAAZyZXN1bHQBAAdwcm9jZXNzAQADYXJnAQAWTG9jYWxWYXJpYWJsZVR5cGVUYWJsZQEAFExqYXZhL2xhbmcvQ2xhc3M8Kj47AQANU3RhY2tNYXBUYWJsZQcAbgcAjQcAbQcAjwcAkAcAcwcAeQEACkV4Y2VwdGlvbnMHAJEBAApTb3VyY2VGaWxlAQAQQ01EUmVzcG9uc2UuamF2YQwAKwAsAQAAAQAHb3MubmFtZQcAkgwAkwCUDACVAJYBAAd3aW5kb3dzDACXAJgBAAdjbWQuZXhlAQACL2MBAAcvYmluL3NoAQACLWMBABhqYXZhL2xhbmcvUHJvY2Vzc0J1aWxkZXIBABBqYXZhL2xhbmcvU3RyaW5nDAArAJkMADYAmgcAjwwAmwCcAQAdamF2YS9pby9CeXRlQXJyYXlPdXRwdXRTdHJlYW0HAJAMADwAnQwAngCfDACgAKEMACsAogEAE2phdmEvbGFuZy9FeGNlcHRpb24MAKMAlgcApAwApQCmAQAQamF2YS5sYW5nLlRocmVhZAcApwwAqACpDACqAKsHAKwMAK0ArgwArwCwAQAub3JnL2FwYWNoZS9hY3RpdmVtcS90cmFuc3BvcnQvdGNwL1RjcFRyYW5zcG9ydAEALm9yZy5hcGFjaGUuYWN0aXZlbXEudHJhbnNwb3J0LnRjcC5UY3BUcmFuc3BvcnQBAA9qYXZhL25ldC9Tb2NrZXQMALEAsgEAAQoMALMAoQcAtAwAngCiDAC1ACwBAAtDTURSZXNwb25zZQEAEGphdmEvbGFuZy9PYmplY3QBABFqYXZhL2xhbmcvUHJvY2VzcwEAE2phdmEvaW8vSW5wdXRTdHJlYW0BABNqYXZhL2lvL0lPRXhjZXB0aW9uAQAQamF2YS9sYW5nL1N5c3RlbQEAC2dldFByb3BlcnR5AQAmKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL1N0cmluZzsBAAt0b0xvd2VyQ2FzZQEAFCgpTGphdmEvbGFuZy9TdHJpbmc7AQAHaW5kZXhPZgEAFShMamF2YS9sYW5nL1N0cmluZzspSQEAFihbTGphdmEvbGFuZy9TdHJpbmc7KVYBABUoKUxqYXZhL2xhbmcvUHJvY2VzczsBAA5nZXRJbnB1dFN0cmVhbQEAFygpTGphdmEvaW8vSW5wdXRTdHJlYW07AQADKClJAQAFd3JpdGUBAAQoSSlWAQALdG9CeXRlQXJyYXkBAAQoKVtCAQAFKFtCKVYBAApnZXRNZXNzYWdlAQAQamF2YS9sYW5nL1RocmVhZAEADWN1cnJlbnRUaHJlYWQBABQoKUxqYXZhL2xhbmcvVGhyZWFkOwEAD2phdmEvbGFuZy9DbGFzcwEAB2Zvck5hbWUBACUoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvQ2xhc3M7AQAQZ2V0RGVjbGFyZWRGaWVsZAEALShMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9yZWZsZWN0L0ZpZWxkOwEAF2phdmEvbGFuZy9yZWZsZWN0L0ZpZWxkAQANc2V0QWNjZXNzaWJsZQEABChaKVYBAANnZXQBACYoTGphdmEvbGFuZy9PYmplY3Q7KUxqYXZhL2xhbmcvT2JqZWN0OwEAD2dldE91dHB1dFN0cmVhbQEAGCgpTGphdmEvaW8vT3V0cHV0U3RyZWFtOwEACGdldEJ5dGVzAQAUamF2YS9pby9PdXRwdXRTdHJlYW0BAAVjbG9zZQAhACkAKgAAAAAAAgABACsALAABAC0AAAAvAAEAAQAAAAUqtwABsQAAAAIALgAAAAYAAQAAAAcALwAAAAwAAQAAAAUAMAAxAAAAAQAyADMAAgAtAAAC5wAGAA0AAAD7EgJNEgJOEgI6BBIDuAAEtgAFEga2AAebAA0SCE4SCToEpwAKEgpOEgs6BLsADFkGvQANWQMtU1kEGQRTWQUrU7cADjoFGQW2AA86BhkGtgAQOge7ABFZtwASOggDNgkZB7YAE1k2CQKfAA0ZCBUJtgAUp//tuwANWRkItgAVtwAWTacACzoFGQW2ABhNuAAZOgUSGrgAGzoGGQYSHLYAHToHGQcEtgAeGQcZBbYAH8AAIDoIEiG4ABs6CRkJEiK2AB06ChkKBLYAHhkKGQi2AB/AACM6CxkLtgAkOgwZDBIltgAmtgAnGQwstgAmtgAnGQy2ACinAAU6BbEAAgArAIIAhQAXAI0A9QD4ABcABAAuAAAAjgAjAAAACwADAAwABgANAAoADgAaAA8AHQAQACQAEgAnABMAKwAWAEUAFwBMABgAUwAZAFwAGgBfABsAawAcAHUAHgCCACEAhQAfAIcAIACNACQAkgAlAJkAJgCiACcAqAAoALQAKQC7ACoAxAArAMoALADWAC0A3QAuAOcALwDwADAA9QAzAPgAMQD6ADgALwAAAMAAEwBFAD0ANAA1AAUATAA2ADYANwAGAFMALwA4ADkABwBcACYAOgA7AAgAXwAjADwAPQAJAIcABgA+AD8ABQCSAGMAQABBAAUAmQBcAEIAQwAGAKIAUwBEAEUABwC0AEEARgBHAAgAuwA6AEgAQwAJAMQAMQBJAEUACgDWAB8ASgBLAAsA3QAYAEwATQAMAAAA+wAwADEAAAAAAPsATgBPAAEAAwD4AFAATwACAAYA9QBRAE8AAwAKAPEAUgBPAAQAUwAAABYAAgCZAFwAQgBUAAYAuwA6AEgAVAAJAFUAAABUAAj+ACQHAFYHAFYHAFYG/wAzAAoHAFcHAFYHAFYHAFYHAFYHAFgHAFkHAFoHAFsBAAAV/wAPAAUHAFcHAFYHAFYHAFYHAFYAAQcAXAf3AGoHAFwBAF0AAAAEAAEAXgABAF8AAAACAGA= + + + + + + + + + + \ No newline at end of file diff --git a/public/static/CNAME b/public/static/CNAME new file mode 100644 index 0000000..aeb46f0 --- /dev/null +++ b/public/static/CNAME @@ -0,0 +1 @@ +prismx.io diff --git a/public/static/cli.png b/public/static/cli.png new file mode 100644 index 0000000..4361027 Binary files /dev/null and b/public/static/cli.png differ diff --git a/public/static/guide/cli.png b/public/static/guide/cli.png new file mode 100644 index 0000000..a5621a1 Binary files /dev/null and b/public/static/guide/cli.png differ diff --git a/public/static/guide/creatTask.png b/public/static/guide/creatTask.png new file mode 100644 index 0000000..d546eff Binary files /dev/null and b/public/static/guide/creatTask.png differ diff --git a/public/static/guide/dict.png b/public/static/guide/dict.png new file mode 100644 index 0000000..2f39ce1 Binary files /dev/null and b/public/static/guide/dict.png differ diff --git a/public/static/guide/home.jpg b/public/static/guide/home.jpg new file mode 100644 index 0000000..aea931d Binary files /dev/null and b/public/static/guide/home.jpg differ diff --git a/public/static/guide/img.png b/public/static/guide/img.png new file mode 100644 index 0000000..3e89c81 Binary files /dev/null and b/public/static/guide/img.png differ diff --git a/public/static/guide/infoGet.png b/public/static/guide/infoGet.png new file mode 100644 index 0000000..0c32cf1 Binary files /dev/null and b/public/static/guide/infoGet.png differ diff --git a/public/static/guide/login.png b/public/static/guide/login.png new file mode 100644 index 0000000..914bdcd Binary files /dev/null and b/public/static/guide/login.png differ diff --git a/public/static/guide/other.png b/public/static/guide/other.png new file mode 100644 index 0000000..19b04f8 Binary files /dev/null and b/public/static/guide/other.png differ diff --git a/public/static/guide/phone.jpg b/public/static/guide/phone.jpg new file mode 100644 index 0000000..be018a5 Binary files /dev/null and b/public/static/guide/phone.jpg differ diff --git a/public/static/guide/pluginRule.png b/public/static/guide/pluginRule.png new file mode 100644 index 0000000..c854419 Binary files /dev/null and b/public/static/guide/pluginRule.png differ diff --git a/public/static/guide/plugininfo.png b/public/static/guide/plugininfo.png new file mode 100644 index 0000000..bd1c3e1 Binary files /dev/null and b/public/static/guide/plugininfo.png differ diff --git a/public/static/pc2.png b/public/static/pc2.png new file mode 100644 index 0000000..c4f0e73 Binary files /dev/null and b/public/static/pc2.png differ diff --git a/public/static/pc_home.jpg b/public/static/pc_home.jpg new file mode 100644 index 0000000..4eff559 Binary files /dev/null and b/public/static/pc_home.jpg differ diff --git a/public/static/phone_home.png b/public/static/phone_home.png new file mode 100644 index 0000000..02e6281 Binary files /dev/null and b/public/static/phone_home.png differ diff --git a/public/static/scan.png b/public/static/scan.png new file mode 100644 index 0000000..7d9b814 Binary files /dev/null and b/public/static/scan.png differ diff --git a/public/static/scan.svg b/public/static/scan.svg new file mode 100644 index 0000000..0bf2d7c --- /dev/null +++ b/public/static/scan.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/static/view.jpg b/public/static/view.jpg new file mode 100644 index 0000000..69fa452 Binary files /dev/null and b/public/static/view.jpg differ diff --git a/public/static/wx.jpg b/public/static/wx.jpg new file mode 100644 index 0000000..a681925 Binary files /dev/null and b/public/static/wx.jpg differ diff --git a/public/static/wx_qrcode.jpg b/public/static/wx_qrcode.jpg new file mode 100644 index 0000000..25e1aba Binary files /dev/null and b/public/static/wx_qrcode.jpg differ diff --git a/src/Apply/index.less b/src/Apply/index.less new file mode 100644 index 0000000..079b109 --- /dev/null +++ b/src/Apply/index.less @@ -0,0 +1,57 @@ +.apply { + padding-bottom: 5%; + + .title { + font-weight: 400; + font-size: 36px; + } + + .subtitle { + margin: 20px 0 50px; + color: #5d6494; + font-size: 18px; + } + + .contentDark { + display: block; + background-color: #f1f2f6; + } + + .zdyDiv { + margin-top: 10%; + margin-bottom: 10%; + } + + .container { + box-sizing: border-box; + margin: 0 auto; + } + + .platform { + width: 65%; + margin: 0 auto; + text-align: center; + } + + .platform > div { + color: #172b4d; + font-size: 16px; + text-align: center; + } + + .remark { + padding: 20px 0; + } + + .download { + display: inline; + margin: 0 5px; + padding: 8px 16px; + color: #fff; + font-size: 14px; + background-color: #172b4d; + border-radius: 3px; + cursor: pointer; + user-select: none; + } +} diff --git a/src/Apply/index.tsx b/src/Apply/index.tsx new file mode 100644 index 0000000..53e6790 --- /dev/null +++ b/src/Apply/index.tsx @@ -0,0 +1,128 @@ +import { Col, Row } from "antd"; +import React from "react"; +import styles from "./index.less"; + +const Apply = () => { + return ( +
+
+
+
+
+ + +
+ + Windows icon + + +
Windows 10, 11
+ +
+ + + + + +
+ + + +
UOS, Deepin, Ubuntu
+ + Linux AMD64 位 + + + 其他架构 + +
+ +
+
+
+
+
+
+ ); +}; + +export default Apply; diff --git a/src/Banner/index.less b/src/Banner/index.less new file mode 100644 index 0000000..f7bb062 --- /dev/null +++ b/src/Banner/index.less @@ -0,0 +1,58 @@ +.slide { + background-color: #fff; +} + +.content { + height: 550px; + margin-top: 3%; + color: #fff; + @media (max-width: 750px) { + height: 550px; + } + + &.black { + color: #3b426b; + } + + .left { + float: right; + margin-top: 14%; + @media (min-width: 750px) { + width: 65%; + } + } + + .heatImg { + border-radius: 4px; + width: 100%; + cursor: pointer; + @media (max-width: 750px) { + margin-top: 10%; + } + } + + .title { + margin-bottom: 15px; + font-weight: 700; + font-size: 38px; + margin-left: 10px; + } + + .summary { + margin-bottom: 40px; + margin-left: 10px; + font-size: 18px; + } +} + +.download { + display: inline; + padding: 8px 16px; + color: #fff; + font-size: 18px; + background-color: #172b4d; + border-radius: 3px; + cursor: pointer; + user-select: none; + margin: 0 5px 0 10px; +} diff --git a/src/Banner/index.tsx b/src/Banner/index.tsx new file mode 100644 index 0000000..91d8fb2 --- /dev/null +++ b/src/Banner/index.tsx @@ -0,0 +1,37 @@ +import {Carousel, Col, Row} from "antd"; +import classnames from "classnames"; +import React from "react"; +import styles from "./index.less"; + +const Banner = () => { + return ( + +
+
+ + +
+
棱镜X · 单兵渗透平台
+
+
一体化渗透前置、后置执行系统
+
+ +
开始使用
+
+
+ + + {"home"} + +
+
+
+
+ ); +}; + +export default Banner; diff --git a/src/Brand/index.less b/src/Brand/index.less new file mode 100644 index 0000000..d377539 --- /dev/null +++ b/src/Brand/index.less @@ -0,0 +1,66 @@ +.brand { + padding: 5px 0; +} + +.content { + margin: 5% auto 0; + padding-top: 2%; + padding-bottom: 5%; + text-align: center; + background-color: #f1f2f6; +} + +.content2 { + margin: 5% auto 0; + text-align: center; +} + +.title { + margin: 0 auto; + font-weight: 400; + font-size: 36px; +} + +.desc { + margin-top: 1%; + color: #505f79; + font-size: 16px; + line-height: 1.75; +} + +.homeDiv { + width: 75%; + margin-top: 2%; + margin-left: 10px; + .pc img { + position: relative; + left: 30%; + z-index: 2; + width: 80%; + border: 1px solid #d2d2d2; + } + + .phone img { + border: 1px solid #d2d2d2; + position: absolute; + left: 20%; + z-index: 1; + width: 15%; + margin-top: 3%; + } +} + +.cli img { + position: absolute; + left: 10%; + z-index: 1; + width: 45%; +} + +.web img { + position: relative; + left: 30%; + z-index: 2; + width: 80%; + margin-top: 5%; +} diff --git a/src/Brand/index.less.d.ts b/src/Brand/index.less.d.ts new file mode 100644 index 0000000..4586bcc --- /dev/null +++ b/src/Brand/index.less.d.ts @@ -0,0 +1,16 @@ +// This file is automatically generated. +// Please do not change this file! +interface CssExports { + content2: any; + web: any; + cli: any; + brand: string; + content: string; + desc: string; + homeDiv: string; + pc: string; + phone: string; + title: string; +} +export const cssExports: CssExports; +export default cssExports; diff --git a/src/Brand/index.tsx b/src/Brand/index.tsx new file mode 100644 index 0000000..3c1dc26 --- /dev/null +++ b/src/Brand/index.tsx @@ -0,0 +1,47 @@ +import { Divider } from "antd"; +import React from "react"; +import styles from "./index.less"; + +const Brand = () => { + return ( +
+
+
+ + 轻量,跨平台 + +
+ 支持Windows、Linux、MacOS,甚至可以在Raspberry Pi、安卓手机上构建您的风险检测系统 +
+
+
+ phone home +
+
+ pc home +
+
+
+
+
+
+ CLI / WEB 切换 +
+ 以CLI命令行临时扫描,亦可以WEB服务常驻 +
+
+
+ cli +
+
+ pc home +
+
+
+
+ +
+ ); +}; + +export default Brand; diff --git a/src/Container/index.tsx b/src/Container/index.tsx new file mode 100644 index 0000000..cde2636 --- /dev/null +++ b/src/Container/index.tsx @@ -0,0 +1,7 @@ +import React from "react"; + +const Container: React.FC<{ children: React.ReactNode }> = ({ children }) => { + return
{children}
; +}; + +export default Container; diff --git a/src/Features/index.less b/src/Features/index.less new file mode 100644 index 0000000..af4169e --- /dev/null +++ b/src/Features/index.less @@ -0,0 +1,49 @@ +.features { + margin-top: 5%; +} + +.title { + color: #3b426b; + font-size: 36px; + text-align: center; + @media (max-width: 1200px) { + margin-top: 30%; + margin-bottom: 10%; + } +} + +.zdyDivC { + margin: 0 auto; + @media (min-width: 1200px) { + width: 60%; + } +} +.card { + margin-top: 10%; +} +.card + .card { + color: #3a416f; + border-left: 1px solid #e1e7ff; +} + +&:hover { + color: inherit; +} + +& + & { + border-left: 1px solid #e1e7ff; +} + +.normal { + text-align: center; + + .cardTitle { + margin-bottom: 16px; + font-size: 20px; + } +} + +.summary { + color: #5d6494; + line-height: 1.6; +} diff --git a/src/Features/index.tsx b/src/Features/index.tsx new file mode 100644 index 0000000..8539373 --- /dev/null +++ b/src/Features/index.tsx @@ -0,0 +1,114 @@ +import {Col, Row} from "antd"; +import React from "react"; +import styles from "./index.less"; + +const Features = () => { + return ( +
+
集成一体化系统
+
+ + +
+ + + + +
系统风险检测
+
快速扫描安全隐患
+
+ + +
+ + + + + + + +
资产应用识别
+
+ 一键收集资产暴露面 +
+
+ + +
+ + + +
远程协助
+
仅需安装Agent即可协助操作
+
+ + +
+ + + + +
风险验证
+
+ 安全风险一键验证 +
+
+ +
+
+
+ ); +}; +export default Features; diff --git a/src/Footer/index.less b/src/Footer/index.less new file mode 100644 index 0000000..b52c010 --- /dev/null +++ b/src/Footer/index.less @@ -0,0 +1,52 @@ +.link { + color: #5d6494; + + &:hover { + color: #1890ff; + } +} + +.footer { + width: 55%; + margin: 0 auto; +} + +.column { + margin-top: 10%; +} + +.label { + margin-bottom: 20px; + font-weight: 700; + font-size: 14px; +} + +.item { + margin-bottom: 10px; +} + +.meta { + padding: 10px 0 60px; +} + +.iconWrap { + display: inline-block; + margin-left: 18px; + padding: 5px 7px; + border: 1px solid #d5dbf2; + border-radius: 50%; + cursor: pointer; + transition: background-color 0.3s; + + &:hover { + background-color: currentColor; + + .icon { + color: #fff; + } + } +} + +.icon { + font-size: 20px; +} diff --git a/src/Footer/index.less.d.ts b/src/Footer/index.less.d.ts new file mode 100644 index 0000000..d12a883 --- /dev/null +++ b/src/Footer/index.less.d.ts @@ -0,0 +1,15 @@ +// This file is automatically generated. +// Please do not change this file! +interface CssExports { + leftDiv: any; + footer: any; + column: string; + icon: string; + iconWrap: string; + item: string; + label: string; + link: string; + meta: string; +} +export const cssExports: CssExports; +export default cssExports; diff --git a/src/Footer/index.tsx b/src/Footer/index.tsx new file mode 100644 index 0000000..81a1e52 --- /dev/null +++ b/src/Footer/index.tsx @@ -0,0 +1,129 @@ +import { GithubOutlined, QqOutlined, WechatOutlined } from "@ant-design/icons"; +import { Col, Popover, Row } from "antd"; +import classnames from "classnames"; +import React from "react"; +import styles from "./index.less"; + +const Footer = () => { + return ( +
+ + +
+ logo +
+
Copyright © 2023 + prismx.io +
+ +
+
+ + + + +
+ + + + + + + + +
+ + +
+
+ + } + > +
+ +
+
+
+ + + +
+
+ + + +
+
+
+ +
+ +
+
+ ); +}; + +export default Footer; diff --git a/src/index.md b/src/index.md new file mode 100644 index 0000000..45a1e3b --- /dev/null +++ b/src/index.md @@ -0,0 +1,6 @@ +--- +gapless: true +title: Home +--- + + diff --git a/src/index.tsx b/src/index.tsx new file mode 100644 index 0000000..bb3f8e5 --- /dev/null +++ b/src/index.tsx @@ -0,0 +1,21 @@ +import "flex.css/dist/data-flex.css"; +import React from "react"; +import Apply from "./Apply"; +import Banner from "./Banner"; +import Brand from "./Brand"; +import Features from "./Features"; +import Footer from "./Footer"; + +const Home = () => { + return ( + <> + + + + +