<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Software on Intersteller Cabin</title><link>https://www.starsac.cn/tags/software/</link><description>Recent content in Software on Intersteller Cabin</description><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Fri, 03 Apr 2026 22:25:35 +0800</lastBuildDate><atom:link href="https://www.starsac.cn/tags/software/index.xml" rel="self" type="application/rss+xml"/><item><title>uv笔记</title><link>https://www.starsac.cn/posts/uv-note/</link><pubDate>Fri, 03 Apr 2026 22:25:35 +0800</pubDate><guid>https://www.starsac.cn/posts/uv-note/</guid><description>&lt;blockquote&gt;
&lt;p&gt;其它信息参阅&lt;a href="https://uv.doczh.com/" class="external-link" target="_blank" rel="noopener"&gt;官方文档&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="安装"&gt;
 安装
 &lt;a class="heading-link" href="#%e5%ae%89%e8%a3%85"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="链接到标题"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;链接到标题&lt;/span&gt;
 &lt;/a&gt;
&lt;/h2&gt;
&lt;h3 id="macos-和-linux"&gt;
 macOS 和 Linux
 &lt;a class="heading-link" href="#macos-%e5%92%8c-linux"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="链接到标题"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;链接到标题&lt;/span&gt;
 &lt;/a&gt;
&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;curl -LsSf https://astral.sh/uv/install.sh | sh
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;或者使用Homebrew&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;brew install uv
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="windows"&gt;
 Windows
 &lt;a class="heading-link" href="#windows"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="链接到标题"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;链接到标题&lt;/span&gt;
 &lt;/a&gt;
&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-powershell" data-lang="powershell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;powershell -ExecutionPolicy ByPass -c &lt;span style="color:#a5d6ff"&gt;&amp;#34;irm https://astral.sh/uv/install.ps1 | iex&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;或者使用winget&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;winget install --id&lt;span style="color:#ff7b72;font-weight:bold"&gt;=&lt;/span&gt;astral-sh.uv -e
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="升级"&gt;
 升级
 &lt;a class="heading-link" href="#%e5%8d%87%e7%ba%a7"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="链接到标题"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;链接到标题&lt;/span&gt;
 &lt;/a&gt;
&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;uv self update
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="python-版本管理"&gt;
 Python 版本管理
 &lt;a class="heading-link" href="#python-%e7%89%88%e6%9c%ac%e7%ae%a1%e7%90%86"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="链接到标题"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;链接到标题&lt;/span&gt;
 &lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;uv python install&lt;/code&gt;: 安装 Python 版本&lt;/li&gt;
&lt;li&gt;&lt;code&gt;uv python list&lt;/code&gt;: 查看可用 Python 版本&lt;/li&gt;
&lt;li&gt;&lt;code&gt;uv python find&lt;/code&gt;: 查找已安装的 Python 版本&lt;/li&gt;
&lt;li&gt;&lt;code&gt;uv python pin&lt;/code&gt;: 将当前项目固定使用特定 Python 版本&lt;/li&gt;
&lt;li&gt;&lt;code&gt;uv python uninstall&lt;/code&gt;: 卸载 Python 版本&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="脚本运行"&gt;
 脚本运行
 &lt;a class="heading-link" href="#%e8%84%9a%e6%9c%ac%e8%bf%90%e8%a1%8c"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="链接到标题"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;链接到标题&lt;/span&gt;
 &lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;执行独立的 Python 脚本，例如 &lt;code&gt;example.py&lt;/code&gt;。&lt;/p&gt;</description></item><item><title>Docker笔记</title><link>https://www.starsac.cn/posts/docker-note/</link><pubDate>Wed, 01 Apr 2026 22:24:35 +0800</pubDate><guid>https://www.starsac.cn/posts/docker-note/</guid><description>&lt;h2 id="安装"&gt;
 安装
 &lt;a class="heading-link" href="#%e5%ae%89%e8%a3%85"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="链接到标题"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;链接到标题&lt;/span&gt;
 &lt;/a&gt;
&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;注意：Windows上运行 docker 需要 Docker Desktop 与 WSL2环境&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id="在ubuntu上安装"&gt;
 在Ubuntu上安装
 &lt;a class="heading-link" href="#%e5%9c%a8ubuntu%e4%b8%8a%e5%ae%89%e8%a3%85"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="链接到标题"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;链接到标题&lt;/span&gt;
 &lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://docs.docker.com/engine/install/ubuntu/" class="external-link" target="_blank" rel="noopener"&gt;Ubuntu | Docker Docs&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;其他平台安装方法参考官网链接&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4 id="使用apt安装最推荐"&gt;
 使用apt安装（最推荐）
 &lt;a class="heading-link" href="#%e4%bd%bf%e7%94%a8apt%e5%ae%89%e8%a3%85%e6%9c%80%e6%8e%a8%e8%8d%90"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="链接到标题"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;链接到标题&lt;/span&gt;
 &lt;/a&gt;
&lt;/h4&gt;
&lt;h5 id="1-设置docker-apt仓库"&gt;
 1. 设置docker apt仓库
 &lt;a class="heading-link" href="#1-%e8%ae%be%e7%bd%aedocker-apt%e4%bb%93%e5%ba%93"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="链接到标题"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;链接到标题&lt;/span&gt;
 &lt;/a&gt;
&lt;/h5&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8b949e;font-style:italic"&gt;# Add Docker&amp;#39;s official GPG key:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo apt update
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo apt install ca-certificates curl
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo install -m &lt;span style="color:#a5d6ff"&gt;0755&lt;/span&gt; -d /etc/apt/keyrings
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo chmod a+r /etc/apt/keyrings/docker.asc
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8b949e;font-style:italic"&gt;# Add the repository to Apt sources:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo tee /etc/apt/sources.list.d/docker.sources &lt;span style="color:#a5d6ff"&gt;&amp;lt;&amp;lt;EOF
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a5d6ff"&gt;Types: deb
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a5d6ff"&gt;URIs: https://download.docker.com/linux/ubuntu
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a5d6ff"&gt;Suites: $(. /etc/os-release &amp;amp;&amp;amp; echo &amp;#34;${UBUNTU_CODENAME:-$VERSION_CODENAME}&amp;#34;)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a5d6ff"&gt;Components: stable
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a5d6ff"&gt;Signed-By: /etc/apt/keyrings/docker.asc
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a5d6ff"&gt;EOF&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo apt update
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h5 id="2-安装docker软件包"&gt;
 2. 安装docker软件包
 &lt;a class="heading-link" href="#2-%e5%ae%89%e8%a3%85docker%e8%bd%af%e4%bb%b6%e5%8c%85"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="链接到标题"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;链接到标题&lt;/span&gt;
 &lt;/a&gt;
&lt;/h5&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;安装好后docker自动运行，使用：&lt;/p&gt;</description></item><item><title>JavaScript笔记</title><link>https://www.starsac.cn/posts/javascript-note/</link><pubDate>Sat, 21 Mar 2026 21:37:35 +0800</pubDate><guid>https://www.starsac.cn/posts/javascript-note/</guid><description>&lt;h1 id="javascript笔记"&gt;
 JavaScript笔记
 &lt;a class="heading-link" href="#javascript%e7%ac%94%e8%ae%b0"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="链接到标题"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;链接到标题&lt;/span&gt;
 &lt;/a&gt;
&lt;/h1&gt;
&lt;p&gt;&lt;a href="https://zh.javascript.info/" class="external-link" target="_blank" rel="noopener"&gt;现代JavaScript教程&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="1-简介"&gt;
 1. 简介
 &lt;a class="heading-link" href="#1-%e7%ae%80%e4%bb%8b"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="链接到标题"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;链接到标题&lt;/span&gt;
 &lt;/a&gt;
&lt;/h2&gt;
&lt;h3 id="javascript简介"&gt;
 JavaScript简介
 &lt;a class="heading-link" href="#javascript%e7%ae%80%e4%bb%8b"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="链接到标题"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;链接到标题&lt;/span&gt;
 &lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;浏览器中js的限制：不能读写硬盘文件，同源策略，标签页隔离，申请权限需要用户的许可&lt;/p&gt;
&lt;p&gt;js上层语言：CoffeeScript， TypeScript/Flow，Dart， Kotlin， Brython&lt;/p&gt;
&lt;h3 id="手册与规范"&gt;
 手册与规范
 &lt;a class="heading-link" href="#%e6%89%8b%e5%86%8c%e4%b8%8e%e8%a7%84%e8%8c%83"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="链接到标题"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;链接到标题&lt;/span&gt;
 &lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://tc39.es/ecma262/" class="external-link" target="_blank" rel="noopener"&gt;ECMA262&lt;/a&gt;， &lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference" class="external-link" target="_blank" rel="noopener"&gt;MDN WebDocs&lt;/a&gt;， &lt;a href="https://caniuse.com/" class="external-link" target="_blank" rel="noopener"&gt;caniuse&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="代码编辑器"&gt;
 代码编辑器
 &lt;a class="heading-link" href="#%e4%bb%a3%e7%a0%81%e7%bc%96%e8%be%91%e5%99%a8"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="链接到标题"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;链接到标题&lt;/span&gt;
 &lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;IDE：VSCode，WebStorm&lt;/p&gt;
&lt;p&gt;轻量编辑器：SublimeText， notepad++&lt;/p&gt;
&lt;h3 id="开发者控制台"&gt;
 开发者控制台
 &lt;a class="heading-link" href="#%e5%bc%80%e5%8f%91%e8%80%85%e6%8e%a7%e5%88%b6%e5%8f%b0"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="链接到标题"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;链接到标题&lt;/span&gt;
 &lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;Chrome开发者工具（F12）&lt;/p&gt;
&lt;p&gt;Safari需要先在设置中打开开发模式&lt;/p&gt;
&lt;h2 id="2--javascript基础知识"&gt;
 2. JavaScript基础知识
 &lt;a class="heading-link" href="#2--javascript%e5%9f%ba%e7%a1%80%e7%9f%a5%e8%af%86"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="链接到标题"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;链接到标题&lt;/span&gt;
 &lt;/a&gt;
&lt;/h2&gt;
&lt;h3 id="helloworld"&gt;
 HelloWorld
 &lt;a class="heading-link" href="#helloworld"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="链接到标题"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;链接到标题&lt;/span&gt;
 &lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;在html中&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8b949e;font-weight:bold;font-style:italic"&gt;&amp;lt;!DOCTYPE HTML&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&amp;lt;&lt;span style="color:#7ee787"&gt;html&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&amp;lt;&lt;span style="color:#7ee787"&gt;body&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;&lt;span style="color:#7ee787"&gt;p&lt;/span&gt;&amp;gt;script 标签之前...&amp;lt;/&lt;span style="color:#7ee787"&gt;p&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;&lt;span style="color:#7ee787"&gt;script&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; alert(&lt;span style="color:#a5d6ff"&gt;&amp;#39;Hello, world!&amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; console.log(&lt;span style="color:#a5d6ff"&gt;&amp;#39;Hello, world!&amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;/&lt;span style="color:#7ee787"&gt;script&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;&lt;span style="color:#7ee787"&gt;p&lt;/span&gt;&amp;gt;...script 标签之后&amp;lt;/&lt;span style="color:#7ee787"&gt;p&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&amp;lt;/&lt;span style="color:#7ee787"&gt;body&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&amp;lt;/&lt;span style="color:#7ee787"&gt;html&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;&lt;code&gt;script&lt;/code&gt;标签的属性（attribute）：&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>一文教会：内网穿透建站</title><link>https://www.starsac.cn/posts/how-to-self-host-websites-using-nat-traversal/</link><pubDate>Thu, 02 Oct 2025 18:39:15 +0800</pubDate><guid>https://www.starsac.cn/posts/how-to-self-host-websites-using-nat-traversal/</guid><description>&lt;h1 id="一文教会内网穿透建站"&gt;
 一文教会：内网穿透建站
 &lt;a class="heading-link" href="#%e4%b8%80%e6%96%87%e6%95%99%e4%bc%9a%e5%86%85%e7%bd%91%e7%a9%bf%e9%80%8f%e5%bb%ba%e7%ab%99"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="链接到标题"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;链接到标题&lt;/span&gt;
 &lt;/a&gt;
&lt;/h1&gt;
&lt;p&gt;Github Pages，CloudFlare Pages太慢？&lt;/p&gt;
&lt;p&gt;云服务器太贵？配置太差？带宽小水管？&lt;/p&gt;
&lt;p&gt;厌倦了Hexo等静态博客，想搭个高大上的动态网站？&lt;/p&gt;
&lt;p&gt;不用担心！本文教你使用sakura frp（其他类似的内网穿透服务同理）来搭建动态网站！整个过程完全免费！&lt;/p&gt;
&lt;h2 id="环境搭建"&gt;
 环境搭建
 &lt;a class="heading-link" href="#%e7%8e%af%e5%a2%83%e6%90%ad%e5%bb%ba"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="链接到标题"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;链接到标题&lt;/span&gt;
 &lt;/a&gt;
&lt;/h2&gt;
&lt;h3 id="硬件"&gt;
 硬件
 &lt;a class="heading-link" href="#%e7%a1%ac%e4%bb%b6"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="链接到标题"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;链接到标题&lt;/span&gt;
 &lt;/a&gt;
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;HP Z240 Workstation
&lt;ul&gt;
&lt;li&gt;ChipSet：C236&lt;/li&gt;
&lt;li&gt;CPU：E3-1255v6@3.30GHz 4C4T&lt;/li&gt;
&lt;li&gt;RAM：16GB DDR4 2133MHz&lt;/li&gt;
&lt;li&gt;Storage：128GB NVMe SSD + 500GB HDD * 2（RAID1） + 128GB SATA SSD&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;PS：当然，用自己的电脑+IIS也可以XD&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id="软件"&gt;
 软件
 &lt;a class="heading-link" href="#%e8%bd%af%e4%bb%b6"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="链接到标题"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;链接到标题&lt;/span&gt;
 &lt;/a&gt;
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;OS：fnOS@latest&lt;/li&gt;
&lt;li&gt;虚拟化平台：fnOS自带QEMU虚拟机&lt;/li&gt;
&lt;li&gt;VMOS：Ubuntu 25.04&lt;/li&gt;
&lt;li&gt;FRP服务：sakura-frp（免费两条隧道，10Mbps带宽，可建站，签到送流量）&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;注意：有些FRP服务是不能建站的，像我之前买的9.9r 1年的FRP服务就焊死了端口号，这种没有80/443端口的也可以开web服务，但是基本只能自己用&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="安装服务器面板"&gt;
 安装服务器面板
 &lt;a class="heading-link" href="#%e5%ae%89%e8%a3%85%e6%9c%8d%e5%8a%a1%e5%99%a8%e9%9d%a2%e6%9d%bf"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="链接到标题"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;链接到标题&lt;/span&gt;
 &lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;推荐安装&lt;a href="https://1panel.cn/" class="external-link" target="_blank" rel="noopener"&gt;1Panel - 现代化、开源的Linux服务器运维管理面板&lt;/a&gt;，&lt;!-- raw HTML omitted --&gt;无论是从UI设计还是功能上我感觉都要比一股中年老登味的宝塔面板要好&lt;!-- raw HTML omitted --&gt;&lt;/p&gt;</description></item><item><title>FastAPI - OAuth2+JWT认证</title><link>https://www.starsac.cn/posts/fastapi-oauth-jwt-authorization/</link><pubDate>Sat, 05 Apr 2025 15:24:35 +0800</pubDate><guid>https://www.starsac.cn/posts/fastapi-oauth-jwt-authorization/</guid><description>&lt;h1 id="fastapi---oauth2jwt认证"&gt;
 FastAPI - OAuth2+JWT认证
 &lt;a class="heading-link" href="#fastapi---oauth2jwt%e8%ae%a4%e8%af%81"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="链接到标题"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;链接到标题&lt;/span&gt;
 &lt;/a&gt;
&lt;/h1&gt;
&lt;p&gt;OAuth2只是一种登录验证的模式，JWT只是登陆后生成，用来简化登录操作的token，是Bearer令牌的一种实现&lt;/p&gt;
&lt;h2 id="验证token"&gt;
 验证token
 &lt;a class="heading-link" href="#%e9%aa%8c%e8%af%81token"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="链接到标题"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;链接到标题&lt;/span&gt;
 &lt;/a&gt;
&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;引入OAuth2PasswordBearer，创建该类的示例，这个实例是一个可调用对象，会自动去Header里面找token并返回，如果找不到则抛出401Unauthorize异常&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff7b72"&gt;from&lt;/span&gt; &lt;span style="color:#ff7b72"&gt;fastapi.security&lt;/span&gt; &lt;span style="color:#ff7b72"&gt;import&lt;/span&gt; OAuth2PasswordBearer
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;oauth2_scheme &lt;span style="color:#ff7b72;font-weight:bold"&gt;=&lt;/span&gt; OAuth2PasswordBearer(tokenUrl&lt;span style="color:#ff7b72;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#a5d6ff"&gt;&amp;#34;token&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start="2"&gt;
&lt;li&gt;在需要认证token的路径处理函数里面声明收到token，引入oauth2_scheme依赖项，如果有token则会执行函数体&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#d2a8ff;font-weight:bold"&gt;@app.get&lt;/span&gt;(&lt;span style="color:#a5d6ff"&gt;&amp;#34;/token-string&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff7b72"&gt;async&lt;/span&gt; &lt;span style="color:#ff7b72"&gt;def&lt;/span&gt; &lt;span style="color:#d2a8ff;font-weight:bold"&gt;get_token_string&lt;/span&gt;(token: Annotated[str, Depends(oauth2_scheme)]):
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff7b72"&gt;return&lt;/span&gt; {&lt;span style="color:#a5d6ff"&gt;&amp;#34;token&amp;#34;&lt;/span&gt;: token}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;此时只要我们请求头中有token（无论值是什么），就可以访问这个路由了&lt;/p&gt;
&lt;p&gt;&lt;img src="https://resources.starsac.cn/2025/04/image-20250405183414873.png" alt="image-20250405183414873"&gt;&lt;/p&gt;
&lt;h2 id="生成token"&gt;
 生成token
 &lt;a class="heading-link" href="#%e7%94%9f%e6%88%90token"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="链接到标题"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;链接到标题&lt;/span&gt;
 &lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;在创建oauth2_scheme时我们声明了获得token的路径，现在我们编写生成token的具体实现。&lt;/p&gt;
&lt;p&gt;OAuth2要求username和password两个必选字段必须通过表单数据的形式发送，也就是设置&lt;code&gt;Content-Type:application/x-www-form-urlencoded&lt;/code&gt;,将数据放在请求体里面&lt;/p&gt;
&lt;p&gt;以&lt;code&gt;grant_type=password&amp;amp;username=john&amp;amp;password=b&lt;/code&gt;的形式发送给后端。&lt;/p&gt;
&lt;p&gt;为了接收发送过来的参数，可以使用&lt;code&gt;OAuth2PasswordRequestForm&lt;/code&gt;，这是一个类依赖项，可以省略Depends()里面的内容&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff7b72"&gt;from&lt;/span&gt; &lt;span style="color:#ff7b72"&gt;fastapi.security&lt;/span&gt; &lt;span style="color:#ff7b72"&gt;import&lt;/span&gt; OAuth2PasswordRequestForm
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#d2a8ff;font-weight:bold"&gt;@app.post&lt;/span&gt;(&lt;span style="color:#a5d6ff"&gt;&amp;#34;/token&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff7b72"&gt;def&lt;/span&gt; &lt;span style="color:#d2a8ff;font-weight:bold"&gt;post_token&lt;/span&gt;(form_data:Annotated[OAuth2PasswordRequestForm,Depends()]):
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#8b949e;font-style:italic"&gt;# 这里可以判断用户登录是否合法，返回响应结果或者抛出异常&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; name &lt;span style="color:#ff7b72;font-weight:bold"&gt;=&lt;/span&gt; form_data&lt;span style="color:#ff7b72;font-weight:bold"&gt;.&lt;/span&gt;username
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; password &lt;span style="color:#ff7b72;font-weight:bold"&gt;=&lt;/span&gt; form_data&lt;span style="color:#ff7b72;font-weight:bold"&gt;.&lt;/span&gt;password
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; user &lt;span style="color:#ff7b72;font-weight:bold"&gt;=&lt;/span&gt; user_dict&lt;span style="color:#ff7b72;font-weight:bold"&gt;.&lt;/span&gt;get(name)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; print(user, name, password)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff7b72"&gt;if&lt;/span&gt; &lt;span style="color:#ff7b72;font-weight:bold"&gt;not&lt;/span&gt; user:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff7b72"&gt;raise&lt;/span&gt; HTTPException(status_code&lt;span style="color:#ff7b72;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#a5d6ff"&gt;400&lt;/span&gt;, detail&lt;span style="color:#ff7b72;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#a5d6ff"&gt;&amp;#34;invalidUser&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff7b72"&gt;if&lt;/span&gt; &lt;span style="color:#ff7b72;font-weight:bold"&gt;not&lt;/span&gt; password &lt;span style="color:#ff7b72;font-weight:bold"&gt;==&lt;/span&gt; user&lt;span style="color:#ff7b72;font-weight:bold"&gt;.&lt;/span&gt;get(&lt;span style="color:#a5d6ff"&gt;&amp;#34;password&amp;#34;&lt;/span&gt;):
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff7b72"&gt;raise&lt;/span&gt; HTTPException(status_code&lt;span style="color:#ff7b72;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#a5d6ff"&gt;400&lt;/span&gt;, detail&lt;span style="color:#ff7b72;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#a5d6ff"&gt;&amp;#34;invalidPasswd&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff7b72"&gt;return&lt;/span&gt; {&lt;span style="color:#a5d6ff"&gt;&amp;#34;access_token&amp;#34;&lt;/span&gt;: name, &lt;span style="color:#a5d6ff"&gt;&amp;#34;token_type&amp;#34;&lt;/span&gt;: &lt;span style="color:#a5d6ff"&gt;&amp;#34;bearer&amp;#34;&lt;/span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;该路径函数的返回值格式是固定的，是OAuth2规范的一部分。&lt;/p&gt;</description></item><item><title>SQL注入——入门小记</title><link>https://www.starsac.cn/posts/sqlinjection-note/</link><pubDate>Tue, 12 Nov 2024 18:59:20 +0800</pubDate><guid>https://www.starsac.cn/posts/sqlinjection-note/</guid><description>&lt;blockquote&gt;
&lt;p&gt;第一次Web组会&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;本次使用Windows 10 虚拟机环境&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="1-安装环境"&gt;
 1. 安装环境
 &lt;a class="heading-link" href="#1-%e5%ae%89%e8%a3%85%e7%8e%af%e5%a2%83"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="链接到标题"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;链接到标题&lt;/span&gt;
 &lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;在PHPStudy官网：https://www.xp.cn/php-study 官网下载并安装PHPStudy。&lt;/p&gt;
&lt;p&gt;安装好后打开，如下图所示，安装时已经帮我们创建好了MySQL和PHP等服务。我们只需要在首页点击一键启动WNMP（Windows，Nginx，MySQL，PHP）即可。启动服务后可以在浏览器输入&lt;code&gt;localhost&lt;/code&gt;，如果可以访问到默认页，那么说明服务搭建成功了。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://resources.starsac.cn/2024/11/image-20241110184132550.png" alt="image-20241110184132550"&gt;&lt;/p&gt;
&lt;p&gt;然后我们点击网站，在右侧的管理里面找到“打开根目录”，将practice压缩包解压之后放进去，原来文件夹里默认的文件可以移到一个文件夹里，也可以删掉。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://resources.starsac.cn/2024/11/image-20241110184741433.png" alt="image-20241110184741433"&gt;&lt;/p&gt;
&lt;p&gt;放好后应该是这样：&lt;/p&gt;
&lt;p&gt;&lt;img src="https://resources.starsac.cn/2024/11/image-20241110185121817.png" alt="image-20241110185121817"&gt;&lt;/p&gt;
&lt;p&gt;现在再访问&lt;code&gt;localhost&lt;/code&gt;你会发现页面变了，出现了一个表单，这说明PHP服务也已经成功运行。&lt;/p&gt;
&lt;h2 id="2-连接数据库"&gt;
 2. 连接数据库
 &lt;a class="heading-link" href="#2-%e8%bf%9e%e6%8e%a5%e6%95%b0%e6%8d%ae%e5%ba%93"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="链接到标题"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;链接到标题&lt;/span&gt;
 &lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;在PHPStudy中点击左侧的数据库，可以看到默认数据库的名称，账号和密码（都是root）。&lt;/p&gt;
&lt;p&gt;现在要登录数据库了，可以用命令行操作，也可以用更加简便的图形工具。&lt;/p&gt;
&lt;p&gt;在PHPStudy中搜索安装phpMyAdmin，选上刚才创建的网站，安装好后点击右侧管理，即可进入图形化的管理页面😎，在这里输入用户名和密码（都是root），即可进入管理后台。&lt;/p&gt;
&lt;p&gt;点击左侧的新建数据库，随便填写一个数据库名，编码方式默认，点击创建即可。&lt;/p&gt;
&lt;p&gt;接下来就可以导入practice里面的sql文件了，按照下步操作即可**（第一步的箭头画错了，应该选择刚刚创建的数据库，其余步骤正常操作）。**&lt;/p&gt;
&lt;p&gt;&lt;img src="https://resources.starsac.cn/2024/11/image-20241110190355277.png" alt="image-20241110190355277"&gt;&lt;/p&gt;
&lt;p&gt;导入成功后，我们就能在flag_table里面看到flag了🥰&lt;/p&gt;
&lt;p&gt;现在修改login.php和search.php文件，使php也能连接到数据库。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;修改login.php文件的第8行、search.php的第四行为：&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-php" data-lang="php"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#79c0ff"&gt;$conn&lt;/span&gt; &lt;span style="color:#ff7b72;font-weight:bold"&gt;=&lt;/span&gt; mysqli_connect(&lt;span style="color:#a5d6ff"&gt;&amp;#34;localhost&amp;#34;&lt;/span&gt;,&lt;span style="color:#a5d6ff"&gt;&amp;#34;root&amp;#34;&lt;/span&gt;,&lt;span style="color:#a5d6ff"&gt;&amp;#34;root&amp;#34;&lt;/span&gt;,&lt;span style="color:#a5d6ff"&gt;&amp;#34;test&amp;#34;&lt;/span&gt;,&lt;span style="color:#a5d6ff"&gt;3306&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8b949e;font-style:italic"&gt;// localhost为主机名，root，root，test分别是用户名，密码，数据库名，3306是MySQL默认的端口号
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;此时再次访问&lt;code&gt;localhost&lt;/code&gt;输入一个数据库里的账号密码，如果可以登录，则说明数据库连接成功。&lt;/p&gt;
&lt;h2 id="3-尝试sql注入"&gt;
 3. 尝试sql注入
 &lt;a class="heading-link" href="#3-%e5%b0%9d%e8%af%95sql%e6%b3%a8%e5%85%a5"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="链接到标题"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;链接到标题&lt;/span&gt;
 &lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;分析php源码，发现点击按钮后，index.php向login.php发送了一个ajax请求，将输入的用户名和密码原文发送给login.php，login.php接收到这两个数据后就直接利用原始数据开始进行sql查询了。&lt;/p&gt;
&lt;p&gt;我们尝试万能注入模板&lt;code&gt;1' OR 1=1 #&lt;/code&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff7b72"&gt;SELECT&lt;/span&gt;&lt;span style="color:#6e7681"&gt; &lt;/span&gt;&lt;span style="color:#ff7b72;font-weight:bold"&gt;*&lt;/span&gt;&lt;span style="color:#6e7681"&gt; &lt;/span&gt;&lt;span style="color:#ff7b72"&gt;FROM&lt;/span&gt;&lt;span style="color:#6e7681"&gt; &lt;/span&gt;&lt;span style="color:#ff7b72"&gt;user&lt;/span&gt;&lt;span style="color:#6e7681"&gt; &lt;/span&gt;&lt;span style="color:#ff7b72"&gt;WHERE&lt;/span&gt;&lt;span style="color:#6e7681"&gt; &lt;/span&gt;name&lt;span style="color:#ff7b72;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#a5d6ff"&gt;&amp;#39;$username&amp;#39;&lt;/span&gt;&lt;span style="color:#6e7681"&gt; &lt;/span&gt;&lt;span style="color:#ff7b72"&gt;AND&lt;/span&gt;&lt;span style="color:#6e7681"&gt; &lt;/span&gt;&lt;span style="color:#ff7b72;font-weight:bold"&gt;`&lt;/span&gt;password&lt;span style="color:#ff7b72;font-weight:bold"&gt;`=&lt;/span&gt;&lt;span style="color:#a5d6ff"&gt;&amp;#39;$pwd&amp;#39;&lt;/span&gt;&lt;span style="color:#6e7681"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff7b72;font-weight:bold"&gt;//&lt;/span&gt;&lt;span style="color:#f85149"&gt;变成了&lt;/span&gt;&lt;span style="color:#6e7681"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff7b72"&gt;SELECT&lt;/span&gt;&lt;span style="color:#6e7681"&gt; &lt;/span&gt;&lt;span style="color:#ff7b72;font-weight:bold"&gt;*&lt;/span&gt;&lt;span style="color:#6e7681"&gt; &lt;/span&gt;&lt;span style="color:#ff7b72"&gt;FROM&lt;/span&gt;&lt;span style="color:#6e7681"&gt; &lt;/span&gt;&lt;span style="color:#ff7b72"&gt;user&lt;/span&gt;&lt;span style="color:#6e7681"&gt; &lt;/span&gt;&lt;span style="color:#ff7b72"&gt;WHERE&lt;/span&gt;&lt;span style="color:#6e7681"&gt; &lt;/span&gt;name&lt;span style="color:#ff7b72;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#a5d6ff"&gt;&amp;#39;1&amp;#39;&lt;/span&gt;&lt;span style="color:#6e7681"&gt; &lt;/span&gt;&lt;span style="color:#ff7b72"&gt;OR&lt;/span&gt;&lt;span style="color:#6e7681"&gt; &lt;/span&gt;&lt;span style="color:#a5d6ff"&gt;1&lt;/span&gt;&lt;span style="color:#ff7b72;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#a5d6ff"&gt;1&lt;/span&gt;&lt;span style="color:#6e7681"&gt; &lt;/span&gt;&lt;span style="color:#ff7b72;font-weight:bold"&gt;#&lt;/span&gt;&lt;span style="color:#a5d6ff"&gt;&amp;#39; AND `password`=&amp;#39;&lt;/span&gt;&lt;span style="color:#f85149"&gt;$&lt;/span&gt;pwd&lt;span style="color:#a5d6ff"&gt;&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;登陆成功，进入一个页面，通过id查询数据。从1开始尝试，发现1~4有数据，现在我们知道这个表有四个记录。&lt;/p&gt;</description></item><item><title>MoeCTF 2024 解题小记（WP）</title><link>https://www.starsac.cn/posts/moectf-2024-writeup/</link><pubDate>Mon, 21 Oct 2024 22:20:35 +0800</pubDate><guid>https://www.starsac.cn/posts/moectf-2024-writeup/</guid><description>&lt;p&gt;&lt;img src="https://resources.starsac.cn/2024/10/moectf2024.webp" alt="moectf2024"&gt;&lt;/p&gt;
&lt;h3 id="0-总结的一些做题思路"&gt;
 0. 总结的一些做题思路
 &lt;a class="heading-link" href="#0-%e6%80%bb%e7%bb%93%e7%9a%84%e4%b8%80%e4%ba%9b%e5%81%9a%e9%a2%98%e6%80%9d%e8%b7%af"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="链接到标题"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;链接到标题&lt;/span&gt;
 &lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;工具：BurpSuite，WRSX（西电CTF用），AntSword，御剑扫描工具，HackBar&lt;/p&gt;
&lt;p&gt;index.phps查看php源码&lt;/p&gt;
&lt;p&gt;字符串能和0弱比较相等&lt;/p&gt;
&lt;p&gt;查看php相关信息可以用&lt;code&gt;phpinfo();&lt;/code&gt;&lt;/p&gt;
&lt;h3 id="1-0基础入门"&gt;
 1. 0基础入门
 &lt;a class="heading-link" href="#1-0%e5%9f%ba%e7%a1%80%e5%85%a5%e9%97%a8"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="链接到标题"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;链接到标题&lt;/span&gt;
 &lt;/a&gt;
&lt;/h3&gt;
&lt;h4 id="11-在此签到"&gt;
 1.1 在此签到
 &lt;a class="heading-link" href="#11-%e5%9c%a8%e6%ad%a4%e7%ad%be%e5%88%b0"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="链接到标题"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;链接到标题&lt;/span&gt;
 &lt;/a&gt;
&lt;/h4&gt;
&lt;p&gt;在QQ群绑定账号即可获得flag。&lt;/p&gt;
&lt;h3 id="2-web渗透测试与审计"&gt;
 2. Web渗透测试与审计
 &lt;a class="heading-link" href="#2-web%e6%b8%97%e9%80%8f%e6%b5%8b%e8%af%95%e4%b8%8e%e5%ae%a1%e8%ae%a1"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="链接到标题"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;链接到标题&lt;/span&gt;
 &lt;/a&gt;
&lt;/h3&gt;
&lt;h4 id="21-web渗透测试与审计入门指北"&gt;
 2.1 Web渗透测试与审计入门指北
 &lt;a class="heading-link" href="#21-web%e6%b8%97%e9%80%8f%e6%b5%8b%e8%af%95%e4%b8%8e%e5%ae%a1%e8%ae%a1%e5%85%a5%e9%97%a8%e6%8c%87%e5%8c%97"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="链接到标题"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;链接到标题&lt;/span&gt;
 &lt;/a&gt;
&lt;/h4&gt;
&lt;p&gt;在vm虚拟机中安装任意Linux发行版，安装宝塔面板部署网站，将题中附件放入网站目录，使用浏览器打开即可获得flag。&lt;/p&gt;
&lt;h4 id="22-弗拉格之地的入口"&gt;
 2.2 弗拉格之地的入口
 &lt;a class="heading-link" href="#22-%e5%bc%97%e6%8b%89%e6%a0%bc%e4%b9%8b%e5%9c%b0%e7%9a%84%e5%85%a5%e5%8f%a3"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="链接到标题"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;链接到标题&lt;/span&gt;
 &lt;/a&gt;
&lt;/h4&gt;
&lt;p&gt;根据题目信息打开爬虫协议&lt;code&gt;/robot.txt&lt;/code&gt;文件&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;# Robots.txt file for xdsec.org
# only robots can find the entrance of web-tutor
User-agent: *
Disallow: /webtutorEntry.php
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;再打开&lt;code&gt;/webtutorEntry.php&lt;/code&gt;即可看到flag。&lt;/p&gt;
&lt;h4 id="23-垫刀之路01"&gt;
 2.3 垫刀之路01
 &lt;a class="heading-link" href="#23-%e5%9e%ab%e5%88%80%e4%b9%8b%e8%b7%af01"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="链接到标题"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;链接到标题&lt;/span&gt;
 &lt;/a&gt;
&lt;/h4&gt;
&lt;p&gt;输入&lt;code&gt;ls /&lt;/code&gt;查看根目录下文件，发现&lt;code&gt;flag&lt;/code&gt;和&lt;code&gt;flag.sh&lt;/code&gt;。赶紧点开看看，使用cat命令查看后，好家伙被骗了，但是得到提示：看看环境变量。输入env命令查看环境变量即可得到flag。&lt;/p&gt;</description></item></channel></rss>