整合營銷服務商

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

          免費咨詢熱線:

          html大文件傳輸源碼

          tml大文件傳輸源碼,html大文件傳輸解決方案,html大文件傳輸思路,html大文件傳輸實例,html大文件分塊上傳,html大文件分片上傳,html大文件批量上傳,html大文件加密上傳,html文件夾上傳,html文件夾批量上傳,


          網上一般的做法都是用的HTML5的API,也就是chrome提供的API,能夠滿足基本需求,但是還是有痛點,chrome限制死了,固定死了無法擴展,每個域名只允許5個TCP連接,導致了速度有上限,你也無法修改和擴展。然后就是瀏覽器也只能用chrome,用戶用了IE就不行了,用戶現有的系統跑在IE上,也不能換。

          進度信息容易丟失,用戶關閉網頁,刷新網頁,關閉瀏覽器,重啟瀏覽器,關閉電腦,重啟電腦后,進度信息都會丟失,無解,沒辦法。擴展性還是差了點。

          傳大文件,超大文件,文件數量多的話,前端就卡,網頁反應慢,容易死,崩潰,在配置較差的電腦或者配置一般的電腦上這個痛點體現的非常明顯。

          對于大文件的處理,無論是用戶端還是服務端,如果一次性進行讀取發送、接收都是不可取,很容易導致內存問題。所以對于大文件上傳,采用切塊分段上傳

          從上傳的效率來看,利用多線程并發上傳能夠達到最大效率。

          斷點續傳,就是在文件上傳的過程中發生了中斷,人為因素(暫停)或者不可抗力(斷網或者網絡差)導致了文件上傳到一半失敗了。然后在環境恢復的時候,重新上傳該文件,而不至于是從新開始上傳的。

          斷點續傳的功能是基于分塊上傳來實現的,把一個大文件分成很多個小塊,服務端能夠把每個上傳成功的分塊都落地下來,客戶端在上傳文件開始時調用接口快速驗證,條件選擇跳過某個分塊。

          實現原理,就是在每個文件上傳前,就獲取到文件MD5取值,在上傳文件前調用接口,如果獲取的文件狀態是未完成,則返回所有的還沒上傳的分塊的編號,然后前端進行條件篩算出哪些沒上傳的分塊,然后進行上傳。

          當接收到文件塊后就可以直接寫入到服務器的文件中。


          導入項目:
          導入到Eclipse:
          http://www.ncmem.com/doc/view.aspx?id=9da9c7c2b91b40b7b09768eeb282e647
          導入到IDEA:http://www.ncmem.com/doc/view.aspx?id=9fee385dfc0742448b56679420f22162
          springboot統一配置:http://www.ncmem.com/doc/view.aspx?id=7768eec9284b48e3abe08f032f554ea2



          下載示例:

          https://gitee.com/xproer/up6-jsp-eclipse/tree/6.5.40/




          工程



          NOSQL

          NOSQL示例不需要任何配置,可以直接訪問測試



          創建數據表

          選擇對應的數據表腳本,這里以SQL為例




          修改數據庫連接信息


          訪問頁面進行測試



          文件存儲路徑

          up6/upload/年/月/日/guid/filename






          相關問題:
          1.javax.servlet.http.HttpServlet錯誤
          2.項目無法發布到tomcat
          3.md5計算完畢后卡住
          4.服務器找不到config.json文件

          相關參考:

          文件保存位置


          源碼工程文檔:https://drive.weixin.qq.com/s?k=ACoAYgezAAw1dWofra

          源碼報價單:https://drive.weixin.qq.com/s?k=ACoAYgezAAwoiul8gl



          OEM版報價單:https://drive.weixin.qq.com/s?k=ACoAYgezAAwuzp4W0a

          產品源代碼:https://drive.weixin.qq.com/s?k=ACoAYgezAAwbdKCskc
          授權生成器:https://drive.weixin.qq.com/s?k=ACoAYgezAAwTIcFph1

          分享一些文件上傳繞過的思路,下文內容多包含實戰圖片,所以打碼會非常嚴重,可多看文字表達;本文僅用于交流學習, 由于傳播、利用此文所提供的信息而造成的任何直接或者間接的后果及損失,均由使用者本人負責,文章作者不為此承擔任何責任。

          案例一

          一次項目滲透時,通過往png后綴隨便加個字符可知該上傳點為白名單上傳,正常情況下無法繞過

          通過觀察接口信息,發現接口名字為UploadImg,猜測該接口用于圖片上傳,按照開發的習慣,保不準會存在temp、test,這類的接口,隨后通過fuzz找到存在的上傳接口(file),但此時的接口(file)上傳文件仍舊存在限制,需要繞過。

          由于黑名單限制不夠嚴謹,經過多個偽后綴嘗試,發現.cer后綴可繞過限制并被解析

          然后就getshell進內網,后面的操作就不多說了。

          很多師傅看到白名單上傳就會認為這個上傳點足夠安全,無法繞過,但其實不然,在存在多個上傳接口的情況下,或許會存在沒做限制,或者限制不嚴格的上傳點也不一定,關鍵的是我們要如何發現這些接口,在此類接口存在限制時,如何去進行繞過,下面再舉一個和接口繞過相關的例子。

          【一>所有資源關注我,私信回復“資料”獲取<一】
          1、200份很多已經買不到的絕版電子書
          2、30G安全大廠內部的視頻資料
          3、100份src文檔
          4、常見安全面試題
          5、ctf大賽經典題目解析
          6、全套工具包
          7、應急響應筆記
          8、網絡安全學習路線

          案例二

          upload_2018.php接口白名單上傳,在正常情況下,改變后綴會導致上傳失敗,如下

          再進一步測試時發現存在多個上傳接口,刪除_2018使用upload接口進行文件上傳,可導致任意文件上傳

          進一步傳shell時發現存在waf(某訊云),需進一步繞過。

          通過尋找域名真實IP,使用真實IP進行文件上傳,繞過waf限制,為防止有心人,這里直接把IP給打碼蓋住了,以防萬一。

          很多時候有一些開發為了便捷性,在部署上傳接口時限制不夠嚴謹或壓根沒做限制,這導致一旦被繞過限制傳shell,都會導致非常嚴重的后果,當然,我們可以找一些temp、test這類上傳接口,因為此類接口多數是開發過程中用作測試的,這種接口幾乎都是無限上傳文件類型的,同樣的我們也可以找一些api文檔進行上傳接口的發現,這或許會有驚喜也說不定

          案例三

          這是一個把圖片轉base64的文件上傳類型,具體繞過如下:

          通過抓包發現圖片是以base64進行上傳的,觀察了下數據包,發現可通過更改upload_0字段內容上傳任意文件

          訪問HTML頁面,成功被解析,可進一步上傳shell獲取權限。

          一句話shell上傳后發現無法執行命令,之后通過上傳PHPinfo發現其存在disable_functions,利用某斯拉繞過限制,getshell

          #案例四

          一個關于nginx解析漏洞的利用,這個漏洞是很久之前挖到的,這種漏洞現在應該不會存在了,單單是waf都能欄掉,這個就作為思考開拓說一下:

          一次外網打點時發現了目標的一個核心系統,通過踩點發現了某上傳功能,但上傳接口存在白名單限制,且無其它的上傳接口,由于這個站的shell比較重要,必須拿到,之后通過漏洞挖掘,發現目標存在nginx解析漏洞,結合圖片上傳點成功獲取到了內網據點。

          其它場景&總結

          有些時候文件上傳成功后端沒有返回路徑,只回顯了一個id號,這時候如果目標存在注入的話,我們嘗試可以用sqlmap的–search參數或者SQLshell對返回的ID號進行搜索,這樣說不定就能找到shell地址了,之前在關于Swagger-UI下的滲透實戰 23也說過,感興趣的可以去看看;也有文件上傳成功卻只回顯一個文件名的,在前不久的一次攻防就遇到這種情況,后來是用了fuzz找到了完整的shell路徑,另外在某些時候,上傳文件可以跨目錄,那么我們可以通過…/進行跨目錄上傳,運氣好的話,或許會在幾個…/后把shell傳到域名的根目錄下,如果當前上傳文件夾無執行權限,那么跨目錄上傳shell也是個不錯的思路;另外,如果上傳目錄可控,可上傳文件到任意目錄的話,在linux場景我們可上傳一個ssh秘鑰用于遠程登錄,極端一點的話,可考慮上傳passwd、shadow文件覆蓋系統用戶,但前提是權限要足夠大。

          如果不能跨目錄,站點又沒有注入的話,那么我們可以嘗試尋找網站日志文件,例如泛微E-COLOGY日志的日志,像這種日志文件是有規律可循的,可以用burp進行日志爆破,或許在日志文件中能找到shell路徑也說不定。

          再者就是文件包含和文件讀取了,文件讀取的話可以通過讀取日志和配置文件來發現shell地址,但是成功率太低了,至于文件包含,除了靶場和ctf,實戰還沒碰過。

          還有一個關于burp的使用技巧,這是真實遇到的,上傳shell后沒有回顯路徑,但是通過http history搜索shell的名字發現了完整的shell路徑,因為傳上去的文件,如圖片這類的總歸是顯示出來的,這時候可以先在web應用到處點點,多加載一些數據包,然后再到http history搜索shell的名字,或許會有驚喜也說不定。

          某些時候上傳黑名單不嚴謹,那么我們可用偽后綴進行繞過,其它多的就不說了,大概思路就這樣,當繞過限制拿到shell時,總會給我帶來樂趣,或許這就是我喜歡滲透的原因。

          篇文章主要介紹,如何在springboot工程作為服務器,去接收通過http 上傳的multi-file的文件。

          構建工程

          為例創建一個springmvc工程你需要spring-boot-starter-thymeleaf和 spring-boot-starter-web的起步依賴。為例能夠上傳文件在服務器,你需要在web.xml中加入標簽做相關的配置,但在sringboot 工程中,它已經為你自動做了,所以不需要你做任何的配置。

          	<dependencies>
          		<dependency>
          			<groupId>org.springframework.boot</groupId>
          			<artifactId>spring-boot-starter-web</artifactId>
          		</dependency>
          		<dependency>
          			<groupId>org.springframework.boot</groupId>
          			<artifactId>spring-boot-starter-test</artifactId>
          			<scope>test</scope>
          		</dependency>
          		<dependency>
          			<groupId>org.springframework.boot</groupId>
          			<artifactId>spring-boot-starter-thymeleaf</artifactId>
          		</dependency>
          	</dependencies>
          

          創建文件上傳controller

          直接貼代碼:

          @Controller
          public class FileUploadController {
           private final StorageService storageService;
           @Autowired
           public FileUploadController(StorageService storageService) {
           this.storageService = storageService;
           }
           @GetMapping("/")
           public String listUploadedFiles(Model model) throws IOException {
           model.addAttribute("files", storageService
           .loadAll()
           .map(path ->
           MvcUriComponentsBuilder
           .fromMethodName(FileUploadController.class, "serveFile", path.getFileName().toString())
           .build().toString())
           .collect(Collectors.toList()));
           return "uploadForm";
           }
           @GetMapping("/files/{filename:.+}")
           @ResponseBody
           public ResponseEntity<Resource> serveFile(@PathVariable String filename) {
           Resource file = storageService.loadAsResource(filename);
           return ResponseEntity
           .ok()
           .header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\""+file.getFilename()+"\"")
           .body(file);
           }
           @PostMapping("/")
           public String handleFileUpload(@RequestParam("file") MultipartFile file,
           RedirectAttributes redirectAttributes) {
           storageService.store(file);
           redirectAttributes.addFlashAttribute("message",
           "You successfully uploaded " + file.getOriginalFilename() + "!");
           return "redirect:/";
           }
           @ExceptionHandler(StorageFileNotFoundException.class)
           public ResponseEntity handleStorageFileNotFound(StorageFileNotFoundException exc) {
           return ResponseEntity.notFound().build();
           }
          }
          

          這個類通過@Controller注解,表明自己上一個Spring mvc的c。每個方法通過 @GetMapping 或者@PostMapping注解表明自己的 http方法。

          • GET / 獲取已經上傳的文件列表
          • GET /files/{filename} 下載已經存在于服務器的文件
          • POST / 上傳文件給服務器

          創建一個簡單的 html模板

          為了展示上傳文件的過程,我們做一個界面: 在src/main/resources/templates/uploadForm.html

          <html xmlns:th="http://www.thymeleaf.org">
          <body>
          	<div th:if="${message}">
          		<h2 th:text="${message}"/>
          	</div>
          	<div>
          		<form method="POST" enctype="multipart/form-data" action="/">
          			<table>
          				<tr><td>File to upload:</td><td><input type="file" name="file" /></td></tr>
          				<tr><td></td><td><input type="submit" value="Upload" /></td></tr>
          			</table>
          		</form>
          	</div>
          	<div>
          		<ul>
          			<li th:each="file : ${files}">
          				<a th:href="${file}" th:text="${file}" />
          			</li>
          		</ul>
          	</div>
          </body>
          </html>
          

          上傳文件大小限制

          如果需要限制上傳文件的大小也很簡單,只需要在springboot 工程的src/main/resources/application.properties 加入以下:

          spring.http.multipart.max-file-size=128KB

          spring.http.multipart.max-request-size=128KB

          測試

          測試情況如圖:


          主站蜘蛛池模板: 日本成人一区二区三区| 精品人妻一区二区三区四区在线| 3d动漫精品啪啪一区二区中文| 日本一区二三区好的精华液| 一区二区免费国产在线观看| 日韩欧美一区二区三区免费观看| 精品无码人妻一区二区三区不卡| 日韩在线视频一区二区三区| 亚洲一区动漫卡通在线播放| 色欲AV蜜臀一区二区三区| 一区二区乱子伦在线播放| 国产激情无码一区二区三区| 日韩精品一区二区午夜成人版| 亚洲av色香蕉一区二区三区蜜桃| 亚洲视频在线一区二区三区| 久久人妻av一区二区软件| 日本免费电影一区二区 | 日韩一区二区三区无码影院| 久久无码人妻精品一区二区三区| 波多野结衣中文字幕一区二区三区| 成人久久精品一区二区三区| 国产精品亚洲午夜一区二区三区| 91亚洲一区二区在线观看不卡| 一区二区三区观看免费中文视频在线播放| 成人国内精品久久久久一区| 亚洲色无码一区二区三区| 日韩精品成人一区二区三区| 精品性影院一区二区三区内射| 亚洲综合无码一区二区三区 | 日本在线电影一区二区三区| 在线视频国产一区| 国产伦一区二区三区高清| 国产乱码精品一区二区三| 久久精品一区二区三区四区| 日韩在线不卡免费视频一区| 久热国产精品视频一区二区三区| 在线观看精品视频一区二区三区| 精品一区二区三区在线播放| 国产福利电影一区二区三区久久老子无码午夜伦不 | 日本中文一区二区三区亚洲| 日本一道一区二区免费看|