├── docs ├── images │ ├── logo.ico │ ├── image-20251212115456-c1eetoy.png │ ├── image-20251212115520-tdfnt8f.png │ ├── image-20251212115541-ee6pqdg.png │ ├── image-20251212115610-lv6r139.png │ ├── image-20251212115646-80qohh6.png │ ├── image-20251212115655-4286u25.png │ ├── image-20251212115705-fuy8qqu.png │ ├── image-20251212115734-uif94za.png │ ├── image-20251212115805-83cnawp.png │ └── image-20251212115820-dlh0rqy.png ├── SECURITY.md ├── README.md └── INSTALLATION.md ├── server ├── cmd │ └── api │ │ ├── rsrc_windows.syso │ │ └── main.go ├── internal │ ├── config │ │ └── config.go │ ├── core │ │ ├── crypto │ │ │ ├── base64.go │ │ │ ├── xor.go │ │ │ └── aes.go │ │ ├── payload │ │ │ ├── templates │ │ │ │ ├── uploadFileChunk.js.tpl │ │ │ │ ├── readFile.js.tpl │ │ │ │ ├── downloadFile.js.tpl │ │ │ │ ├── execCommand.js.tpl │ │ │ │ ├── uploadFile.js.tpl │ │ │ │ ├── downloadFileChunk.js.tpl │ │ │ │ └── systemInfo.js.tpl │ │ │ └── generator.go │ │ ├── transport │ │ │ ├── protocol.go │ │ │ ├── httpClient.go │ │ │ ├── requestClient.go │ │ │ ├── getClient.go │ │ │ └── multipartClient.go │ │ ├── exploit │ │ │ ├── memoryShell.go │ │ │ └── nextjsMemoryShell.go │ │ └── proxy │ │ │ └── proxy.go │ ├── app │ │ ├── middleware │ │ │ ├── logger.go │ │ │ └── cors.go │ │ ├── app.go │ │ └── routes │ │ │ └── routes.go │ ├── database │ │ ├── db.go │ │ └── shell.go │ └── handlers │ │ ├── cmdHandler.go │ │ ├── payloadHandler.go │ │ ├── requestHelper.go │ │ └── proxyHandler.go ├── go.mod └── go.sum ├── web ├── tsconfig.node.json ├── src │ ├── api │ │ ├── request.ts │ │ ├── payload.ts │ │ ├── shell.ts │ │ └── file.ts │ ├── App.vue │ ├── main.ts │ ├── stores │ │ ├── proxyStore.ts │ │ ├── shellStore.ts │ │ ├── configStore.ts │ │ └── terminalStore.ts │ ├── types │ │ └── index.ts │ ├── router │ │ └── index.ts │ ├── views │ │ ├── Settings.vue │ │ ├── PayloadGen.vue │ │ ├── ProxyManager.vue │ │ └── ShellManager.vue │ └── components │ │ └── ShellDetail │ │ └── SystemInfo.vue ├── index.html ├── vite.config.ts ├── tsconfig.json └── package.json ├── .gitignore ├── CHANGELOG.md ├── go.work.sum ├── LICENSE ├── .github ├── ISSUE_TEMPLATE │ ├── bug_report.md │ └── feature_request.md ├── CODE_OF_CONDUCT.md ├── PULL_REQUEST_TEMPLATE.md ├── workflows │ └── release.yml ├── CONTRIBUTING.md ├── CODE_OF_CONDUCT_EN.md └── CONTRIBUTING_EN.md ├── PROJECT_STRUCTURE.md ├── CHANGELOG_EN.md ├── README.md └── README_EN.md /docs/images/logo.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tianlusec/TL-NodeJsShell/HEAD/docs/images/logo.ico -------------------------------------------------------------------------------- /server/cmd/api/rsrc_windows.syso: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tianlusec/TL-NodeJsShell/HEAD/server/cmd/api/rsrc_windows.syso -------------------------------------------------------------------------------- /docs/images/image-20251212115456-c1eetoy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tianlusec/TL-NodeJsShell/HEAD/docs/images/image-20251212115456-c1eetoy.png -------------------------------------------------------------------------------- /docs/images/image-20251212115520-tdfnt8f.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tianlusec/TL-NodeJsShell/HEAD/docs/images/image-20251212115520-tdfnt8f.png -------------------------------------------------------------------------------- /docs/images/image-20251212115541-ee6pqdg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tianlusec/TL-NodeJsShell/HEAD/docs/images/image-20251212115541-ee6pqdg.png -------------------------------------------------------------------------------- /docs/images/image-20251212115610-lv6r139.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tianlusec/TL-NodeJsShell/HEAD/docs/images/image-20251212115610-lv6r139.png -------------------------------------------------------------------------------- /docs/images/image-20251212115646-80qohh6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tianlusec/TL-NodeJsShell/HEAD/docs/images/image-20251212115646-80qohh6.png -------------------------------------------------------------------------------- /docs/images/image-20251212115655-4286u25.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tianlusec/TL-NodeJsShell/HEAD/docs/images/image-20251212115655-4286u25.png -------------------------------------------------------------------------------- /docs/images/image-20251212115705-fuy8qqu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tianlusec/TL-NodeJsShell/HEAD/docs/images/image-20251212115705-fuy8qqu.png -------------------------------------------------------------------------------- /docs/images/image-20251212115734-uif94za.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tianlusec/TL-NodeJsShell/HEAD/docs/images/image-20251212115734-uif94za.png -------------------------------------------------------------------------------- /docs/images/image-20251212115805-83cnawp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tianlusec/TL-NodeJsShell/HEAD/docs/images/image-20251212115805-83cnawp.png -------------------------------------------------------------------------------- /docs/images/image-20251212115820-dlh0rqy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tianlusec/TL-NodeJsShell/HEAD/docs/images/image-20251212115820-dlh0rqy.png -------------------------------------------------------------------------------- /server/internal/config/config.go: -------------------------------------------------------------------------------- 1 | package config 2 | 3 | type Config struct { 4 | Port string 5 | Host string 6 | } 7 | 8 | func Load() *Config { 9 | return &Config{ 10 | Port: "8080", 11 | Host: "0.0.0.0", 12 | } 13 | } 14 | 15 | -------------------------------------------------------------------------------- /server/cmd/api/main.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "log" 5 | "NodeJsshell/internal/app" 6 | "NodeJsshell/internal/config" 7 | ) 8 | 9 | func main() { 10 | cfg := config.Load() 11 | app := app.NewApp(cfg) 12 | if err := app.Run(); err != nil { 13 | log.Fatal(err) 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /web/tsconfig.node.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "composite": true, 4 | "skipLibCheck": true, 5 | "module": "ESNext", 6 | "moduleResolution": "bundler", 7 | "allowSyntheticDefaultImports": true 8 | }, 9 | "include": ["vite.config.ts"] 10 | } 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /web/src/api/request.ts: -------------------------------------------------------------------------------- 1 | import axios from 'axios' 2 | 3 | const request = axios.create({ 4 | baseURL: '/api', 5 | timeout: 30000, 6 | }) 7 | 8 | request.interceptors.response.use( 9 | (response) => response.data, 10 | (error) => { 11 | const message = error.response?.data?.error || error.message || '请求失败' 12 | return Promise.reject(new Error(message)) 13 | } 14 | ) 15 | 16 | export default request 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /web/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 | 5 | 6 | 7 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 | {{ info.hosts }}
99 |