xss-labs-master靶机是xss-labs作者在github上发布的后来不知道为什么就把它删了,可能是因为这个靶机属于静态页面有一个通用的推广方式(具体在后面),不过还是希望读者使用实战中的攻击手段学习,这个靶机是对XSS漏洞的专项练习,一共有二十关,也是小白的看门砖吧!比如现在的我!大哭!!!!
在这篇文章中,默认读者已有WEB渗透测试相关知识,以及PHP、HTML等相关知识。
xss-labs-master通关宝典
第一关 不使用过滤器
第二关 闭合标签
第三关 单引号闭合并添加事件
第四关 双引号闭合并添加事件
第五关 javascript伪协议
第六关 大小写绕过
第七关 双重书写
第八关 字符实体
第九关 检测关键字存在
第十关 隐藏信息
第十一关 Referer信息
第十二关 user-agent信息
第十三关 Cookie信息
第十四关 exif xss
第十五关 ng-include属性
第十六关 空格==回车
第十七关 合二为一
第十八关 是作者偷懒了吗?还是我悟不出其中的精髓???????
第十九关
第二十关
万能通关秘籍
第一关 不使用过滤器
a、后台代码
window.alert = function()
{
confirm("完成的不错!");
window.location.href="level2.php?keyword=test";
}
欢迎来到level1欢迎来到level1
ini_set("display_errors", 0);
$str = $_GET["name"];
echo "
欢迎用户".$str."";
?>
echo "
payload的长度:".strlen($str)."";
?>
b、分析
这关只给一个图片,根据图片可以知道这关容易,而链接上有一个参数name,说明突破口再name这里,根据代码我们可以看出,代码是将用户以GET方式提交的参数name,没有做任何防御措施就直接显示在HTML页面中,所以将使用放入name变量中即可。
c、方法
这里就是直接用脚本的就行,没有方法可言。
d、注入语句
http://靶机网址/xss-labs-master/level1.php?name=
第二关 闭合标签
a、后台代码
window.alert = function()
{
confirm("完成的不错!");
window.location.href="level3.php?writing=wait";
}
欢迎来到level2欢迎来到level2
ini_set("display_errors", 0);
$str = $_GET["keyword"];
echo "
没有找到和".htmlspecialchars($str)."相关的结果.".'.$str.'">
';
?>
echo "
payload的长度:".strlen($str)."";
?>
b、分析
这关我们可以发现多了一个文本框,我们先用之前的语句填入文本框里面,发现不行,什么有了防御机制,那么我们看看源代码,它将我们输入的值给了value,然后它再传给了一个htmlspecialchars函数,这个函数是把预定义的字符转换为 HTML 实体,说明把标签吃掉了,那么我们的突破口就在value这里,我们可以通过闭合标签,使得这一句就闭合掉,即在前面加">,对前面input标签进行闭合。
htmlspecialchars函数快查链接:这里
c、方法
这里就是我们使用闭合的方法,就是闭合了标签,产生新的执行语句。
d、注入语句
http://192.168.226.128/xss-labs-master/level2.php?keyword=">
第三关 单引号闭合并添加事件
a、后台代码
window.alert = function()
{
confirm("完成的不错!");
window.location.href="level4.php?keyword=try harder!";
}
欢迎来到level3欢迎来到level3
ini_set("display_errors", 0);
$str = $_GET["keyword"];
echo "
没有找到和".htmlspecialchars($str)."相关的结果."."";
?>
echo "
payload的长度:".strlen($str)."";
?>
b、分析
这个题就是变了个图片,感觉也没什么的,先用之前的代码测试一下,发现没用,看看源码,发现这里不但对"号做了防御,而这小子居然在value这里也加了htmlspecialchars函数,还是逃不过啊!那就刚憋,虽然对了双引号做了防御,但是却放行单引号,这种情况我们可以通过事件标签触发表单执行。
c、方法
这种情况我们可以通过事件标签触发表单执行,即通过使用HTML的事件知识对其注入。
一些常用的HTML标签事件:这里
d、注入语句
http://192.168.226.128/xss-labs-master/level3.php?keyword='οnmοuseοver='alert(/xss/)
第四关 双引号闭合并添加事件
a、后台代码
window.alert = function()
{
confirm("完成的不错!");
window.location.href="level5.php?keyword=find a way out!";
}
欢迎来到level4欢迎来到level4
ini_set("display_errors", 0);
$str = $_GET["keyword"];
$str2=str_replace(">","",$str);
$str3=str_replace(","",$str2);
echo "
没有找到和".htmlspecialchars($str)."相关的结果.".'.$str3.'">
';
?>
echo "
payload的长度:".strlen($str3)."";
?>
b、分析
这关和之前几个感觉差不多,同样不能用之前套路了,看看源码,发现这里不但对‘号做了防御,他这次不对value进行过滤,而是用str_replace函数直接过滤掉<>,但是不知道是不是有疏忽,对了单引号做了防御,但是却放行双引号,这种情况我们还是可以通过事件标签触发表单执行。
str_replacestr函数快查:在此
c、方法
这种情况我们可以通过事件标签触发表单执行,不过需要的双引号改成单引号。
d、注入语句
http://192.168.226.128/xss-labs-master/level3.php?keyword="οnmοuseοver="alert(/xss/)
第五关 javascript伪协议
a、后台代码
window.alert = function()
{
confirm("完成的不错!");
window.location.href="level6.php?keyword=break it out!";
}
欢迎来到level5欢迎来到level5
ini_set("display_errors", 0);
$str = strtolower($_GET["keyword"]);
$str2=str_replace("