pikachu靶场-XSS跨站脚本-xss之过滤 – 作者:知非知非知非

1626307427_60ef7b63e705d1fc8cb07.png!small

根据题目要求,咱们这里直接加入PAYLOAD!!!

<img src=”#” onmouseover=”alert(‘xss’)”>

看看他过滤的是个啥!!!

这过滤个寂寞!!!

就这!!! 但其它可能不会这么简单!!!

源代码审计走起!!!!

((      /|_/|

\\.._.’  , ,\

/\ | ‘.__ v /

(_ .   /   “

) _)._  _ /

‘.\ \|( / (

” ”\\ \\

两件事:

1、HTTP方法是GET!

2、JS代码插入到这个位置!

小知识:在实际的系统中,都会针对XSS攻击做一些安全措施,但是这些安全措施,也可能由于方法或者逻辑不严谨,出现被绕过的情况!!!

转换的思路

前端限制绕过,直接抓包重放,或者修改html前端代码。比如反射型XSS(get)中限制输入20个字符。

大小写,比如<SCRIPT>aLeRT(111)</sCRIpt>。后台可能用正则表达式匹配,如果正则里面只匹配小写,那就可能被绕过。

双写(拼凑)<scri<script>pt>alert(111)</scri</script>pt>。后台可能把<script>标签去掉换,但可能只去掉一次。

注释干扰,<scri<!–test–>pt>alert(111)</sc<!–test–>ript>。加上注释后可能可以绕过后台过滤机制

编码的思路

核心思路:

后台过滤了特殊字符,比如<script>标签,但该标签可以被各种编码,后台不一定过滤

当浏览器对该编码进行识别时,会翻译成正常的标签,从而执行

编码应该在输出点被正常识别和翻译,不能随便使用编码。

这里我们直接打开PIKACHU软件后台的源代码:

D:\phpStudy\PHPTutorial\WWW\pikachu\vul\xss\xss_01.php

记得上迪总课时,有一次讲的是获取主页的源代码,

有一个同学问,主页不是右键-检查,就可以查看源代码了吗?

迪总说:费这么大劲!获取的后台的代码和你通过检查看的代码一定不一样!

这里真的就看到了!!

核心的过滤代码在这?

if(isset($_GET[‘submit’]) && $_GET[‘message’] != null){

//这里会使用正则对<script进行替换为空,也就是过滤掉

$message=preg_replace(‘/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/’, ”, $_GET[‘message’]);

if($message == ‘yes’){

$html.=”<p>那就去人民广场一个人坐一会儿吧!</p>”;

}else{

$html.=”<p>别说这些'{$message}’的话,不要怕,就是干!</p>”;

}

}

首先,我们先了解一下这个PHP函数:

preg_replace:

preg_replace 函数执行一个正则表达式的搜索和替换。

语法:

mixed preg_replace ( mixed $pattern , mixed $replacement , mixed $subject)

搜索 subject 中匹配 pattern 的部分, 以 replacement 进行替换。

参数说明:

$pattern: 要搜索的模式,可以是字符串或一个字符串数组。

$replacement: 用于替换的字符串或字符串数组。

$subject: 要搜索替换的目标字符串或字符串数组。

然后,我们了解一下正则匹配的内容:

/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/:这个很简单

/:开始

<(.*)s(.*)c(.*)r(.*)i(.*)p(.*):一个或多个<scrip

t:一个t

/: 结尾

所以,我的脚本没有问题!!!

最简单的脚本,如下!!!

<SCRIPT>alert(1)</SCRIPT>

1626307552_60ef7be00b8a8b6251f72.png!small

1626307558_60ef7be6728b6f592dc45.png!small

来源:freebuf.com 2021-07-15 08:07:40 by: 知非知非知非

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论