存储型XSS

XSS***的用处

存储型 XSS_第1张图片

JS-Context存储型XSS:
1、闭合当前脚本,然后输入自定义内容。

093644170.png

过滤<,>,/
替换为(网易邮箱)
2、根据JS上下文,构造正确的闭合。

093646523.png

根据实际情况,进行过滤。通常输出是字符串,在’和"之间,过滤’,"即可

存储型 XSS_第2张图片

存储型 XSS_第5张图片

存储型 XSS_第6张图片

另外有一点挺有意思,在输入name时会发现有字数的限制,但php中并没有判断name的长度
所以修改客户端html就可以删除这个限制,看代码

存储型 XSS_第7张图片

medium级代码

01
02
03if(isset($_POST['btnSign']))
04{
05
06$message=trim($_POST['mtxMessage']);
07$name=
trim($_POST['txtName']);
08
09//Sanitizemessageinput
10$message=trim(strip_tags(addslashes($message)));
11$message=mysql_real_escape_string($message);
12$message=htmlspecialchars($message);
13
14//Sanitizenameinput
15$name=str_replace('

不要说有长度限制,只要修改一下客户端html在提交就可以了




high级代码

01
02
03if(isset($_POST['btnSign']))
04{
05
06$message=trim($_POST['mtxMessage']);
07$name=
trim($_POST['txtName']);
08
09//Sanitizemessageinput
10$message=stripslashes($message);
11$message=mysql_real_escape_string($message);
12$message=htmlspecialchars($message);
13
14//Sanitizenameinput
15$name=stripslashes($name);
16$name=mysql_real_escape_string($name);
17$name=htmlspecialchars($name);
18
19$query="INSERTINTOguestbook(comment,name)VALUES('$message','$name');";
20
21$result=mysql_query($query)ordie('
'.mysql_error().'
');
22
23}
24
25?>


对于high级的代码,我们看到它同样使用了htmlspecialchars()函数,大家可以找方法绕过去!


文章中有许多的不足之处,XSS也无法一一都详细说明,有自己观点可以给我提出,谢谢!