<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>安全运维 &#8211; ChaBug安全</title>
	<atom:link href="/topics/safeprotect/feed" rel="self" type="application/rss+xml" />
	<link>/</link>
	<description>一个分享知识、结识伙伴、资源共享的博客</description>
	<lastBuildDate>Tue, 15 Sep 2020 12:16:19 +0000</lastBuildDate>
	<language>zh-CN</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=5.5.5</generator>
	<item>
		<title>[防守视角] tomcat内存马的多种查杀方式</title>
		<link>/tools/1873.html</link>
		
		<dc:creator><![CDATA[syst1m]]></dc:creator>
		<pubDate>Tue, 15 Sep 2020 16:00:36 +0000</pubDate>
				<category><![CDATA[安全运维]]></category>
		<category><![CDATA[工具分享]]></category>
		<category><![CDATA[渗透测试]]></category>
		<category><![CDATA[免杀]]></category>
		<category><![CDATA[内存shell]]></category>
		<category><![CDATA[护网]]></category>
		<category><![CDATA[查杀]]></category>
		<category><![CDATA[蓝队]]></category>
		<guid isPermaLink="false">/?p=1873</guid>

					<description><![CDATA[环境搭建 我在WINDOWS7虚拟机下搭建的Tomcat，搭建教程网上都有，点击startup.bat启动环境 注入内存马 这里使用了哥斯拉的内存马 查杀方式一：VisualVM（...]]></description>
										<content:encoded><![CDATA[<h1>环境搭建</h1>
<p>我在WINDOWS7虚拟机下搭建的Tomcat，搭建教程网上都有，点击startup.bat启动环境</p>
<p><img src="https://maekdown-1300474679.cos.ap-beijing.myqcloud.com/20200914221121.png" alt="" /></p>
<p>注入内存马</p>
<p>这里使用了哥斯拉的内存马</p>
<p><img src="/wp-content/uploads/2020/09/20200914234501.png" alt="" /></p>
<h1><span class="wpcom_tag_link"><a href="/tags/%e6%9f%a5%e6%9d%80" title="查杀" target="_blank">查杀</a></span>方式一：VisualVM（远程调试）</h1>
<p>设置jstatd.all.policy 文件</p>
<p><img src="/wp-content/uploads/2020/09/20200914221527.png" alt="" /></p>
<p>启动jstatd</p>
<pre><code class="language-txt line-numbers">jstatd.exe -J-Djava.security.policy=jstatd.all.policy -J-Djava.rmi.server.hostname=serverip
</code></pre>
<p><img src="/wp-content/uploads/2020/09/20200914225845.png" alt="" /></p>
<p>设置JVM Connection 修改 catalina.sh文件(LINUX)</p>
<pre><code class="language-txt line-numbers">JAVA_OPTS="-Djava.rmi.server.hostname=服务器的ip
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=jmx使用的端口
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false $JAVA_OPTS"
export JAVA_OPTS
</code></pre>
<p>修改catalina.bat文件(WINDOWS)</p>
<pre><code class="language-txt line-numbers">set JAVA_OPTS=-Djava.rmi.server.hostname=192.168.67.115 -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=8888 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false
</code></pre>
<p>下载VisualVM</p>
<p><img src="/wp-content/uploads/2020/09/20200914230218.png" alt="" /></p>
<p>MBeans安装插件</p>
<p><img src="/wp-content/uploads/2020/09/20200914230540.png" alt="" /></p>
<p>连接远程Tomcat</p>
<p><img src="/wp-content/uploads/2020/09/20200914234320.png" alt="" /></p>
<p><img src="/wp-content/uploads/2020/09/20200915010531.png" alt="" /></p>
<p>检查异常攻击痕迹Filter/Servlet节点</p>
<p><img src="/wp-content/uploads/2020/09/20200915011135.png" alt="" /></p>
<p><strong>在Servlet节点中我发现到了自己设置的内存马test.ico，说明已经检测到了内存马</strong></p>
<h1>查杀方式二：arthas</h1>
<blockquote><p>
  arthas是Alibaba开源的Java诊断工具<br />
  https://github.com/alibaba/arthas
</p></blockquote>
<p>下载</p>
<p><img src="/wp-content/uploads/2020/09/20200915153921.png" alt="" /></p>
<p>文档地址 https://arthas.aliyun.com/doc/quick-start.html</p>
<p><strong>非常Nice的工具，深入用法请查看使用文档，这里只检测探测一下</strong></p>
<p>启动（选择对应tocmat进程pid）</p>
<p><img src="/wp-content/uploads/2020/09/20200915160837.png" alt="" /></p>
<p>mbean(查看 Mbean 的信息，查看异常Filter/Servlet节点)</p>
<pre><code class="language-txt line-numbers">mbean | grep "Servlet"
</code></pre>
<p><img src="/wp-content/uploads/2020/09/20200915161611.png" alt="" /></p>
<p>sc (查看JVM已加载的类信息)</p>
<pre><code class="language-txt line-numbers">sc xxx.* 模糊搜索类
sc -d
</code></pre>
<p><img src="/wp-content/uploads/2020/09/20200915183918.png" alt="" /></p>
<p><strong>查看payload加载的类信息</strong></p>
<p><img src="/wp-content/uploads/2020/09/20200915184214.png" alt="" /></p>
<p><strong>查看x.AES_BASE64类加载的类信息</strong></p>
<p><img src="/wp-content/uploads/2020/09/20200915185544.png" alt="" /></p>
<p>jad(反编译指定已加载类的源码)</p>
<pre><code class="language-txt line-numbers">jad 类名
</code></pre>
<p><img src="/wp-content/uploads/2020/09/20200915174856.png" alt="" /></p>
<p><img src="/wp-content/uploads/2020/09/20200915174938.png" alt="" /></p>
<p>还有很多用法值得慢慢学习～</p>
<h1>查杀方式三：Copagent</h1>
<p>由于VisualVM在环境中可能还需要配置JVM Connection远程调试，我在长亭一篇文章中发现了LandGrey师傅所写的内存马检测工具，经过在本地Tomcat测试，可以检测到我自己设置的内存马，而无需重启Tomcat服务（重启了内存马不就没了吗?）先贴上Git地址</p>
<pre><code class="language-txt line-numbers">https://github.com/LandGrey/copagent
</code></pre>
<p>我本地运行Tomcat服务，使用cop.jar工具，工具首先会识别你正在运行的应用列举出来由你自己选择ID，运行后会在.copagent目录生成结果</p>
<p><img src="/wp-content/uploads/2020/09/20200915005424.png" alt="" /></p>
<p>在输出结果中，可以查看异常类，例如我的<code>1.jsp</code>和<code>X.AES_BASE64</code>，他会显示所有运行的类以及危险等级，比较高的可以进入目录查看代码进行分析</p>
<p><img src="/wp-content/uploads/2020/09/20200915121700.png" alt="" /></p>
<p><img src="/wp-content/uploads/2020/09/20200915005447.png" alt="" /></p>
<p>在java或class文件夹会保存木马以及运行的类</p>
<p><img src="/wp-content/uploads/2020/09/20200915121748.png" alt="" /></p>
<p><img src="/wp-content/uploads/2020/09/20200915122054.png" alt="" /></p>
<h1>参考</h1>
<ol>
<li>https://mp.weixin.qq.com/s/DRbGeVOcJ8m9xo7Gin45kQ</li>
<li>https://qiita.com/shimizukawasaki/items/5dc9fe780ffbf3a7699c</li>
</ol>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Nginx URL Rewrite</title>
		<link>/safeprotect/663.html</link>
		
		<dc:creator><![CDATA[Y4er]]></dc:creator>
		<pubDate>Sun, 07 Jul 2019 12:03:23 +0000</pubDate>
				<category><![CDATA[安全运维]]></category>
		<category><![CDATA[nginx]]></category>
		<category><![CDATA[伪静态]]></category>
		<category><![CDATA[重定向]]></category>
		<guid isPermaLink="false">/?p=663</guid>

					<description><![CDATA[总结下nginx的重写规则用法。 url重写是指通过配置conf文件，以让网站的url中达到某种状态时则定向/跳转到某个规则，比如常见的伪静态、301重定向、浏览器定向等。 con...]]></description>
										<content:encoded><![CDATA[<p>总结下<span class="wpcom_tag_link"><a href="/tags/nginx" title="nginx" target="_blank">nginx</a></span>的重写规则用法。</p>
<p>url重写是指通过配置conf文件，以让网站的url中达到某种状态时则定向/跳转到某个规则，比如常见的<span class="wpcom_tag_link"><a href="/tags/%e4%bc%aa%e9%9d%99%e6%80%81" title="伪静态" target="_blank">伪静态</a></span>、301<span class="wpcom_tag_link"><a href="/tags/%e9%87%8d%e5%ae%9a%e5%90%91" title="重定向" target="_blank">重定向</a></span>、浏览器定向等。</p>
<p>conf配置文件的路径可以通过命令来查看</p>
<div class="highlight highlight-source-shell">
<pre>[root@VM_100_94_centos <span class="pl-k">~</span>]<span class="pl-c"># nginx -t</span>
nginx: the configuration file /www/server/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /www/server/nginx/conf/nginx.conf <span class="pl-c1">test</span> is successful</pre>
</div>
<p>但是如果你有多个conf文件，这个命令并不适用。</p>
<p>在宝塔面板中conf是在<code>/www/server/panel/vhost/nginx</code>路径下。</p>
<h1><a id="user-content-rewrite" class="anchor" href="https://github.com/Y4er/MyBlog/blob/master/content/post/nginx-rewrite.md#rewrite" aria-hidden="true"></a>rewrite</h1>
<div class="highlight highlight-source-shell">
<pre>server {
    rewrite 规则 定向路径 重写类型<span class="pl-k">;</span>
}</pre>
</div>
<ol>
<li>规则：可以是字符串或者正则来表示想匹配的目标url</li>
<li>定向路径：表示匹配到规则后要定向的路径，如果规则里有正则，则可以使用$index来表示正则里的捕获分组</li>
<li>重写类型：
<ul>
<li>last：相当于Apache里德(L)标记，表示完成rewrite，浏览器地址栏URL地址不变</li>
<li>break：本条规则匹配完成后，终止匹配，不再匹配后面的规则，浏览器地址栏URL地址不变</li>
<li>redirect：返回302临时重定向，浏览器地址会显示跳转后的URL地址</li>
<li>permanent：返回301永久重定向，浏览器地址栏会显示跳转后的URL地址</li>
</ul>
</li>
</ol>
<p>看一个例子</p>
<div class="highlight highlight-source-shell">
<pre>server {
    <span class="pl-c"># 访问 /last.html 的时候，页面内容重写到 /index.html 中</span>
    rewrite /last.html /index.html last<span class="pl-k">;</span>
    <span class="pl-c"># 访问 /break.html 的时候，页面内容重写到 /index.html 中，并停止后续的匹配</span>
    rewrite /break.html /index.html <span class="pl-c1">break</span><span class="pl-k">;</span>
    <span class="pl-c"># 访问 /redirect.html 的时候，页面直接302定向到 /index.html中</span>
    rewrite /redirect.html /index.html redirect<span class="pl-k">;</span>
    <span class="pl-c"># 访问 /permanent.html 的时候，页面直接301定向到 /index.html中</span>
    rewrite /permanent.html /index.html permanent<span class="pl-k">;</span>
    <span class="pl-c"># 把 /html/*.html =&gt; /post/*.html ，301定向</span>
    rewrite ^/html/(.+<span class="pl-k">?</span>).html$ /post/<span class="pl-smi">$1</span>.html permanent<span class="pl-k">;</span>
    <span class="pl-c"># 把 /search/key =&gt; /search.html?keyword=key</span>
    rewrite ^/search<span class="pl-cce">\/</span>([^<span class="pl-cce">\/</span>]+<span class="pl-k">?</span>)(<span class="pl-cce">\/</span><span class="pl-k">|</span>$) /search.html<span class="pl-k">?</span>keyword=<span class="pl-smi">$1</span> permanent<span class="pl-k">;</span>
}</pre>
</div>
<p>last和break的区别 因为301和302不能简单的只返回状态码，还必须有重定向的URL，这就是return指令无法返回301,302的原因了。这里 last 和 break 区别有点难以理解：</p>
<ul>
<li>last一般写在server和if中，而break一般使用在location中</li>
<li>last不终止重写后的url匹配，即新的url会再从server走一遍匹配流程，而break终止重写后的匹配</li>
<li>break和last都能组织继续执行后面的rewrite指令</li>
</ul>
<p>在<code>location</code>里一旦返回<code>break</code>则直接生效并<strong>停止后续的匹配</strong><code>location</code></p>
<div class="highlight highlight-source-shell">
<pre>server {
    location / {
        rewrite /last/ /q.html last<span class="pl-k">;</span>
        rewrite /break/ /q.html <span class="pl-c1">break</span><span class="pl-k">;</span>
    }
    location = /q.html {
        <span class="pl-k">return</span> 400<span class="pl-k">;</span>
    }
}</pre>
</div>
<ul>
<li>访问/last/时重写到/q.html，然后使用新的uri再匹配，正好匹配到locatoin = /q.html然后返回了400</li>
<li>访问/break时重写到/q.html，由于返回了break，则直接停止了</li>
</ul>
<h1><a id="user-content-if判断" class="anchor" href="https://github.com/Y4er/MyBlog/blob/master/content/post/nginx-rewrite.md#if%E5%88%A4%E6%96%AD" aria-hidden="true"></a>if判断</h1>
<p>只是上面的简单重写很多时候满足不了需求，比如需要判断当文件不存在时、当路径包含xx时等条件，则需要用到if 当表达式只是一个变量时，如果值为空或任何以0开头的字符串都会当做false 直接比较变量和内容时，使用=或!= <del>正则表达式匹配，</del>*不区分大小写的匹配，!~区分大小写的不匹配 一些内置的条件判断：</p>
<ul>
<li>-f和!-f用来判断是否存在文件</li>
<li>-d和!-d用来判断是否存在目录</li>
<li>-e和!-e用来判断是否存在文件或目录</li>
<li>-x和!-x用来判断文件是否可执行</li>
</ul>
<p>内置的全局变量</p>
<div class="highlight highlight-source-shell">
<pre><span class="pl-smi">$args</span> ：这个变量等于请求行中的参数，同<span class="pl-smi">$query_string</span>
<span class="pl-smi">$content_length</span> ： 请求头中的Content-length字段。
<span class="pl-smi">$content_type</span> ： 请求头中的Content-Type字段。
<span class="pl-smi">$document_root</span> ： 当前请求在root指令中指定的值。
<span class="pl-smi">$host</span> ： 请求主机头字段，否则为服务器名称。
<span class="pl-smi">$http_user_agent</span> ： 客户端agent信息
<span class="pl-smi">$http_cookie</span> ： 客户端cookie信息
<span class="pl-smi">$limit_rate</span> ： 这个变量可以限制连接速率。
<span class="pl-smi">$request_method</span> ： 客户端请求的动作，通常为GET或POST。
<span class="pl-smi">$remote_addr</span> ： 客户端的IP地址。
<span class="pl-smi">$remote_port</span> ： 客户端的端口。
<span class="pl-smi">$remote_user</span> ： 已经经过Auth Basic Module验证的用户名。
<span class="pl-smi">$request_filename</span> ： 当前请求的文件路径，由root或alias指令与URI请求生成。
<span class="pl-smi">$scheme</span> ： HTTP方法（如http，https）。
<span class="pl-smi">$server_protocol</span> ： 请求使用的协议，通常是HTTP/1.0或HTTP/1.1。
<span class="pl-smi">$server_addr</span> ： 服务器地址，在完成一次系统调用后可以确定这个值。
<span class="pl-smi">$server_name</span> ： 服务器名称。
<span class="pl-smi">$server_port</span> ： 请求到达服务器的端口号。
<span class="pl-smi">$request_uri</span> ： 包含请求参数的原始URI，不包含主机名，如：”/foo/bar.php<span class="pl-k">?</span>arg=baz”。
<span class="pl-smi">$uri</span> ： 不带请求参数的当前URI，<span class="pl-smi">$uri</span>不包含主机名，如”/foo/bar.html”。
<span class="pl-smi">$document_uri</span> ： 与<span class="pl-smi">$uri</span>相同。</pre>
</div>
<p>举个例子</p>
<div class="highlight highlight-source-shell">
<pre><span class="pl-c"># 如果文件不存在则返回400</span>
<span class="pl-k">if</span> (<span class="pl-k">!</span>-f <span class="pl-smi">$request_filename</span>) {
    <span class="pl-k">return</span> 400<span class="pl-k">;</span>
}
<span class="pl-c"># 如果host不是example.com，则301到example.com中</span>
<span class="pl-k">if</span> ( <span class="pl-smi">$host</span> <span class="pl-k">!</span>= <span class="pl-s"><span class="pl-pds">'</span>example.com<span class="pl-pds">'</span></span> ){
    rewrite ^/(.<span class="pl-k">*</span>)$ https://example.com/<span class="pl-smi">$1</span> permanent<span class="pl-k">;</span>
}
<span class="pl-c"># 如果请求类型不是POST则返回405</span>
<span class="pl-k">if</span> (<span class="pl-smi">$request_method</span> = POST) {
    <span class="pl-k">return</span> 405<span class="pl-k">;</span>
}
<span class="pl-c"># 如果参数中有 a=1 则301到指定域名</span>
<span class="pl-k">if</span> (<span class="pl-smi">$args</span> <span class="pl-k">~</span> a=1) {
    rewrite ^ http://example.com/ permanent<span class="pl-k">;</span>
}</pre>
</div>
<h1><a id="user-content-location" class="anchor" href="https://github.com/Y4er/MyBlog/blob/master/content/post/nginx-rewrite.md#location" aria-hidden="true"></a>location</h1>
<p>在server块中使用，如：</p>
<div class="highlight highlight-source-shell">
<pre>server {
    location 表达式 {
    }
}</pre>
</div>
<p>location表达式类型</p>
<ul>
<li>如果直接写一个路径，则匹配该路径下的</li>
<li>~ 表示执行一个正则匹配，区分大小写</li>
<li>~* 表示执行一个正则匹配，不区分大小写</li>
<li>^~ 表示普通字符匹配。使用前缀匹配。如果匹配成功，则不再匹配其他location。</li>
<li>= 进行普通字符精确匹配。也就是完全匹配。 优先级</li>
</ul>
<ol>
<li>等号类型（=）的优先级最高。一旦匹配成功，则不再查找其他匹配项。</li>
<li>^~类型表达式。一旦匹配成功，则不再查找其他匹配项。</li>
<li>正则表达式类型（~ ~*）的优先级次之。如果有多个location的正则能匹配的话，则使用正则表达式最长的那个。</li>
<li>常规字符串匹配类型。按前缀匹配。</li>
</ol>
<p>例子 &#8211; 假地址掩饰真地址</p>
<div class="highlight highlight-source-shell">
<pre>server {
    <span class="pl-c"># 用 test_admin 来掩饰 admin</span>
    location / {
        <span class="pl-c"># 使用break拿一旦匹配成功则忽略后续location</span>
        rewrite /test_admin /admin <span class="pl-c1">break</span><span class="pl-k">;</span>
    }
    <span class="pl-c"># 访问真实地址直接报没权限</span>
    location /admin {
        <span class="pl-k">return</span> 403<span class="pl-k">;</span>
    }
}</pre>
</div>
<h1><a id="user-content-实际应用" class="anchor" href="https://github.com/Y4er/MyBlog/blob/master/content/post/nginx-rewrite.md#%E5%AE%9E%E9%99%85%E5%BA%94%E7%94%A8" aria-hidden="true"></a>实际应用</h1>
<p>在上篇文章中auxpi图床直接访问是本地的图床，而且在后台即使关闭本地图床，也仍然会显示在首页，用户直接上传会报错，那么我们要做的就是让访问的时候跳转到别的图床。</p>
<p>要求</p>
<ul>
<li>直接访问 <a href="https://static.chabug.org/" rel="nofollow">https://static.chabug.org/</a> 跳转到 <a href="https://static.chabug.org/Ali" rel="nofollow">https://static.chabug.org/Ali</a></li>
<li>别的url例如<a href="https://static.chabug.org/Jd" rel="nofollow">https://static.chabug.org/Jd</a> 不跳转</li>
<li>不能更改网页的其他url地址。</li>
</ul>
<p>直接放上我的配置文件</p>
<div class="highlight highlight-source-shell">
<pre>server
{
    listen 80<span class="pl-k">;</span>
    listen 443 ssl http2<span class="pl-k">;</span>
    server_name static.chabug.org<span class="pl-k">;</span>
    index index.php index.html index.htm default.php default.htm default.html<span class="pl-k">;</span>
    root /www/wwwroot/static.chabug.org<span class="pl-k">;</span>
    rewrite <span class="pl-s"><span class="pl-pds">"</span>^/$<span class="pl-pds">"</span></span> https://static.chabug.org/Ali <span class="pl-c1">break</span><span class="pl-k">;</span>
    <span class="pl-c">#SSL-START SSL相关配置，请勿删除或修改下一行带注释的404规则</span>
    <span class="pl-c">#error_page 404/404.html;</span>
    <span class="pl-c">#HTTP_TO_HTTPS_START</span>
    <span class="pl-k">if</span> (<span class="pl-smi">$server_port</span> <span class="pl-k">!</span>~ 443){
        rewrite ^(/.<span class="pl-k">*</span>)$ https://<span class="pl-smi">$host</span><span class="pl-smi">$1</span> permanent<span class="pl-k">;</span>
    }
    <span class="pl-c">#HTTP_TO_HTTPS_END</span>
    ssl_certificate    /www/server/panel/vhost/cert/static.chabug.org/fullchain.pem<span class="pl-k">;</span>
    ssl_certificate_key    /www/server/panel/vhost/cert/static.chabug.org/privkey.pem<span class="pl-k">;</span>
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3<span class="pl-k">;</span>
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:<span class="pl-k">!</span>aNULL:<span class="pl-k">!</span>MD5:<span class="pl-k">!</span>RC4:<span class="pl-k">!</span>DHE<span class="pl-k">;</span>
    ssl_prefer_server_ciphers on<span class="pl-k">;</span>
    ssl_session_cache shared:SSL:10m<span class="pl-k">;</span>
    ssl_session_timeout 10m<span class="pl-k">;</span>
    error_page 497  https://<span class="pl-smi">$host$request_uri</span><span class="pl-k">;</span>

    <span class="pl-c">#SSL-END</span>
    
    <span class="pl-c">#ERROR-PAGE-START  错误页配置，可以注释、删除或修改</span>
    <span class="pl-c">#error_page 404 /404.html;</span>
    <span class="pl-c">#error_page 502 /502.html;</span>
    <span class="pl-c">#ERROR-PAGE-END</span>
    
    <span class="pl-c">#PHP-INFO-START  PHP引用配置，可以注释或修改</span>
    <span class="pl-c">#清理缓存规则</span>
    location <span class="pl-k">~</span> /purge(/.<span class="pl-k">*</span>) {
        proxy_cache_purge cache_one <span class="pl-smi">$host</span><span class="pl-smi">$1</span><span class="pl-smi">$is_args$args</span><span class="pl-k">;</span>
        <span class="pl-c">#access_log  /www/wwwlogs/static.chabug.org_purge_cache.log;</span>
    }
	<span class="pl-c">#引用反向代理规则，注释后配置的反向代理将无效</span>
	include /www/server/panel/vhost/nginx/proxy/static.chabug.org/<span class="pl-k">*</span>.conf<span class="pl-k">;</span>

	<span class="pl-c">#include enable-php-00.conf;</span>
    <span class="pl-c">#PHP-INFO-END</span>
    
    <span class="pl-c">#REWRITE-START URL重写规则引用,修改后将导致面板设置的伪静态规则失效</span>
    <span class="pl-c">#include /www/server/panel/vhost/rewrite/static.chabug.org.conf;</span>
    <span class="pl-c">#REWRITE-END</span>
    
    <span class="pl-c">#禁止访问的文件或目录</span>
    location <span class="pl-k">~</span> ^/(<span class="pl-cce">\.</span>user.ini<span class="pl-k">|</span><span class="pl-cce">\.</span>htaccess<span class="pl-k">|</span><span class="pl-cce">\.</span>git<span class="pl-k">|</span><span class="pl-cce">\.</span>svn<span class="pl-k">|</span><span class="pl-cce">\.</span>project<span class="pl-k">|</span>LICENSE<span class="pl-k">|</span>README.md)
    {
        <span class="pl-k">return</span> 404<span class="pl-k">;</span>
    }
    
    <span class="pl-c">#一键申请SSL证书验证目录相关设置</span>
    location <span class="pl-k">~</span> <span class="pl-cce">\.</span>well-known{
        allow all<span class="pl-k">;</span>
    }
    
    access_log  /www/wwwlogs/static.chabug.org.log<span class="pl-k">;</span>
    error_log  /www/wwwlogs/static.chabug.org.error.log<span class="pl-k">;</span>
}</pre>
</div>
<p>重点就在于<code>rewrite "^/$" https://static.chabug.org/Ali break;</code> break的使用</p>
<p>本文参考链接:</p>
<ul>
<li><a href="https://github.com/aimerforreimu/auxpi/wiki/%E4%BD%BF%E7%94%A8%E5%AE%9D%E5%A1%94%E8%BF%9B%E8%A1%8C%E5%AE%89%E8%A3%85">使用宝塔进行安装auxpi图床</a></li>
<li><a href="http://www.linuxeye.com/configuration/2657.html" rel="nofollow">http://www.linuxeye.com/configuration/2657.html</a></li>
<li><a href="http://seanlook.com/2015/05/17/nginx-location-rewrite/" rel="nofollow">http://seanlook.com/2015/05/17/nginx-location-rewrite/</a></li>
</ul>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>MySQL服务一直挂掉的解决方法</title>
		<link>/safeprotect/480.html</link>
					<comments>/safeprotect/480.html#comments</comments>
		
		<dc:creator><![CDATA[Y4er]]></dc:creator>
		<pubDate>Mon, 30 Jul 2018 05:22:56 +0000</pubDate>
				<category><![CDATA[安全运维]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[服务]]></category>
		<guid isPermaLink="false">/?p=480</guid>

					<description><![CDATA[这两天网站一直出现 Error establishing a database connection 登录服务器一看发现是MySQL服务挂了，这已经出现了好几次。今天我非得解决他不...]]></description>
										<content:encoded><![CDATA[<p><a href="https://dn-sdkcnssl.qbox.me/article/oSOqg0wB8ixn7TZ0gEJW.png"><img loading="lazy" class="aligncenter size-medium" src="https://dn-sdkcnssl.qbox.me/article/oSOqg0wB8ixn7TZ0gEJW.png" width="1280" height="662" /></a></p>
<p>这两天网站一直出现</p>
<h1>Error establishing a database connection</h1>
<p>登录<span class="wpcom_tag_link"><a href="/tags/%e6%9c%8d%e5%8a%a1" title="服务" target="_blank">服务</a></span>器一看发现是MySQL服务挂了，这已经出现了好几次。今天我非得解决他不可。</p>
<p>&nbsp;</p>
<p>先看下日志</p>
<pre class="lang:default decode:true">130728  6:50:14 [Note] Plugin 'FEDERATED' is disabled.
130728  6:50:14 InnoDB: The InnoDB memory heap is disabled
130728  6:50:14 InnoDB: Mutexes and rw_locks use GCC atomic builtins
130728  6:50:14 InnoDB: Compressed tables use zlib 1.2.3.4
130728  6:50:14 InnoDB: Initializing buffer pool, size = 128.0M
InnoDB: mmap(137363456 bytes) failed; errno 12
130728  6:50:14 InnoDB: Completed initialization of buffer pool
130728  6:50:14 InnoDB: Fatal error: cannot allocate memory for the buffer pool
130728  6:50:14 [ERROR] Plugin 'InnoDB' init function returned error.
130728  6:50:14 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
130728  6:50:14 [ERROR] Unknown/unsupported storage engine: InnoDB
130728  6:50:14 [ERROR] Aborting
130728  6:50:14 [Note] /usr/sbin/mysqld: Shutdown complete</pre>
<p>百度了一波，发现是因为MySQL5.5占用内存太大，然后服务器撑不住就挂了。我也是无奈脸，MySQL也欺负穷人。</p>
<p>&nbsp;</p>
<p>解决方法：</p>
<p>修改my.ini</p>
<pre class="lang:default decode:true">innodb_buffer_pool_size = 64M</pre>
<p>根据自己服务器的性能来配置MySQL的性能，太小网站卡，太大服务挂。你明白我意思吧？</p>
<p>如果可以的话你需要设置下swap分区。因为我的vps是没有swap分区的，通过fdisk -l 和 1mount 看不到swap的信息，需要手动添加一下。</p>
<p>添加swap分区的步骤：</p>
<pre class="lang:default decode:true">2.1) dd if=/dev/zero of=/swapfile bs=1M count=1024
2.2) mkswap /swapfile
2.3) swapon /swapfile
2.4) 添加这行： /swapfile swap swap defaults 0 0 到 /etc/fstab</pre>
<p>重启MySQL服务。</p>
<p>&nbsp;</p>
<p>这两天再观察观察会不会挂了。</p>
]]></content:encoded>
					
					<wfw:commentRss>/safeprotect/480.html/feed</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>Linux防CC攻击</title>
		<link>/safeprotect/479.html</link>
		
		<dc:creator><![CDATA[Y4er]]></dc:creator>
		<pubDate>Sun, 29 Jul 2018 09:36:27 +0000</pubDate>
				<category><![CDATA[安全运维]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[运维]]></category>
		<guid isPermaLink="false">/?p=479</guid>

					<description><![CDATA[查看所有80端口的连接数 netstat -nat&#124;grep -i &#8220;80&#8221;&#124;wc -l 对连接的IP按连接数量进行排序 netstat -anp &#124; gr...]]></description>
										<content:encoded><![CDATA[<p><strong>查看所有80端口的连接数</strong></p>
<p>netstat -nat|grep -i &#8220;80&#8221;|wc -l</p>
<p><strong>对连接的IP按连接数量进行排序</strong></p>
<p>netstat -anp | grep &#8216;tcp\|udp&#8217; | awk &#8216;{print $5}&#8217; | cut -d: -f1 | sort | uniq -c | sort -nr</p>
<p>netstat -ntu | awk &#8216;{print $5}&#8217; | cut -d: -f1 | sort | uniq -c | sort -nr</p>
<p>#链接最多的前20</p>
<p>netstat -ntu | awk &#8216;{print $5}&#8217; | cut -d: -f1 | sort | uniq -c | sort -nr|head -20</p>
<p>netstat -ntu | awk &#8216;{print $5}&#8217; | egrep -o &#8220;[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}&#8221; | sort | uniq -c | sort -nr</p>
<p>查找较多time_wait连接</p>
<p>netstat -n|grep TIME_WAIT|awk <span class="string">&#8216;{print $5}&#8217;</span>|sort|uniq -c|sort -rn|head -n20</p>
<p>查找较多的SYN连接</p>
<p>netstat -an | grep SYN | awk <span class="string">&#8216;{print $5}&#8217;</span> | awk -F: <span class="string">&#8216;{print $1}&#8217;</span> | sort | uniq -c | sort -nr | more</p>
<p><strong>查看TCP连接状态</strong></p>
<p>netstat -nat |awk &#8216;{print $6}&#8217;|sort|uniq -c|sort -rn</p>
<p>netstat -n | awk &#8216;/^tcp/ {print $NF}&#8217;|sort|uniq -c|sort -rn</p>
<p>netstat -n | awk &#8216;/^tcp/ {++S[$NF]};END {for(a in S) print a, S[a]}&#8217;</p>
<p>netstat -n | awk &#8216;/^tcp/ {++state[$NF]}; END {for(key in state) print key,&#8221;\t&#8221;,state[key]}&#8217;</p>
<p>netstat -n | awk &#8216;/^tcp/ {++arr[$NF]};END {for(k in arr) print k,&#8221;\t&#8221;,arr[k]}&#8217;</p>
<p>netstat -ant | awk &#8216;{print $NF}&#8217; | grep -v &#8216;[a-z]&#8217; | sort | uniq -c</p>
<p><strong>查看80端口连接数最多的20个IP</strong></p>
<p>cat /www/web_logs/waitalone.cn_access.log|awk &#8216;{print $1}&#8217;|sort|uniq -c|sort -nr|head -100</p>
<p>tail -n 10000 /www/web_logs/waitalone.cn_access.log|awk &#8216;{print $1}&#8217;|sort|uniq -c|sort -nr|head -100</p>
<p>cat /www/web_logs/waitalone.cn_access.log|awk &#8216;{print $1}&#8217;|sort|uniq -c|sort -nr|head -100</p>
<p>netstat -anlp|grep 80|grep tcp|awk &#8216;{print $5}&#8217;|awk -F: &#8216;{print $1}&#8217;|sort|uniq -c|sort -nr|head -n20</p>
<p>netstat -ant |awk &#8216;/:80/{split($5,ip,&#8221;:&#8221;);++A[ip[1]]}END{for(i in A) print A,i}&#8217; |sort -rn|head -n20</p>
<p><strong>用tcpdump嗅探80端口的访问看看谁最高</strong></p>
<p>tcpdump -i eth0 -tnn dst port 80 -c 1000 | awk -F&#8221;.&#8221; &#8216;{print $1&#8243;.&#8221;$2&#8243;.&#8221;$3&#8243;.&#8221;$4}&#8217; | sort | uniq -c | sort -nr |head -20</p>
<p><strong>查找较多time_wait连接</strong></p>
<p>netstat -n|grep TIME_WAIT|awk &#8216;{print $5}&#8217;|sort|uniq -c|sort -rn|head -n20</p>
<p><strong>查找较多的SYN连接</strong></p>
<p>netstat -an | grep SYN | awk &#8216;{print $5}&#8217; | awk -F: &#8216;{print $1}&#8217; | sort | uniq -c | sort -nr | more</p>
<p><strong>linux下实用iptables封ip段的一些常见命令：</strong></p>
<p>封单个IP的命令是：</p>
<p>iptables -I INPUT -s 211.1.0.0 -j DROP</p>
<p>封IP段的命令是：</p>
<p>iptables -I INPUT -s 211.1.0.0/16 -j DROP</p>
<p>iptables -I INPUT -s 211.2.0.0/16 -j DROP</p>
<p>iptables -I INPUT -s 211.3.0.0/16 -j DROP</p>
<p>封整个段的命令是：</p>
<p>iptables -I INPUT -s 211.0.0.0/8 -j DROP</p>
<p>封几个段的命令是：</p>
<p>iptables -I INPUT -s 61.37.80.0/24 -j DROP</p>
<p>iptables -I INPUT -s 61.37.81.0/24 -j DROP</p>
<p><strong>想在服务器启动自运行的话有三个方法：</strong></p>
<p>1、把它加到/etc/rc.local中</p>
<p>2、iptables-save &gt;/etc/sysconfig/iptables可以把你当前的iptables规则放到/etc/sysconfig/iptables中，系统启动iptables时自动执行。</p>
<p>3、service iptables save 也可以把你当前的iptables规则放/etc/sysconfig/iptables中，系统启动iptables时自动执行。</p>
<p>后两种更好此，一般iptables服务会在network服务之前启来，更安全。</p>
<p><strong>解封的话：</strong></p>
<p><strong><em>iptables -D INPUT -s IP地址 -j REJECT   #此命令执行后提示：no chain/target/match by that name.</em></strong></p>
<p>要封停一个IP，使用下面这条命令：</p>
<p>iptables -I INPUT -s ***.***.***.*** -j DROP</p>
<p>要解封一个IP，使用下面这条命令：</p>
<p>iptables -D INPUT -s ***.***.***.*** -j DROP</p>
<p>参数-I是表示Insert（添加），-D表示Delete（删除）。后面跟的是规则，INPUT表示入站，***.***.***.***表示要封停的IP，DROP表示放弃连接。</p>
<p>&nbsp;</p>
<p>iptables -F 全清掉了</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>[XSS防御]HttpOnly之四两拨千斤</title>
		<link>/web/477.html</link>
		
		<dc:creator><![CDATA[Y4er]]></dc:creator>
		<pubDate>Sun, 29 Jul 2018 04:57:55 +0000</pubDate>
				<category><![CDATA[安全运维]]></category>
		<category><![CDATA[渗透测试]]></category>
		<category><![CDATA[XSS]]></category>
		<category><![CDATA[防御]]></category>
		<guid isPermaLink="false">/?p=477</guid>

					<description><![CDATA[今天看了《白帽子讲web安全》一书，顺便记录一下，HttpOnly的设置 httponly的设置值为 TRUE 时，使得Javascript无法获取到该值，有效地防御了XSS打管理...]]></description>
										<content:encoded><![CDATA[<blockquote><p>今天看了《白帽子讲web安全》一书，顺便记录一下，HttpOnly的设置</p></blockquote>
<p>httponly的设置值为 <code>TRUE</code> 时，使得Javascript无法获取到该值，有效地<span class="wpcom_tag_link"><a href="/tags/%e9%98%b2%e5%be%a1" title="防御" target="_blank">防御</a></span>了<span class="wpcom_tag_link"><a href="/tags/xss" title="XSS" target="_blank">XSS</a></span>打管理员的 <code>cookie</code></p>
<p>这里以本博客作为测试对象，实现了一下。</p>
<p>找到网站 <code>/include/lib/loginauth.php</code> 文件，如下修改：<br />
<a class="swipebox" href="https://upload-images.jianshu.io/upload_images/6661013-35fb80bf95a38cf0.png" target="_blank" rel="noopener"><img src="https://upload-images.jianshu.io/upload_images/6661013-35fb80bf95a38cf0.png" alt="代码修改" /></a></p>
<p>这里解释一下：在PHP&gt;5.2版本中支持HttpOnly设置，可以直接在php.ini文件中设置，个人不推荐这种方式，推荐如上图所述在设置cookie时设置。</p>
<p><code>setcookie()</code> 这个函数现支持7个参数，第七个参数是设置 <code>httponly</code> 的属性，第六个是是否开启 <code>https</code> 传输。</p>
<p>这样设置以后，就能有效地防止XSS获取用户的<code>重要cookie信息</code>。</p>
<p>效果如下：</p>
<p><a class="swipebox" href="https://upload-images.jianshu.io/upload_images/6661013-37290054bb68b852.png" target="_blank" rel="noopener"><img src="https://upload-images.jianshu.io/upload_images/6661013-37290054bb68b852.png" alt="httponly开启" /></a></p>
<p>使用<code>alert(document.cookie)</code>在控制台弹窗一下，发现并没有我们的登录信息cookie键值对：</p>
<p><a class="swipebox" href="https://upload-images.jianshu.io/upload_images/6661013-b78a0691e5ba37e8.png" target="_blank" rel="noopener"><img src="https://upload-images.jianshu.io/upload_images/6661013-b78a0691e5ba37e8.png" alt="无敏感登录信息cookie" /></a></p>
<hr />
<p>注意：<code>httponly</code>只是阻止了<code>js</code>获取<code>httponly</code>值为<code>true</code>所对应的<code>cookie</code>键值队，并不能拦截XSS，想要拦截XSS除了浏览器的filter以外，更多的是程序本身做好参数的过滤。</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
