XSS攻击-xss-lab(11-20)详细讲解

xss注入与sql注入有很多相似之处,如果有sql学习的基础,那么学习xss将会很轻松,xss注入的方法总的来说就方面,一方面从js脚本入手,如果js方面的防御机制,可以考虑绕过,或者选择html的标签中的事件属性注入,本文并没有涉及flash xss攻击,flash xss会作为单独一章,而且也没有涉及存储型xss攻击,关于存储型xss会在dvwa中讲到

第11关:

这一关与上一关一样,需要盲猜注入的变量,通过逐个试探,只有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框,点击后就会出现消息框

本关的防御机制是通过隐藏输入点,如果攻击者不知道源码的情况下很难注入

第12关:

这一关是有提示的,在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);

是对尖括号有过滤的,所以采用事件注入

第13关:

这一关没有提示,不能确定是否还是通过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);

对尖括号有过滤,所以采用事件注入

第14关:

这一关,没有注入点,整个页面是一个静态页面

查看源码:


欢迎来到level14

这关成功后不 会自动跳转。成功者点我进level15
第15关:

第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='

第16关:

首先试探输入:



其中script被过滤了,然后大小写输入



大小写也被过滤了,嵌套写入

嵌套的部分被替换成了空格

换标签输入



空格也被编码了

空格采用url编码输入



查看源码:

$str = strtolower($_GET["keyword"]);`

`$str2=str_replace("script"," ",$str);`

`$str3=str_replace(" "," ",$str2);`

`$str4=str_replace("/"," ",$str3);`

`$str5=str_replace("     "," ",$str4);

第17关:

从这一关开始应该是flash xss注入,但是这一关可以不采用,可以通过闭合注入

arg01=a&arg02= onmouseover=javascript:alert(1)

查看源码:

echo "";

要注意的是:

""

这个语句是可以拆解的,

""

本身就是闭合的,所以不需要构造闭合,所以可以绕过htmlspecialchars该函数,因此,我们输入的才会被当成独立事件属性,不然就需要去构造闭合,而对于htmlspecialchars来说,双引号是特殊处理的,不能用来闭合,就像19关一样

第18关:

与17关是一样的

查看源码:

echo "";

注:第17、18关都可以通过flash xss注入

你可能感兴趣的:(Web,Web安全)