环境
Metasploitable2-Linux
步骤:
1. 判断是否存在XSS攻击的可能(提交的内容,页面会显示出来)
2. 判断可输入内容在标签内(属性)还是值
3. 判断闭合(在标签内部的话就需要提前闭合,使XSS的攻击代码生效)
4. 判断是否过滤某些字符(对于<>script这种特殊字符,一旦被过滤,就需要通过大小写,替换,转义等方式来改变)
常用XSS攻击代码
onmousemove=javascript:alert(1)
onclick=alert(1)
可见,name提交的内容就是页面显示的内容,及存在XSS攻击的可能性
1.通过地址栏可以看出,此关卡的提交数据的变量名使keyword,且输入的内容会直接显示在页面上个,说明可能存在XSS漏洞,提交XSS的弹窗代码后,并没有直接弹窗
2.判断提交的内容是否在标签内,一般在输入框内的,肯定在标签内
3.判断闭合,使其input标签提前闭合
">
"用于将value的闭合,>用于对input标签的闭合
1.与之前相同,先判断有无XSS攻击的可能,这里就不做演示了
2.判断输入的内容是否在标签内(直接在浏览器检查元素,看下页面的HTML标签即可,可见是在input标签内)
3.输入大小写,内嵌,都没有用,即并没有过滤特殊字符;猜下可能是用了实体转换,并没有执行弹窗代码
4.使用事件标签,此时就要判断input标签中的value使用的是何种闭合方式,经两次尝试,发现使用的是单引号闭合
为什么要使用事件来触发XSS漏洞?
因为使用常规的标签会被.htmlspecialchars().转换为字符,不会起作用,而事件则不会出现此类问题
'onclick='alert(1)
第一个单引号用于闭合value,即使得onclick值生效;第二个单引号用于对value后的第二个单引号闭合,即使alert(1)生效
这是一个鼠标点击时间,即提交完成后,需要点击输入框
1.输入以下代码后,输入框中并没有<>,这种情况属于特殊字符的过滤,测试,发现大小写,内嵌,替换为标签都是没有用的
alert(1)
2.尝试事件标签,尝试两次,发现value的闭合方式为双引号,参考level2的闭合方式的解释
查看网页源代码,可见对< >进行了过滤,且value的闭合方式为双引号
1.可见,其页面是对出现script、on、的特殊字符中添加下划线且能够识别大小写,使其不能生效,即不能执行XSS的攻击代码
2.首先莫慌,始终牢记,没有绝对的安全;然后试试a标签,即超链接,思路是使用a标签来创建一个超链接,超链接的内容是一个伪代码,即XSS的弹窗,这样就能轻而易举的执行弹窗代码了
">XSS
相信看到这里,你一定能理解前面的">是什么意思吧,还是老套路,即为了闭合value属性,input标签
HTML的a标签小试牛刀
<html>
<body>
<a href="https://blog.csdn.net/qq_41959899">Eichi-Bloga>
body>
html>
查看网页源代码,可见与分析一致
1.此关增加了对超链接的href属性的下划线添加,使其不能生效
2.解决办法就是大小写的替换,如下代码
"ONclick="alert(1)
查看网页源码,可见与预期相符
那level5为什么不对事件进行大小写的替换,要使用a标签来创建链接呢?
仔细观察level5的源码就会发现,他是先将输入的内容进行小写的转换了,题外话:一定要注重细节
(PHP 4, PHP 5, PHP 7)
strtolower — 将字符串转化为小写
strtolower ( string $string
) : string
将 string
中所有的字母字符转换为小写并返回。
注意 “字母” 与当前所在区域有关。例如,在默认的 “C” 区域,字符 umlaut-A(ä)就不会被转换。
string
输入字符串。返回值
返回转换后的小写字符串。
Example #1 strtolower() 范例
$str = "Mary Had A Little Lamb and She LOVED It So";
$str = strtolower($str);echo $str; // 打印 mary had a little lamb and she loved it so
?>
本关的script、on、href、均被过滤,且大写输入后被转换为小写,但是可以采用内嵌的方式,是其生效,即让页面过滤调内嵌的即可,有很多方法,以下列举出两个
"oonnclick="javascript=alert(1) onclick是一个属性,其还是在标签内的,第一个双引号用于闭合value的"
">alert(1)