主页 > 网络知识 > 存储型XSS的攻防:不想做开发的黑客不是好黑客(3)

存储型XSS的攻防:不想做开发的黑客不是好黑客(3)

 

12.png

 

0×03、使用preg_replace()函数进行正则表达式过滤script关键字 
$nickname = preg_replace( "/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i", "", @$_POST['nickname']);//昵称

显然,弹框失败。

13.png

 

攻击者如何再一次绕过?

答案是:用img标签的oneerror属性

<img src=http://www.52bug.cn/hkjs/x onerror=http://www.52bug.cn/hkjs/alert(1)> 0×04、过滤alert关键字

看到这里,不知道你烦了没有,以开发的角度来讲,我都有点烦。大黑阔你不是喜欢弹窗么?我过滤alert关键字看你怎么弹!

$nickname = preg_replace( "/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i", "", @$_POST['nickname']);//昵称 $nickname = preg_replace( "(.*)a(.*)l(.*)e(.*)r(.*)t/i", "", $nickname);//昵称

那么,攻击者该怎么办呢?

答案是:编码绕过

<a href=http://www.52bug.cn/hkjs/&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#49;&#41;>a</a>

当点击页面上的超链接时,会弹框。

 

14.png

 

但是为什么呢?

这种编码方式为字符编码

字符编码十进制、十六进制ASCII码或unicode 字符编码,样式为“&#数值;, 例如“j”可以编码为“&#106;”或“&#x6a;

上述代码解码之后如下:

<a href=http://www.52bug.cn/hkjs/javascript:alert(1)>a</a>

你能明显感觉到限制:由于使用到了a标签,所以只有点击时,才会弹框。

作为一个大黑阔,我们当然是不满意的,能不能让所有进入这个页面的人都弹框?

当然可以了:用iframe标签编码

<iframe src=http://www.52bug.cn/hkjs/&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#49;&#41;>

这种写法,同样既没有script关键字,又没有alert关键字。

 

15.png

 

可以看到弹框成功!

16.png

 

可是你也能看到,由于使用了iframe标签,留言板的样式已经变形了。实战中尽量不要用。

0×05、过滤特殊字符

优秀的开发,永不认输!你个小小的黑阔,不就是会插入js代码么?我过滤特殊字符,看你代码咋被解析?

可是我不想手撸代码来列举那么多特殊字符怎么办?

php给我们提供了htmlentities()函数:

$nickname = htmlentities(@$_POST['nickname']);//昵称

htmlentities()函数的作用是把字符转换为 HTML 实体。

显示结果 描述 实体名称 实体编号
    空格   &nbsp;   &#160;  
<   小于号   &lt;   &#60;  
>   大于号   &gt;   &#62;  
&   和号   &amp;   &#38;  
  引号   &quot;   &#34;  
  撇号    &apos; (IE不支持)   &#39;  
  分(cent)   &cent;   &#162;  
£   镑(pound)   &pound;   &#163;  
¥   元(yen)   &yen;   &#165;  
  欧元(euro)   &euro;   &#8364;  
§   小节   &sect;   &#167;  
©   版权(copyright)   &copy;   &#169;  
®   注册商标   &reg;   &#174;  
  商标   &trade;   &#8482;  
×   乘号   &times;   &#215;  
÷   除号   &divide;   &#247;  
说点什么吧
  • 全部评论(0
    还没有评论,快来抢沙发吧!