xss注入与sql注入有很多相似之处,如果有sql学习的基础,那么学习xss将会很轻松,xss注入的方法总的来说就方面,一方面从js脚本入手,如果js方面的防御机制,可以考虑绕过,或者选择html的标签中的事件属性注入,本文并没有涉及flash xss攻击,flash xss会作为单独一章,而且也没有涉及存储型xss攻击,关于存储型xss会在dvwa中讲到
这一关与上一关一样,需要盲猜注入的变量,通过逐个试探,只有t_sort才可以,回显信息,所以通过T_sort注入
xss注入:
t_sort=2" accesskey="x" onclick="alert(1)" type="text"
通过测试,并没有注入成功,所以T_sort并不是接受的变量
查看源代码:
$str = $_GET["keyword"];
$str00 = $_GET["t_sort"];
$str11=$_SERVER['HTTP_REFERER'];
$str22=str_replace(">","",$str11);
$str33=str_replace("<","",$str22);
通过查看源代码,我们知道所有的变量都是迷惑攻击者的,真正的输入点是在http的头部的
使用bp抓包,然后修改http数据包的报头,注入代码
在http的头部加入referer字段,该字段的值为:
2" accesskey="x" onload="alert(1)" type="text"
然后页面会出现input框,点击后就会出现消息框
本关的防御机制是通过隐藏输入点,如果攻击者不知道源码的情况下很难注入
这一关是有提示的,在html代码中的input下,变量名t_ua的值,是浏览器的版本,真好对应user-agent字段,所以猜测是通过http头部注入,上一关也应该是有的,不过没有注意到
注入方法与上一关一样:抓包-修改-注入代码
在http的头部修改user-agent字段
2" onmouseover="alert(1)" type="text"
本关的防御机制与上一关一样
查看源码:
$str11=$_SERVER['HTTP_USER_AGENT'];
$str22=str_replace(">","",$str11);
$str33=str_replace("<","",$str22);
是对尖括号有过滤的,所以采用事件注入
这一关没有提示,不能确定是否还是通过http注入,所以先试探几个变量是否可用。在试探的过程中发现T_cook是有内容的,所以我们猜测注入点是cookie
通过抓包发现,cookie处的内容确实是t_cookie显示的内容,所以修改cookie的值:
user=2" onmouseover="alert(1)" type="text"
查看源码:
$str = $_GET["keyword"];
$str00 = $_GET["t_sort"];
$str11=$_COOKIE["user"];
$str22=str_replace(">","",$str11);
$str33=str_replace("<","",$str22);
对尖括号有过滤,所以采用事件注入
这一关,没有注入点,整个页面是一个静态页面
查看源码:
欢迎来到level14
这关成功后不
会自动跳转。成功者点我进level15
第15关html代码很少,找不到注入点,也不知道变量名,也没有提示,所以只能查看源代码
'; ?>
可以看到的是,变量名是“src”,这也没有提示,确实猜不到
通过试探,发现所有的输入都会被注视到 ngInclude: 1 之后,所以先了解一下 ngInclude它的作用
ng-include 指令用于包含外部的 HTML 文件。
包含的内容将作为指定元素的子节点。
ng-include 属性的值可以是一个表达式,返回一个文件名。
默认情况下,包含的文件需要包含在同一个域名下。
也就是说它的参数是一个html页面
先输入一个php页面:
level15.php?src='level1.php'
发现在该页面会加载level1的页面,我们在15页面里面是没有注入点,但是在1页面里面有,尝试在1里面注入
src='level1.php?name=1'
并没有被执行,因为通过htmlspecialchars($str)函数,有些特殊字符被转码了,转为了html实体,所以我们采用其他标签的事件属性触发
src='level1.php?name='
首先试探输入:
其中script被过滤了,然后大小写输入
大小写也被过滤了,嵌套写入
嵌套的部分被替换成了空格
换标签输入
空格也被编码了
空格采用url编码输入
查看源码:
$str = strtolower($_GET["keyword"]);`
`$str2=str_replace("script"," ",$str);`
`$str3=str_replace(" "," ",$str2);`
`$str4=str_replace("/"," ",$str3);`
`$str5=str_replace(" "," ",$str4);
从这一关开始应该是flash xss注入,但是这一关可以不采用,可以通过闭合注入
arg01=a&arg02= onmouseover=javascript:alert(1)
查看源码:
echo "
要注意的是:
"
这个语句是可以拆解的,
"
本身就是闭合的,所以不需要构造闭合,所以可以绕过htmlspecialchars该函数,因此,我们输入的才会被当成独立事件属性,不然就需要去构造闭合,而对于htmlspecialchars来说,双引号是特殊处理的,不能用来闭合,就像19关一样
与17关是一样的
查看源码:
echo "
注:第17、18关都可以通过flash xss注入