整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          暢捷通T+ v17任意文件上傳漏洞復現

          .前言

          8月29晚上就開始收到通知,讓我們來排查一下是否有使用暢捷通的系統,說是疑似0day導致很多用戶被植入勒索病毒,一時間風頭十足。第二天很多平臺都更新的防護策略,本次漏洞是任意文件上傳漏洞,如果網站前端存在waf等安全設備,應該是可以被正常攔截的,所以也無需過于擔心。

          2.漏洞復現

          2.1 漏洞信息:

          • 適用版本:<=v17.0
          • 漏洞類型:任意文件上傳
          • 漏洞危害:可實現RCE獲取主機權限
          • 涉及接口:/tplus/SM/SetupAccount/Upload.aspx?preload=1

          2.2 漏洞分析

          這是一個上傳漏洞,所以我們需要構造一個post的上傳請求,請求接口即為
          /tplus/SM/SetupAccount/Upload.aspx?preload=1,不難看出,這是一個上傳用戶個人頭像的接口。

          通過源碼分析可知:

          上傳過程中只檢測了Content-Type這一個參數,攻擊者可以隨意構造filename的參數從而 上傳任意文件,這就導致了漏洞的產生。

          不難看出上傳路徑為當前目錄下的images目錄,即為
          /tplus/SM/SetupAccount/images/目錄。

          到這里漏洞的產生原因就很清楚了,算是一個比較常見的上傳漏洞,接下來就是常規的文件上傳了。


          2.3 漏洞利用

          我們可以構造如下參數的上傳包(出于和諧考慮就不貼完整的上傳包了):

          Content-Type: multipart/form-data; boundary=---------------------------33007515338361897914262830846
          
          -----------------------------33007515338361897914262830846
          Content-Disposition: form-data; name="File1"; filename="test.html"
          Content-Type: image/jpeg
          
          test
          -----------------------------33007515338361897914262830846--

          此時我們訪問一下
          /tplus/SM/SetupAccount/images/test.html即可訪問對應文件,至此這個漏洞的基本復現就完成了。


          3.深度利用

          注:非授權測試是違法行為,請大家不要惡意攻擊他人的業務系統

          漏洞到復現程度在上文就已經實現了,但是實際測試中如果你想要進一步利用就會出現一些問題。

          你會發現aspx的文件并不能正常解析,這是由于根目錄下的PrecompiledApp.config 中的updatable值設置成了false。導致后面上傳的文件無法進行編譯。aspx程序無法正常執行。

          當然,遇到這種情況,部分環境是可以嘗試asp文件進行getshell的。因為asp文件并非.Net處理。這個就只能看運氣了絕大多數環境可能并不支持執行asp文件。

          但是這種情況并非無法解決問題,我們可以通過手動編譯的方式上傳編譯后的dll文件來提供aspx文件的運行環境。具體操作在這里就不具體分析了,等風頭過了之后再考慮補全一下操作方案。

          有想復現的白帽子可以參考
          https://www.buaq.net/go-53733.html

          4.修復方案

          • 官方補丁, https://www.chanjetvip.com/product/goods/goods-detail?id=53aaa40295d458e44f5d3ce5
          • WAF攔截,由于這是一個常規的上傳漏洞,很多waf都是有默認的攔截能力的,需要的話也可以將/tplus/SM/SetupAccount/Upload.aspx路徑進行主動攔截。

          TML基礎


          1. HTML基本知識與結構
          2. HTML常見標簽
          3. 標簽寫法與嵌套的討論

          HTML、CSS、javascript三者的關系


          1. HTML是網頁內容的載體。內容就是網頁制作者放在頁面上想要讓用戶瀏覽的信息,可以包含文字、圖片、視頻等。
          2. CSS樣式是表現。就像網頁的外衣。比如,標題字體、顏色變化,或為標題加入背景圖片、邊框等。所有這些用來改變內容外觀的東西稱之為表現。
          3. JavaScript是用來實現網頁上的特效效果。如:鼠標滑過彈出下拉菜單?;蚴髽嘶^表格的背景顏色改變。還有焦點新聞(新聞圖片)的輪換??梢赃@么理解,有動畫的,有交互的一般都是用JavaScript來實現的。

          <!DOCTYPE HTML>

          指示 web 瀏覽器關于頁面使用哪個 HTML 版本進行編寫,必須寫在所有代碼的第一行!

          如果你的頁面添加了<!DOCTYPE html>,那么就等同于開啟了標準模式,那么瀏覽器就得老老實實的按照W3C的標準解析渲染頁面,這樣一來,你的頁面在所有的瀏覽器里顯示的就都是一個樣子了。

          這個屬性會被瀏覽器識別并使用,但是如果你的頁面沒有DOCTYPE的聲明,瀏覽器按照自己的方式解析渲染頁面,那么,在不同的瀏覽器就會顯示不同的樣式。

          這就是<!DOCTYPE html>的作用。

          固定結構


          結構如下:

          <html>
           <head>...</head>
           <body>...</body>
          </html>
          

          代碼講解:

          • <html></html>稱為根標簽,所有的網頁標簽都在<html></html>中。
          • <head> 標簽用于定義文檔的頭部,它是所有頭部元素的容器。頭部元素有<title>、<script>、 <style>、<link>、 <meta>等標簽,頭部標簽在下一小節中會有詳細介紹。
          • 在<body>和</body>標簽之間的內容是網頁的主要內容,如<h1>、<p>、<a>、<img>等網頁內容標簽,在這里的標簽中的內容會在瀏覽器中顯示出來。
          • 為 html 文檔加上使用的語言類型說明

          在很多國際化的網站中會使用到!<html lang="zh-CN"> </html>告訴瀏覽器等設備,語言使用以中文為顯示和閱讀基礎!英文使用 en

          head標簽


          下面我們來了解一下<head>標簽的作用。文檔的頭部描述了文檔的各種屬性和信息,包括文檔的標題等。絕大多數文檔頭部包含的數據都不會真正作為內容顯示給讀者。

          下面這些標簽可用在 head 部分:

          <head>
           <title>...</title>
           <meta>
           <link>
           <style>...</style>
           <script>...</script>
          </head>
          

          <title>標簽:

          • 在<title>和</title>標簽之間的文字內容是網頁的標題信息,它會出現在瀏覽器的標題欄中。網頁的title標簽用于告訴用戶和搜索引擎這個網頁的主要內容是什么,搜索引擎可以通過網頁標題,迅速的判斷出網頁的主題。每個網頁的內容都是不同的,每個網頁都應該有一個獨一無二的title。

          meta標簽

          • meta是html中的元標簽,其中包含了對應html的相關信息,客戶端瀏覽器或服務器端的程序會根據這些信息進行處理。
          • HTTP-EQUIV類似于HTTP的頭部協議,它回應給瀏覽器一些有用的信息,以幫助正確和精確地顯示網頁內容。
          • content(內容類型):重要??!這個網頁的格式是文本的,網頁模式
          • charset(編碼):特別重要?。。∵@個網頁的編碼是utf-8,中文編碼,需要注意的是這個是網頁內容的編碼,而不是文件本身的,其他類型的編碼中文可能會出現亂碼。
          • http-equiv="Content-Type" 表示描述文檔類型

          content="text/HTML; 文檔類型,這里為html,如果JS就是text/javascript,

          charset=utf-8 頁面字符集,編碼,eg:gb2312,iso-8859-1,utf-8

          • meta標簽

          meta是html語言head區的一個輔助性標簽。幾乎所有的網頁里,我們可以看到類似下 面這段的html代碼:

          <head> 
           <meta http-equiv="content-Type" content="text/html; charset=gb2312"> 
          </head>
          

          也許你認為這些代碼可有可無。其實如果你能夠用好meta標簽,會給你帶來意想不到的效果,例如加入關鍵字會自動被大型搜索網站自動搜集;可以設定頁面格式及刷新等等。

          • meta標簽的組成

          meta標簽共有兩個屬性,它們分別是http-equiv屬性和name屬性,不同的屬性又有不同的參數值,這些不同的參數值就實現了不同的網頁功能。

          1、name屬性

          name屬性主要用于描述網頁,與之對應的屬性值為content,content中的內容主要是便于搜索引擎機器人查找信息和分類信息用的。

          meta標簽的name屬性語法格式是:

          <meta name="參數" content="具體的參數值"> 
          

          其中name屬性主要有以下幾種參數:

          1)Keywords(關鍵字)
            說明:keywords用來告訴搜索引擎你網頁的關鍵字是什么。
            舉例:
           <meta name ="keywords" content="science, education,culture,politics,ecnomics,relationships, entertaiment, human">
          2)description(網站內容描述)
            說明:description用來告訴搜索引擎你的網站主要內容。
            舉例:
           <meta name="description" content="This page is about the meaning of science, education,culture.">
          3)robots(機器人向導)
            說明:robots用來告訴搜索機器人哪些頁面需要索引,哪些頁面不需要索引。
            content的參數有all,none,index,noindex,follow,nofollow。默認是all。
            舉例:
           <meta name="robots" content="none">
          4)author(作者)
            說明:標注網頁的作者
            舉例:
           <meta name="author" content="root,root@21cn.com">
          

          2、http-equiv屬性

          http-equiv顧名思義,相當于http的文件頭作用,它可以向瀏覽器傳回一些有用的信息,以幫助正確和精確地顯示網頁內容,與之對應的屬性值為content,content中的內容其實就是各個參數的變量值。

          meta標簽的http-equiv屬性語法格式是:

           <meta http-equiv="參數" content="參數變量值">
          

          其中http-equiv屬性主要有以下幾種參數:

          1)Expires(期限)
            說明:可以用于設定網頁的到期時間。一旦網頁過期,必須到服務器上重新傳輸。
            用法:
           <meta http-equiv="expires" content="Fri, 12 Jan 2001 18:18:18 GMT">
            注意:必須使用GMT的時間格式。
          2)Pragma(cache模式)
            說明:禁止瀏覽器從本地計算機的緩存中訪問頁面內容。
            用法:
           <meta http-equiv="Pragma" content="no-cache">
            注意:這樣設定,訪問者將無法脫機瀏覽。
          3)Refresh(刷新)
            說明:自動刷新并指向新頁面。
            用法:
           <meta http-equiv="Refresh" content="2;URL=http://www.root.net">(注意后面的引號,分別在秒數的前面和網址的后面)
            注意:其中的2是指停留2秒鐘后自動刷新到URL網址。
          4)Set-Cookie(cookie設定)
            說明:如果網頁過期,那么存盤的cookie將被刪除。
            用法:
           <meta http-equiv="Set-Cookie" content="cookievalue=xxx; expires=Friday, 12-Jan-2001 18:18:18 GMT; path=/">
            注意:必須使用GMT的時間格式。
          5)Window-target(顯示窗口的設定)
            說明:強制頁面在當前窗口以獨立頁面顯示。
            用法:
           <meta http-equiv="Window-target" content="_top">
            注意:用來防止別人在框架里調用自己的頁面。
          6)content-Type(顯示字符集的設定)
            說明:設定頁面使用的字符集。
            用法:
           <meta http-equiv="content-Type" content="text/html; charset=gb2312">
          7)content-Language(顯示語言的設定)
            用法:
           <meta http-equiv="Content-Language" content="zh-cn" />
          

          meta標簽的功能

          • 幫助主頁被各大搜索引擎登錄;
          • 定義頁面的使用語言
          • 自動刷新并指向新的頁面
          • 實現網頁轉換時的動畫效果
          • 控制頁面緩沖
          • 控制網頁顯示的窗口

          3、style中的屬性

          • font-size:數值px; 文字大小控制
          • color:#六進制的顏色值; 文字顏色控制
          • text-align:left/center/right; 文字的居左、居中、居右控制。

          標題標簽


          文章的段落用<p>標簽,那么文章的標題用什么標簽呢?下面我們將使用<hx>標簽來制作文章的標題。

          標題標簽一共有6個,h1、h2、h3、h4、h5、h6分別為一級標題、二級標題、三級標題、四級標題、五級標題、六級標題。并且依據重要性遞減。<h1>是最高的等級。

          語法:

          <hx>標題文本</hx> (x為1-6)
          

          文章的標題前面已經說過了,可以使用標題標簽,另外網頁上的各個欄目的標題也可使用它們。

          例如:

          <body>
           <h1>一級標題</h1>
           <h2>二級標題</h2>
           <h3>三級標題</h3>
           <h4>四級標題</h4>
           <h5>五級標題</h4>
          </body>
          

          HTML注釋


          代碼注釋的作用是幫助程序員標注代碼的用途,過一段時間后再看你所編寫的代碼,就能很快想起這段代碼的用途。代碼注釋不僅方便程序員自己回憶起以前代碼的用途,還可以幫助其他程序員很快的讀懂你的程序的功能,方便多人合作開發網頁代碼。

          <!--注釋文字 -->
          

          語義化


          標簽的用途:我們學習網頁制作時,常常會聽到一個詞,語義化。那么什么叫做語義化呢,說的通俗點就是:明白每個標簽的用途(在什么情況下使用此標簽合理)比如,網頁上的文章的標題就可以用標題標簽,網頁上的各個欄目的欄目名稱也可以使用標題標簽。文章中內容的段落就得放在段落標簽中,在文章中有想強調的文本,就可以使用 em 標簽表示強調等等。

          講了這么多語義化,但是語義化可以給我們帶來什么樣的好處呢?

          1. 更容易被搜索引擎收錄。
          2. 更容易讓屏幕閱讀器讀出網頁內容。

          后面會帶領大家學習了解html中每個標簽的語義(用途)。

          喜歡前端的小伙伴們可以在評論區留言,尋找和小馮童鞋一樣熱愛前端的友人,讓我們一起玩轉前端的世界!

          瀏覽器請求一個網頁時,它會向網絡服務器發送一系列不能被直接讀取的信息,因為這些信息是作為HTTP信息頭的一部分來傳送的。您可以查閱HTTP協議來獲得更多的信息。

          下表列出了瀏覽器端信息頭的一些重要內容,在以后的網絡編程中將會經常見到這些信息:

          信息描述
          Accept指定瀏覽器或其他客戶端可以處理的MIME類型。它的值通常為 image/pngimage/jpeg
          Accept-Charset指定瀏覽器要使用的字符集。比如 ISO-8859-1
          Accept-Encoding指定編碼類型。它的值通常為 gzipcompress
          Accept-Language指定客戶端首選語言,servlet會優先返回以當前語言構成的結果集,如果servlet支持這種語言的話。比如 en,en-us,ru等等
          Authorization在訪問受密碼保護的網頁時識別不同的用戶
          Connection表明客戶端是否可以處理HTTP持久連接。持久連接允許客戶端或瀏覽器在一個請求中獲取多個文件。Keep-Alive 表示啟用持久連接
          Content-Length僅適用于POST請求,表示 POST 數據的字節數
          Cookie返回先前發送給瀏覽器的cookies至服務器
          Host指出原始URL中的主機名和端口號
          If-Modified-Since表明只有當網頁在指定的日期被修改后客戶端才需要這個網頁。 服務器發送304碼給客戶端,表示沒有更新的資源
          If-Unmodified-Since與If-Modified-Since相反, 只有文檔在指定日期后仍未被修改過,操作才會成功
          Referer標志著所引用頁面的URL。比如,如果你在頁面1,然后點了個鏈接至頁面2,那么頁面1的URL就會包含在瀏覽器請求頁面2的信息頭中
          User-Agent用來區分不同瀏覽器或客戶端發送的請求,并對不同類型的瀏覽器返回不同的內容

          HttpServletRequest類

          request對象是javax.servlet.http.HttpServletRequest類的實例。每當客戶端請求一個頁面時,JSP引擎就會產生一個新的對象來代表這個請求。

          request對象提供了一系列方法來獲取HTTP信息頭,包括表單數據,cookies,HTTP方法等等。

          接下來將會介紹一些在JSP編程中常用的獲取HTTP信息頭的方法。詳細內容請見下表:

          序號方法& 描述
          1Cookie[] getCookies()返回客戶端所有的Cookie的數組
          2Enumeration getAttributeNames()返回request對象的所有屬性名稱的集合
          3Enumeration getHeaderNames()返回所有HTTP頭的名稱集合
          4Enumeration getParameterNames()返回請求中所有參數的集合
          5HttpSession getSession()返回request對應的session對象,如果沒有,則創建一個
          6HttpSession getSession(boolean create)返回request對應的session對象,如果沒有并且參數create為true,則返回一個新的session對象
          7Locale getLocale()返回當前頁的Locale對象,可以在response中設置
          8Object getAttribute(String name)返回名稱為name的屬性值,如果不存在則返回null。
          9ServletInputStream getInputStream()返回請求的輸入流
          10String getAuthType()返回認證方案的名稱,用來保護servlet,比如 "BASIC" 或者 "SSL" 或 null 如果 JSP沒設置保護措施
          11String getCharacterEncoding()返回request的字符編碼集名稱
          12String getContentType()返回request主體的MIME類型,若未知則返回null
          13String getContextPath()返回request URI中指明的上下文路徑
          14String getHeader(String name)返回name指定的信息頭
          15String getMethod()返回此request中的HTTP方法,比如 GET,,POST,或PUT
          16String getParameter(String name)返回此request中name指定的參數,若不存在則返回null
          17String getPathInfo()返回任何額外的與此request URL相關的路徑
          18String getProtocol()返回此request所使用的協議名和版本
          19String getQueryString()返回此 request URL包含的查詢字符串
          20String getRemoteAddr()返回客戶端的IP地址
          21String getRemoteHost()返回客戶端的完整名稱
          22String getRemoteUser()返回客戶端通過登錄認證的用戶,若用戶未認證則返回null
          23String getRequestURI()返回request的URI
          24String getRequestedSessionId()返回request指定的session ID
          25String getServletPath()返回所請求的servlet路徑
          26String[] getParameterValues(String name)返回指定名稱的參數的所有值,若不存在則返回null
          27boolean isSecure()返回request是否使用了加密通道,比如HTTPS
          28int getContentLength()返回request主體所包含的字節數,若未知的返回-1
          29int getIntHeader(String name)返回指定名稱的request信息頭的值
          30int getServerPort()返回服務器端口號

          HTTP信息頭示例

          在這個例子中,我們會使用HttpServletRequest類的getHeaderNames()方法來讀取HTTP信息頭。這個方法以枚舉的形式返回當前HTTP請求的頭信息。

          獲取Enumeration對象后,用標準的方式來遍歷Enumeration對象,用hasMoreElements()方法來確定什么時候停止,用nextElement()方法來獲得每個參數的名字。

          <%@ page language="java" contentType="text/html; charset=UTF-8"
           pageEncoding="UTF-8"%><%@ page import="java.io.*,java.util.*" %><!DOCTYPE html><html><head><meta charset="utf-8"><title>菜鳥教程(runoob.com)</title></head><body><h2>HTTP 頭部請求實例</h2><table width="100%" border="1" align="center"><tr bgcolor="#949494"><th>Header Name</th><th>Header Value(s)</th></tr><%
           Enumeration headerNames = request.getHeaderNames();
           while(headerNames.hasMoreElements()) {
           String paramName = (String)headerNames.nextElement();
           out.print("<tr><td>" + paramName + "</td>\n");
           String paramValue = request.getHeader(paramName);
           out.println("<td> " + paramValue + "</td></tr>\n");
           }%></table></body></html>

          訪問main.jsp,將會得到以下結果:

          您可以在上面代碼中嘗試HttpServletRequest類的其它方法。


          主站蜘蛛池模板: 精品视频一区二区三区免费| 亚洲国产欧美日韩精品一区二区三区 | 久久精品一区二区影院 | 老熟妇仑乱一区二区视頻| 无码中文字幕一区二区三区| 亚洲AV成人精品日韩一区18p| 少妇一夜三次一区二区| 人妻无码第一区二区三区| 天堂va在线高清一区| 天堂国产一区二区三区| 国产美女露脸口爆吞精一区二区| 国产精品视频一区| 无码人妻精品一区二区三区不卡| 91秒拍国产福利一区| 精品国产一区二区三区AV性色| 国产一区二区三区在线观看免费| 久久久久人妻精品一区三寸| 中文字幕av人妻少妇一区二区| 2020天堂中文字幕一区在线观| 国精品无码一区二区三区在线| 一区二区手机视频| 无码精品前田一区二区| 国产一区二区精品在线观看| 国产一区二区精品在线观看| 国产怡春院无码一区二区| 国产av一区最新精品| 精品免费国产一区二区| 在线一区二区三区| 无码人妻一区二区三区av| 免费看无码自慰一区二区| 日韩aⅴ人妻无码一区二区| 国产免费av一区二区三区| 国产中文字幕一区| 中文字幕一区二区区免| 国产精品视频一区二区三区四 | 在线观看中文字幕一区| 日本一区二区三区精品国产| 久久se精品一区精品二区国产| 国产免费一区二区三区不卡| 久久一区二区三区免费播放| 91精品乱码一区二区三区|