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

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

6.png

 

那么,问题来了。

毕竟我们还有另外一个身份,开发者该如何防御呢?

0×00、来个最简单的,只修改前端代码

在input标签里面加上maxlength属性

<input type=http://www.52bug.cn/hkjs/"text" name=http://www.52bug.cn/hkjs/"nickname" placeholder=http://www.52bug.cn/hkjs/"留言者昵称" maxlength=http://www.52bug.cn/hkjs/"10">

至于原理嘛,就是因为js脚本的形式为<script></script>长度为17,所以只要我们在前端对长度进行限制,就可以阻止黑客进行xss攻击了

可是!开发可没这么好做!

我们是想做开发的黑客,所以还得自己搞自己。

作为攻击者,我们同样可以修改前端代码,具体的操作是使用浏览器的F12(开发者工具)

7.png

 

可以看到,我们可以直接进行长度的修改。

另外,还可以用抓包的方法,在包里面直接写,也是不受长度限制的。

0×01、对关键字script进行过滤

作为开发者,你很容易发现,要想进行xss攻击,必须插入一段js脚本,而js脚本的特征是很明显的,脚本中包含script关键字,那么我们只需要进行script过滤即可。

回到之前的代码。

为方便说明,我只取nickname参数,其实传入的四个参数需要做同样的处理。

$nickname = str_replace("script", "", @$_POST['nickname']);//昵称

上面这个str_replace()函数的意思是把script替换为空。

可以看到,script被替换为空,弹框失败。

 

8.png

 

那么黑客该如何继续进行攻击呢?

答案是:大小写绕过

<sCrIPt>alert(1)</ScripT>

9.png

 

因为js是不区分大小写的,所以我们的大小写不影响脚本的执行

成功弹框

10.png

0×02、使用str_ireplace()函数进行不区分大小写地过滤script关键字

作为一名优秀的开发,发现了问题当然要及时改正,不区分大小写不就行了嘛

后端代码修正如下:

$nickname = str_ireplace("script", "", @$_POST['nickname']);//昵称

str_ireplace()函数类似于上面的str_replace(),但是它不区分大小写。

那么,大黑阔该如何绕过?

答案是:双写script

<Sscriptcript>alert(1)</Sscriptcript>


 

11.png

 

原理就是str_ireplace()函数只找出了中间的script关键字,前面的S和后面的cript组合在一起,构成了新的Script关键字。

弹框成功!

说点什么吧
  • 全部评论(0
    还没有评论,快来抢沙发吧!