<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>bs' realm</title><link>https://baimeow.cn/</link><description>Recent content on bs' realm</description><generator>Hugo -- 0.156.0</generator><language>zh-cn</language><lastBuildDate>Thu, 19 Feb 2026 06:11:40 +0000</lastBuildDate><atom:link href="https://baimeow.cn/index.xml" rel="self" type="application/rss+xml"/><item><title>网络路由拓扑图的图形优化</title><link>https://baimeow.cn/posts/dn11/networkgraphimprovement/</link><pubDate>Thu, 19 Feb 2026 06:11:40 +0000</pubDate><guid>https://baimeow.cn/posts/dn11/networkgraphimprovement/</guid><description>&lt;p&gt;最近在改善 DN11 的网络拓扑前端展示效果，在图结构上做了不小的调整，记录一下。&lt;/p&gt;
&lt;h2 id="边中心度"&gt;边中心度&lt;/h2&gt;
&lt;p&gt;&lt;img alt="path centrality" loading="lazy" src="https://baimeow.cn/posts/dn11/networkgraphimprovement/path-centrality.png"&gt;&lt;/p&gt;
&lt;p&gt;上面展示的是我的 OSPF 网络拓扑，可以在 &lt;a href="https://status.dn11.top/#/ospf/4220084444"&gt;https://status.dn11.top/#/ospf/4220084444&lt;/a&gt; 看到实时的图像。&lt;/p&gt;
&lt;p&gt;除了你见过的所有的 OSPF 拓扑图都会展示的 cost 和 routerId 一类的基本结构，你会很容易地注意到：这里的每一个边都有宽度。这就是边中心度在图中的展示方式。&lt;/p&gt;
&lt;p&gt;边中心度这个概念简单来说就是通过某条边的最短路径的数量再做一点归一化，归一化前的边 $e$ 的中心度可以用这个公式表示:&lt;/p&gt;
&lt;p&gt;$$
c(e) = \sum_{s, t \in V} \frac{\sigma(s, t | e)}{\sigma(s, t)}
$$&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;摘自 &lt;a href="https://networkx.org/documentation/stable/_modules/networkx/algorithms/centrality/betweenness.html#edge_betweenness_centrality"&gt;networkX&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;需要注意的是不同于 networkX 的表述，本文的“边”均为有向边&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;$V$ 所有节点的集合，$\sigma(s, t)$ 是 $(s 到 t)$ 间最短路径的数量，$\sigma(s, t | e)$ 是其中经过有向边 $e$ 的最短路径的数量。&lt;/p&gt;
&lt;p&gt;具体的公式相比前面的描述而言将 ECMP 路由纳入了考虑，将权重分给了 ECMP 路由。&lt;/p&gt;
&lt;h3 id="归一化"&gt;归一化&lt;/h3&gt;
&lt;p&gt;为了在节点数量变化的情况下持续评估边中心度，我给边中心度做了一次归一化，简单来说就是除以当前节点数量 $n$ 下可以达到的边中心度的最大值。&lt;/p&gt;
&lt;p&gt;$$
c_{max}(n) = \begin{cases}
0&amp;amp; n&amp;lt;2 \
(n-1)(n-2)+1 &amp;amp;n&amp;gt;=2
\end{cases}
$$&lt;/p&gt;</description></item><item><title>DN11 毕业季 —— BGP Large Comunnity 与 DN11 选路设计</title><link>https://baimeow.cn/posts/dn11/largecommunity/</link><pubDate>Mon, 23 Jun 2025 16:39:25 +0800</pubDate><guid>https://baimeow.cn/posts/dn11/largecommunity/</guid><description>&lt;h2 id="前言"&gt;前言&lt;/h2&gt;
&lt;p&gt;又是一年毕业季，但是今年我毕业，当然也有 DN11 最大的一批的小伙伴们。这一来大家各奔东西，我完全可以想象出大伙零零散散地分布在各个城市的情景。这对 DN11 而言其实是一个重大的挑战 —— 选路不能乱选了，尤其是那些中心度较高的或者节点跨地区的自治域。具体数值可以在 &lt;a href="https://fc.baimeow.cn/fc/rank11"&gt;https://fc.baimeow.cn/fc/rank11&lt;/a&gt; 。&lt;/p&gt;
&lt;p&gt;这一次，一如既往地，我会尽力给大家带来一套实践可用选路方案，但这次涉及到的一些实际问题资料少之又少，就比如其实 dn42 不在乎选路，选路这事情只有互联网上才有充足的实践。总的来说这一次会比以往任何一次都要难一些，如果有疏漏也请谅解。&lt;/p&gt;
&lt;h2 id="前置知识"&gt;前置知识&lt;/h2&gt;
&lt;h3 id="bgp-选路优先级"&gt;BGP 选路优先级&lt;/h3&gt;
&lt;p&gt;我们以 BIRD2 为例，实际上不同路由软硬件实现略有区别，实践上还是要因地制宜一下。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Prefer route with the highest Local Preference attribute.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Local Preference 是优先级最高的一条了，需要手动在filter里设置，默认值为100，我们后续主要会通过修改 local_pref 实现选路。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Prefer route with the shortest AS path.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;最短 AS Path 老生常谈了&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Prefer IGP origin over EGP and EGP origin over incomplete.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;还请你忘了这条，DN11 一眼望过去全都是 IGP，在 BIRD2 里通过 static protocol 声明再导入到 BGP 表的 route 似乎确实全部被标记为 IGP，我还想着 incomplete 的事情，BIRD2 并不觉得他 incomplete。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Prefer the lowest value of the Multiple Exit Discriminator.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;简称 MED，看起来是自己的 AS 内一个节点 peer 了对方两个的时候可以选选，感觉用途比较狭窄&lt;/p&gt;</description></item><item><title>我所经历的，我所追寻的</title><link>https://baimeow.cn/posts/lives/howworthyme/</link><pubDate>Wed, 04 Jun 2025 22:25:00 +0800</pubDate><guid>https://baimeow.cn/posts/lives/howworthyme/</guid><description>以下内容被密码保护</description></item><item><title>从 MCP 聊 AI WEB 应用安全</title><link>https://baimeow.cn/posts/security/mcpwebsec/</link><pubDate>Sun, 20 Apr 2025 14:41:45 +0800</pubDate><guid>https://baimeow.cn/posts/security/mcpwebsec/</guid><description>&lt;blockquote&gt;
&lt;p&gt;本文内容原发于 20250413 Vidar-Team Web 安全分享会&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;近几年 AI 红得发紫，紫得发黑，这不最近又有人搞了一点基建上来，这就是我们的 MCP。&lt;/p&gt;
&lt;pre class="mermaid"&gt;sequenceDiagram
Server-&gt;&gt;Client: mcp 工具描述
Client-&gt;&gt;LLM: mcp 工具描述+用户输入
loop
LLM-&gt;&gt;Client: mcp 调用请求
Client-&gt;&gt;Server: 调用请求
Server-&gt;&gt;Client: 调用结果
Client-&gt;&gt;LLM: 调用结果
end
LLM-&gt;&gt;Client: LLM 生成最终回复
&lt;/pre&gt;
&lt;p&gt;上图展示的就是我们 MCP 的全调用链路，可以尝试思考，对于这串调用中的所有角色，可能出现什么安全问题？&lt;/p&gt;
&lt;p&gt;我们可以看到，整个流程也就两个接口，LLM 对 MCP Client，MCP Client 对 MCP Server。&lt;/p&gt;
&lt;h2 id="llm---mcp-client"&gt;LLM - MCP Client&lt;/h2&gt;
&lt;p&gt;这个接口一般通过一个 Token 完成鉴权，由 MCP Clinet 方向主动连接到 LLM。&lt;/p&gt;
&lt;p&gt;从 Web 安全的角度来看，这个问题很简单，就是最基本的无鉴权和 token 泄露等传统 Web 问题。在大模型比较早期的时候，基本都是通过 OpenAI API Token 完成这部分的鉴权问题的，那会就出现了在各种地方，主要是一些代码库，搞个正则就可以搜索到他人的 API Token 的事情，典型网络安全意识缺失。这件事被捅出来了之后呢，搞应用安全这伙人开始做针对性的主动扫描了，知道这个问题的人也多了，暂时好了一点。&lt;/p&gt;
&lt;p&gt;但随着各种大模型如雨后春笋般地冒出，外加一些蒸馏技术的出现，大模型的私有化部署逐渐成为可能，但其实一直不温不火，但到 deepseek 开源国产大模型走红之后，整个互联网给人一种是个人都要部署一个 deepseek 的感觉，各种高校企事业单位个人都在搞。这一拥而上啊就容易丢三落四，从结果上看呢，就是互联网上冒出了非常多的 llama API。&lt;/p&gt;</description></item><item><title>从 HGAME2025 运维，聊聊学校战队 CTF 独立办赛</title><link>https://baimeow.cn/posts/projects/hgame25-op/</link><pubDate>Mon, 17 Feb 2025 20:00:00 +0800</pubDate><guid>https://baimeow.cn/posts/projects/hgame25-op/</guid><description>&lt;p&gt;写这篇文章的时候，HGAME2025 马上就要结束了，还是比较有自信它能够平稳结束吧，就开始提前开香槟写总结文章了，你们看到这篇文章的时候估计已经结束了。&lt;/p&gt;
&lt;p&gt;我所在的 Vidar-Team 算是办赛非常非常勤的一支队伍了，几乎覆盖了全年。我们一届运维，一路会从小规模长时间的 HGAME-Mini 开始办赛，到中上规模，较长时间的 HGAME 正式赛，再到线下赛 HGAME Final，最后还要办一个国际范围大强度标准时长的 D^3 CTF。&lt;/p&gt;
&lt;p&gt;我先吹一句，&lt;strong&gt;高校战队中&lt;/strong&gt; No Body Has CTF Hosting Experience More Than Vidar-Team. 🙌&lt;/p&gt;
&lt;p&gt;这届 HGAME 对我来说意义不同寻常，往年主要运维工作其实都由凌武科技承担，老学长连着干了不知道多少届运维，我们就混混经验看看操作。但是今年是完全由现役 Vidar-Team 成员去做的所有支撑工作，所以很多东西包括预算，选方案，开机子这些细节是完全从头来过的，也可以说这是我们这一届头一次独立办赛。&lt;/p&gt;
&lt;p&gt;这篇文章我们主要还是谈一些运维上的方案，包括备选的技术方案，如果您是某个校队的队长或者运维，希望这些方案以及数据能够给你们提供一些小小的帮助。&lt;/p&gt;
&lt;h2 id="关于平台与集群化"&gt;关于平台与集群化&lt;/h2&gt;
&lt;p&gt;平台选择非常重要，下面的讨论是完全基于“回归终端”这一平台进行，你可以在 &lt;a href="https://ctf.xidian.edu.cn/"&gt;https://ctf.xidian.edu.cn/&lt;/a&gt; 找到部署好的平台以及找到开发者联系方式。&lt;/p&gt;
&lt;p&gt;这个平台目前并不开源，如果要办赛，要做私有化部署，需要事先获取作者rx授权，当然你可以有其他的选择，比如 GZCTF，也是一个非常现代化 CTF 平台，包括所有必须的功能。&lt;/p&gt;
&lt;p&gt;HGAME 选取回归终端一部分原因是其还承担着一些关于回归终端的规模技术验证的任务，您自然可以做出你自己的选择。&lt;/p&gt;
&lt;p&gt;但是一些旧平台可能会存在一些能力的缺失，导致无法实现下面我们提到的的一些方案。&lt;/p&gt;
&lt;p&gt;打个比方说CTFd，他的原版是没有动态靶机能力的，虽然可以通过插件实现 Docker 容器分发，但实际上靶机调度能力比较受限，比如你想做多个节点的容器调度，他就是做不了。&lt;/p&gt;
&lt;p&gt;不过我们也不是非要动态靶机不可，下面的丐版方案会提到，最低成本办赛。&lt;/p&gt;
&lt;h2 id="一些假设"&gt;一些假设&lt;/h2&gt;
&lt;p&gt;要出运维方案我们肯定得先确定一下规模和办赛方案，我们做了一些假设：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;报名参赛的人数计作 1000&lt;/li&gt;
&lt;li&gt;开赛当天有 30% 的人会蹲点开靶机，合计 300-400 靶机&lt;/li&gt;
&lt;li&gt;假设平均一个靶机需要 512MB，CPU内存配比按 1:2 给&lt;/li&gt;
&lt;li&gt;流量费用与计算资源费用 1:1&lt;/li&gt;
&lt;li&gt;峰值过后靶机数量维持在 100 左右&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;有了这些个假设，我们就可以开始做预算了&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;HGAME 赛程相当长，平台开放时间从注册两周，到比赛两周，再到复现一周，合计会有5周时间，相同规模下预算会显著高于那些只办 48h 的赛事。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;这里所有的预算仅为事先试算，数据均不可靠&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="多个方案"&gt;多个方案&lt;/h2&gt;
&lt;h3 id="最优方案-all-in-阿里云-ack"&gt;最优方案: ALL IN 阿里云 ACK&lt;/h3&gt;
&lt;p&gt;具体计算细节不提了，如果采用这个方案，预算会来到 2000-3000 这一个位置，最大的好处是他确实稳，同时也能省下很多很多的精力，往上面托管就好了。&lt;/p&gt;</description></item><item><title>fscan 幻境梦游记</title><link>https://baimeow.cn/posts/security/wtf-fscan/</link><pubDate>Wed, 08 Jan 2025 19:02:00 +0800</pubDate><guid>https://baimeow.cn/posts/security/wtf-fscan/</guid><description>&lt;p&gt;fscan 可能是国内最早最知名的内网端口扫描器之一了，最早知道这个扫描器是因为他的速度，比起 nmap 来说是真的快了不少。&lt;/p&gt;
&lt;p&gt;听说 fscan2 快要出了，想到自己还没学习过鼎鼎有名的 fscan 的源码，略感惭愧。于是心血来潮决定来对比学习一下第一代 fscan 和即将发布的 fscan2 之间。&lt;/p&gt;
&lt;h2 id="略有困意"&gt;略有困意&lt;/h2&gt;
&lt;p&gt;我们先看看经典的老版本 fscan 吧，看看多年实战历练的代码是什么样子的。&lt;/p&gt;
&lt;p&gt;这个项目结构很简洁啊，一眼望去可以看到&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Plugins&lt;/li&gt;
&lt;li&gt;WebScan&lt;/li&gt;
&lt;li&gt;common&lt;/li&gt;
&lt;li&gt;main.go&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;没了，就这 4 个，大小写略有混乱无伤大雅，一眼望过去 common 就是我们的核心了，Plugins 明显是各种协议，设计成 Plugins 单独提出来，非常阳间，WebScan 是针对于 http 的一些专用探测和 poc，太简洁了，牛逼。&lt;/p&gt;
&lt;p&gt;对的对的，那我们这就打开 common 看看吧，整体主逻辑肯定就在里面了跑不掉，非常符合我们的幻想啊，太棒了。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Parse.go&lt;/li&gt;
&lt;li&gt;ParseIP.goo&lt;/li&gt;
&lt;li&gt;ParsePort.go&lt;/li&gt;
&lt;li&gt;config.go&lt;/li&gt;
&lt;li&gt;flag.go&lt;/li&gt;
&lt;li&gt;log.go&lt;/li&gt;
&lt;li&gt;proxy.go&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;这对吗，我的 Scanner 呢？&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;（沉默片刻）&lt;/p&gt;
&lt;p&gt;或许我应该看看 main.go &amp;hellip;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-golang" data-lang="golang"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;func&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;start&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Now&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;var&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Info&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;common&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;HostInfo&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;common&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Flag&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nx"&gt;Info&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;common&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Parse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nx"&gt;Info&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Plugins&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Scan&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;Info&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;fmt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;[*] 扫描结束,耗时: %s\n&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Since&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;start&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;原来 Scanner 的主逻辑也是一个 Plugins，super 插件化，狠狠插拔，一切皆为插件，我的我的，太兴奋了没有先看该看的东西。&lt;/p&gt;</description></item><item><title>ORM 框架 SQL 注入点分析 （以Golang为例）</title><link>https://baimeow.cn/posts/security/ormsql2024/</link><pubDate>Thu, 08 Aug 2024 23:04:03 +0800</pubDate><guid>https://baimeow.cn/posts/security/ormsql2024/</guid><description>&lt;p&gt;最近研究了一些现代 ORM 框架的 SQL 注入情况，做一些笔记吧。&lt;/p&gt;
&lt;h2 id="gorm"&gt;GORM&lt;/h2&gt;
&lt;h3 id="注入点"&gt;注入点&lt;/h3&gt;
&lt;p&gt;gorm 注入点简单可以分为三种情况&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;检测转义&lt;/li&gt;
&lt;li&gt;直接转义&lt;/li&gt;
&lt;li&gt;schema 校验&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果 gorm 认为这个参数他不会是一个表达式也不会是&lt;code&gt;`aaa`.`bbb`&lt;/code&gt; 的形式，从功能上也只可能是一个单纯的列名，这个时候 gorm 会直接给你套上 &lt;code&gt;`&lt;/code&gt; 同时对内部的内容全部进行转义，这种一般是不存在注入点的，例如 Association 函数。&lt;/p&gt;
&lt;p&gt;另外部分多表关联（Associations）查询的字段会存在 schema 校验，如果对不上列名会在 sql 构建阶段报错，例如 Preload 函数，这些也是无法注入的。&lt;/p&gt;
&lt;p&gt;那剩下的部分都执行一个检测转义的策略: 先检测&lt;code&gt;`&lt;/code&gt;的存在, 如果不存在就套上，并假装存在，直到扫描另一个&lt;code&gt;`&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;这个转义设计上是为了兼容性，并不出于安全性考虑，所以是比较好注的&lt;/p&gt;
&lt;p&gt;根据注入点出现的位置分类,可以分为下面这几个&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;参数位置&lt;/th&gt;
&lt;th&gt;函数&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;Group,Order,Exec,Having,InnerJoins,Joins,Not,Or,Pluck,Raw,Select,Table,Where&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1&amp;hellip;&lt;/td&gt;
&lt;td&gt;Distinct&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;Find,First,FirstOrCreate,FirstOrInit,Last,Take&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;参数位置 为 2 的一类基本是 gorm 新增的一些语法糖 API，不过从上表也可以看出 Gorm 设计的真的不错，API 风格真的非常统一。&lt;/p&gt;
&lt;h3 id="案例"&gt;案例&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;DB&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;Order&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;id = case when version() rlike &amp;#39;8.*&amp;#39; then ? else 0 end #&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="k"&gt;First&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;DB&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;First&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;?=0 union select 1,1,version() #&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;aaaa&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;ORDER&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;BY&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;case&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;when&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;version&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rlike&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;8.*&amp;#39;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;then&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;end&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;#&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;aaaa&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;LIMIT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;aaaa&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;WHERE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;union&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;select&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="k"&gt;version&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;#&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;ORDER&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;BY&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;aaaa&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;LIMIT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="坑点-预编译参数"&gt;坑点 预编译参数&lt;/h3&gt;
&lt;p&gt;gorm 有很多方法会附加 limit 1，例如 First Last FirstOrCreate 其中 limit 1 的 “1” 是预编译的，在注入 gorm 的时候需要注意补齐预编译形参&lt;/p&gt;</description></item><item><title>CTF是怎么出题的？关于今年 D^3CTF 的 OSPF Enhanced</title><link>https://baimeow.cn/posts/ctf/ospf/</link><pubDate>Tue, 07 May 2024 14:26:08 +0800</pubDate><guid>https://baimeow.cn/posts/ctf/ospf/</guid><description>&lt;h2 id="前言"&gt;前言&lt;/h2&gt;
&lt;p&gt;今年给 D^3CTF 出了一道 Web 一道 Misc，非常可惜都TMD有非预期，出的最差的一回了。&lt;/p&gt;
&lt;p&gt;Web 那道题暂且不提，那道题在出题角度来说其实没有任何难度，只是把原项目的Docker镜像稍微重打包了一下交给平台。&lt;/p&gt;
&lt;p&gt;今给大伙讲讲我们这道 Misc 网络题，这道题前前后后打包容器和平台联调等等，非常有难度，可能耗费了我将近一周的时间。&lt;/p&gt;
&lt;h2 id="早期构思"&gt;早期构思&lt;/h2&gt;
&lt;p&gt;其实一早就定下了出一道网络相关的 Misc 题的基调，问题在于具体整点什么活上去比较有意思。&lt;/p&gt;
&lt;p&gt;早先 D^3 CTF 出过一道网络相关的 Misc 赛题，原题叫 O!!!SPF!!!!!! 那道题非常简单，只需连上 OSPF 就可以拿到 flag 了，没有什么难度。&lt;/p&gt;
&lt;p&gt;Soha 每年都会出一些网络相关的新年红包，他的题目也是遵循 CTF 的形式的，所以也在我的参考范围之内。&lt;/p&gt;
&lt;p&gt;翻阅了很多，决定题目主体就出一个路由劫持，具体劫持的手法来源于一次真实路由劫持，不过那次环境比较复杂没通，但是我觉得这个思路还可以再利用，就只能出成题这样分享一下。&lt;/p&gt;
&lt;p&gt;此外，Potat0 还给我提供了一个 rDNS 的小 trick，作为套娃的一部分，这个 trick 也成为了题目的一部分。为了防止选手写了一坨脚本打完卡在这个 trick 上，因此还设计将这个 trick 前置了一下。&lt;/p&gt;
&lt;h2 id="开始出题吧"&gt;开始出题吧&lt;/h2&gt;
&lt;p&gt;出一道这样的网络题和传统 CTF 题目不一样，他需要去模拟一个网络环境，首先在本地测试的时候，最容易想到的就是 docker compose，可以添加几个 network，然后将他们绑定到容器上构建一些内网出来。&lt;/p&gt;
&lt;p&gt;&lt;img alt="network" loading="lazy" src="https://baimeow.cn/posts/ctf/ospf/network.png"&gt;&lt;/p&gt;
&lt;p&gt;我们大概需要一个这样子的内网环境，简单来说就是三个设备其中一个是路由器，负责两个内网的路由，openvpn 从这里接入并且桥接到 &lt;code&gt;100.64.11.0/24&lt;/code&gt; 上。&lt;/p&gt;
&lt;p&gt;好吧那就开工吧，把这个网络拓扑写进 docker compose&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;以下 docker compose 并非最终版本，有意留下了一些错误，后文会纠正&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yml" data-lang="yml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;version&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;3&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;ospf-enhanced&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;services&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;router&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;router&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;build&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;./router&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;privileged&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ports&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="m"&gt;1194&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="m"&gt;1194&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;networks&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;nw0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ipv4_address&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;100.64.11.1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;nw1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ipv4_address&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;100.64.12.1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;client&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;build&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;./client&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;client&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;privileged&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;environment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;authkey=Jy3aPmrX465PURdZ&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;gamekey=r5UCJsfs4LDeDFqz&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;cap_add&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;NET_ADMIN&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;networks&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;nw1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ipv4_address&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;100.64.12.2&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;target&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;build&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;./target&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;target&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;privileged&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;environment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;authkey=Jy3aPmrX465PURdZ&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;gamekey=r5UCJsfs4LDeDFqz&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;flag=d3ctf{1_10ve_n4tvv0rk1n9_4nd_R0uting!!!}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;networks&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;nw0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ipv4_address&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;100.64.11.2&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;networks&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;nw0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ipam&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;config&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;subnet&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;100.64.11.0&lt;/span&gt;&lt;span class="l"&gt;/24&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;gateway&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;100.64.11.254&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;nw1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ipam&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;config&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;subnet&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;100.64.12.0&lt;/span&gt;&lt;span class="l"&gt;/24&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;gateway&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;100.64.12.254&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;由于容器里要跑 openvpn，要跑 bird 所以需要一点特权，所以早期全部开成特权容器了,这里给他们模拟设计了三个设备两个子网，其中一个设备是路由器，做两个子网之间的路由。&lt;/p&gt;</description></item><item><title>一种借助PCDN实现隐秘通信的方法</title><link>https://baimeow.cn/posts/security/pcdniphiding/</link><pubDate>Mon, 29 Apr 2024 14:39:06 +0800</pubDate><guid>https://baimeow.cn/posts/security/pcdniphiding/</guid><description>&lt;blockquote&gt;
&lt;p&gt;本文仅供安全研究学习使用&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="前言"&gt;前言&lt;/h2&gt;
&lt;p&gt;早先找实习的时候了解了一下玄武实验室，再读了一遍玄武那篇域前置的文章，这里贴一下链接&lt;/p&gt;
&lt;p&gt;&lt;a href="https://xlab.tencent.com/cn/2021/05/14/domain-borrowing"&gt;https://xlab.tencent.com/cn/2021/05/14/domain-borrowing&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;这是篇老老老文章了，这篇文章里提出了利用公共 CDN 服务来做 C2 通信的隐藏的一种手法&lt;/p&gt;
&lt;p&gt;在防火墙来看，高可信域名+高可信 IP，唯一瑕疵就 DNS 对不上。即使是专门部署 TLS 解密设备来针对这一类的，一看 Host 对的上，也大概率放行。所以走这种 TLS 的 c2 流量是非常难去识别的，因为他伪装得实在是太好了。&lt;/p&gt;
&lt;p&gt;但是想要用这个手法做隐蔽通信有个前提，就是需要在 CDN 厂商那边创建这个高可信域名的资源。&lt;/p&gt;
&lt;p&gt;大多数的 CDN 供应商，他们的 CDN 往往都会有一个所有权校验，只有你证明你拥有这个域名，你才能创建这个域名的一个 CDN 资源。&lt;/p&gt;
&lt;p&gt;在做 DNS 校验的 CDN 厂商创建 CDN 资源比较困难，DNS 污染是运营商层面的东西了。&lt;/p&gt;
&lt;p&gt;不过在规模比较大的提供 CDN 服务的云厂商中，AWS 的验证方式是少数不同于其他的，他需要的是一个域名下的TLS证书用作所有权校验，因此利用这个手法做隐蔽通信的一个最低门槛，就是必须要有一个来自高可信域名的证书。&lt;/p&gt;
&lt;p&gt;原文提到这点时，建议利用漏洞获取证书，但是这并不容易，越是高可信的域名，他背后的公司组织可能其实做的防御越强，所以域前置就有了这样的一个硬门槛。&lt;/p&gt;
&lt;p&gt;那么，有没有办法以较低的代价得到一个来自高可信域名的证书呢？&lt;/p&gt;
&lt;h2 id="pcdn-与证书"&gt;PCDN 与证书&lt;/h2&gt;
&lt;p&gt;PCDN 中文又称点对点内容分发网络，你可能没实际玩过，但是肯定也听说过运营商封杀 PCDN 的事情。&lt;/p&gt;
&lt;p&gt;PCDN 的出现是因为正常的 CDN 和商业宽带的价格比较高昂，尤其国内这种宽带金贵的地方，所以就出现了利用用户闲置的上传带宽做内容分发的应用，他被称之为 PCDN，对企业而言 PCDN 最最显著的特点就是廉价。&lt;/p&gt;
&lt;p&gt;既然上面提到，PCDN 是用户在扮演CDN做内容的上传，那么当他跑 HTTPS 流量的时候，他是怎么实现 TLS 加密的呢？&lt;/p&gt;
&lt;p&gt;没有什么花活，他就是单纯地把相应的 TLS 证书交给了用户，然后做了一些加密，不让用户能够简单获取到证书。&lt;/p&gt;
&lt;p&gt;那么既然证书都给我们了，而且在我们本地做到解密，我们肯定是可以解密出证书的原始内容的&lt;/p&gt;
&lt;p&gt;无论有些是有现成的脚本，有些可能需要你做一点点逆向，总归是有办法拿到原证书的，这里就不具体阐述证书是怎么拿到的了。&lt;/p&gt;
&lt;p&gt;&lt;img alt="cert" loading="lazy" src="https://baimeow.cn/posts/security/pcdniphiding/cert.png"&gt;&lt;/p&gt;</description></item><item><title>GOSTv3 扩展开发 —— SM4 加密隧道</title><link>https://baimeow.cn/posts/projects/sm4tunnel/</link><pubDate>Fri, 15 Mar 2024 10:57:50 +0800</pubDate><guid>https://baimeow.cn/posts/projects/sm4tunnel/</guid><description>&lt;h2 id="gost-是什么"&gt;Gost 是什么&lt;/h2&gt;
&lt;p&gt;Gost 是 Golang 语言编写的网络隧道工具。得益于纯 Go 开发以及 Go 在网络开发以及交叉编译方面的强势，Gost 能够在几乎任何地方近乎零依赖地运行，因此 Gost 最早作为一个方便好用的 socks5 server 启动器在内网渗透等领域开始出名。&lt;/p&gt;
&lt;p&gt;Gost 即将正式推出他的 v3 版本，这个版本改变之大，几乎相当于是一个独立的应用。不得不承认，Gost 的作者对于网络和隧道是有一些他的想法的。给大家解读一下在我看来的 Gostv3 设计的核心思想。&lt;/p&gt;
&lt;h2 id="gostv3-核心思想"&gt;Gostv3 核心思想&lt;/h2&gt;
&lt;p&gt;在介绍 Gost 的配置之前，我们需要先理解一个概念 “&lt;strong&gt;传输层与应用层分离&lt;/strong&gt;”&lt;/p&gt;
&lt;p&gt;假设一个socks5隧道，如果我们暂时只考虑tcp代理的情况，那么这个事情其实很简单。先在客户端和服务器之间建立一个tcp连接，随后就按照socks5协议所描述的，协商版本号和认证方式，进行认证，发送代理地址，相应结果，建立隧道，这事情就好了。&lt;/p&gt;
&lt;p&gt;隧道应用只是一个应用层的例子，我们可以把上述所做的所有事情分成两部分&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;建立可靠连接 （传输层）&lt;/li&gt;
&lt;li&gt;处理应用层消息 （应用层）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;对于大多数基于应用层网络协议，我们可以把他们所做的都抽象为这两件事情。&lt;/p&gt;
&lt;p&gt;在常见的网络协议里，传输层与应用层往往是绑定的，但这是没有必要的，我们完全可以为一个应用层协议配置另一个传输层协议，唯一的要求（如果原来是tcp）就是建立可靠流式传输。&lt;/p&gt;
&lt;p&gt;这种做法并非是没有先例的，互联网的发展过程中 web 服务逐渐使用 https 替代 http，这就是将 http 协议的应用层部分抽象出来并将其传输层协议替换为 tls 带来的一个结果。&lt;/p&gt;
&lt;p&gt;大可放开想象，除了替换成 tls，为什么不能替换成更多的能够实现可靠传输的&lt;strong&gt;传输层&lt;/strong&gt;协议呢？比如说&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;kcp&lt;/li&gt;
&lt;li&gt;websocket&lt;/li&gt;
&lt;li&gt;ssh&lt;/li&gt;
&lt;li&gt;quic&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这些协议可能乍一看怎么可能是一个传输层协议，但是他们确实能够提供可靠传输，相对于我们的应用层而言，他就是传输层。&lt;/p&gt;
&lt;p&gt;一个网络协议，他并非属于一个固定的层，这其实也是学术界和工业界的区别，学术界可以理想地对网络协议进行划层，但是工业界只在乎能不能用好不好用。就像很多路由协议，你可能很难给他没有争议地划分到一个层去。&lt;/p&gt;
&lt;p&gt;这就是我认为的 Gostv3 最核心的设计，他&lt;strong&gt;拆分了隧道协议的网络层和应用层，使他们能够自由组合&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Gostv3有四种最基本的概念（listener，handler，dialer，connector）&lt;/p&gt;
&lt;pre class="mermaid"&gt;block-beta
columns 5
arr1&lt;[" "]&gt;(right) listener1["listener"] space connector2["connector"] arr2&lt;[" "]&gt;(right)
space arr3&lt;[" "]&gt;(down) space arr4&lt;[" "]&gt;(up) space
space handler1["handler"] space dialer2["dialer"] space
space arr5&lt;[" "]&gt;(down) space arr6&lt;[" "]&gt;(up) space
space dialer1["dialer"] space handler2["handler"] space
space arr7&lt;[" "]&gt;(down) space arr8&lt;[" "]&gt;(up) space
space connector1["connector"] arr9&lt;["net"]&gt;(right) listener2["listener"] space
space client("client") space server("server") space
&lt;/pre&gt;
&lt;p&gt;其中listner和handler分别是Gost监听服务使用的传输层和应用层，而dialer和connector分别是Gost转发时所使用的传输层和应用层&lt;/p&gt;</description></item><item><title>About Me</title><link>https://baimeow.cn/about/</link><pubDate>Mon, 11 Mar 2024 20:55:10 +0800</pubDate><guid>https://baimeow.cn/about/</guid><description>&lt;p&gt;可以简称bs&lt;/p&gt;
&lt;p&gt;目前杭电本科在读&lt;/p&gt;
&lt;p&gt;Golang 开发，Web安全，网络运维，前端开发&lt;/p&gt;
&lt;h3 id="我是谁"&gt;我是谁？&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;杭助后端部 干事&lt;/li&gt;
&lt;li&gt;vidar web手，网管&lt;/li&gt;
&lt;li&gt;DN11 成员&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="正在维护的项目"&gt;正在维护的项目&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/hduLib"&gt;hduLib&lt;/a&gt; hdu 爬虫库&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/hdu-dn11/wg-quick-op"&gt;wg-quick-op&lt;/a&gt; 适用于 openwrt 的 wg-quick&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/BaiMeow/NetworkMonitor"&gt;NetworkMonitor&lt;/a&gt; BGP 网络状态监控&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/BaiMeow/SocketMap"&gt;SocketMap&lt;/a&gt; 基于 iptables 的端口转发&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="魔改的项目"&gt;魔改的项目&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/BaiMeow/NekoCAS"&gt;NekoCAS&lt;/a&gt; 实现 LDAP Auth&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/BaiMeow/gost"&gt;gost&lt;/a&gt; 添加点对点隧道, sm4, zuc&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/BaiMeow/wireguard-mix"&gt;wireguard-mix&lt;/a&gt; 消除特征&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/BaiMeow/go-mrt"&gt;go-mrt&lt;/a&gt; 实现 rfc8050&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>在实验网络中使用 step-ca 签发 SSL 证书</title><link>https://baimeow.cn/posts/dn11/acme/</link><pubDate>Sun, 08 Oct 2023 15:21:21 +0800</pubDate><guid>https://baimeow.cn/posts/dn11/acme/</guid><description>&lt;blockquote&gt;
&lt;p&gt;DN11 是受 DN42 启发而搭建的一个实验性网络，目前用于杭电范围内，对网络感兴趣的同学学习使用，DN11和DN42非常相似，他们之间的经验都有广泛借鉴意义。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;在真实的互联网中，我们常常会通过校验 SSL 证书的方式创建加密 socket 来访问互联网上的资源，这能够有效阻止他人看到通信的内容。而在 DN11 中，由于每个人都相当于是 ISP，流量可能途径每一个人，随时可能被人抓取，因此使用 SSL 证书这件事就更为重要了。&lt;/p&gt;
&lt;p&gt;本文将在使用 PDNS 搭建好实验性网络 DNS 的基础上使用 step-ca 搭建 ACME Server 并使用 acme.sh 签发证书。&lt;/p&gt;
&lt;h2 id="0-实验环境介绍"&gt;0. 实验环境介绍&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;DNS服务器自建已经完成了，通过 anycast IP&lt;code&gt;172.16.255.53&lt;/code&gt;可以解析顶级域名&lt;code&gt;dn11&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;acme.dn11&lt;/code&gt;域名已经解析到&lt;code&gt;172.16.255.2&lt;/code&gt;，并且实验机已经宣告了这个 IP。&lt;/li&gt;
&lt;li&gt;已经获取到根证书，中间证书，中间证书的签名密钥，而根证书密钥安全起见由他人代管。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;GOGOGO！&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id="1-初始化-step-ca"&gt;1. 初始化 step-ca&lt;/h2&gt;
&lt;p&gt;step-ca 提供了很多种安装方式，裸机，docker，k8s等等。由于计划部署 step-ca 的机器上并没有集群环境，裸机又不方便 remake，通过 docker 镜像安装便成为了最佳选择。&lt;/p&gt;
&lt;p&gt;&lt;a href="https://hub.docker.com/r/smallstep/step-ca"&gt;https://hub.docker.com/r/smallstep/step-ca&lt;/a&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;docker pull smallstep/step-ca
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;docker run -it --rm -v step:/home/step smallstep/step-ca step ca init --remote-management
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;上面的命令会拉取 step-ca 的镜像，使用&lt;code&gt;step ca init --remote-management&lt;/code&gt;替换原有的启动命令启动容器同时创建一个名为 step 的卷挂载到 &lt;code&gt;/home/step&lt;/code&gt;，还使用了&lt;code&gt;-it&lt;/code&gt;参数进入交互式。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;✔ What would you like to name your new PKI? &lt;span class="o"&gt;(&lt;/span&gt;e.g. Smallstep&lt;span class="o"&gt;)&lt;/span&gt;: DN11
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;✔ What DNS names or IP addresses would you like to add to your new CA? &lt;span class="o"&gt;(&lt;/span&gt;e.g. ca.smallstep.com&lt;span class="o"&gt;[&lt;/span&gt;,1.1.1.1,etc.&lt;span class="o"&gt;])&lt;/span&gt;: acme.dn11
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;✔ What address will your new CA listen at? &lt;span class="o"&gt;(&lt;/span&gt;e.g. :443&lt;span class="o"&gt;)&lt;/span&gt;: :443
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;✔ What would you like to name the first provisioner &lt;span class="k"&gt;for&lt;/span&gt; your new CA? &lt;span class="o"&gt;(&lt;/span&gt;e.g. you@smallstep.com&lt;span class="o"&gt;)&lt;/span&gt;: &amp;lt;你的账户名&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;✔ What &lt;span class="k"&gt;do&lt;/span&gt; you want your password to be? &lt;span class="o"&gt;[&lt;/span&gt;leave empty and we&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;ll generate one&lt;span class="o"&gt;]&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;在交互式终端中，我们根据他的指引完成配置，其中：&lt;/p&gt;</description></item><item><title>IBGP FullMesh 实现多节点自治域</title><link>https://baimeow.cn/posts/dn11/configureibgp/</link><pubDate>Sat, 23 Sep 2023 16:35:14 +0800</pubDate><guid>https://baimeow.cn/posts/dn11/configureibgp/</guid><description>&lt;p&gt;最近不少群友有把自己的其他服务器也接入自己的 AS 的需求，那这篇教程也是时候该出了。&lt;/p&gt;
&lt;h2 id="总览"&gt;总览&lt;/h2&gt;
&lt;p&gt;这个事情比较复杂，我们先不急着开始配，先了解一下我们需要一个什么效果。&lt;/p&gt;
&lt;p&gt;DN11 作为一个发展了有一段时间的实验性网络，我们目前有很大一批人，他们手上都已经有了一个节点，并且在这个节点上配置了 BGP 从而联通到其他节点。那这个情景下，他们的自治域就是由那一个节点组成的单节点自治域。我们现在需要添加一个新的节点到这个自治域，我们需要解决两个问题。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;这两个节点之间需要组网&lt;/li&gt;
&lt;li&gt;需要把某一个节点获取到的 BGP 路由与其他节点做一个同步&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;这两件事情我们分别将通过 OSPF 和 IBGP 实现。OSPF 是 DN11 的老东西，从使用者的角度看，就一个通过获取全局拓扑计算最短路的路由协议。IBGP 是 BGP 的一种，BGP 协议分为两种 EBGP 和 IBGP, 他们分别用于将 BGP 路由发给其他 AS 和将 BGP 路由同步到自己 AS 的其他节点。&lt;/p&gt;
&lt;p&gt;IBGP 需要配置 fullmesh，这是由他的设计决定的，IBGP 只会把自己收到的 EBGP 路由转发给自己的邻居，对于自己收到的 IBGP 路由他并不会做一个转发，这主要是为了防止产生环。这其实无所谓，节点多了我们可以用 rr 反射器甚至多级 rr，还可以玩联邦，这个日后再说。下面将以双节点为例，配置一个多节点的 AS。&lt;/p&gt;
&lt;h2 id="入口文件"&gt;入口文件&lt;/h2&gt;
&lt;p&gt;由于这次的配置文件比较长，我们会把他切分到各个文件中，所以先介绍一下入口文件&lt;code&gt;bird.conf&lt;/code&gt;的配置&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-nginx" data-lang="nginx"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;log&lt;/span&gt; &lt;span class="s"&gt;syslog&lt;/span&gt; &lt;span class="s"&gt;all&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;debug&lt;/span&gt; &lt;span class="s"&gt;protocols&lt;/span&gt; &lt;span class="s"&gt;all&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;router&lt;/span&gt; &lt;span class="s"&gt;id&lt;/span&gt; &lt;span class="n"&gt;172.16.4.6&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;protocol&lt;/span&gt; &lt;span class="s"&gt;device&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;protocol&lt;/span&gt; &lt;span class="s"&gt;kernel&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;ipv4&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="s"&gt;none&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;export&lt;/span&gt; &lt;span class="s"&gt;all&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;ipv4&lt;/span&gt; &lt;span class="s"&gt;table&lt;/span&gt; &lt;span class="s"&gt;OSPF_table&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;ipv4&lt;/span&gt; &lt;span class="s"&gt;table&lt;/span&gt; &lt;span class="s"&gt;BGP_table&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;include&lt;/span&gt; &lt;span class="n"&gt;&amp;#34;/etc/bird/ospf.conf&amp;#34;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;include&lt;/span&gt; &lt;span class="n"&gt;&amp;#34;/etc/bird/bgp.conf&amp;#34;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;include&lt;/span&gt; &lt;span class="n"&gt;&amp;#34;/etc/bird/ibgp.conf&amp;#34;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;protocol&lt;/span&gt; &lt;span class="s"&gt;pipe&lt;/span&gt; &lt;span class="s"&gt;pipe_ospf_table&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;table&lt;/span&gt; &lt;span class="s"&gt;master4&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;peer&lt;/span&gt; &lt;span class="s"&gt;table&lt;/span&gt; &lt;span class="s"&gt;OSPF_table&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="s"&gt;filter&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;krt_prefsrc=172.16.4.6&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;accept&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;export&lt;/span&gt; &lt;span class="s"&gt;none&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;protocol&lt;/span&gt; &lt;span class="s"&gt;pipe&lt;/span&gt; &lt;span class="s"&gt;pipe_bgp_table&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;table&lt;/span&gt; &lt;span class="s"&gt;master4&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;peer&lt;/span&gt; &lt;span class="s"&gt;table&lt;/span&gt; &lt;span class="s"&gt;BGP_table&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="s"&gt;filter&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;if&lt;/span&gt; &lt;span class="s"&gt;source&lt;/span&gt; &lt;span class="s"&gt;!=&lt;/span&gt; &lt;span class="s"&gt;RTS_BGP&lt;/span&gt; &lt;span class="s"&gt;then&lt;/span&gt; &lt;span class="s"&gt;reject&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;krt_prefsrc=172.16.4.6&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;accept&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;export&lt;/span&gt; &lt;span class="s"&gt;none&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;我们很容易会发现，入口文件这里使用了三个&lt;code&gt;include&lt;/code&gt;关键字，我们在这个入口文件里分别引用了三个文件，后续我们的 OSPF IBGP 和 EBGP 的实际逻辑都会在里面去实现。&lt;/p&gt;</description></item><item><title>校园网打洞纪实，绕个普普通通的防火墙</title><link>https://baimeow.cn/posts/dn11/travelihdu/</link><pubDate>Sat, 16 Sep 2023 18:19:55 +0800</pubDate><guid>https://baimeow.cn/posts/dn11/travelihdu/</guid><description>&lt;h2 id="wireguard-在-i-hdu-之死"&gt;WireGuard 在 i-HDU 之死&lt;/h2&gt;
&lt;h3 id="突然集体下线了"&gt;突然集体下线了&lt;/h3&gt;
&lt;p&gt;前几天接到悲报，说是 Vidar-Team 300b 节点从 DN11 下线了&lt;/p&gt;
&lt;p&gt;校园网需要走web认证登陆，所以起初我以为是校园网的登陆脚本炸了，找个人把自己账号登上去救一下急就好了&lt;/p&gt;
&lt;p&gt;后来派煎包去看看，他回来告诉我，Vidar 的 WiFi 有网，网很好校园网也登着&lt;/p&gt;
&lt;p&gt;这就很让人迷惑了，按理说有网的情况下，万万不该这么多隧道一起炸了&lt;/p&gt;
&lt;p&gt;由于是暑假，Vidar 没有网管在学校里，连不进去无能为力，这件事就这么搁置了好几天&lt;/p&gt;
&lt;h3 id="sstp-你怎么活着"&gt;SSTP 你怎么活着？&lt;/h3&gt;
&lt;p&gt;自爆炸后，一转眼就过了好几天，因为前两天刚刚冲了一手新版本 RouterOS，搞得我以为这个是 RouterOS 的 bug&lt;/p&gt;
&lt;p&gt;直到&amp;hellip; Liki 发现他的 sstp 依旧稳如老狗，我赶紧找了台 frp 穿透出来的机器测了一下校园网的 WireGuard 情况&lt;/p&gt;
&lt;p&gt;这个案子破了，WireGuard 被校园网拦截了。&lt;/p&gt;
&lt;h3 id="缝缝补补"&gt;缝缝补补&lt;/h3&gt;
&lt;p&gt;原来只是封杀了一个协议而已，不算什么大事情，得赶紧去修网了&lt;/p&gt;
&lt;p&gt;于是在校园网里扫了一下 ip，把路由器的 WAN IP 先扫出来，然后借着上面提到的这台 frp 穿透出来的校园网机器作为跳板，起了新的 frp 内网穿透&lt;/p&gt;
&lt;p&gt;现在总算能连上路由器了，果然 WireGuard 全部掉线了，SSTP 还健在。&lt;/p&gt;
&lt;p&gt;赶紧找了 potat0 把他最爱的 WireGuard in VLess 先部署了上去，临时恢复了网络。&lt;/p&gt;
&lt;h2 id="转生成为-wireguard-mix"&gt;转生成为 WireGuard-mix&lt;/h2&gt;
&lt;p&gt;WireGuard 是寄了，但是我确实很喜欢 WireGuard，不然我也不会 ALL IN&lt;/p&gt;
&lt;p&gt;救一下 WireGuard 吧，还是很简单的啦&lt;/p&gt;
&lt;h3 id="gogogo"&gt;gogogo&lt;/h3&gt;
&lt;p&gt;WireGuard 有一个用户态版本，叫做 WireGuard-go，是 go 实现的&lt;/p&gt;</description></item><item><title>BGP 组网，DN11 与 VidarNetwork 的并网试验</title><link>https://baimeow.cn/posts/dn11/configurebgp/</link><pubDate>Thu, 01 Jun 2023 17:41:40 +0800</pubDate><guid>https://baimeow.cn/posts/dn11/configurebgp/</guid><description>&lt;blockquote&gt;
&lt;p&gt;DN11 是受 DN42 启发而搭建的一个实验性网络，目前用于杭电范围内，对网络感兴趣的同学学习使用，DN11和DN42非常相似，他们之间的经验都有广泛借鉴意义。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;DN11配网第二期，接上文 &amp;ldquo;使用 Bird2 配置 WireGuard + OSPF 实现网络的高可用&amp;rdquo;，这是一篇用于 DN11 的 BGP 配置教程&lt;/p&gt;
&lt;p&gt;随着 DN11 的扩大，使用 OSPF 进行集中管理已经变得麻烦起来了，此外还能看到一堆隧道IP污染路由表&lt;/p&gt;
&lt;p&gt;也有不少人手上有多个内网，不得不打破 DN11 原先一个人使用一个/24网段的约定&lt;/p&gt;
&lt;p&gt;近期又在考虑和 VidarNetwork 并网的事情，最终合并完的网络会变得相当庞大，或许是时候转移到BGP上去了&lt;/p&gt;
&lt;h2 id="准备"&gt;准备&lt;/h2&gt;
&lt;h3 id="选择一个as-number"&gt;选择一个AS Number&lt;/h3&gt;
&lt;p&gt;BGP 是用于连接不同 AS 的路由协议，现在定义每一个人选取自己的AS号管理自己的AS。对于已经有AS号的，可以使用已有的AS号，没有AS号的建议选择 421111xxxx 并登记进文档。&lt;/p&gt;
&lt;h3 id="选择自己的网段"&gt;选择自己的网段&lt;/h3&gt;
&lt;p&gt;首先，不要一次性宣告大于/24的网段，/24已经很够你折腾，如果你有多个路由设备并且确实有多个真实子网，那么你可以宣告两个或者三个/24的网段。&lt;/p&gt;
&lt;p&gt;也不要为了省网段资源而采用/25这种做法，没有必要，只会给你带来更多的麻烦。&lt;/p&gt;
&lt;p&gt;如果你是新加入DN11的成员，虽然DN11改为BGP的同时我们放开了网段的限制，但是真别用常见网段&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;172.16.x.0/24 (这是DN11之前使用的网段，.17 .18这些段docker会用，不要宣告)&lt;/li&gt;
&lt;li&gt;10.x.x.0/24 (注意避开移动的内网段，不要使用太高或者太低的地址)&lt;/li&gt;
&lt;li&gt;11.x.x.0/24 (美国国防部的公网段其中之一，他们一般当内网段用)&lt;/li&gt;
&lt;li&gt;100.64.x.0/24 (比较少见的保留段)&lt;/li&gt;
&lt;li&gt;192.168.x.0 (真的很容易冲突，不要用)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;此外你还需要避开HDU已经使用了的内网段，具体有哪些段可以在飞书知识库上查找&lt;/p&gt;
&lt;h2 id="隧道"&gt;隧道&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;本小节写给 Openwrt 用户，ros 用户应该都会，linux 用户参考 wg-quick 使用教程。但无论你是什么用户，请务必看完本章节的内容，铺设隧道这件事有一些实践上的做法可供参考。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id="安装wg-quick-op"&gt;安装wg-quick-op&lt;/h3&gt;
&lt;p&gt;我给 openwrt 专门写了一个用来配置 wireguard 的工具，他会帮你处理开机启动，ddns 的问题的同时你可以使用 wg-quick 配置文件的所有配置。主要是基于 wg-quick-go 修改，定制了一些实用功能。&lt;/p&gt;</description></item><item><title>d3go write up</title><link>https://baimeow.cn/posts/ctf/d3go/</link><pubDate>Thu, 04 May 2023 10:08:57 +0800</pubDate><guid>https://baimeow.cn/posts/ctf/d3go/</guid><description>&lt;h2 id="目录穿越读取源代码"&gt;目录穿越读取源代码&lt;/h2&gt;
&lt;h5 id="directory-traversal-to-dump-source-code"&gt;directory traversal to dump source code&lt;/h5&gt;
&lt;p&gt;go embed * 的错误使用，导致源代码被打包进程序。&lt;/p&gt;
&lt;p&gt;The incorrect use of go embed * results in the source code being packed into the program.&lt;/p&gt;
&lt;p&gt;再结合错误的静态文件托管，导致&lt;code&gt;/../&lt;/code&gt;路径可以列目录获取源代码&lt;/p&gt;
&lt;p&gt;This, combined with incorrect static file serving, results in &lt;code&gt;/../&lt;/code&gt; listing directory to get the source code.&lt;/p&gt;
&lt;h2 id="gorm-软删除注入"&gt;Gorm 软删除注入&lt;/h2&gt;
&lt;p&gt;代码审计，发现&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;管理员账户是数据库中的第一个用户，而这个用户目前无法登陆&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;对于&lt;code&gt;/register&lt;/code&gt;接口，&lt;code&gt;controller&lt;/code&gt;使用了&lt;code&gt;c.ShouldBindJSON()&lt;/code&gt;, &lt;code&gt;db&lt;/code&gt;层对其返的值直接进行一个&lt;code&gt;db.Save()&lt;/code&gt;到数据库的操作，可以注入&lt;code&gt;gorm.Model&lt;/code&gt;相关字段&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;因此可以构造注入&lt;code&gt;deletedat&lt;/code&gt;字段，使得原来的&lt;code&gt;admin&lt;/code&gt;被软删除&lt;/p&gt;
&lt;p&gt;A code audit was performed and found that&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;the administrator account is the first user in the database, and this user is currently unable to log in&lt;/li&gt;
&lt;li&gt;For the &lt;code&gt;/register&lt;/code&gt; api, the &lt;code&gt;controller&lt;/code&gt; uses &lt;code&gt;c.ShouldBindJSON()&lt;/code&gt;, and the &lt;code&gt;db&lt;/code&gt; layer writes the variables bound to it directly to the database with &lt;code&gt;db.Save()&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;So you can construct the following payload to inject the &lt;code&gt;deletedat&lt;/code&gt; field, so that the original &lt;code&gt;admin&lt;/code&gt; is soft-deleted.&lt;/p&gt;</description></item><item><title>深夜碎碎念，无缘相识，更无缘相恋</title><link>https://baimeow.cn/posts/lives/emo/</link><pubDate>Sun, 26 Mar 2023 00:56:37 +0800</pubDate><guid>https://baimeow.cn/posts/lives/emo/</guid><description>以下内容被密码保护</description></item><item><title>使用 Bird2 配置 WireGuard + OSPF 实现网络的高可用</title><link>https://baimeow.cn/posts/dn11/configureospf/</link><pubDate>Sun, 05 Mar 2023 23:05:30 +0800</pubDate><guid>https://baimeow.cn/posts/dn11/configureospf/</guid><description>&lt;blockquote&gt;
&lt;p&gt;DN11 是受 DN42 启发而搭建的一个实验性网络，目前用于杭电范围内，对网络感兴趣的同学学习使用，DN11和DN42非常相似，他们之间的经验都有广泛借鉴意义。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="背景"&gt;背景&lt;/h2&gt;
&lt;p&gt;建 dn11 的时候遇到了一些小问题，在 fullmesh 的网络拓扑的情况下偶尔会出现几个节点连不上的情况，连不上了就直接连不上了，没有后话了。&lt;/p&gt;
&lt;p&gt;实际上是可以通过绕路的方式联通的，这就要引入一些路由协议了，最早的构想是引入 BGP 协议的但是考虑了一下觉得这些东西的体量还是太大了，最后决定引入 ospf 协议，并且采取单一 area 的方式。&lt;/p&gt;
&lt;p&gt;本文章将使用 bird2 配置 ospf over WireGuard，目的是给 dn11 成员提供一个 &lt;strong&gt;嘴对嘴的&lt;/strong&gt; ospf over WireGuard 配置教程。对于其他人可以忽略 dn11 规范部分来参考本教程进行配置。&lt;/p&gt;
&lt;h2 id="ospf-配置"&gt;OSPF 配置&lt;/h2&gt;
&lt;p&gt;先配置OSPF&lt;/p&gt;
&lt;p&gt;这里我们选择 bird2 提供 ospf 支持，先配置 bird2&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;opkg install bird2
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;opkg install bird2c
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;在 openwrt 上，bird2 的配置文件默认地址在&lt;code&gt;/etc/bird.conf&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;bird2 的默认配置文件很长，算是一个 all config 先给他放到一边去&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mv /etc/bird.conf /etc/bird.conf.bak
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;然后我们新建一个自己的 bird.conf&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;vim /etc/bird.conf
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;给各位准备了配置文件模板，粘贴进去再改改就好了&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-conf" data-lang="conf"&gt;log syslog all;
debug protocols all;
router id 172.16.255.4;
protocol device{
}
protocol kernel{
ipv4 {
export where proto = &amp;#34;wg&amp;#34;;
};
}
protocol ospf v2 wg {
ipv4 {
export all;
import where net !~ 172.16.4.0/24;
};
area 0.0.0.0 {
interface &amp;#34;wg*&amp;#34; {
cost 5;
};
};
area 0.0.0.4 {
interface &amp;#34;br-lan&amp;#34;;
};
}
&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;每个路由设备的&lt;code&gt;route id&lt;/code&gt;都是唯一的，&lt;code&gt;route id&lt;/code&gt;本质上是一个 int32, 只是为了方便识别被&lt;code&gt;.&lt;/code&gt;分割成了四段，需要提前约定。为了方便记忆和配置，这里随便取了一个网段将这个网段下的 ip 对应的 int 作为&lt;code&gt;route id&lt;/code&gt;，dn11 对于&lt;code&gt;route id&lt;/code&gt;有规范，起始 id 为 172.16.255.1，请按顺序往下申请&lt;/li&gt;
&lt;li&gt;&lt;code&gt;import where net !~ 172.16.4.0/24;&lt;/code&gt;这一行指定的网段的路由不会从 ospf 中学习，一般需要把这里配置成你的lan的网段，因为lan的路由早已由系统定义，不需要也不能由ospf来指定&lt;/li&gt;
&lt;li&gt;&lt;code&gt;export all;&lt;/code&gt;这一行指定了由 ospf 导出给其他路由学习的网段，如果你由 ospf 管理的接口中有不愿意导出的网段可以修改这里，这里导出全部&lt;/li&gt;
&lt;li&gt;后面紧跟着两个 area，每个 area 也有自己的 id，这两个 id 和 route id 一样仅仅是一个 int32 并不代表任何网络含义，仅仅是个名字，&lt;code&gt;0.0.0.0&lt;/code&gt;是骨干 area ，在这里必须统一使用&lt;code&gt;area 0.0.0.0&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;在下一行我们用&lt;code&gt;interface &amp;quot;wg*&amp;quot;&lt;/code&gt;指定了一些接口, 这里的&lt;code&gt;*&lt;/code&gt;是通配符，这种写法指定了所有名字以 wg 开头的接口在这个area内，后续建立 wg 接口的时候要遵循这里的配置，如果你想使用其他名称也可以修改这里的配置&lt;/li&gt;
&lt;li&gt;在下一行，指定了一个&lt;code&gt;cost&lt;/code&gt;，事实上即使不配置&lt;code&gt;cost&lt;/code&gt;ospf 也会自动地指定一个cost，cost默认的值为 $\frac{100Mbps}{连接速度}$&lt;/li&gt;
&lt;li&gt;&lt;code&gt;area 0.0.0.4&lt;/code&gt;用于你的 lan，这里其实是可以省略的，只要你将你得 lan 接口加入&lt;code&gt;area 0.0.0.0&lt;/code&gt;就行了，但是 dn11 目前定义每个人的 lan 都单独占用一个 area， 因此，需要一个唯一的 area 用于 lan, 请在文档中申请&lt;/li&gt;
&lt;li&gt;下一行的 interface 里指定了 lan 接口，对于 openwrt 旁路由，这里一般就是 br-lan，主路由一般就是 lan&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;编辑完配置文件后，就可以启动bird2了&lt;/p&gt;</description></item><item><title>XXE FINAL</title><link>https://baimeow.cn/posts/ctf/xxefinal/</link><pubDate>Wed, 01 Feb 2023 14:53:00 +0800</pubDate><guid>https://baimeow.cn/posts/ctf/xxefinal/</guid><description>&lt;h2 id="preparation"&gt;Preparation&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;XXE:XML External Entity Injection, XML外部实体注入&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;&amp;lt;?xml version=&amp;#34;1.0&amp;#34;? encoding=&amp;#34;utf-8&amp;#34;?&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;&amp;lt;!DOCTYPE note SYSTEM &amp;#34;note.dtd&amp;#34;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;note&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;to&amp;gt;&lt;/span&gt;George&lt;span class="nt"&gt;&amp;lt;/to&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;from&amp;gt;&lt;/span&gt;John&lt;span class="nt"&gt;&amp;lt;/from&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;heading&amp;gt;&lt;/span&gt;Reminder&lt;span class="nt"&gt;&amp;lt;/heading&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;Don&amp;#39;t forget the meeting!&lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;/note&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="encoding"&gt;encoding&lt;/h3&gt;
&lt;p&gt;xml可以采取不同编码，定义在encoding中，对于绕过一些bypass有帮助&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;对于java应用可以使用utf-32be绕过&lt;code&gt;!DOCTYPE&lt;/code&gt;过滤&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;其实这一行不写很多也认得出来是什么编码&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id="dtddocument-type-definition-文档类型定义"&gt;DTD(Document Type Definition, 文档类型定义)&lt;/h3&gt;
&lt;p&gt;包含在&lt;code&gt;&amp;lt;!DOCTYPE ... &amp;gt;&lt;/code&gt;中&lt;/p&gt;
&lt;h4 id="一般实体与元素"&gt;一般实体与元素&lt;/h4&gt;
&lt;p&gt;元素&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;!ELEMENT 元素名称 类别&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;!ELEMENT 元素名称 (元素内容)&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;元素用于声明xml元素，了解即可，可以引用实体&lt;/p&gt;
&lt;p&gt;实体&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;!ENTITY 实体名称 &amp;quot;实体的值&amp;quot;&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;!ENTITY 实体名称 SYSTEM &amp;quot;URI/URL&amp;quot;&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;实体可以被引用&lt;code&gt;&amp;amp;实体名称;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;!! 实体不是什么抽象的概念&lt;/strong&gt;，比如内建实体&lt;code&gt;&amp;amp;lt;&lt;/code&gt;是&lt;code&gt;&amp;lt;&lt;/code&gt;,做过前端开发应该都见过，只是现在这里允许自定义实体&lt;/p&gt;
&lt;h4 id="参数实体"&gt;参数实体&lt;/h4&gt;
&lt;p&gt;上文介绍的是一般实体，现在对比介绍参数实体&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;&amp;lt;!DOCTYPE note [
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt; &amp;lt;!ENTITY % abc &amp;#34;233&amp;#34;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="cp"&gt;&amp;lt;!ENTITY bcs &amp;#34;344&amp;#34;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;]&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;user&amp;gt;&lt;/span&gt;&lt;span class="err"&gt;&amp;amp;&lt;/span&gt;bcs&lt;span class="nt"&gt;&amp;lt;/user&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;上面的定义中，出现了两种实体，分别是一般实体和参数实体，参数实体的定义和一般实体比一般实体的定义多了一个百分号&lt;code&gt;%&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;参数实体一般作为声名实体的参数存在，仅仅在DTD区使用&lt;/p&gt;</description></item><item><title>分享一首歌</title><link>https://baimeow.cn/posts/lives/share1song/</link><pubDate>Sun, 01 Jan 2023 20:17:24 +0800</pubDate><guid>https://baimeow.cn/posts/lives/share1song/</guid><description>&lt;h2 id="童话"&gt;童话&lt;/h2&gt;
&lt;div style="position:relative; padding-bottom:75%; width:100%; height:0"&gt;
&lt;iframe src="//player.bilibili.com/player.html?bvid=BV1tE411c74Q&amp;page=1" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true" style="position:absolute; height: 100%; width: 100%;"&gt;
&lt;/iframe&gt;
&lt;/div&gt;</description></item><item><title>SUID特殊权限提权</title><link>https://baimeow.cn/posts/ctf/linuxsuid/</link><pubDate>Sat, 08 Oct 2022 19:30:16 +0800</pubDate><guid>https://baimeow.cn/posts/ctf/linuxsuid/</guid><description>&lt;h2 id="suid特殊权限提权"&gt;SUID特殊权限提权&lt;/h2&gt;
&lt;h3 id="suid是什么"&gt;SUID是什么&lt;/h3&gt;
&lt;p&gt;SUID是一种特殊权限，当拥有该权限的程序运行时，进程的属主不是进程的发起者而是程序的所有者。&lt;/p&gt;
&lt;h3 id="suid可以用来做什么"&gt;SUID可以用来做什么&lt;/h3&gt;
&lt;p&gt;SUID是维持权限的一种手段，攻击者在临时获得权限后，可以将vim，cp等命令设置为SUID特殊权限，例如可以修改/root/.ssh/authorized_keys进行无密码登录，此外还有很多其他方式留后门。&lt;/p&gt;
&lt;h3 id="添加suid权限"&gt;添加SUID权限&lt;/h3&gt;
&lt;h4 id="example"&gt;example&lt;/h4&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;chmod u+s /usr/bin/vim
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;chmod g+s /usr/bin/vim
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="寻找suid权限文件"&gt;寻找SUID权限文件&lt;/h3&gt;
&lt;p&gt;受害者错误配置的文件权限时，可以利用这些被错误配置的文件完成攻击&lt;/p&gt;
&lt;h4 id="查找suidsgid文件"&gt;查找SUID、SGID文件&lt;/h4&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#Find SUID&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;find / -type f -perm -u&lt;span class="o"&gt;=&lt;/span&gt;s 2&amp;gt;/dev/null
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#Find GUID&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;find / -type f -perm -g&lt;span class="o"&gt;=&lt;/span&gt;s 2&amp;gt;/dev/null
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;blockquote&gt;
&lt;p&gt;reference:
&lt;a href="http://cn-sec.com/archives/501443.html"&gt;http://cn-sec.com/archives/501443.html&lt;/a&gt;
&lt;a href="https://gtfobins.github.io"&gt;https://gtfobins.github.io&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;</description></item><item><title>php://filter</title><link>https://baimeow.cn/posts/ctf/phpfilter/</link><pubDate>Fri, 30 Sep 2022 23:01:36 +0800</pubDate><guid>https://baimeow.cn/posts/ctf/phpfilter/</guid><description>&lt;p&gt;php输入输出流过滤器&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;references:&lt;a href="https://www.php.net/manual/zh/wrappers.php.php"&gt;https://www.php.net/manual/zh/wrappers.php.php&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;</description></item><item><title>sql注入点</title><link>https://baimeow.cn/posts/ctf/sql2/</link><pubDate>Fri, 30 Sep 2022 19:59:30 +0800</pubDate><guid>https://baimeow.cn/posts/ctf/sql2/</guid><description>&lt;h2 id="union"&gt;UNION&lt;/h2&gt;
&lt;p&gt;先想办法结束上个语句，再用UNION拼接下一个语句&lt;/p&gt;
&lt;h2 id="堆叠注入"&gt;堆叠注入&lt;/h2&gt;
&lt;p&gt;同上，但用;拼接&lt;/p&gt;
&lt;h2 id="where"&gt;WHERE&lt;/h2&gt;
&lt;p&gt;使其SELECT所有数据&lt;/p&gt;
&lt;p&gt;注入：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;admin&amp;rsquo; &amp;ndash;&lt;/li&gt;
&lt;li&gt;admin&amp;rsquo; #&lt;/li&gt;
&lt;li&gt;admin&amp;rsquo;/*&lt;/li&gt;
&lt;li&gt;&amp;rsquo; or 1=1&amp;ndash;&lt;/li&gt;
&lt;li&gt;&amp;rsquo; or 1=1#&lt;/li&gt;
&lt;li&gt;&amp;rsquo; or 1=1/*&lt;/li&gt;
&lt;li&gt;&amp;lsquo;) or &amp;lsquo;1&amp;rsquo;=&amp;lsquo;1&amp;ndash;&lt;/li&gt;
&lt;li&gt;&amp;lsquo;) or (&amp;lsquo;1&amp;rsquo;=&amp;lsquo;1&amp;ndash;&lt;/li&gt;
&lt;li&gt;以不同的用户登陆 &amp;rsquo; UNION SELECT 1, &amp;lsquo;anotheruser&amp;rsquo;, &amp;lsquo;doesnt matter&amp;rsquo;, 1&amp;ndash;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="报错注入"&gt;报错注入&lt;/h2&gt;</description></item><item><title>命令执行漏洞</title><link>https://baimeow.cn/posts/ctf/shell1/</link><pubDate>Thu, 22 Sep 2022 21:28:00 +0800</pubDate><guid>https://baimeow.cn/posts/ctf/shell1/</guid><description>&lt;h4 id="空格绕过"&gt;空格绕过&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;${IFS}&lt;/li&gt;
&lt;li&gt;$IFS$9 $9指传过来的第9个参数&lt;/li&gt;
&lt;li&gt;%09(需要PHP环境)&lt;/li&gt;
&lt;li&gt;&amp;lt;或者&amp;lt;&amp;gt;重定向&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id="关键字绕过"&gt;关键字绕过&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;变量拼接
&lt;code&gt;a=c;b=at;c=fl;d=ag;$a$b $c$d&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;单引号，双引号绕过
&lt;code&gt;ca''t flag&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;编码绕过&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;printf&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;\154\163&amp;#34;&lt;/span&gt;&lt;span class="k"&gt;)&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt;&amp;gt;ls
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;printf&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;\x63\x61\x74\x20\x2f\x66\x6c\x61\x67&amp;#34;&lt;/span&gt;&lt;span class="k"&gt;)&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt;&amp;gt;cat /flag
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;{&lt;/span&gt;printf,&lt;span class="s2"&gt;&amp;#34;\x63\x61\x74\x20\x2f\x66\x6c\x61\x67&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="se"&gt;\$&lt;/span&gt;&lt;span class="nv"&gt;0&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt;&amp;gt;cat /flag
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;读文件绕过(当cat被过滤)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;more:一页一页的显示档案内容&lt;/li&gt;
&lt;li&gt;less:与 more 类似，但是比 more 更好的是，他可以[pg dn][pg up]翻页&lt;/li&gt;
&lt;li&gt;head:查看头几行(参数&lt;code&gt;-c 10&lt;/code&gt;指定前10个字节)&lt;/li&gt;
&lt;li&gt;tac:从最后一行开始显示，可以看出 tac 是 cat 的反向显示&lt;/li&gt;
&lt;li&gt;tail:查看尾几行(参数&lt;code&gt;-c 10&lt;/code&gt;指定后10个字节)&lt;/li&gt;
&lt;li&gt;nl：显示的时候，顺便输出行号&lt;/li&gt;
&lt;li&gt;od:以二进制的方式读取档案内容&lt;/li&gt;
&lt;li&gt;vi/vim:一种编辑器，这个也可以查看&lt;/li&gt;
&lt;li&gt;sort:可以查看&lt;/li&gt;
&lt;li&gt;uniq:可以查看&lt;/li&gt;
&lt;li&gt;file -f:报错出具体内容&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;反斜线
&lt;code&gt;c\at&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;$1、$2等和$@
&lt;code&gt;c$1at&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;from:&lt;a href="https://blog.51cto.com/m0re/3879244"&gt;https://blog.51cto.com/m0re/3879244&lt;/a&gt;&lt;/p&gt;</description></item><item><title>php审计1</title><link>https://baimeow.cn/posts/ctf/php1/</link><pubDate>Thu, 22 Sep 2022 20:24:37 +0800</pubDate><guid>https://baimeow.cn/posts/ctf/php1/</guid><description>&lt;h4 id="include"&gt;include&lt;/h4&gt;
&lt;p&gt;include一个php流，base64编码源码&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-php" data-lang="php"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;php&lt;/span&gt;&lt;span class="o"&gt;://&lt;/span&gt;&lt;span class="nx"&gt;filter&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;read&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nx"&gt;convert&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;base64&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;encode&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;resource&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nx"&gt;index&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>sql注入简记</title><link>https://baimeow.cn/posts/ctf/sql1/</link><pubDate>Wed, 21 Sep 2022 20:18:26 +0800</pubDate><guid>https://baimeow.cn/posts/ctf/sql1/</guid><description>&lt;h2 id="信息的获取"&gt;信息的获取&lt;/h2&gt;
&lt;h3 id="select"&gt;SELECT&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;version() 数据库版本&lt;/li&gt;
&lt;li&gt;user() 数据库用户名&lt;/li&gt;
&lt;li&gt;database 数据库名&lt;/li&gt;
&lt;li&gt;@@datadir 数据库路径&lt;/li&gt;
&lt;li&gt;@@version_compile_os 操作系统版本&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="其他"&gt;其他&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;show columns from table_name;&lt;/code&gt;列信息&lt;/li&gt;
&lt;li&gt;&lt;code&gt;show databases;&lt;/code&gt;所有数据库名&lt;/li&gt;
&lt;li&gt;&lt;code&gt;show tables;&lt;/code&gt;所有表名&lt;/li&gt;
&lt;li&gt;注入 &lt;code&gt;1' order by 2 # &lt;/code&gt; 检查记录数量&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="字符串拼接"&gt;字符串拼接&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;concat(str1,str2,…) 能够将你查询的字段连接在一起&lt;/li&gt;
&lt;li&gt;concat_ws(separator,str1,str2,) 能够自定义分隔符来将你查询的字段链接在一起&lt;/li&gt;
&lt;li&gt;group_concat([DISTINCT] column [Order BY ASC/DESC column] [Separator separator])&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="example"&gt;Example&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;concat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;table_name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39; &amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="k"&gt;column_name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;information_schema&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;COLUMNS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;WHERE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;TABLE_SCHEMA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;DATABASE&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;group_concat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;table_name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;column_name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;separator&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;_&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;information_schema&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;COLUMNS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;WHERE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;TABLE_SCHEMA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;DATABASE&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="关键字被过滤"&gt;关键字被过滤&lt;/h2&gt;
&lt;p&gt;简单的有:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;大小写混用(seLect,whEre&amp;hellip;)&lt;/li&gt;
&lt;li&gt;SEL&amp;lt;&amp;gt;ECT(php)&lt;/li&gt;
&lt;li&gt;空格 -&amp;gt; ()&lt;/li&gt;
&lt;li&gt;= -&amp;gt; like&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;但是极其容易被堵,其他方法有以下&lt;/p&gt;</description></item><item><title>人机恋作品漫谈</title><link>https://baimeow.cn/posts/reviews/humanmachinelove/</link><pubDate>Mon, 12 Jul 2021 21:05:15 +0800</pubDate><guid>https://baimeow.cn/posts/reviews/humanmachinelove/</guid><description>&lt;h2 id="前言"&gt;前言&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;十个人机九个刀，还有一个刀死人&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;人机恋题材具有著名的超高死亡率，虽然常常以悲剧或者是完全说不上是好结局的GoodEnd收尾，让人，特别是新人完全顶不住，但是其质量也往往高于一般的作品&lt;/p&gt;
&lt;p&gt;因此就算往往会致郁，大多也值得去一玩&lt;/p&gt;
&lt;h2 id="关于我见过的人机恋作品"&gt;关于我见过的人机恋作品&lt;/h2&gt;
&lt;p&gt;按照我了解的时间顺序举例&lt;/p&gt;
&lt;h3 id="游戏人生zero"&gt;游戏人生Zero&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;Games Have Begun&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;是游戏人生的电影，大概是小说第四卷，讲的是一对很强但是从未赢过的夫妻的故事。&lt;/p&gt;
&lt;p&gt;很值得看看&lt;a href="https://www.bilibili.com/bangumi/play/ss28381"&gt;https://www.bilibili.com/bangumi/play/ss28381&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;女主人公休比机凯种，为了破解人类所谓的“心”来观察人类，过程中渐渐具有人类情感并与人类男子里克相恋&lt;/p&gt;
&lt;p&gt;&lt;del&gt;满溢而出的ERROR&lt;/del&gt;&lt;/p&gt;
&lt;p&gt;最终因独自出门布置装置被击杀，但“心”在最后备份到了云端，里克在机凯种的帮助下结束了战争，但死于握持星杯时的反噬&lt;/p&gt;
&lt;p&gt;这部作品和其他人机恋讲的故事不太一样，他没有专注于渲染离别的悲伤，也没讲人机恋会出现的问题，更多的是通过宏大的叙事表达一种浪漫&lt;/p&gt;
&lt;p&gt;一种二人拯救世界的浪漫&lt;/p&gt;
&lt;h3 id="可塑性记忆"&gt;可塑性记忆&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;愿你有一天能和你重要的人再度相逢&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;这款游戏其实我没玩过，因为他在PSV上，有点年头了也很难玩到，但是其动画化后的动画还是很容易看到的。&lt;/p&gt;
&lt;p&gt;这是我第一次被刀到哭的作品，没看过的可以&lt;a href="https://www.bilibili.com/bangumi/play/ep28924"&gt;https://www.bilibili.com/bangumi/play/ep28924&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;我是在被剧透后观看的，不过即使我有了一定抵抗力，告别的场景也很难让人不流泪&lt;/p&gt;
&lt;p&gt;非常经典的人机恋题材作品，从相遇到日常再到相恋到最后几经波折后的离别&lt;/p&gt;
&lt;p&gt;艾拉从事的就是giftia（本作中的机器被称为giftia）回收工作，所以她最后也由男主角来回收&lt;/p&gt;
&lt;p&gt;越是刻画日常生活中艾拉的可爱与两人的糖最后就越是让人难受&lt;/p&gt;
&lt;h3 id="星之梦"&gt;星之梦&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;若是天国有两扇门，我可不跟你走啊&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;星之梦严格意义上可能不能算人机恋&lt;/p&gt;
&lt;p&gt;故事发生在人类都市废墟，星野梦美是现已废弃的天文馆中的讲解机器人，男主来废墟捡垃圾在天文馆中找到了她&lt;/p&gt;
&lt;p&gt;男主被梦美所打动，本来是要带她离开废墟，继续传播仰望星空的那种希望&lt;/p&gt;
&lt;p&gt;最后为男主挡伤害与没电两个原因停止工作，本作最后反复多方向渲染离别，即使我现在剧透给你听，你再去看也很催泪&lt;/p&gt;
&lt;p&gt;推荐观看&lt;a href="https://www.bilibili.com/bangumi/play/ep90842"&gt;https://www.bilibili.com/bangumi/play/ep90842&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;另外，其实星野梦美的记忆芯片（128EB）有保留，但男主在死前，在找到其他机器人后并没有进行替换&lt;/p&gt;
&lt;h3 id="露西-她所期望的一切"&gt;露西 她所期望的一切&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;还有我所期望的一切&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;这部作品我到最后都没明白Lucy想要什么，推测应该是某种记忆的永恒。&lt;/p&gt;
&lt;p&gt;但是这个男主父亲是真的过分，明明看着Lucy会哭会笑，还下得去手。&lt;/p&gt;
&lt;p&gt;这便是人性的阴暗面吧，能体会到这种阴暗，很难讲出来到底是为什么&lt;/p&gt;
&lt;p&gt;不过本作结局还是给了一个比较好的结局，经过男主的努力15年后Lucy回来了&lt;/p&gt;
&lt;h3 id="atri-my-dear-moments-"&gt;ATRI-My Dear Moments-&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;我是高性能的嘛！&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;2020年的新游戏，说是年轻人的第一款galgame。我本来是冲着atri来的，做足了心理准备，但还是刀的我有点始料未及。&lt;/p&gt;
&lt;p&gt;没玩过的就别看下面了，快去steam上买吧，不亏的&lt;/p&gt;
&lt;p&gt;话说宣传PV都是动画，这部作品动画化怕是指日可待啊！&lt;/p&gt;
&lt;p&gt;本作总体是从认识到相恋到告别的老故事，与上述作品不同的是其讨论了仿生人是否具有心&lt;/p&gt;
&lt;p&gt;关于机器人时候有心的讨论让这部作品显得更为深刻，atri是明确有心的，但是没有被任何人包括自己发现&lt;/p&gt;
&lt;p&gt;因为atri确实是机器人，atri只是做着她认为机器人该做的事情从而埋藏了自己的心&lt;/p&gt;
&lt;p&gt;被命令不能模拟人类情感后的，无感情的那一刻让人看了简直心碎了&lt;/p&gt;
&lt;p&gt;所以我认为作品中所谓的拯救atri就是让她发现自己的心，并遵循内心的想法来生活&lt;/p&gt;
&lt;p&gt;atri和男主是互相拯救的关系的，atri走后男主回研究院去拯救世界了&lt;/p&gt;
&lt;h2 id="共同点"&gt;共同点&lt;/h2&gt;
&lt;p&gt;见识过那么多优秀的人机恋类型的作品，其实他们都遵循这几个点&lt;/p&gt;
&lt;h3 id="特有的发言风格"&gt;特有的发言风格&lt;/h3&gt;
&lt;p&gt;机器人特有的发言风格，在说话中会从自己的特殊身份出发，这与人类的日常说话方式截然不同&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;艾拉在假装没听见时会回复“ERROR 听不见”&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;atri会反复强调“我可是高性能的啊”&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;休比前期会有发言前缀&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;称呼男主为主人或者客人&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="特有的蠢萌性格"&gt;特有的蠢萌性格&lt;/h3&gt;
&lt;p&gt;在人们的一般印象中，机器人是不会出什么差错的，机器人做出了什么奇怪的事情是很难想象的。&lt;/p&gt;
&lt;p&gt;而大多数作品的机器人都会出错，这可以解释为程序的问题，亦或是与人类之间的理解偏差&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;休比前期有很多有关调教的迷惑发言，如身体只能给里克看之类的&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;atri会把主人丢到海里去，前期不会做家务不会做饭&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;艾拉会自己撞到墙&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;星野梦美送男主零件花束&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;极强的岗位意识&lt;/p&gt;</description></item><item><title>Markdown简易使用指南</title><link>https://baimeow.cn/posts/learning/markdown/</link><pubDate>Thu, 01 Jul 2021 22:02:44 +0800</pubDate><guid>https://baimeow.cn/posts/learning/markdown/</guid><description>&lt;h2 id="1标题"&gt;1.标题&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gh"&gt;# 标题
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gu"&gt;## 标题
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gu"&gt;### 标题
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gu"&gt;#### 标题
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gu"&gt;##### 标题
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gu"&gt;###### 标题
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;标题
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;=
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;标题
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;-
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h1 id="标题"&gt;标题&lt;/h1&gt;
&lt;h2 id="标题-1"&gt;标题&lt;/h2&gt;
&lt;h3 id="标题-2"&gt;标题&lt;/h3&gt;
&lt;h4 id="标题-3"&gt;标题&lt;/h4&gt;
&lt;h5 id="标题-4"&gt;标题&lt;/h5&gt;
&lt;h6 id="标题-5"&gt;标题&lt;/h6&gt;
&lt;h1 id="标题-6"&gt;标题&lt;/h1&gt;
&lt;h2 id="标题-7"&gt;标题&lt;/h2&gt;
&lt;h2 id="2字体"&gt;2.字体&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;正常
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="ge"&gt;*斜体*&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gs"&gt;**加粗**&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="ge"&gt;**&lt;/span&gt;*斜体加粗***
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gd"&gt;~~删除~~&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;正常&lt;/p&gt;
&lt;p&gt;&lt;em&gt;斜体&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;加粗&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;斜体加粗&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;del&gt;删除&lt;/del&gt;&lt;/p&gt;
&lt;h2 id="3分割线"&gt;3.分割线&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;---&lt;/code&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="4图片"&gt;4.图片&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;![&lt;span class="nt"&gt;markdowm&lt;/span&gt;](&lt;span class="na"&gt;/me/BaiMeow.jpg&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;![图片名称](图片链接)&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="markdowm" loading="lazy" src="https://baimeow.cn/me/BaiMeow.jpg"&gt;&lt;/p&gt;
&lt;h2 id="5链接"&gt;5.链接&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[&lt;span class="nt"&gt;BaiMeowの博客&lt;/span&gt;](&lt;span class="na"&gt;https://baimeow.cn&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;lt;https://baimeow.cn&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="https://baimeow.cn"&gt;BaiMeowの博客&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://baimeow.cn"&gt;https://baimeow.cn&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="6引用"&gt;6.引用&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;gt;引用
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;gt;&amp;gt;引用
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;增加&lt;code&gt;&amp;gt;&lt;/code&gt;的数量可以不断嵌套&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;引用&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;引用&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/blockquote&gt;
&lt;h2 id="7列表"&gt;7.列表&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;无序列表
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; golang
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;-&lt;/span&gt; 高性能
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;-&lt;/span&gt; NB
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;-&lt;/span&gt; VERY NB
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;-&lt;/span&gt; VERY VERY NB
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;-&lt;/span&gt; 高并发
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; python
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; C
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;有序列表
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;1.&lt;/span&gt; java
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;2.&lt;/span&gt; kotlin
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;3.&lt;/span&gt; JavaScript
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;无序列表可以不断向下延伸&lt;/p&gt;</description></item><item><title>开平方估算</title><link>https://baimeow.cn/posts/learning/sqrt/</link><pubDate>Fri, 29 Jan 2021 19:50:27 +0800</pubDate><guid>https://baimeow.cn/posts/learning/sqrt/</guid><description>&lt;h3 id="前言"&gt;前言&lt;/h3&gt;
&lt;p&gt;这是一个对有效数字较少的数字进行开平方运算的方法&lt;/p&gt;
&lt;p&gt;某节物理课，和黄同学研究后得出&lt;/p&gt;
&lt;p&gt;他提出方法我改进，提升精度&lt;/p&gt;
&lt;p&gt;我感觉肯定已经有先人提出了这个估算法，但是这个方法毕竟是自己研究出来的也值得记录&lt;/p&gt;
&lt;h3 id="方法"&gt;方法&lt;/h3&gt;
&lt;p&gt;对数字$x$，首先进行要找到两个连续正整数$a_1a_2$使$a_1^2 \le x \le a_2^2$&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;由于一般学生背诵的平方数到$20^2$为止因此只能估算$[1,400]$范围的数字&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4 id="当x接近于a_12时"&gt;①当x接近于$a_1^2$时&lt;/h4&gt;
&lt;p&gt;$$\sqrt{x}=a_1+\frac{x-a_1^2}{2a_1}$$&lt;/p&gt;
&lt;h4 id="当x接近于a_22时"&gt;②当x接近于$a_2^2$时&lt;/h4&gt;
&lt;p&gt;$$\sqrt{x}=a_2-\frac{a_2^2-x}{2a_2}$$&lt;/p&gt;
&lt;p&gt;其实两个式子是一个式子，为了便于计算略作调整使得所有中间结果均为正数&lt;/p&gt;
&lt;h3 id="误差"&gt;误差&lt;/h3&gt;
&lt;p&gt;误差检验代码&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;package&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;main&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;fmt&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;math&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;func&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;var&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;sqrtNum&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;exactNum&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;float64&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;var&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;deviation&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;40000&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="kt"&gt;float64&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;var&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;deviationTotal&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;float64&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;400&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0.01&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;findCloseSquare&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;sqrtNum&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;exactNum&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Sqrt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;deviation&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;int64&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Abs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;sqrtNum&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;exactNum&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;var&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;tmp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int64&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;tmp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;tmp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;40000&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;tmp&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;//fmt.Println(float64(tmp)/100, &amp;#34;:&amp;#34;, deviation[tmp])&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;deviationTotal&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;deviation&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;tmp&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;fmt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;deviationTotal&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;39900&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;func&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;findCloseSquare&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;float64&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;float64&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;var&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;float64&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-powershell" data-lang="powershell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;PS &lt;/span&gt;&lt;span class="n"&gt;D:&lt;/span&gt;&lt;span class="p"&gt;\&lt;/span&gt;&lt;span class="n"&gt;src&lt;/span&gt;&lt;span class="p"&gt;\&lt;/span&gt;&lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="p"&gt;\&lt;/span&gt;&lt;span class="n"&gt;sqrttest&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;go&lt;/span&gt; &lt;span class="n"&gt;run&lt;/span&gt; &lt;span class="p"&gt;.\&lt;/span&gt;&lt;span class="n"&gt;sqrt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;go&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="mf"&gt;0.004457902846500094&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;取4.00到399.99其间39600个数字时平均误差0.004457902846500094&lt;/p&gt;</description></item><item><title>Friends</title><link>https://baimeow.cn/friends/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://baimeow.cn/friends/</guid><description>&lt;p&gt;
&lt;a target="_blank" href=https://juskinbo.cn/ title=juskinbo class="friendurl"&gt;
&lt;div class="frienddiv"&gt;
&lt;div class="frienddivleft"&gt;
&lt;img class="myfriend" src=https://juskinbo.cn/favicon.ico /&gt;
&lt;/div&gt;
&lt;div class="frienddivright"&gt;
juskinbo&lt;br /&gt;Juskinbo&amp;#39;s Blog
&lt;/div&gt;
&lt;/div&gt;&lt;/a&gt;
&lt;a target="_blank" href=https://ek1ng.com title=ek1ng class="friendurl"&gt;
&lt;div class="frienddiv"&gt;
&lt;div class="frienddivleft"&gt;
&lt;img class="myfriend" src=https://ek1ng.com/img/avatar.jpg /&gt;
&lt;/div&gt;
&lt;div class="frienddivright"&gt;
ek1ng&lt;br /&gt;ek1ng&amp;#39;s Blog
&lt;/div&gt;
&lt;/div&gt;&lt;/a&gt;
&lt;a target="_blank" href=https://xxs2.cn title=xss class="friendurl"&gt;
&lt;div class="frienddiv"&gt;
&lt;div class="frienddivleft"&gt;
&lt;img class="myfriend" src=https://s2.loli.net/2023/01/02/cBX1ouzW879SfQg.jpg /&gt;
&lt;/div&gt;
&lt;div class="frienddivright"&gt;
xss&lt;br /&gt;永远12岁！
&lt;/div&gt;
&lt;/div&gt;&lt;/a&gt;
&lt;a target="_blank" href=https://www.fyihang.com/ title=Fyihang class="friendurl"&gt;
&lt;div class="frienddiv"&gt;
&lt;div class="frienddivleft"&gt;
&lt;img class="myfriend" src=https://s2.loli.net/2023/01/02/ISiF2gheuO5V8RJ.png /&gt;
&lt;/div&gt;
&lt;div class="frienddivright"&gt;
Fyihang&lt;br /&gt;臆想梦境
&lt;/div&gt;
&lt;/div&gt;&lt;/a&gt;
&lt;a target="_blank" href=http://www.luelueking.com/ title=luelueking class="friendurl"&gt;
&lt;div class="frienddiv"&gt;
&lt;div class="frienddivleft"&gt;
&lt;img class="myfriend" src=https://mytanhua1413.oss-cn-hangzhou.aliyuncs.com/config/7890aea1df9b74c52316f39d1565c3d1.jpeg /&gt;
&lt;/div&gt;
&lt;div class="frienddivright"&gt;
luelueking&lt;br /&gt;luelueking太菜了，还是滚去学习吧🥹！！！
&lt;/div&gt;
&lt;/div&gt;&lt;/a&gt;
&lt;a target="_blank" href=https://zenaxu.cn title=Zena&amp;#32;Xu class="friendurl"&gt;
&lt;div class="frienddiv"&gt;
&lt;div class="frienddivleft"&gt;
&lt;img class="myfriend" src=https://zenaxu.cn/pic/photo.jpg /&gt;
&lt;/div&gt;
&lt;div class="frienddivright"&gt;
Zena Xu&lt;br /&gt;猫猫
&lt;/div&gt;
&lt;/div&gt;&lt;/a&gt;
&lt;a target="_blank" href=https://csmantle.top/ title=Mantle class="friendurl"&gt;
&lt;div class="frienddiv"&gt;
&lt;div class="frienddivleft"&gt;
&lt;img class="myfriend" src=https://csmantle.top/assets/favicon-32x32.png /&gt;
&lt;/div&gt;
&lt;div class="frienddivright"&gt;
Mantle&lt;br /&gt;Mantle’s Potato Bakery
&lt;/div&gt;
&lt;/div&gt;&lt;/a&gt;
&lt;a target="_blank" href=https://c0d4.ink/ title=c0d4 class="friendurl"&gt;
&lt;div class="frienddiv"&gt;
&lt;div class="frienddivleft"&gt;
&lt;img class="myfriend" src=https://c0d4.ink/images/avatar.jpg /&gt;
&lt;/div&gt;
&lt;div class="frienddivright"&gt;
c0d4&lt;br /&gt;i`m suuuper (｡･∀･)ﾉﾞ嗨客
&lt;/div&gt;
&lt;/div&gt;&lt;/a&gt;
&lt;a target="_blank" href=https://blog.woshiluo.com/ title=Woshiluo class="friendurl"&gt;
&lt;div class="frienddiv"&gt;
&lt;div class="frienddivleft"&gt;
&lt;img class="myfriend" src=https://blog.woshiluo.com/favicon.svg /&gt;
&lt;/div&gt;
&lt;div class="frienddivright"&gt;
Woshiluo&lt;br /&gt;「Jump up HIGH!!」
&lt;/div&gt;
&lt;/div&gt;&lt;/a&gt;
&lt;a target="_blank" href=https://www.cnblogs.com/rencj title=RC·阿柒 class="friendurl"&gt;
&lt;div class="frienddiv"&gt;
&lt;div class="frienddivleft"&gt;
&lt;img class="myfriend" src=https://assets.cnblogs.com/favicon_v3_2.ico /&gt;
&lt;/div&gt;
&lt;div class="frienddivright"&gt;
RC·阿柒&lt;br /&gt;每一个不曾起舞的日子，都是对生命的辜负。
&lt;/div&gt;
&lt;/div&gt;&lt;/a&gt;
&lt;a target="_blank" href=https://sccube.link/ title=ScaredCube class="friendurl"&gt;
&lt;div class="frienddiv"&gt;
&lt;div class="frienddivleft"&gt;
&lt;img class="myfriend" src=https://s.scc.moe/avatar-s /&gt;
&lt;/div&gt;
&lt;div class="frienddivright"&gt;
ScaredCube&lt;br /&gt;ScaredCube&amp;#39;s Site
&lt;/div&gt;
&lt;/div&gt;&lt;/a&gt;
&lt;a target="_blank" href=https://blog.akn.moe/ title=arkerny class="friendurl"&gt;
&lt;div class="frienddiv"&gt;
&lt;div class="frienddivleft"&gt;
&lt;img class="myfriend" src=https://smms-s2.see.you/2022/08/06/AdBoMvb2Ne1Q7Sh.jpg /&gt;
&lt;/div&gt;
&lt;div class="frienddivright"&gt;
arkerny&lt;br /&gt;Ciallo～ (∠・ω&amp;lt; )⌒★
&lt;/div&gt;
&lt;/div&gt;&lt;/a&gt;
&lt;a target="_blank" href=https://capoo.me/ title=Capoo class="friendurl"&gt;
&lt;div class="frienddiv"&gt;
&lt;div class="frienddivleft"&gt;
&lt;img class="myfriend" src=https://capoo.me/wp-content/uploads/2025/10/cropped-icon-270x270.jpg /&gt;
&lt;/div&gt;
&lt;div class="frienddivright"&gt;
Capoo&lt;br /&gt;CaPoωo&amp;#39;s Blog
&lt;/div&gt;
&lt;/div&gt;&lt;/a&gt;
&lt;a target="_blank" href=https://blog.naclwww.com/ title=NaCl class="friendurl"&gt;
&lt;div class="frienddiv"&gt;
&lt;div class="frienddivleft"&gt;
&lt;img class="myfriend" src=https://blog.naclwww.com/avator.jpg /&gt;
&lt;/div&gt;
&lt;div class="frienddivright"&gt;
NaCl&lt;br /&gt;NaCl的神秘小屋
&lt;/div&gt;
&lt;/div&gt;&lt;/a&gt;
&lt;/p&gt;</description></item></channel></rss>