xss-labs靶场训练(1~4关)

第一关

前端F12查看代码:
xss-labs靶场训练(1~4关)_第1张图片
这里只能看到参数test输出在h2里面,可以尝试直接构造payload:

<script>alert(/xss/)</script>

xss-labs靶场训练(1~4关)_第2张图片
成功!

后台关键源码:

 
ini_set("display_errors", 0);
$str = $_GET["name"];
echo "

欢迎用户".$str."

"
; ?>

这里是以GET方法获取参数name,并直接输出,没有任何过滤或转义。

第二关

尝试上一关的方法:
xss-labs靶场训练(1~4关)_第3张图片
Payload没有执行成功,而且被原封不动的输出来了,估计是被实体转义了。
尝试一下构造闭合input的payload:

"><script>alert(/xss/)</script>//

成功
xss-labs靶场训练(1~4关)_第4张图片
后台关键源码:

 
ini_set("display_errors", 0);
$str = $_GET["keyword"];
echo "

没有找到和".htmlspecialchars($str)."相关的结果.

"
.'
.$str.'">
'
; ?>

这里面的输出用了htmlspecialchars()函数做实体转义,payload的一些字符被转换为HTML实体了,所以不能作为标签运行。
htmlspecialchars()函数具体参考如下:
xss-labs靶场训练(1~4关)_第5张图片
这里的字符转换只是作为HTML输出,浏览器输出还是和原来的字符一样,例如:
xss-labs靶场训练(1~4关)_第6张图片

第三关

先试一下第二关的方法:
xss-labs靶场训练(1~4关)_第7张图片
这里可以看到用来构造闭合的双引号被转义了。

后台关键源码:

 
ini_set("display_errors", 0);
$str = $_GET["keyword"];
echo "

没有找到和".htmlspecialchars($str)."相关的结果.

"
."
"
; ?>

和第二关的源代码做一下对比,发现这里不仅输出用了htmlspecialchars()函数做实体转义,输入也用了该函数。所以只能用来尝试

因为&、<、>还有双引号都被转换了,可以尝试构造不包含这些字符的payload
方法一:构造onclick事件(点击一下输入框,就可以触发onclick事件,响应onclick中的javascript代码)

Payload='onclick=alert(/xss/)//

xss-labs靶场训练(1~4关)_第8张图片
xss-labs靶场训练(1~4关)_第9张图片
方法二:构造onmouseover事件(鼠标移动到输入框,就可以触发onmouseover事件,响应onmouseover中的javascript代码)

Payload='onmouseover=alert(/xss/)//

xss-labs靶场训练(1~4关)_第10张图片
xss-labs靶场训练(1~4关)_第11张图片

第四关

用上一关的方法:
xss-labs靶场训练(1~4关)_第12张图片
发现单引号闭合不了,那就用双引号试试:
xss-labs靶场训练(1~4关)_第13张图片
成功闭合,鼠标移动到输入框,成功!
xss-labs靶场训练(1~4关)_第14张图片

后台关键源码:

 
ini_set("display_errors", 0);
$str = $_GET["keyword"];
$str2=str_replace(">","",$str);
$str3=str_replace("<","",$str2);
echo "

没有找到和".htmlspecialchars($str)."相关的结果.

"
.'
.$str3.'">
'
; ?>

此处用了str_replace()函数将用户输入个keyword中的字符 > < 替换为空,所以不能用<>的payload。

总结

碰到字符被转义的情况,尝试用其他没有被转义的字符构造payload。

你可能感兴趣的:(xss)