根据题目要求,咱们这里直接加入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>
来源:freebuf.com 2021-07-15 08:07:40 by: 知非知非知非
请登录后发表评论
注册